diff --git a/gen/pb-cpp/flyteidl/core/tasks.pb.cc b/gen/pb-cpp/flyteidl/core/tasks.pb.cc index e30f08ba8..841a1c149 100644 --- a/gen/pb-cpp/flyteidl/core/tasks.pb.cc +++ b/gen/pb-cpp/flyteidl/core/tasks.pb.cc @@ -21,11 +21,12 @@ extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2finterface_2eproto ::google::pr extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fliterals_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_KeyValuePair_flyteidl_2fcore_2fliterals_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fliterals_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_RetryStrategy_flyteidl_2fcore_2fliterals_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ContainerPort_flyteidl_2fcore_2ftasks_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_DataLoadingConfig_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<1> scc_info_Resources_flyteidl_2fcore_2ftasks_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<3> scc_info_Container_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<3> scc_info_TaskMetadata_flyteidl_2fcore_2ftasks_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<4> scc_info_Container_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2fduration_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Duration_google_2fprotobuf_2fduration_2eproto; extern PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2fstruct_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ListValue_google_2fprotobuf_2fstruct_2eproto; namespace flyteidl { @@ -60,6 +61,10 @@ class ContainerDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; } _Container_default_instance_; +class DataLoadingConfigDefaultTypeInternal { + public: + ::google::protobuf::internal::ExplicitlyConstructed _instance; +} _DataLoadingConfig_default_instance_; } // namespace core } // namespace flyteidl static void InitDefaultsResources_ResourceEntry_flyteidl_2fcore_2ftasks_2eproto() { @@ -166,11 +171,26 @@ static void InitDefaultsContainer_flyteidl_2fcore_2ftasks_2eproto() { ::flyteidl::core::Container::InitAsDefaultInstance(); } -::google::protobuf::internal::SCCInfo<3> scc_info_Container_flyteidl_2fcore_2ftasks_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 3, InitDefaultsContainer_flyteidl_2fcore_2ftasks_2eproto}, { +::google::protobuf::internal::SCCInfo<4> scc_info_Container_flyteidl_2fcore_2ftasks_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 4, InitDefaultsContainer_flyteidl_2fcore_2ftasks_2eproto}, { &scc_info_Resources_flyteidl_2fcore_2ftasks_2eproto.base, &scc_info_KeyValuePair_flyteidl_2fcore_2fliterals_2eproto.base, - &scc_info_ContainerPort_flyteidl_2fcore_2ftasks_2eproto.base,}}; + &scc_info_ContainerPort_flyteidl_2fcore_2ftasks_2eproto.base, + &scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto.base,}}; + +static void InitDefaultsDataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + + { + void* ptr = &::flyteidl::core::_DataLoadingConfig_default_instance_; + new (ptr) ::flyteidl::core::DataLoadingConfig(); + ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + } + ::flyteidl::core::DataLoadingConfig::InitAsDefaultInstance(); +} + +::google::protobuf::internal::SCCInfo<0> scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsDataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto}, {}}; void InitDefaults_flyteidl_2fcore_2ftasks_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_Resources_ResourceEntry_flyteidl_2fcore_2ftasks_2eproto.base); @@ -180,10 +200,11 @@ void InitDefaults_flyteidl_2fcore_2ftasks_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_ContainerPort_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_Container_flyteidl_2fcore_2ftasks_2eproto.base); + ::google::protobuf::internal::InitSCC(&scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto.base); } -::google::protobuf::Metadata file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[7]; -const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto[2]; +::google::protobuf::Metadata file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[8]; +const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto[3]; 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) = { @@ -252,6 +273,16 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2ftasks_2eproto::of PROTOBUF_FIELD_OFFSET(::flyteidl::core::Container, env_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::Container, config_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::Container, ports_), + PROTOBUF_FIELD_OFFSET(::flyteidl::core::Container, data_config_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::flyteidl::core::DataLoadingConfig, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + PROTOBUF_FIELD_OFFSET(::flyteidl::core::DataLoadingConfig, input_path_), + PROTOBUF_FIELD_OFFSET(::flyteidl::core::DataLoadingConfig, output_path_), + PROTOBUF_FIELD_OFFSET(::flyteidl::core::DataLoadingConfig, format_), + PROTOBUF_FIELD_OFFSET(::flyteidl::core::DataLoadingConfig, enabled_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::flyteidl::core::Resources_ResourceEntry)}, @@ -261,6 +292,7 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 35, -1, sizeof(::flyteidl::core::TaskTemplate)}, { 47, -1, sizeof(::flyteidl::core::ContainerPort)}, { 53, -1, sizeof(::flyteidl::core::Container)}, + { 66, -1, sizeof(::flyteidl::core::DataLoadingConfig)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -271,12 +303,13 @@ static ::google::protobuf::Message const * const file_default_instances[] = { reinterpret_cast(&::flyteidl::core::_TaskTemplate_default_instance_), reinterpret_cast(&::flyteidl::core::_ContainerPort_default_instance_), reinterpret_cast(&::flyteidl::core::_Container_default_instance_), + reinterpret_cast(&::flyteidl::core::_DataLoadingConfig_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, 7, file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto, file_level_service_descriptors_flyteidl_2fcore_2ftasks_2eproto, + file_level_metadata_flyteidl_2fcore_2ftasks_2eproto, 8, 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[] = @@ -310,20 +343,26 @@ const char descriptor_table_protodef_flyteidl_2fcore_2ftasks_2eproto[] = "Interface\022\'\n\006custom\030\005 \001(\0132\027.google.proto" "buf.Struct\022-\n\tcontainer\030\006 \001(\0132\030.flyteidl" ".core.ContainerH\000B\010\n\006target\"\'\n\rContainer" - "Port\022\026\n\016container_port\030\001 \001(\r\"\352\001\n\tContain" + "Port\022\026\n\016container_port\030\001 \001(\r\"\241\002\n\tContain" "er\022\r\n\005image\030\001 \001(\t\022\017\n\007command\030\002 \003(\t\022\014\n\004ar" "gs\030\003 \003(\t\022+\n\tresources\030\004 \001(\0132\030.flyteidl.c" "ore.Resources\022(\n\003env\030\005 \003(\0132\033.flyteidl.co" "re.KeyValuePair\022+\n\006config\030\006 \003(\0132\033.flytei" "dl.core.KeyValuePair\022+\n\005ports\030\007 \003(\0132\034.fl" - "yteidl.core.ContainerPortB2Z0github.com/" - "lyft/flyteidl/gen/pb-go/flyteidl/coreb\006p" - "roto3" + "yteidl.core.ContainerPort\0225\n\013data_config" + "\030\t \001(\0132 .flyteidl.core.DataLoadingConfig" + "\"\277\001\n\021DataLoadingConfig\022\022\n\ninput_path\030\001 \001" + "(\t\022\023\n\013output_path\030\002 \001(\t\022\?\n\006format\030\003 \001(\0162" + "/.flyteidl.core.DataLoadingConfig.Metada" + "taFormat\022\017\n\007enabled\030\004 \001(\010\"/\n\016MetadataFor" + "mat\022\010\n\004JSON\020\000\022\010\n\004YAML\020\001\022\t\n\005PROTO\020\002B2Z0gi" + "thub.com/lyft/flyteidl/gen/pb-go/flyteid" + "l/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, 1525, + "flyteidl/core/tasks.proto", &assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto, 1774, }; void AddDescriptors_flyteidl_2fcore_2ftasks_2eproto() { @@ -390,6 +429,29 @@ const RuntimeMetadata_RuntimeType RuntimeMetadata::RuntimeType_MIN; const RuntimeMetadata_RuntimeType RuntimeMetadata::RuntimeType_MAX; const int RuntimeMetadata::RuntimeType_ARRAYSIZE; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 +const ::google::protobuf::EnumDescriptor* DataLoadingConfig_MetadataFormat_descriptor() { + ::google::protobuf::internal::AssignDescriptors(&assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); + return file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto[2]; +} +bool DataLoadingConfig_MetadataFormat_IsValid(int value) { + switch (value) { + case 0: + case 1: + case 2: + return true; + default: + return false; + } +} + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const DataLoadingConfig_MetadataFormat DataLoadingConfig::JSON; +const DataLoadingConfig_MetadataFormat DataLoadingConfig::YAML; +const DataLoadingConfig_MetadataFormat DataLoadingConfig::PROTO; +const DataLoadingConfig_MetadataFormat DataLoadingConfig::MetadataFormat_MIN; +const DataLoadingConfig_MetadataFormat DataLoadingConfig::MetadataFormat_MAX; +const int DataLoadingConfig::MetadataFormat_ARRAYSIZE; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 // =================================================================== @@ -3162,16 +3224,23 @@ ::google::protobuf::Metadata ContainerPort::GetMetadata() const { void Container::InitAsDefaultInstance() { ::flyteidl::core::_Container_default_instance_._instance.get_mutable()->resources_ = const_cast< ::flyteidl::core::Resources*>( ::flyteidl::core::Resources::internal_default_instance()); + ::flyteidl::core::_Container_default_instance_._instance.get_mutable()->data_config_ = const_cast< ::flyteidl::core::DataLoadingConfig*>( + ::flyteidl::core::DataLoadingConfig::internal_default_instance()); } class Container::HasBitSetters { public: static const ::flyteidl::core::Resources& resources(const Container* msg); + static const ::flyteidl::core::DataLoadingConfig& data_config(const Container* msg); }; const ::flyteidl::core::Resources& Container::HasBitSetters::resources(const Container* msg) { return *msg->resources_; } +const ::flyteidl::core::DataLoadingConfig& +Container::HasBitSetters::data_config(const Container* msg) { + return *msg->data_config_; +} void Container::clear_env() { env_.Clear(); } @@ -3186,6 +3255,7 @@ const int Container::kResourcesFieldNumber; const int Container::kEnvFieldNumber; const int Container::kConfigFieldNumber; const int Container::kPortsFieldNumber; +const int Container::kDataConfigFieldNumber; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 Container::Container() @@ -3211,6 +3281,11 @@ Container::Container(const Container& from) } else { resources_ = nullptr; } + if (from.has_data_config()) { + data_config_ = new ::flyteidl::core::DataLoadingConfig(*from.data_config_); + } else { + data_config_ = nullptr; + } // @@protoc_insertion_point(copy_constructor:flyteidl.core.Container) } @@ -3218,7 +3293,9 @@ void Container::SharedCtor() { ::google::protobuf::internal::InitSCC( &scc_info_Container_flyteidl_2fcore_2ftasks_2eproto.base); image_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - resources_ = nullptr; + ::memset(&resources_, 0, static_cast( + reinterpret_cast(&data_config_) - + reinterpret_cast(&resources_)) + sizeof(data_config_)); } Container::~Container() { @@ -3229,6 +3306,7 @@ Container::~Container() { void Container::SharedDtor() { image_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); if (this != internal_default_instance()) delete resources_; + if (this != internal_default_instance()) delete data_config_; } void Container::SetCachedSize(int size) const { @@ -3256,6 +3334,10 @@ void Container::Clear() { delete resources_; } resources_ = nullptr; + if (GetArenaNoVirtual() == nullptr && data_config_ != nullptr) { + delete data_config_; + } + data_config_ = nullptr; _internal_metadata_.Clear(); } @@ -3387,6 +3469,19 @@ const char* Container::_InternalParse(const char* begin, const char* end, void* } while ((::google::protobuf::io::UnalignedLoad<::google::protobuf::uint64>(ptr) & 255) == 58 && (ptr += 1)); break; } + // .flyteidl.core.DataLoadingConfig data_config = 9; + case 9: { + if (static_cast<::google::protobuf::uint8>(tag) != 74) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::core::DataLoadingConfig::_InternalParse; + object = msg->mutable_data_config(); + 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) { @@ -3512,6 +3607,17 @@ bool Container::MergePartialFromCodedStream( break; } + // .flyteidl.core.DataLoadingConfig data_config = 9; + case 9: { + if (static_cast< ::google::protobuf::uint8>(tag) == (74 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, mutable_data_config())); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -3602,6 +3708,12 @@ void Container::SerializeWithCachedSizes( output); } + // .flyteidl.core.DataLoadingConfig data_config = 9; + if (this->has_data_config()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 9, HasBitSetters::data_config(this), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -3677,6 +3789,13 @@ ::google::protobuf::uint8* Container::InternalSerializeWithCachedSizesToArray( 7, this->ports(static_cast(i)), target); } + // .flyteidl.core.DataLoadingConfig data_config = 9; + if (this->has_data_config()) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 9, HasBitSetters::data_config(this), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -3761,6 +3880,13 @@ size_t Container::ByteSizeLong() const { *resources_); } + // .flyteidl.core.DataLoadingConfig data_config = 9; + if (this->has_data_config()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSize( + *data_config_); + } + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); SetCachedSize(cached_size); return total_size; @@ -3800,6 +3926,9 @@ void Container::MergeFrom(const Container& from) { if (from.has_resources()) { mutable_resources()->::flyteidl::core::Resources::MergeFrom(from.resources()); } + if (from.has_data_config()) { + mutable_data_config()->::flyteidl::core::DataLoadingConfig::MergeFrom(from.data_config()); + } } void Container::CopyFrom(const ::google::protobuf::Message& from) { @@ -3835,6 +3964,7 @@ void Container::InternalSwap(Container* other) { image_.Swap(&other->image_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual()); swap(resources_, other->resources_); + swap(data_config_, other->data_config_); } ::google::protobuf::Metadata Container::GetMetadata() const { @@ -3843,6 +3973,470 @@ ::google::protobuf::Metadata Container::GetMetadata() const { } +// =================================================================== + +void DataLoadingConfig::InitAsDefaultInstance() { +} +class DataLoadingConfig::HasBitSetters { + public: +}; + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int DataLoadingConfig::kInputPathFieldNumber; +const int DataLoadingConfig::kOutputPathFieldNumber; +const int DataLoadingConfig::kFormatFieldNumber; +const int DataLoadingConfig::kEnabledFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +DataLoadingConfig::DataLoadingConfig() + : ::google::protobuf::Message(), _internal_metadata_(nullptr) { + SharedCtor(); + // @@protoc_insertion_point(constructor:flyteidl.core.DataLoadingConfig) +} +DataLoadingConfig::DataLoadingConfig(const DataLoadingConfig& from) + : ::google::protobuf::Message(), + _internal_metadata_(nullptr) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + input_path_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.input_path().size() > 0) { + input_path_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.input_path_); + } + output_path_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.output_path().size() > 0) { + output_path_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.output_path_); + } + ::memcpy(&format_, &from.format_, + static_cast(reinterpret_cast(&enabled_) - + reinterpret_cast(&format_)) + sizeof(enabled_)); + // @@protoc_insertion_point(copy_constructor:flyteidl.core.DataLoadingConfig) +} + +void DataLoadingConfig::SharedCtor() { + ::google::protobuf::internal::InitSCC( + &scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto.base); + input_path_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + output_path_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::memset(&format_, 0, static_cast( + reinterpret_cast(&enabled_) - + reinterpret_cast(&format_)) + sizeof(enabled_)); +} + +DataLoadingConfig::~DataLoadingConfig() { + // @@protoc_insertion_point(destructor:flyteidl.core.DataLoadingConfig) + SharedDtor(); +} + +void DataLoadingConfig::SharedDtor() { + input_path_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + output_path_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} + +void DataLoadingConfig::SetCachedSize(int size) const { + _cached_size_.Set(size); +} +const DataLoadingConfig& DataLoadingConfig::default_instance() { + ::google::protobuf::internal::InitSCC(&::scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto.base); + return *internal_default_instance(); +} + + +void DataLoadingConfig::Clear() { +// @@protoc_insertion_point(message_clear_start:flyteidl.core.DataLoadingConfig) + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + input_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + output_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::memset(&format_, 0, static_cast( + reinterpret_cast(&enabled_) - + reinterpret_cast(&format_)) + sizeof(enabled_)); + _internal_metadata_.Clear(); +} + +#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +const char* DataLoadingConfig::_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 input_path = 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.DataLoadingConfig.input_path"); + object = msg->mutable_input_path(); + 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; + } + // string output_path = 2; + case 2: { + if (static_cast<::google::protobuf::uint8>(tag) != 18) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.core.DataLoadingConfig.output_path"); + object = msg->mutable_output_path(); + 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.DataLoadingConfig.MetadataFormat format = 3; + case 3: { + if (static_cast<::google::protobuf::uint8>(tag) != 24) goto handle_unusual; + ::google::protobuf::uint64 val = ::google::protobuf::internal::ReadVarint(&ptr); + msg->set_format(static_cast<::flyteidl::core::DataLoadingConfig_MetadataFormat>(val)); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + break; + } + // bool enabled = 4; + case 4: { + if (static_cast<::google::protobuf::uint8>(tag) != 32) goto handle_unusual; + msg->set_enabled(::google::protobuf::internal::ReadVarint(&ptr)); + 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 DataLoadingConfig::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.DataLoadingConfig) + 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 input_path = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_input_path())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->input_path().data(), static_cast(this->input_path().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.core.DataLoadingConfig.input_path")); + } else { + goto handle_unusual; + } + break; + } + + // string output_path = 2; + case 2: { + if (static_cast< ::google::protobuf::uint8>(tag) == (18 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_output_path())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->output_path().data(), static_cast(this->output_path().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.core.DataLoadingConfig.output_path")); + } else { + goto handle_unusual; + } + break; + } + + // .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + case 3: { + if (static_cast< ::google::protobuf::uint8>(tag) == (24 & 0xFF)) { + int value = 0; + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>( + input, &value))); + set_format(static_cast< ::flyteidl::core::DataLoadingConfig_MetadataFormat >(value)); + } else { + goto handle_unusual; + } + break; + } + + // bool enabled = 4; + case 4: { + if (static_cast< ::google::protobuf::uint8>(tag) == (32 & 0xFF)) { + + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>( + input, &enabled_))); + } 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.DataLoadingConfig) + return true; +failure: + // @@protoc_insertion_point(parse_failure:flyteidl.core.DataLoadingConfig) + return false; +#undef DO_ +} +#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + +void DataLoadingConfig::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:flyteidl.core.DataLoadingConfig) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // string input_path = 1; + if (this->input_path().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->input_path().data(), static_cast(this->input_path().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.core.DataLoadingConfig.input_path"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 1, this->input_path(), output); + } + + // string output_path = 2; + if (this->output_path().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->output_path().data(), static_cast(this->output_path().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.core.DataLoadingConfig.output_path"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 2, this->output_path(), output); + } + + // .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + if (this->format() != 0) { + ::google::protobuf::internal::WireFormatLite::WriteEnum( + 3, this->format(), output); + } + + // bool enabled = 4; + if (this->enabled() != 0) { + ::google::protobuf::internal::WireFormatLite::WriteBool(4, this->enabled(), output); + } + + if (_internal_metadata_.have_unknown_fields()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + _internal_metadata_.unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:flyteidl.core.DataLoadingConfig) +} + +::google::protobuf::uint8* DataLoadingConfig::InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:flyteidl.core.DataLoadingConfig) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // string input_path = 1; + if (this->input_path().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->input_path().data(), static_cast(this->input_path().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.core.DataLoadingConfig.input_path"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 1, this->input_path(), target); + } + + // string output_path = 2; + if (this->output_path().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->output_path().data(), static_cast(this->output_path().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.core.DataLoadingConfig.output_path"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 2, this->output_path(), target); + } + + // .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + if (this->format() != 0) { + target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( + 3, this->format(), target); + } + + // bool enabled = 4; + if (this->enabled() != 0) { + target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(4, this->enabled(), 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.DataLoadingConfig) + return target; +} + +size_t DataLoadingConfig::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:flyteidl.core.DataLoadingConfig) + 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 input_path = 1; + if (this->input_path().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->input_path()); + } + + // string output_path = 2; + if (this->output_path().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->output_path()); + } + + // .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + if (this->format() != 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::EnumSize(this->format()); + } + + // bool enabled = 4; + if (this->enabled() != 0) { + total_size += 1 + 1; + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + SetCachedSize(cached_size); + return total_size; +} + +void DataLoadingConfig::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.core.DataLoadingConfig) + GOOGLE_DCHECK_NE(&from, this); + const DataLoadingConfig* source = + ::google::protobuf::DynamicCastToGenerated( + &from); + if (source == nullptr) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.core.DataLoadingConfig) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.core.DataLoadingConfig) + MergeFrom(*source); + } +} + +void DataLoadingConfig::MergeFrom(const DataLoadingConfig& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.core.DataLoadingConfig) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + if (from.input_path().size() > 0) { + + input_path_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.input_path_); + } + if (from.output_path().size() > 0) { + + output_path_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.output_path_); + } + if (from.format() != 0) { + set_format(from.format()); + } + if (from.enabled() != 0) { + set_enabled(from.enabled()); + } +} + +void DataLoadingConfig::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.core.DataLoadingConfig) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void DataLoadingConfig::CopyFrom(const DataLoadingConfig& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.core.DataLoadingConfig) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool DataLoadingConfig::IsInitialized() const { + return true; +} + +void DataLoadingConfig::Swap(DataLoadingConfig* other) { + if (other == this) return; + InternalSwap(other); +} +void DataLoadingConfig::InternalSwap(DataLoadingConfig* other) { + using std::swap; + _internal_metadata_.Swap(&other->_internal_metadata_); + input_path_.Swap(&other->input_path_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); + output_path_.Swap(&other->output_path_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); + swap(format_, other->format_); + swap(enabled_, other->enabled_); +} + +::google::protobuf::Metadata DataLoadingConfig::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 @@ -3869,6 +4463,9 @@ template<> PROTOBUF_NOINLINE ::flyteidl::core::ContainerPort* Arena::CreateMaybe template<> PROTOBUF_NOINLINE ::flyteidl::core::Container* Arena::CreateMaybeMessage< ::flyteidl::core::Container >(Arena* arena) { return Arena::CreateInternal< ::flyteidl::core::Container >(arena); } +template<> PROTOBUF_NOINLINE ::flyteidl::core::DataLoadingConfig* Arena::CreateMaybeMessage< ::flyteidl::core::DataLoadingConfig >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::core::DataLoadingConfig >(arena); +} } // namespace protobuf } // namespace google diff --git a/gen/pb-cpp/flyteidl/core/tasks.pb.h b/gen/pb-cpp/flyteidl/core/tasks.pb.h index 845e53ecb..9449ae6ea 100644 --- a/gen/pb-cpp/flyteidl/core/tasks.pb.h +++ b/gen/pb-cpp/flyteidl/core/tasks.pb.h @@ -47,7 +47,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[7] + static const ::google::protobuf::internal::ParseTable schema[8] PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::FieldMetadata field_metadata[]; static const ::google::protobuf::internal::SerializationTable serialization_table[]; @@ -62,6 +62,9 @@ extern ContainerDefaultTypeInternal _Container_default_instance_; class ContainerPort; class ContainerPortDefaultTypeInternal; extern ContainerPortDefaultTypeInternal _ContainerPort_default_instance_; +class DataLoadingConfig; +class DataLoadingConfigDefaultTypeInternal; +extern DataLoadingConfigDefaultTypeInternal _DataLoadingConfig_default_instance_; class Resources; class ResourcesDefaultTypeInternal; extern ResourcesDefaultTypeInternal _Resources_default_instance_; @@ -83,6 +86,7 @@ namespace google { namespace protobuf { template<> ::flyteidl::core::Container* Arena::CreateMaybeMessage<::flyteidl::core::Container>(Arena*); template<> ::flyteidl::core::ContainerPort* Arena::CreateMaybeMessage<::flyteidl::core::ContainerPort>(Arena*); +template<> ::flyteidl::core::DataLoadingConfig* Arena::CreateMaybeMessage<::flyteidl::core::DataLoadingConfig>(Arena*); 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*); @@ -138,6 +142,28 @@ inline bool RuntimeMetadata_RuntimeType_Parse( return ::google::protobuf::internal::ParseNamedEnum( RuntimeMetadata_RuntimeType_descriptor(), name, value); } +enum DataLoadingConfig_MetadataFormat { + DataLoadingConfig_MetadataFormat_JSON = 0, + DataLoadingConfig_MetadataFormat_YAML = 1, + DataLoadingConfig_MetadataFormat_PROTO = 2, + DataLoadingConfig_MetadataFormat_DataLoadingConfig_MetadataFormat_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::min(), + DataLoadingConfig_MetadataFormat_DataLoadingConfig_MetadataFormat_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::max() +}; +bool DataLoadingConfig_MetadataFormat_IsValid(int value); +const DataLoadingConfig_MetadataFormat DataLoadingConfig_MetadataFormat_MetadataFormat_MIN = DataLoadingConfig_MetadataFormat_JSON; +const DataLoadingConfig_MetadataFormat DataLoadingConfig_MetadataFormat_MetadataFormat_MAX = DataLoadingConfig_MetadataFormat_PROTO; +const int DataLoadingConfig_MetadataFormat_MetadataFormat_ARRAYSIZE = DataLoadingConfig_MetadataFormat_MetadataFormat_MAX + 1; + +const ::google::protobuf::EnumDescriptor* DataLoadingConfig_MetadataFormat_descriptor(); +inline const ::std::string& DataLoadingConfig_MetadataFormat_Name(DataLoadingConfig_MetadataFormat value) { + return ::google::protobuf::internal::NameOfEnum( + DataLoadingConfig_MetadataFormat_descriptor(), value); +} +inline bool DataLoadingConfig_MetadataFormat_Parse( + const ::std::string& name, DataLoadingConfig_MetadataFormat* value) { + return ::google::protobuf::internal::ParseNamedEnum( + DataLoadingConfig_MetadataFormat_descriptor(), name, value); +} // =================================================================== class Resources_ResourceEntry final : @@ -1294,6 +1320,15 @@ class Container final : ::flyteidl::core::Resources* mutable_resources(); void set_allocated_resources(::flyteidl::core::Resources* resources); + // .flyteidl.core.DataLoadingConfig data_config = 9; + bool has_data_config() const; + void clear_data_config(); + static const int kDataConfigFieldNumber = 9; + const ::flyteidl::core::DataLoadingConfig& data_config() const; + ::flyteidl::core::DataLoadingConfig* release_data_config(); + ::flyteidl::core::DataLoadingConfig* mutable_data_config(); + void set_allocated_data_config(::flyteidl::core::DataLoadingConfig* data_config); + // @@protoc_insertion_point(class_scope:flyteidl.core.Container) private: class HasBitSetters; @@ -1306,6 +1341,184 @@ class Container final : ::google::protobuf::RepeatedPtrField< ::flyteidl::core::ContainerPort > ports_; ::google::protobuf::internal::ArenaStringPtr image_; ::flyteidl::core::Resources* resources_; + ::flyteidl::core::DataLoadingConfig* data_config_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + friend struct ::TableStruct_flyteidl_2fcore_2ftasks_2eproto; +}; +// ------------------------------------------------------------------- + +class DataLoadingConfig final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.core.DataLoadingConfig) */ { + public: + DataLoadingConfig(); + virtual ~DataLoadingConfig(); + + DataLoadingConfig(const DataLoadingConfig& from); + + inline DataLoadingConfig& operator=(const DataLoadingConfig& from) { + CopyFrom(from); + return *this; + } + #if LANG_CXX11 + DataLoadingConfig(DataLoadingConfig&& from) noexcept + : DataLoadingConfig() { + *this = ::std::move(from); + } + + inline DataLoadingConfig& operator=(DataLoadingConfig&& 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 DataLoadingConfig& default_instance(); + + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static inline const DataLoadingConfig* internal_default_instance() { + return reinterpret_cast( + &_DataLoadingConfig_default_instance_); + } + static constexpr int kIndexInFileMessages = + 7; + + void Swap(DataLoadingConfig* other); + friend void swap(DataLoadingConfig& a, DataLoadingConfig& b) { + a.Swap(&b); + } + + // implements Message ---------------------------------------------- + + inline DataLoadingConfig* New() const final { + return CreateMaybeMessage(nullptr); + } + + DataLoadingConfig* 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 DataLoadingConfig& from); + void MergeFrom(const DataLoadingConfig& 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(DataLoadingConfig* 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 DataLoadingConfig_MetadataFormat MetadataFormat; + static const MetadataFormat JSON = + DataLoadingConfig_MetadataFormat_JSON; + static const MetadataFormat YAML = + DataLoadingConfig_MetadataFormat_YAML; + static const MetadataFormat PROTO = + DataLoadingConfig_MetadataFormat_PROTO; + static inline bool MetadataFormat_IsValid(int value) { + return DataLoadingConfig_MetadataFormat_IsValid(value); + } + static const MetadataFormat MetadataFormat_MIN = + DataLoadingConfig_MetadataFormat_MetadataFormat_MIN; + static const MetadataFormat MetadataFormat_MAX = + DataLoadingConfig_MetadataFormat_MetadataFormat_MAX; + static const int MetadataFormat_ARRAYSIZE = + DataLoadingConfig_MetadataFormat_MetadataFormat_ARRAYSIZE; + static inline const ::google::protobuf::EnumDescriptor* + MetadataFormat_descriptor() { + return DataLoadingConfig_MetadataFormat_descriptor(); + } + static inline const ::std::string& MetadataFormat_Name(MetadataFormat value) { + return DataLoadingConfig_MetadataFormat_Name(value); + } + static inline bool MetadataFormat_Parse(const ::std::string& name, + MetadataFormat* value) { + return DataLoadingConfig_MetadataFormat_Parse(name, value); + } + + // accessors ------------------------------------------------------- + + // string input_path = 1; + void clear_input_path(); + static const int kInputPathFieldNumber = 1; + const ::std::string& input_path() const; + void set_input_path(const ::std::string& value); + #if LANG_CXX11 + void set_input_path(::std::string&& value); + #endif + void set_input_path(const char* value); + void set_input_path(const char* value, size_t size); + ::std::string* mutable_input_path(); + ::std::string* release_input_path(); + void set_allocated_input_path(::std::string* input_path); + + // string output_path = 2; + void clear_output_path(); + static const int kOutputPathFieldNumber = 2; + const ::std::string& output_path() const; + void set_output_path(const ::std::string& value); + #if LANG_CXX11 + void set_output_path(::std::string&& value); + #endif + void set_output_path(const char* value); + void set_output_path(const char* value, size_t size); + ::std::string* mutable_output_path(); + ::std::string* release_output_path(); + void set_allocated_output_path(::std::string* output_path); + + // .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + void clear_format(); + static const int kFormatFieldNumber = 3; + ::flyteidl::core::DataLoadingConfig_MetadataFormat format() const; + void set_format(::flyteidl::core::DataLoadingConfig_MetadataFormat value); + + // bool enabled = 4; + void clear_enabled(); + static const int kEnabledFieldNumber = 4; + bool enabled() const; + void set_enabled(bool value); + + // @@protoc_insertion_point(class_scope:flyteidl.core.DataLoadingConfig) + private: + class HasBitSetters; + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::internal::ArenaStringPtr input_path_; + ::google::protobuf::internal::ArenaStringPtr output_path_; + int format_; + bool enabled_; mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fcore_2ftasks_2eproto; }; @@ -2521,6 +2734,195 @@ Container::ports() const { return ports_; } +// .flyteidl.core.DataLoadingConfig data_config = 9; +inline bool Container::has_data_config() const { + return this != internal_default_instance() && data_config_ != nullptr; +} +inline void Container::clear_data_config() { + if (GetArenaNoVirtual() == nullptr && data_config_ != nullptr) { + delete data_config_; + } + data_config_ = nullptr; +} +inline const ::flyteidl::core::DataLoadingConfig& Container::data_config() const { + const ::flyteidl::core::DataLoadingConfig* p = data_config_; + // @@protoc_insertion_point(field_get:flyteidl.core.Container.data_config) + return p != nullptr ? *p : *reinterpret_cast( + &::flyteidl::core::_DataLoadingConfig_default_instance_); +} +inline ::flyteidl::core::DataLoadingConfig* Container::release_data_config() { + // @@protoc_insertion_point(field_release:flyteidl.core.Container.data_config) + + ::flyteidl::core::DataLoadingConfig* temp = data_config_; + data_config_ = nullptr; + return temp; +} +inline ::flyteidl::core::DataLoadingConfig* Container::mutable_data_config() { + + if (data_config_ == nullptr) { + auto* p = CreateMaybeMessage<::flyteidl::core::DataLoadingConfig>(GetArenaNoVirtual()); + data_config_ = p; + } + // @@protoc_insertion_point(field_mutable:flyteidl.core.Container.data_config) + return data_config_; +} +inline void Container::set_allocated_data_config(::flyteidl::core::DataLoadingConfig* data_config) { + ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); + if (message_arena == nullptr) { + delete data_config_; + } + if (data_config) { + ::google::protobuf::Arena* submessage_arena = nullptr; + if (message_arena != submessage_arena) { + data_config = ::google::protobuf::internal::GetOwnedMessage( + message_arena, data_config, submessage_arena); + } + + } else { + + } + data_config_ = data_config; + // @@protoc_insertion_point(field_set_allocated:flyteidl.core.Container.data_config) +} + +// ------------------------------------------------------------------- + +// DataLoadingConfig + +// string input_path = 1; +inline void DataLoadingConfig::clear_input_path() { + input_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& DataLoadingConfig::input_path() const { + // @@protoc_insertion_point(field_get:flyteidl.core.DataLoadingConfig.input_path) + return input_path_.GetNoArena(); +} +inline void DataLoadingConfig::set_input_path(const ::std::string& value) { + + input_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.core.DataLoadingConfig.input_path) +} +#if LANG_CXX11 +inline void DataLoadingConfig::set_input_path(::std::string&& value) { + + input_path_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.core.DataLoadingConfig.input_path) +} +#endif +inline void DataLoadingConfig::set_input_path(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + input_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.core.DataLoadingConfig.input_path) +} +inline void DataLoadingConfig::set_input_path(const char* value, size_t size) { + + input_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.core.DataLoadingConfig.input_path) +} +inline ::std::string* DataLoadingConfig::mutable_input_path() { + + // @@protoc_insertion_point(field_mutable:flyteidl.core.DataLoadingConfig.input_path) + return input_path_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* DataLoadingConfig::release_input_path() { + // @@protoc_insertion_point(field_release:flyteidl.core.DataLoadingConfig.input_path) + + return input_path_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void DataLoadingConfig::set_allocated_input_path(::std::string* input_path) { + if (input_path != nullptr) { + + } else { + + } + input_path_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), input_path); + // @@protoc_insertion_point(field_set_allocated:flyteidl.core.DataLoadingConfig.input_path) +} + +// string output_path = 2; +inline void DataLoadingConfig::clear_output_path() { + output_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& DataLoadingConfig::output_path() const { + // @@protoc_insertion_point(field_get:flyteidl.core.DataLoadingConfig.output_path) + return output_path_.GetNoArena(); +} +inline void DataLoadingConfig::set_output_path(const ::std::string& value) { + + output_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.core.DataLoadingConfig.output_path) +} +#if LANG_CXX11 +inline void DataLoadingConfig::set_output_path(::std::string&& value) { + + output_path_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.core.DataLoadingConfig.output_path) +} +#endif +inline void DataLoadingConfig::set_output_path(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + output_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.core.DataLoadingConfig.output_path) +} +inline void DataLoadingConfig::set_output_path(const char* value, size_t size) { + + output_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.core.DataLoadingConfig.output_path) +} +inline ::std::string* DataLoadingConfig::mutable_output_path() { + + // @@protoc_insertion_point(field_mutable:flyteidl.core.DataLoadingConfig.output_path) + return output_path_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* DataLoadingConfig::release_output_path() { + // @@protoc_insertion_point(field_release:flyteidl.core.DataLoadingConfig.output_path) + + return output_path_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void DataLoadingConfig::set_allocated_output_path(::std::string* output_path) { + if (output_path != nullptr) { + + } else { + + } + output_path_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), output_path); + // @@protoc_insertion_point(field_set_allocated:flyteidl.core.DataLoadingConfig.output_path) +} + +// .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; +inline void DataLoadingConfig::clear_format() { + format_ = 0; +} +inline ::flyteidl::core::DataLoadingConfig_MetadataFormat DataLoadingConfig::format() const { + // @@protoc_insertion_point(field_get:flyteidl.core.DataLoadingConfig.format) + return static_cast< ::flyteidl::core::DataLoadingConfig_MetadataFormat >(format_); +} +inline void DataLoadingConfig::set_format(::flyteidl::core::DataLoadingConfig_MetadataFormat value) { + + format_ = value; + // @@protoc_insertion_point(field_set:flyteidl.core.DataLoadingConfig.format) +} + +// bool enabled = 4; +inline void DataLoadingConfig::clear_enabled() { + enabled_ = false; +} +inline bool DataLoadingConfig::enabled() const { + // @@protoc_insertion_point(field_get:flyteidl.core.DataLoadingConfig.enabled) + return enabled_; +} +inline void DataLoadingConfig::set_enabled(bool value) { + + enabled_ = value; + // @@protoc_insertion_point(field_set:flyteidl.core.DataLoadingConfig.enabled) +} + #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // __GNUC__ @@ -2536,6 +2938,8 @@ Container::ports() const { // ------------------------------------------------------------------- +// ------------------------------------------------------------------- + // @@protoc_insertion_point(namespace_scope) @@ -2555,6 +2959,11 @@ template <> inline const EnumDescriptor* GetEnumDescriptor< ::flyteidl::core::RuntimeMetadata_RuntimeType>() { return ::flyteidl::core::RuntimeMetadata_RuntimeType_descriptor(); } +template <> struct is_proto_enum< ::flyteidl::core::DataLoadingConfig_MetadataFormat> : ::std::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::flyteidl::core::DataLoadingConfig_MetadataFormat>() { + return ::flyteidl::core::DataLoadingConfig_MetadataFormat_descriptor(); +} } // namespace protobuf } // namespace google diff --git a/gen/pb-cpp/flyteidl/plugins/raw_container.grpc.pb.cc b/gen/pb-cpp/flyteidl/plugins/raw_container.grpc.pb.cc deleted file mode 100644 index 2e55fdbf4..000000000 --- a/gen/pb-cpp/flyteidl/plugins/raw_container.grpc.pb.cc +++ /dev/null @@ -1,24 +0,0 @@ -// Generated by the gRPC C++ plugin. -// If you make any local change, they will be lost. -// source: flyteidl/plugins/raw_container.proto - -#include "flyteidl/plugins/raw_container.pb.h" -#include "flyteidl/plugins/raw_container.grpc.pb.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -namespace flyteidl { -namespace plugins { - -} // namespace flyteidl -} // namespace plugins - diff --git a/gen/pb-cpp/flyteidl/plugins/raw_container.grpc.pb.h b/gen/pb-cpp/flyteidl/plugins/raw_container.grpc.pb.h deleted file mode 100644 index a05acdbe9..000000000 --- a/gen/pb-cpp/flyteidl/plugins/raw_container.grpc.pb.h +++ /dev/null @@ -1,47 +0,0 @@ -// Generated by the gRPC C++ plugin. -// If you make any local change, they will be lost. -// source: flyteidl/plugins/raw_container.proto -#ifndef GRPC_flyteidl_2fplugins_2fraw_5fcontainer_2eproto__INCLUDED -#define GRPC_flyteidl_2fplugins_2fraw_5fcontainer_2eproto__INCLUDED - -#include "flyteidl/plugins/raw_container.pb.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace grpc_impl { -class Channel; -class CompletionQueue; -class ServerCompletionQueue; -} // namespace grpc_impl - -namespace grpc { -namespace experimental { -template -class MessageAllocator; -} // namespace experimental -} // namespace grpc_impl - -namespace grpc { -class ServerContext; -} // namespace grpc - -namespace flyteidl { -namespace plugins { - -} // namespace plugins -} // namespace flyteidl - - -#endif // GRPC_flyteidl_2fplugins_2fraw_5fcontainer_2eproto__INCLUDED diff --git a/gen/pb-cpp/flyteidl/plugins/raw_container.pb.cc b/gen/pb-cpp/flyteidl/plugins/raw_container.pb.cc deleted file mode 100644 index ccd48fefe..000000000 --- a/gen/pb-cpp/flyteidl/plugins/raw_container.pb.cc +++ /dev/null @@ -1,553 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: flyteidl/plugins/raw_container.proto - -#include "flyteidl/plugins/raw_container.pb.h" - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -// @@protoc_insertion_point(includes) -#include - -namespace flyteidl { -namespace plugins { -class CoPilotDefaultTypeInternal { - public: - ::google::protobuf::internal::ExplicitlyConstructed _instance; -} _CoPilot_default_instance_; -} // namespace plugins -} // namespace flyteidl -static void InitDefaultsCoPilot_flyteidl_2fplugins_2fraw_5fcontainer_2eproto() { - GOOGLE_PROTOBUF_VERIFY_VERSION; - - { - void* ptr = &::flyteidl::plugins::_CoPilot_default_instance_; - new (ptr) ::flyteidl::plugins::CoPilot(); - ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); - } - ::flyteidl::plugins::CoPilot::InitAsDefaultInstance(); -} - -::google::protobuf::internal::SCCInfo<0> scc_info_CoPilot_flyteidl_2fplugins_2fraw_5fcontainer_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsCoPilot_flyteidl_2fplugins_2fraw_5fcontainer_2eproto}, {}}; - -void InitDefaults_flyteidl_2fplugins_2fraw_5fcontainer_2eproto() { - ::google::protobuf::internal::InitSCC(&scc_info_CoPilot_flyteidl_2fplugins_2fraw_5fcontainer_2eproto.base); -} - -::google::protobuf::Metadata file_level_metadata_flyteidl_2fplugins_2fraw_5fcontainer_2eproto[1]; -const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fplugins_2fraw_5fcontainer_2eproto[1]; -constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_flyteidl_2fplugins_2fraw_5fcontainer_2eproto = nullptr; - -const ::google::protobuf::uint32 TableStruct_flyteidl_2fplugins_2fraw_5fcontainer_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { - ~0u, // no _has_bits_ - PROTOBUF_FIELD_OFFSET(::flyteidl::plugins::CoPilot, _internal_metadata_), - ~0u, // no _extensions_ - ~0u, // no _oneof_case_ - ~0u, // no _weak_field_map_ - PROTOBUF_FIELD_OFFSET(::flyteidl::plugins::CoPilot, input_path_), - PROTOBUF_FIELD_OFFSET(::flyteidl::plugins::CoPilot, output_path_), - PROTOBUF_FIELD_OFFSET(::flyteidl::plugins::CoPilot, format_), -}; -static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { - { 0, -1, sizeof(::flyteidl::plugins::CoPilot)}, -}; - -static ::google::protobuf::Message const * const file_default_instances[] = { - reinterpret_cast(&::flyteidl::plugins::_CoPilot_default_instance_), -}; - -::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_flyteidl_2fplugins_2fraw_5fcontainer_2eproto = { - {}, AddDescriptors_flyteidl_2fplugins_2fraw_5fcontainer_2eproto, "flyteidl/plugins/raw_container.proto", schemas, - file_default_instances, TableStruct_flyteidl_2fplugins_2fraw_5fcontainer_2eproto::offsets, - file_level_metadata_flyteidl_2fplugins_2fraw_5fcontainer_2eproto, 1, file_level_enum_descriptors_flyteidl_2fplugins_2fraw_5fcontainer_2eproto, file_level_service_descriptors_flyteidl_2fplugins_2fraw_5fcontainer_2eproto, -}; - -const char descriptor_table_protodef_flyteidl_2fplugins_2fraw_5fcontainer_2eproto[] = - "\n$flyteidl/plugins/raw_container.proto\022\020" - "flyteidl.plugins\"\235\001\n\007CoPilot\022\022\n\ninput_pa" - "th\030\001 \001(\t\022\023\n\013output_path\030\002 \001(\t\0228\n\006format\030" - "\003 \001(\0162(.flyteidl.plugins.CoPilot.Metadat" - "aFormat\"/\n\016MetadataFormat\022\010\n\004JSON\020\000\022\010\n\004Y" - "AML\020\001\022\t\n\005PROTO\020\002B5Z3github.com/lyft/flyt" - "eidl/gen/pb-go/flyteidl/pluginsb\006proto3" - ; -::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fplugins_2fraw_5fcontainer_2eproto = { - false, InitDefaults_flyteidl_2fplugins_2fraw_5fcontainer_2eproto, - descriptor_table_protodef_flyteidl_2fplugins_2fraw_5fcontainer_2eproto, - "flyteidl/plugins/raw_container.proto", &assign_descriptors_table_flyteidl_2fplugins_2fraw_5fcontainer_2eproto, 279, -}; - -void AddDescriptors_flyteidl_2fplugins_2fraw_5fcontainer_2eproto() { - static constexpr ::google::protobuf::internal::InitFunc deps[1] = - { - }; - ::google::protobuf::internal::AddDescriptors(&descriptor_table_flyteidl_2fplugins_2fraw_5fcontainer_2eproto, deps, 0); -} - -// Force running AddDescriptors() at dynamic initialization time. -static bool dynamic_init_dummy_flyteidl_2fplugins_2fraw_5fcontainer_2eproto = []() { AddDescriptors_flyteidl_2fplugins_2fraw_5fcontainer_2eproto(); return true; }(); -namespace flyteidl { -namespace plugins { -const ::google::protobuf::EnumDescriptor* CoPilot_MetadataFormat_descriptor() { - ::google::protobuf::internal::AssignDescriptors(&assign_descriptors_table_flyteidl_2fplugins_2fraw_5fcontainer_2eproto); - return file_level_enum_descriptors_flyteidl_2fplugins_2fraw_5fcontainer_2eproto[0]; -} -bool CoPilot_MetadataFormat_IsValid(int value) { - switch (value) { - case 0: - case 1: - case 2: - return true; - default: - return false; - } -} - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const CoPilot_MetadataFormat CoPilot::JSON; -const CoPilot_MetadataFormat CoPilot::YAML; -const CoPilot_MetadataFormat CoPilot::PROTO; -const CoPilot_MetadataFormat CoPilot::MetadataFormat_MIN; -const CoPilot_MetadataFormat CoPilot::MetadataFormat_MAX; -const int CoPilot::MetadataFormat_ARRAYSIZE; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -// =================================================================== - -void CoPilot::InitAsDefaultInstance() { -} -class CoPilot::HasBitSetters { - public: -}; - -#if !defined(_MSC_VER) || _MSC_VER >= 1900 -const int CoPilot::kInputPathFieldNumber; -const int CoPilot::kOutputPathFieldNumber; -const int CoPilot::kFormatFieldNumber; -#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 - -CoPilot::CoPilot() - : ::google::protobuf::Message(), _internal_metadata_(nullptr) { - SharedCtor(); - // @@protoc_insertion_point(constructor:flyteidl.plugins.CoPilot) -} -CoPilot::CoPilot(const CoPilot& from) - : ::google::protobuf::Message(), - _internal_metadata_(nullptr) { - _internal_metadata_.MergeFrom(from._internal_metadata_); - input_path_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.input_path().size() > 0) { - input_path_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.input_path_); - } - output_path_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - if (from.output_path().size() > 0) { - output_path_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.output_path_); - } - format_ = from.format_; - // @@protoc_insertion_point(copy_constructor:flyteidl.plugins.CoPilot) -} - -void CoPilot::SharedCtor() { - ::google::protobuf::internal::InitSCC( - &scc_info_CoPilot_flyteidl_2fplugins_2fraw_5fcontainer_2eproto.base); - input_path_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - output_path_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - format_ = 0; -} - -CoPilot::~CoPilot() { - // @@protoc_insertion_point(destructor:flyteidl.plugins.CoPilot) - SharedDtor(); -} - -void CoPilot::SharedDtor() { - input_path_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - output_path_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} - -void CoPilot::SetCachedSize(int size) const { - _cached_size_.Set(size); -} -const CoPilot& CoPilot::default_instance() { - ::google::protobuf::internal::InitSCC(&::scc_info_CoPilot_flyteidl_2fplugins_2fraw_5fcontainer_2eproto.base); - return *internal_default_instance(); -} - - -void CoPilot::Clear() { -// @@protoc_insertion_point(message_clear_start:flyteidl.plugins.CoPilot) - ::google::protobuf::uint32 cached_has_bits = 0; - // Prevent compiler warnings about cached_has_bits being unused - (void) cached_has_bits; - - input_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - output_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); - format_ = 0; - _internal_metadata_.Clear(); -} - -#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER -const char* CoPilot::_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 input_path = 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.plugins.CoPilot.input_path"); - object = msg->mutable_input_path(); - 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; - } - // string output_path = 2; - case 2: { - if (static_cast<::google::protobuf::uint8>(tag) != 18) goto handle_unusual; - ptr = ::google::protobuf::io::ReadSize(ptr, &size); - GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); - ctx->extra_parse_data().SetFieldName("flyteidl.plugins.CoPilot.output_path"); - object = msg->mutable_output_path(); - 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.plugins.CoPilot.MetadataFormat format = 3; - case 3: { - if (static_cast<::google::protobuf::uint8>(tag) != 24) goto handle_unusual; - ::google::protobuf::uint64 val = ::google::protobuf::internal::ReadVarint(&ptr); - msg->set_format(static_cast<::flyteidl::plugins::CoPilot_MetadataFormat>(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 CoPilot::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.plugins.CoPilot) - 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 input_path = 1; - case 1: { - if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_input_path())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->input_path().data(), static_cast(this->input_path().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "flyteidl.plugins.CoPilot.input_path")); - } else { - goto handle_unusual; - } - break; - } - - // string output_path = 2; - case 2: { - if (static_cast< ::google::protobuf::uint8>(tag) == (18 & 0xFF)) { - DO_(::google::protobuf::internal::WireFormatLite::ReadString( - input, this->mutable_output_path())); - DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->output_path().data(), static_cast(this->output_path().length()), - ::google::protobuf::internal::WireFormatLite::PARSE, - "flyteidl.plugins.CoPilot.output_path")); - } else { - goto handle_unusual; - } - break; - } - - // .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - case 3: { - if (static_cast< ::google::protobuf::uint8>(tag) == (24 & 0xFF)) { - int value = 0; - DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< - int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>( - input, &value))); - set_format(static_cast< ::flyteidl::plugins::CoPilot_MetadataFormat >(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.plugins.CoPilot) - return true; -failure: - // @@protoc_insertion_point(parse_failure:flyteidl.plugins.CoPilot) - return false; -#undef DO_ -} -#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER - -void CoPilot::SerializeWithCachedSizes( - ::google::protobuf::io::CodedOutputStream* output) const { - // @@protoc_insertion_point(serialize_start:flyteidl.plugins.CoPilot) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // string input_path = 1; - if (this->input_path().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->input_path().data(), static_cast(this->input_path().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "flyteidl.plugins.CoPilot.input_path"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 1, this->input_path(), output); - } - - // string output_path = 2; - if (this->output_path().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->output_path().data(), static_cast(this->output_path().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "flyteidl.plugins.CoPilot.output_path"); - ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( - 2, this->output_path(), output); - } - - // .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - if (this->format() != 0) { - ::google::protobuf::internal::WireFormatLite::WriteEnum( - 3, this->format(), output); - } - - if (_internal_metadata_.have_unknown_fields()) { - ::google::protobuf::internal::WireFormat::SerializeUnknownFields( - _internal_metadata_.unknown_fields(), output); - } - // @@protoc_insertion_point(serialize_end:flyteidl.plugins.CoPilot) -} - -::google::protobuf::uint8* CoPilot::InternalSerializeWithCachedSizesToArray( - ::google::protobuf::uint8* target) const { - // @@protoc_insertion_point(serialize_to_array_start:flyteidl.plugins.CoPilot) - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - // string input_path = 1; - if (this->input_path().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->input_path().data(), static_cast(this->input_path().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "flyteidl.plugins.CoPilot.input_path"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 1, this->input_path(), target); - } - - // string output_path = 2; - if (this->output_path().size() > 0) { - ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( - this->output_path().data(), static_cast(this->output_path().length()), - ::google::protobuf::internal::WireFormatLite::SERIALIZE, - "flyteidl.plugins.CoPilot.output_path"); - target = - ::google::protobuf::internal::WireFormatLite::WriteStringToArray( - 2, this->output_path(), target); - } - - // .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - if (this->format() != 0) { - target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( - 3, this->format(), 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.plugins.CoPilot) - return target; -} - -size_t CoPilot::ByteSizeLong() const { -// @@protoc_insertion_point(message_byte_size_start:flyteidl.plugins.CoPilot) - 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 input_path = 1; - if (this->input_path().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->input_path()); - } - - // string output_path = 2; - if (this->output_path().size() > 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::StringSize( - this->output_path()); - } - - // .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - if (this->format() != 0) { - total_size += 1 + - ::google::protobuf::internal::WireFormatLite::EnumSize(this->format()); - } - - int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); - SetCachedSize(cached_size); - return total_size; -} - -void CoPilot::MergeFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.plugins.CoPilot) - GOOGLE_DCHECK_NE(&from, this); - const CoPilot* source = - ::google::protobuf::DynamicCastToGenerated( - &from); - if (source == nullptr) { - // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.plugins.CoPilot) - ::google::protobuf::internal::ReflectionOps::Merge(from, this); - } else { - // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.plugins.CoPilot) - MergeFrom(*source); - } -} - -void CoPilot::MergeFrom(const CoPilot& from) { -// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.plugins.CoPilot) - GOOGLE_DCHECK_NE(&from, this); - _internal_metadata_.MergeFrom(from._internal_metadata_); - ::google::protobuf::uint32 cached_has_bits = 0; - (void) cached_has_bits; - - if (from.input_path().size() > 0) { - - input_path_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.input_path_); - } - if (from.output_path().size() > 0) { - - output_path_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.output_path_); - } - if (from.format() != 0) { - set_format(from.format()); - } -} - -void CoPilot::CopyFrom(const ::google::protobuf::Message& from) { -// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.plugins.CoPilot) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -void CoPilot::CopyFrom(const CoPilot& from) { -// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.plugins.CoPilot) - if (&from == this) return; - Clear(); - MergeFrom(from); -} - -bool CoPilot::IsInitialized() const { - return true; -} - -void CoPilot::Swap(CoPilot* other) { - if (other == this) return; - InternalSwap(other); -} -void CoPilot::InternalSwap(CoPilot* other) { - using std::swap; - _internal_metadata_.Swap(&other->_internal_metadata_); - input_path_.Swap(&other->input_path_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - output_path_.Swap(&other->output_path_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), - GetArenaNoVirtual()); - swap(format_, other->format_); -} - -::google::protobuf::Metadata CoPilot::GetMetadata() const { - ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fplugins_2fraw_5fcontainer_2eproto); - return ::file_level_metadata_flyteidl_2fplugins_2fraw_5fcontainer_2eproto[kIndexInFileMessages]; -} - - -// @@protoc_insertion_point(namespace_scope) -} // namespace plugins -} // namespace flyteidl -namespace google { -namespace protobuf { -template<> PROTOBUF_NOINLINE ::flyteidl::plugins::CoPilot* Arena::CreateMaybeMessage< ::flyteidl::plugins::CoPilot >(Arena* arena) { - return Arena::CreateInternal< ::flyteidl::plugins::CoPilot >(arena); -} -} // namespace protobuf -} // namespace google - -// @@protoc_insertion_point(global_scope) -#include diff --git a/gen/pb-cpp/flyteidl/plugins/raw_container.pb.h b/gen/pb-cpp/flyteidl/plugins/raw_container.pb.h deleted file mode 100644 index c4e3821cd..000000000 --- a/gen/pb-cpp/flyteidl/plugins/raw_container.pb.h +++ /dev/null @@ -1,414 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: flyteidl/plugins/raw_container.proto - -#ifndef PROTOBUF_INCLUDED_flyteidl_2fplugins_2fraw_5fcontainer_2eproto -#define PROTOBUF_INCLUDED_flyteidl_2fplugins_2fraw_5fcontainer_2eproto - -#include -#include - -#include -#if PROTOBUF_VERSION < 3007000 -#error This file was generated by a newer version of protoc which is -#error incompatible with your Protocol Buffer headers. Please update -#error your headers. -#endif -#if 3007000 < PROTOBUF_MIN_PROTOC_VERSION -#error This file was generated by an older version of protoc which is -#error incompatible with your Protocol Buffer headers. Please -#error regenerate this file with a newer version of protoc. -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // IWYU pragma: export -#include // IWYU pragma: export -#include -#include -// @@protoc_insertion_point(includes) -#include -#define PROTOBUF_INTERNAL_EXPORT_flyteidl_2fplugins_2fraw_5fcontainer_2eproto - -// Internal implementation detail -- do not use these members. -struct TableStruct_flyteidl_2fplugins_2fraw_5fcontainer_2eproto { - static const ::google::protobuf::internal::ParseTableField entries[] - PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::AuxillaryParseTableField aux[] - PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::ParseTable schema[1] - PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::FieldMetadata field_metadata[]; - static const ::google::protobuf::internal::SerializationTable serialization_table[]; - static const ::google::protobuf::uint32 offsets[]; -}; -void AddDescriptors_flyteidl_2fplugins_2fraw_5fcontainer_2eproto(); -namespace flyteidl { -namespace plugins { -class CoPilot; -class CoPilotDefaultTypeInternal; -extern CoPilotDefaultTypeInternal _CoPilot_default_instance_; -} // namespace plugins -} // namespace flyteidl -namespace google { -namespace protobuf { -template<> ::flyteidl::plugins::CoPilot* Arena::CreateMaybeMessage<::flyteidl::plugins::CoPilot>(Arena*); -} // namespace protobuf -} // namespace google -namespace flyteidl { -namespace plugins { - -enum CoPilot_MetadataFormat { - CoPilot_MetadataFormat_JSON = 0, - CoPilot_MetadataFormat_YAML = 1, - CoPilot_MetadataFormat_PROTO = 2, - CoPilot_MetadataFormat_CoPilot_MetadataFormat_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::min(), - CoPilot_MetadataFormat_CoPilot_MetadataFormat_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::max() -}; -bool CoPilot_MetadataFormat_IsValid(int value); -const CoPilot_MetadataFormat CoPilot_MetadataFormat_MetadataFormat_MIN = CoPilot_MetadataFormat_JSON; -const CoPilot_MetadataFormat CoPilot_MetadataFormat_MetadataFormat_MAX = CoPilot_MetadataFormat_PROTO; -const int CoPilot_MetadataFormat_MetadataFormat_ARRAYSIZE = CoPilot_MetadataFormat_MetadataFormat_MAX + 1; - -const ::google::protobuf::EnumDescriptor* CoPilot_MetadataFormat_descriptor(); -inline const ::std::string& CoPilot_MetadataFormat_Name(CoPilot_MetadataFormat value) { - return ::google::protobuf::internal::NameOfEnum( - CoPilot_MetadataFormat_descriptor(), value); -} -inline bool CoPilot_MetadataFormat_Parse( - const ::std::string& name, CoPilot_MetadataFormat* value) { - return ::google::protobuf::internal::ParseNamedEnum( - CoPilot_MetadataFormat_descriptor(), name, value); -} -// =================================================================== - -class CoPilot final : - public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.plugins.CoPilot) */ { - public: - CoPilot(); - virtual ~CoPilot(); - - CoPilot(const CoPilot& from); - - inline CoPilot& operator=(const CoPilot& from) { - CopyFrom(from); - return *this; - } - #if LANG_CXX11 - CoPilot(CoPilot&& from) noexcept - : CoPilot() { - *this = ::std::move(from); - } - - inline CoPilot& operator=(CoPilot&& 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 CoPilot& default_instance(); - - static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY - static inline const CoPilot* internal_default_instance() { - return reinterpret_cast( - &_CoPilot_default_instance_); - } - static constexpr int kIndexInFileMessages = - 0; - - void Swap(CoPilot* other); - friend void swap(CoPilot& a, CoPilot& b) { - a.Swap(&b); - } - - // implements Message ---------------------------------------------- - - inline CoPilot* New() const final { - return CreateMaybeMessage(nullptr); - } - - CoPilot* 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 CoPilot& from); - void MergeFrom(const CoPilot& 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(CoPilot* 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 CoPilot_MetadataFormat MetadataFormat; - static const MetadataFormat JSON = - CoPilot_MetadataFormat_JSON; - static const MetadataFormat YAML = - CoPilot_MetadataFormat_YAML; - static const MetadataFormat PROTO = - CoPilot_MetadataFormat_PROTO; - static inline bool MetadataFormat_IsValid(int value) { - return CoPilot_MetadataFormat_IsValid(value); - } - static const MetadataFormat MetadataFormat_MIN = - CoPilot_MetadataFormat_MetadataFormat_MIN; - static const MetadataFormat MetadataFormat_MAX = - CoPilot_MetadataFormat_MetadataFormat_MAX; - static const int MetadataFormat_ARRAYSIZE = - CoPilot_MetadataFormat_MetadataFormat_ARRAYSIZE; - static inline const ::google::protobuf::EnumDescriptor* - MetadataFormat_descriptor() { - return CoPilot_MetadataFormat_descriptor(); - } - static inline const ::std::string& MetadataFormat_Name(MetadataFormat value) { - return CoPilot_MetadataFormat_Name(value); - } - static inline bool MetadataFormat_Parse(const ::std::string& name, - MetadataFormat* value) { - return CoPilot_MetadataFormat_Parse(name, value); - } - - // accessors ------------------------------------------------------- - - // string input_path = 1; - void clear_input_path(); - static const int kInputPathFieldNumber = 1; - const ::std::string& input_path() const; - void set_input_path(const ::std::string& value); - #if LANG_CXX11 - void set_input_path(::std::string&& value); - #endif - void set_input_path(const char* value); - void set_input_path(const char* value, size_t size); - ::std::string* mutable_input_path(); - ::std::string* release_input_path(); - void set_allocated_input_path(::std::string* input_path); - - // string output_path = 2; - void clear_output_path(); - static const int kOutputPathFieldNumber = 2; - const ::std::string& output_path() const; - void set_output_path(const ::std::string& value); - #if LANG_CXX11 - void set_output_path(::std::string&& value); - #endif - void set_output_path(const char* value); - void set_output_path(const char* value, size_t size); - ::std::string* mutable_output_path(); - ::std::string* release_output_path(); - void set_allocated_output_path(::std::string* output_path); - - // .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - void clear_format(); - static const int kFormatFieldNumber = 3; - ::flyteidl::plugins::CoPilot_MetadataFormat format() const; - void set_format(::flyteidl::plugins::CoPilot_MetadataFormat value); - - // @@protoc_insertion_point(class_scope:flyteidl.plugins.CoPilot) - private: - class HasBitSetters; - - ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; - ::google::protobuf::internal::ArenaStringPtr input_path_; - ::google::protobuf::internal::ArenaStringPtr output_path_; - int format_; - mutable ::google::protobuf::internal::CachedSize _cached_size_; - friend struct ::TableStruct_flyteidl_2fplugins_2fraw_5fcontainer_2eproto; -}; -// =================================================================== - - -// =================================================================== - -#ifdef __GNUC__ - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wstrict-aliasing" -#endif // __GNUC__ -// CoPilot - -// string input_path = 1; -inline void CoPilot::clear_input_path() { - input_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& CoPilot::input_path() const { - // @@protoc_insertion_point(field_get:flyteidl.plugins.CoPilot.input_path) - return input_path_.GetNoArena(); -} -inline void CoPilot::set_input_path(const ::std::string& value) { - - input_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:flyteidl.plugins.CoPilot.input_path) -} -#if LANG_CXX11 -inline void CoPilot::set_input_path(::std::string&& value) { - - input_path_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:flyteidl.plugins.CoPilot.input_path) -} -#endif -inline void CoPilot::set_input_path(const char* value) { - GOOGLE_DCHECK(value != nullptr); - - input_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:flyteidl.plugins.CoPilot.input_path) -} -inline void CoPilot::set_input_path(const char* value, size_t size) { - - input_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:flyteidl.plugins.CoPilot.input_path) -} -inline ::std::string* CoPilot::mutable_input_path() { - - // @@protoc_insertion_point(field_mutable:flyteidl.plugins.CoPilot.input_path) - return input_path_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* CoPilot::release_input_path() { - // @@protoc_insertion_point(field_release:flyteidl.plugins.CoPilot.input_path) - - return input_path_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void CoPilot::set_allocated_input_path(::std::string* input_path) { - if (input_path != nullptr) { - - } else { - - } - input_path_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), input_path); - // @@protoc_insertion_point(field_set_allocated:flyteidl.plugins.CoPilot.input_path) -} - -// string output_path = 2; -inline void CoPilot::clear_output_path() { - output_path_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline const ::std::string& CoPilot::output_path() const { - // @@protoc_insertion_point(field_get:flyteidl.plugins.CoPilot.output_path) - return output_path_.GetNoArena(); -} -inline void CoPilot::set_output_path(const ::std::string& value) { - - output_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); - // @@protoc_insertion_point(field_set:flyteidl.plugins.CoPilot.output_path) -} -#if LANG_CXX11 -inline void CoPilot::set_output_path(::std::string&& value) { - - output_path_.SetNoArena( - &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); - // @@protoc_insertion_point(field_set_rvalue:flyteidl.plugins.CoPilot.output_path) -} -#endif -inline void CoPilot::set_output_path(const char* value) { - GOOGLE_DCHECK(value != nullptr); - - output_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); - // @@protoc_insertion_point(field_set_char:flyteidl.plugins.CoPilot.output_path) -} -inline void CoPilot::set_output_path(const char* value, size_t size) { - - output_path_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), - ::std::string(reinterpret_cast(value), size)); - // @@protoc_insertion_point(field_set_pointer:flyteidl.plugins.CoPilot.output_path) -} -inline ::std::string* CoPilot::mutable_output_path() { - - // @@protoc_insertion_point(field_mutable:flyteidl.plugins.CoPilot.output_path) - return output_path_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline ::std::string* CoPilot::release_output_path() { - // @@protoc_insertion_point(field_release:flyteidl.plugins.CoPilot.output_path) - - return output_path_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); -} -inline void CoPilot::set_allocated_output_path(::std::string* output_path) { - if (output_path != nullptr) { - - } else { - - } - output_path_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), output_path); - // @@protoc_insertion_point(field_set_allocated:flyteidl.plugins.CoPilot.output_path) -} - -// .flyteidl.plugins.CoPilot.MetadataFormat format = 3; -inline void CoPilot::clear_format() { - format_ = 0; -} -inline ::flyteidl::plugins::CoPilot_MetadataFormat CoPilot::format() const { - // @@protoc_insertion_point(field_get:flyteidl.plugins.CoPilot.format) - return static_cast< ::flyteidl::plugins::CoPilot_MetadataFormat >(format_); -} -inline void CoPilot::set_format(::flyteidl::plugins::CoPilot_MetadataFormat value) { - - format_ = value; - // @@protoc_insertion_point(field_set:flyteidl.plugins.CoPilot.format) -} - -#ifdef __GNUC__ - #pragma GCC diagnostic pop -#endif // __GNUC__ - -// @@protoc_insertion_point(namespace_scope) - -} // namespace plugins -} // namespace flyteidl - -namespace google { -namespace protobuf { - -template <> struct is_proto_enum< ::flyteidl::plugins::CoPilot_MetadataFormat> : ::std::true_type {}; -template <> -inline const EnumDescriptor* GetEnumDescriptor< ::flyteidl::plugins::CoPilot_MetadataFormat>() { - return ::flyteidl::plugins::CoPilot_MetadataFormat_descriptor(); -} - -} // namespace protobuf -} // namespace google - -// @@protoc_insertion_point(global_scope) - -#include -#endif // PROTOBUF_INCLUDED_flyteidl_2fplugins_2fraw_5fcontainer_2eproto diff --git a/gen/pb-go/flyteidl/core/tasks.pb.go b/gen/pb-go/flyteidl/core/tasks.pb.go index 5b06913ef..fb00e93dd 100644 --- a/gen/pb-go/flyteidl/core/tasks.pb.go +++ b/gen/pb-go/flyteidl/core/tasks.pb.go @@ -82,6 +82,40 @@ func (RuntimeMetadata_RuntimeType) EnumDescriptor() ([]byte, []int) { return fileDescriptor_bd8423ba58d6ed80, []int{1, 0} } +// MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. +// If the user has access to the protocol buffer definitions, it is recommended to use the PROTO format. +// JSON and YAML do not need any protobuf definitions to read it +// All remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem) +type DataLoadingConfig_MetadataFormat int32 + +const ( + // JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html + DataLoadingConfig_JSON DataLoadingConfig_MetadataFormat = 0 + DataLoadingConfig_YAML DataLoadingConfig_MetadataFormat = 1 + // Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core + DataLoadingConfig_PROTO DataLoadingConfig_MetadataFormat = 2 +) + +var DataLoadingConfig_MetadataFormat_name = map[int32]string{ + 0: "JSON", + 1: "YAML", + 2: "PROTO", +} + +var DataLoadingConfig_MetadataFormat_value = map[string]int32{ + "JSON": 0, + "YAML": 1, + "PROTO": 2, +} + +func (x DataLoadingConfig_MetadataFormat) String() string { + return proto.EnumName(DataLoadingConfig_MetadataFormat_name, int32(x)) +} + +func (DataLoadingConfig_MetadataFormat) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_bd8423ba58d6ed80, []int{6, 0} +} + // A customizable interface to convey resources requested for a container. This can be interpretted differently for different // container engines. type Resources struct { @@ -547,10 +581,19 @@ type Container struct { Config []*KeyValuePair `protobuf:"bytes,6,rep,name=config,proto3" json:"config,omitempty"` // Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but // not supported on AWS Batch) - Ports []*ContainerPort `protobuf:"bytes,7,rep,name=ports,proto3" json:"ports,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // Only K8s + Ports []*ContainerPort `protobuf:"bytes,7,rep,name=ports,proto3" json:"ports,omitempty"` + // BETA: Optional configuration for DataLoading. If not specified, then default values are used. + // This makes it possible to to run a completely portable container, that uses inputs and outputs + // only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment. + // If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories + // are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation + // to understand the default paths. + // Only K8s + DataConfig *DataLoadingConfig `protobuf:"bytes,9,opt,name=data_config,json=dataConfig,proto3" json:"data_config,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Container) Reset() { *m = Container{} } @@ -627,9 +670,94 @@ func (m *Container) GetPorts() []*ContainerPort { return nil } +func (m *Container) GetDataConfig() *DataLoadingConfig { + if m != nil { + return m.DataConfig + } + return nil +} + +// This configuration allows executing raw containers in Flyte using the Flyte CoPilot system. +// Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path +// Any outputs generated by the user container - within output_path are automatically uploaded. +type DataLoadingConfig struct { + // File system path (start at root). This folder will contain all the inputs exploded to a separate file. + // Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like + // /var/flyte/inputs/inputs. .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations + // /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format + // /var/flyte/inputs/y -> Y is a file in Binary format + // /var/flyte/inputs/z/... -> Note Z itself is a directory + // More information about the protocol - refer to docs #TODO reference docs here + InputPath string `protobuf:"bytes,1,opt,name=input_path,json=inputPath,proto3" json:"input_path,omitempty"` + // File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file + OutputPath string `protobuf:"bytes,2,opt,name=output_path,json=outputPath,proto3" json:"output_path,omitempty"` + // In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values. + // This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding + Format DataLoadingConfig_MetadataFormat `protobuf:"varint,3,opt,name=format,proto3,enum=flyteidl.core.DataLoadingConfig_MetadataFormat" json:"format,omitempty"` + // Flag enables DataLoading Config. If this is not set, data loading will not be used! + Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DataLoadingConfig) Reset() { *m = DataLoadingConfig{} } +func (m *DataLoadingConfig) String() string { return proto.CompactTextString(m) } +func (*DataLoadingConfig) ProtoMessage() {} +func (*DataLoadingConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_bd8423ba58d6ed80, []int{6} +} + +func (m *DataLoadingConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DataLoadingConfig.Unmarshal(m, b) +} +func (m *DataLoadingConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DataLoadingConfig.Marshal(b, m, deterministic) +} +func (m *DataLoadingConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_DataLoadingConfig.Merge(m, src) +} +func (m *DataLoadingConfig) XXX_Size() int { + return xxx_messageInfo_DataLoadingConfig.Size(m) +} +func (m *DataLoadingConfig) XXX_DiscardUnknown() { + xxx_messageInfo_DataLoadingConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_DataLoadingConfig proto.InternalMessageInfo + +func (m *DataLoadingConfig) GetInputPath() string { + if m != nil { + return m.InputPath + } + return "" +} + +func (m *DataLoadingConfig) GetOutputPath() string { + if m != nil { + return m.OutputPath + } + return "" +} + +func (m *DataLoadingConfig) GetFormat() DataLoadingConfig_MetadataFormat { + if m != nil { + return m.Format + } + return DataLoadingConfig_JSON +} + +func (m *DataLoadingConfig) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + 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.DataLoadingConfig_MetadataFormat", DataLoadingConfig_MetadataFormat_name, DataLoadingConfig_MetadataFormat_value) proto.RegisterType((*Resources)(nil), "flyteidl.core.Resources") proto.RegisterType((*Resources_ResourceEntry)(nil), "flyteidl.core.Resources.ResourceEntry") proto.RegisterType((*RuntimeMetadata)(nil), "flyteidl.core.RuntimeMetadata") @@ -637,64 +765,73 @@ func init() { proto.RegisterType((*TaskTemplate)(nil), "flyteidl.core.TaskTemplate") proto.RegisterType((*ContainerPort)(nil), "flyteidl.core.ContainerPort") proto.RegisterType((*Container)(nil), "flyteidl.core.Container") + proto.RegisterType((*DataLoadingConfig)(nil), "flyteidl.core.DataLoadingConfig") } func init() { proto.RegisterFile("flyteidl/core/tasks.proto", fileDescriptor_bd8423ba58d6ed80) } var fileDescriptor_bd8423ba58d6ed80 = []byte{ - // 854 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0xed, 0x6e, 0xdb, 0x36, - 0x14, 0x8d, 0xed, 0x44, 0xb6, 0xae, 0xe3, 0xce, 0xe3, 0xb6, 0x4e, 0xcd, 0xd2, 0x20, 0x30, 0xd0, - 0x2e, 0xdb, 0x50, 0x6b, 0x70, 0x80, 0x2c, 0xc3, 0x80, 0x02, 0x4b, 0xeb, 0x36, 0x45, 0x96, 0x0f, - 0x30, 0x4e, 0x87, 0xee, 0x8f, 0x47, 0x4b, 0xd7, 0x1a, 0x51, 0x49, 0xd4, 0x48, 0xca, 0x80, 0x9e, - 0x66, 0x2f, 0xb0, 0x07, 0xd8, 0x9e, 0x6e, 0x83, 0xa8, 0x8f, 0x44, 0x2e, 0xba, 0x62, 0xbf, 0xc4, - 0xcb, 0x73, 0x0e, 0x75, 0x79, 0xee, 0xd5, 0x15, 0x3c, 0x58, 0x86, 0x99, 0x46, 0xee, 0x87, 0xae, - 0x27, 0x24, 0xba, 0x9a, 0xa9, 0xb7, 0x6a, 0x9c, 0x48, 0xa1, 0x05, 0x19, 0x54, 0xd0, 0x38, 0x87, - 0x76, 0xf6, 0x9a, 0x4c, 0xee, 0x63, 0xac, 0xf9, 0x92, 0xa3, 0x2c, 0xe8, 0x3b, 0x0f, 0xd7, 0xf0, - 0x58, 0xa3, 0x5c, 0x32, 0x0f, 0x4b, 0x78, 0xb7, 0x09, 0x87, 0x5c, 0xa3, 0x64, 0x61, 0xf9, 0xae, - 0x9d, 0xbd, 0x40, 0x88, 0x20, 0x44, 0xd7, 0x44, 0x8b, 0x74, 0xe9, 0xfa, 0xa9, 0x64, 0x9a, 0x8b, - 0xb8, 0x52, 0xaf, 0xe3, 0x4a, 0xcb, 0xd4, 0xd3, 0x05, 0x3a, 0xfa, 0xbb, 0x0d, 0x36, 0x45, 0x25, - 0x52, 0xe9, 0xa1, 0x22, 0x27, 0xd0, 0x93, 0xf8, 0x7b, 0x8a, 0x4a, 0x2b, 0xa7, 0xb5, 0xdf, 0x39, - 0xe8, 0x4f, 0x1e, 0x8f, 0x1b, 0x57, 0x19, 0xd7, 0xdc, 0x7a, 0x35, 0x8d, 0xb5, 0xcc, 0x68, 0xad, - 0x23, 0x4f, 0xc1, 0x0a, 0x79, 0xc4, 0xb5, 0x72, 0xda, 0xff, 0xeb, 0x84, 0x52, 0xb5, 0xf3, 0x2b, - 0x0c, 0x1a, 0x00, 0xf9, 0x1e, 0x36, 0x63, 0x16, 0xa1, 0xd3, 0xda, 0x6f, 0x1d, 0xdc, 0x9b, 0x3c, - 0xfa, 0xe0, 0x71, 0x17, 0x2c, 0x42, 0x6a, 0x24, 0xe4, 0x53, 0xd8, 0x5a, 0xb1, 0x30, 0x45, 0xa7, - 0xbd, 0xdf, 0x3a, 0xb0, 0x69, 0x11, 0x8c, 0x5e, 0xc0, 0xf6, 0x5d, 0x2e, 0xe9, 0x43, 0xf7, 0xe6, - 0xe2, 0xec, 0xe2, 0xf2, 0xe7, 0x8b, 0xe1, 0x06, 0xe9, 0x42, 0xe7, 0xd9, 0xd5, 0xcd, 0xb0, 0x95, - 0x2f, 0x5e, 0x5e, 0xdd, 0x0c, 0xdb, 0x04, 0xc0, 0x3a, 0x9f, 0x9e, 0x5f, 0xd2, 0x37, 0xc3, 0x4e, - 0x4e, 0xbd, 0x9e, 0x5d, 0xd2, 0x1f, 0x5f, 0x4e, 0x87, 0x9b, 0xa3, 0x3f, 0x5b, 0xf0, 0x11, 0x4d, - 0x63, 0xcd, 0x23, 0x3c, 0x47, 0xcd, 0x7c, 0xa6, 0x19, 0x79, 0x0a, 0x9b, 0x3a, 0x4b, 0xaa, 0x64, - 0xbf, 0x5e, 0x4f, 0xb6, 0xc9, 0xae, 0xe2, 0x59, 0x96, 0x20, 0x35, 0x3a, 0xe2, 0x40, 0x77, 0x85, - 0x52, 0x71, 0x11, 0x97, 0x39, 0x57, 0x21, 0xb9, 0x0f, 0xd6, 0x32, 0x64, 0x2b, 0x21, 0x9d, 0x8e, - 0x01, 0xca, 0x68, 0xf4, 0x25, 0xf4, 0xef, 0x1c, 0x43, 0x6c, 0xd8, 0xba, 0x9c, 0x9d, 0x4e, 0xe9, - 0x70, 0x83, 0x0c, 0xc0, 0x7e, 0xf1, 0xd3, 0x9b, 0xd9, 0x74, 0x7e, 0xfd, 0xfc, 0x6c, 0xd8, 0x1a, - 0xfd, 0xd3, 0x86, 0xed, 0x19, 0x53, 0x6f, 0xeb, 0x5c, 0x47, 0xb0, 0xed, 0x73, 0xe5, 0x89, 0x15, - 0x4a, 0xb6, 0x08, 0x8b, 0x9c, 0x7b, 0xb4, 0xb1, 0x47, 0x8e, 0xa1, 0x2b, 0x8b, 0xd3, 0x4d, 0x3e, - 0xfd, 0xc9, 0xde, 0x7f, 0x5f, 0x89, 0x56, 0x74, 0x72, 0x08, 0xdd, 0xfc, 0x29, 0x52, 0xed, 0x6c, - 0x1a, 0xe5, 0x83, 0x71, 0xd1, 0x89, 0xe3, 0xaa, 0x13, 0xc7, 0xcf, 0xcb, 0x4e, 0xa5, 0x15, 0x93, - 0x1c, 0x41, 0x57, 0xa2, 0x96, 0x1c, 0x95, 0xb3, 0x65, 0x44, 0xbb, 0xef, 0x94, 0x5b, 0xcb, 0xec, - 0x5a, 0x4b, 0xa6, 0x31, 0xc8, 0x68, 0x45, 0x26, 0xdf, 0xc0, 0xc7, 0x55, 0xda, 0xd9, 0xbc, 0x32, - 0xd0, 0x32, 0x3e, 0x0d, 0x6b, 0xe0, 0x75, 0xe9, 0xe4, 0x31, 0x38, 0x3e, 0x26, 0x12, 0x3d, 0xa6, - 0xd1, 0x9f, 0xa3, 0x94, 0x42, 0xce, 0x23, 0x54, 0x8a, 0x05, 0xe8, 0x74, 0x8d, 0xe6, 0xfe, 0x2d, - 0x3e, 0xcd, 0xe1, 0xf3, 0x02, 0x25, 0x8f, 0x61, 0x60, 0x3e, 0x4e, 0x99, 0x26, 0x9a, 0xe7, 0x96, - 0xf5, 0x72, 0xcb, 0x4e, 0x37, 0x68, 0x73, 0xfb, 0xe4, 0x33, 0xf8, 0xa4, 0xb1, 0x31, 0x2f, 0x1a, - 0xef, 0xaf, 0xb2, 0x02, 0x33, 0x8c, 0x92, 0x90, 0x69, 0x24, 0x5f, 0x41, 0x9b, 0xfb, 0xc6, 0xf7, - 0xdc, 0x9e, 0xe6, 0x4d, 0x5f, 0xd5, 0x53, 0x82, 0xb6, 0xb9, 0x4f, 0x48, 0xd9, 0x58, 0x45, 0x57, - 0x14, 0xcd, 0xf2, 0x1d, 0xf4, 0xa2, 0xd2, 0x77, 0xd3, 0x14, 0xfd, 0xc9, 0x17, 0x6b, 0x87, 0xdc, - 0xad, 0x37, 0xad, 0xc9, 0xe4, 0x07, 0xb0, 0xeb, 0x21, 0x53, 0x56, 0xe7, 0xe1, 0xba, 0x32, 0x4b, - 0xd0, 0x7f, 0x55, 0x91, 0xe8, 0x2d, 0x9f, 0xb8, 0x60, 0x79, 0xa9, 0xd2, 0x22, 0x2a, 0x4b, 0xf4, - 0xf9, 0x3b, 0x75, 0xbd, 0x36, 0x13, 0x86, 0x96, 0x34, 0x72, 0x0c, 0xb6, 0x27, 0x62, 0xcd, 0x78, - 0x8c, 0xd2, 0x14, 0xa5, 0x3f, 0x71, 0xd6, 0xde, 0xf6, 0xac, 0xc2, 0x4f, 0x37, 0xe8, 0x2d, 0xf9, - 0xa4, 0x07, 0x96, 0x66, 0x32, 0x40, 0x3d, 0x3a, 0x82, 0x41, 0xcd, 0xb9, 0x12, 0x52, 0x93, 0x47, - 0x70, 0xaf, 0xe6, 0xcd, 0x13, 0x21, 0xb5, 0xb1, 0x71, 0x40, 0x07, 0xde, 0x5d, 0xda, 0xe8, 0x8f, - 0x36, 0xd8, 0xb5, 0x30, 0x9f, 0x07, 0x3c, 0xca, 0xcb, 0xdc, 0x2a, 0xe6, 0x81, 0x09, 0xf2, 0x6f, - 0xce, 0x13, 0x51, 0xc4, 0x62, 0xdf, 0x8c, 0x2c, 0x9b, 0x56, 0x61, 0x6e, 0x3a, 0x93, 0x81, 0x72, - 0x3a, 0x66, 0xdb, 0xac, 0xc9, 0x11, 0xd8, 0xb2, 0x9a, 0x39, 0xa5, 0x77, 0xce, 0xfb, 0x66, 0x12, - 0xbd, 0xa5, 0x92, 0x27, 0xd0, 0xc1, 0x78, 0xe5, 0x6c, 0x99, 0xa1, 0xb8, 0x5e, 0xa7, 0x33, 0xcc, - 0x5e, 0xe7, 0x2d, 0x72, 0xc5, 0xb8, 0xa4, 0x39, 0x8f, 0x1c, 0x82, 0xe5, 0x89, 0x78, 0xc9, 0x03, - 0xc7, 0xfa, 0xb0, 0xa2, 0xa4, 0x92, 0x09, 0x6c, 0xe5, 0x56, 0x28, 0xa7, 0x6b, 0x34, 0xbb, 0xef, - 0x73, 0x39, 0xb7, 0x86, 0x16, 0xd4, 0x93, 0xc9, 0x2f, 0xdf, 0x06, 0x5c, 0xff, 0x96, 0x2e, 0xc6, - 0x9e, 0x88, 0xdc, 0x30, 0x5b, 0x6a, 0xb7, 0xfe, 0xdf, 0x04, 0x18, 0xbb, 0xc9, 0xe2, 0x49, 0x20, - 0xdc, 0xc6, 0x2f, 0x68, 0x61, 0x99, 0x52, 0x1f, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xbb, 0x72, - 0x9d, 0x0f, 0x03, 0x07, 0x00, 0x00, + // 985 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0xeb, 0x6e, 0xe3, 0x44, + 0x14, 0x6e, 0x2e, 0x4d, 0xe2, 0x93, 0xa6, 0x64, 0x07, 0x58, 0xbc, 0xa5, 0x2d, 0x55, 0xa4, 0x5d, + 0x0a, 0x68, 0x63, 0x94, 0x4a, 0xa5, 0x08, 0x69, 0xa5, 0x5e, 0xd2, 0x76, 0xe9, 0x25, 0xd1, 0x34, + 0x5d, 0x54, 0xfe, 0x84, 0xa9, 0x3d, 0x71, 0x47, 0x6b, 0x7b, 0xcc, 0x78, 0x1c, 0xc9, 0xef, 0xc4, + 0x03, 0xc0, 0xeb, 0xf0, 0x87, 0xc7, 0x00, 0xcd, 0xf8, 0xd2, 0x3a, 0xd5, 0x52, 0xed, 0x2f, 0xcf, + 0x99, 0xef, 0xfb, 0xc6, 0x67, 0xbe, 0x73, 0x7c, 0x0c, 0x2f, 0x66, 0x5e, 0x22, 0x29, 0x73, 0x3c, + 0xcb, 0xe6, 0x82, 0x5a, 0x92, 0x44, 0xef, 0xa3, 0x7e, 0x28, 0xb8, 0xe4, 0xa8, 0x93, 0x43, 0x7d, + 0x05, 0xad, 0x6d, 0x96, 0x99, 0xcc, 0xa1, 0x81, 0x64, 0x33, 0x46, 0x45, 0x4a, 0x5f, 0xdb, 0x58, + 0xc0, 0x03, 0x49, 0xc5, 0x8c, 0xd8, 0x34, 0x83, 0xd7, 0xcb, 0xb0, 0xc7, 0x24, 0x15, 0xc4, 0xcb, + 0xde, 0xb5, 0xb6, 0xe9, 0x72, 0xee, 0x7a, 0xd4, 0xd2, 0xd1, 0x6d, 0x3c, 0xb3, 0x9c, 0x58, 0x10, + 0xc9, 0x78, 0x90, 0xab, 0x17, 0xf1, 0x48, 0x8a, 0xd8, 0x96, 0x29, 0xda, 0xfb, 0xab, 0x0a, 0x06, + 0xa6, 0x11, 0x8f, 0x85, 0x4d, 0x23, 0x74, 0x00, 0x2d, 0x41, 0x7f, 0x8f, 0x69, 0x24, 0x23, 0xb3, + 0xb2, 0x55, 0xdb, 0x6e, 0x0f, 0x5e, 0xf5, 0x4b, 0x57, 0xe9, 0x17, 0xdc, 0x62, 0x35, 0x0c, 0xa4, + 0x48, 0x70, 0xa1, 0x43, 0x6f, 0xa0, 0xe1, 0x31, 0x9f, 0xc9, 0xc8, 0xac, 0x7e, 0xd4, 0x09, 0x99, + 0x6a, 0xed, 0x37, 0xe8, 0x94, 0x00, 0xf4, 0x23, 0xd4, 0x03, 0xe2, 0x53, 0xb3, 0xb2, 0x55, 0xd9, + 0x5e, 0x1d, 0xbc, 0x7c, 0xf2, 0xb8, 0x4b, 0xe2, 0x53, 0xac, 0x25, 0xe8, 0x33, 0x58, 0x9e, 0x13, + 0x2f, 0xa6, 0x66, 0x75, 0xab, 0xb2, 0x6d, 0xe0, 0x34, 0xe8, 0x1d, 0xc3, 0xca, 0x43, 0x2e, 0x6a, + 0x43, 0xf3, 0xfa, 0xf2, 0xec, 0x72, 0xf4, 0xcb, 0x65, 0x77, 0x09, 0x35, 0xa1, 0x76, 0x38, 0xbe, + 0xee, 0x56, 0xd4, 0xe2, 0x64, 0x7c, 0xdd, 0xad, 0x22, 0x80, 0xc6, 0xc5, 0xf0, 0x62, 0x84, 0x6f, + 0xba, 0x35, 0x45, 0xbd, 0x9a, 0x8c, 0xf0, 0xfe, 0xc9, 0xb0, 0x5b, 0xef, 0xfd, 0x51, 0x81, 0x4f, + 0x70, 0x1c, 0x48, 0xe6, 0xd3, 0x0b, 0x2a, 0x89, 0x43, 0x24, 0x41, 0x6f, 0xa0, 0x2e, 0x93, 0x30, + 0x4f, 0xf6, 0xdb, 0xc5, 0x64, 0xcb, 0xec, 0x3c, 0x9e, 0x24, 0x21, 0xc5, 0x5a, 0x87, 0x4c, 0x68, + 0xce, 0xa9, 0x88, 0x18, 0x0f, 0xb2, 0x9c, 0xf3, 0x10, 0x3d, 0x87, 0xc6, 0xcc, 0x23, 0x73, 0x2e, + 0xcc, 0x9a, 0x06, 0xb2, 0xa8, 0xf7, 0x35, 0xb4, 0x1f, 0x1c, 0x83, 0x0c, 0x58, 0x1e, 0x4d, 0x4e, + 0x87, 0xb8, 0xbb, 0x84, 0x3a, 0x60, 0x1c, 0x9f, 0xdf, 0x4c, 0x86, 0xd3, 0xab, 0xa3, 0xb3, 0x6e, + 0xa5, 0xf7, 0x6f, 0x15, 0x56, 0x26, 0x24, 0x7a, 0x5f, 0xe4, 0xda, 0x83, 0x15, 0x87, 0x45, 0x36, + 0x9f, 0x53, 0x41, 0x6e, 0xbd, 0x34, 0xe7, 0x16, 0x2e, 0xed, 0xa1, 0x3d, 0x68, 0x8a, 0xf4, 0x74, + 0x9d, 0x4f, 0x7b, 0xb0, 0xf9, 0xff, 0x57, 0xc2, 0x39, 0x1d, 0xed, 0x40, 0x53, 0x3d, 0x79, 0x2c, + 0xcd, 0xba, 0x56, 0xbe, 0xe8, 0xa7, 0x9d, 0xd8, 0xcf, 0x3b, 0xb1, 0x7f, 0x94, 0x75, 0x2a, 0xce, + 0x99, 0x68, 0x17, 0x9a, 0x82, 0x4a, 0xc1, 0x68, 0x64, 0x2e, 0x6b, 0xd1, 0xfa, 0xa3, 0x72, 0x4b, + 0x91, 0x5c, 0x49, 0x41, 0x24, 0x75, 0x13, 0x9c, 0x93, 0xd1, 0x77, 0xf0, 0x2c, 0x4f, 0x3b, 0x99, + 0xe6, 0x06, 0x36, 0xb4, 0x4f, 0xdd, 0x02, 0x78, 0x97, 0x39, 0xb9, 0x07, 0xa6, 0x43, 0x43, 0x41, + 0x6d, 0x22, 0xa9, 0x33, 0xa5, 0x42, 0x70, 0x31, 0xf5, 0x69, 0x14, 0x11, 0x97, 0x9a, 0x4d, 0xad, + 0x79, 0x7e, 0x8f, 0x0f, 0x15, 0x7c, 0x91, 0xa2, 0xe8, 0x15, 0x74, 0xf4, 0xc7, 0x29, 0xe2, 0x50, + 0x32, 0x65, 0x59, 0x4b, 0x59, 0x76, 0xba, 0x84, 0xcb, 0xdb, 0x07, 0x9f, 0xc3, 0xa7, 0xa5, 0x8d, + 0x69, 0xda, 0x78, 0x7f, 0x66, 0x15, 0x98, 0x50, 0x3f, 0xf4, 0x88, 0xa4, 0xe8, 0x1b, 0xa8, 0x32, + 0x47, 0xfb, 0xae, 0xec, 0x29, 0xdf, 0xf4, 0x6d, 0x31, 0x25, 0x70, 0x95, 0x39, 0x08, 0x65, 0x8d, + 0x95, 0x76, 0x45, 0xda, 0x2c, 0x3f, 0x40, 0xcb, 0xcf, 0x7c, 0xd7, 0x4d, 0xd1, 0x1e, 0x7c, 0xb9, + 0x70, 0xc8, 0xc3, 0x7a, 0xe3, 0x82, 0x8c, 0x7e, 0x02, 0xa3, 0x18, 0x32, 0x59, 0x75, 0x36, 0x16, + 0x95, 0x49, 0x48, 0x9d, 0xb7, 0x39, 0x09, 0xdf, 0xf3, 0x91, 0x05, 0x0d, 0x3b, 0x8e, 0x24, 0xf7, + 0xb3, 0x12, 0x7d, 0xf1, 0xa8, 0xae, 0x57, 0x7a, 0xc2, 0xe0, 0x8c, 0x86, 0xf6, 0xc0, 0xb0, 0x79, + 0x20, 0x09, 0x0b, 0xa8, 0xd0, 0x45, 0x69, 0x0f, 0xcc, 0x85, 0xb7, 0x1d, 0xe6, 0xf8, 0xe9, 0x12, + 0xbe, 0x27, 0x1f, 0xb4, 0xa0, 0x21, 0x89, 0x70, 0xa9, 0xec, 0xed, 0x42, 0xa7, 0xe0, 0x8c, 0xb9, + 0x90, 0xe8, 0x25, 0xac, 0x16, 0xbc, 0x69, 0xc8, 0x85, 0xd4, 0x36, 0x76, 0x70, 0xc7, 0x7e, 0x48, + 0xeb, 0xfd, 0x5d, 0x05, 0xa3, 0x10, 0xaa, 0x79, 0xc0, 0x7c, 0x55, 0xe6, 0x4a, 0x3a, 0x0f, 0x74, + 0xa0, 0xbe, 0x39, 0x9b, 0xfb, 0x3e, 0x09, 0x1c, 0x3d, 0xb2, 0x0c, 0x9c, 0x87, 0xca, 0x74, 0x22, + 0xdc, 0xc8, 0xac, 0xe9, 0x6d, 0xbd, 0x46, 0xbb, 0x60, 0x88, 0x7c, 0xe6, 0x64, 0xde, 0x99, 0x1f, + 0x9a, 0x49, 0xf8, 0x9e, 0x8a, 0x5e, 0x43, 0x8d, 0x06, 0x73, 0x73, 0x59, 0x0f, 0xc5, 0xc5, 0x3a, + 0x9d, 0xd1, 0xe4, 0x9d, 0x6a, 0x91, 0x31, 0x61, 0x02, 0x2b, 0x1e, 0xda, 0x81, 0x86, 0xcd, 0x83, + 0x19, 0x73, 0xcd, 0xc6, 0xd3, 0x8a, 0x8c, 0x8a, 0x06, 0xb0, 0xac, 0xac, 0x88, 0xcc, 0xa6, 0xd6, + 0xac, 0x7f, 0xc8, 0x65, 0x65, 0x0d, 0x4e, 0xa9, 0x68, 0x1f, 0xda, 0xaa, 0x27, 0xa6, 0xd9, 0xdb, + 0x0c, 0x7d, 0xa3, 0xad, 0x05, 0xe5, 0x11, 0x91, 0xe4, 0x9c, 0x13, 0x87, 0x05, 0xee, 0xa1, 0xe6, + 0x61, 0x50, 0xa2, 0x74, 0xdd, 0xfb, 0xa7, 0x02, 0xcf, 0x1e, 0x31, 0xd0, 0x06, 0x00, 0x0b, 0xc2, + 0x58, 0x4e, 0x43, 0x22, 0xef, 0x32, 0xc7, 0x0d, 0xbd, 0x33, 0x26, 0xf2, 0x0e, 0x7d, 0x05, 0x6d, + 0x1e, 0xcb, 0x02, 0x4f, 0xfb, 0x1a, 0xd2, 0x2d, 0x4d, 0x38, 0x81, 0xc6, 0x8c, 0x0b, 0x9f, 0x48, + 0xdd, 0xdb, 0xab, 0x03, 0xeb, 0xa9, 0x9c, 0xfa, 0x79, 0xa7, 0x1f, 0x6b, 0x19, 0xce, 0xe4, 0xaa, + 0xbe, 0x34, 0x50, 0xd3, 0xcc, 0xd1, 0xf5, 0x6a, 0xe1, 0x3c, 0xec, 0x59, 0xb0, 0x5a, 0xd6, 0xa0, + 0x16, 0xd4, 0x7f, 0xbe, 0x1a, 0xa9, 0x1f, 0x41, 0x0b, 0xea, 0x37, 0xfb, 0x17, 0xe7, 0xdd, 0x8a, + 0x1a, 0xa9, 0x63, 0x3c, 0x9a, 0x8c, 0xba, 0xd5, 0x83, 0xc1, 0xaf, 0xdf, 0xbb, 0x4c, 0xde, 0xc5, + 0xb7, 0x7d, 0x9b, 0xfb, 0x96, 0x97, 0xcc, 0xa4, 0x55, 0xfc, 0x9c, 0x5d, 0x1a, 0x58, 0xe1, 0xed, + 0x6b, 0x97, 0x5b, 0xa5, 0xff, 0xf5, 0x6d, 0x43, 0x7f, 0x17, 0x3b, 0xff, 0x05, 0x00, 0x00, 0xff, + 0xff, 0x0d, 0x7e, 0x2f, 0x5b, 0x30, 0x08, 0x00, 0x00, } diff --git a/gen/pb-go/flyteidl/core/tasks.pb.validate.go b/gen/pb-go/flyteidl/core/tasks.pb.validate.go index e398810d1..3ed12e207 100644 --- a/gen/pb-go/flyteidl/core/tasks.pb.validate.go +++ b/gen/pb-go/flyteidl/core/tasks.pb.validate.go @@ -563,6 +563,16 @@ func (m *Container) Validate() error { } + if v, ok := interface{}(m.GetDataConfig()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContainerValidationError{ + field: "DataConfig", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } @@ -620,6 +630,81 @@ var _ interface { ErrorName() string } = ContainerValidationError{} +// Validate checks the field values on DataLoadingConfig with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *DataLoadingConfig) Validate() error { + if m == nil { + return nil + } + + // no validation rules for InputPath + + // no validation rules for OutputPath + + // no validation rules for Format + + // no validation rules for Enabled + + return nil +} + +// DataLoadingConfigValidationError is the validation error returned by +// DataLoadingConfig.Validate if the designated constraints aren't met. +type DataLoadingConfigValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DataLoadingConfigValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DataLoadingConfigValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DataLoadingConfigValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DataLoadingConfigValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DataLoadingConfigValidationError) ErrorName() string { + return "DataLoadingConfigValidationError" +} + +// Error satisfies the builtin error interface +func (e DataLoadingConfigValidationError) 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 %sDataLoadingConfig.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DataLoadingConfigValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DataLoadingConfigValidationError{} + // 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/gen/pb-go/flyteidl/plugins/raw_container.pb.go b/gen/pb-go/flyteidl/plugins/raw_container.pb.go deleted file mode 100644 index 14c1bcf67..000000000 --- a/gen/pb-go/flyteidl/plugins/raw_container.pb.go +++ /dev/null @@ -1,153 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: flyteidl/plugins/raw_container.proto - -package plugins - -import ( - fmt "fmt" - proto "github.com/golang/protobuf/proto" - math "math" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package - -// MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. -// If the user has access to the protocol buffer definitions, it is recommended to use the PROTO format. -// JSON and YAML do not need any protobuf definitions to read it -// All remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem) -type CoPilot_MetadataFormat int32 - -const ( - // JSON / YAML are serialized represnetation of a map[string]primitive. primitive -> int, string, bool, double/float, bytes - CoPilot_JSON CoPilot_MetadataFormat = 0 - CoPilot_YAML CoPilot_MetadataFormat = 1 - // Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core - CoPilot_PROTO CoPilot_MetadataFormat = 2 -) - -var CoPilot_MetadataFormat_name = map[int32]string{ - 0: "JSON", - 1: "YAML", - 2: "PROTO", -} - -var CoPilot_MetadataFormat_value = map[string]int32{ - "JSON": 0, - "YAML": 1, - "PROTO": 2, -} - -func (x CoPilot_MetadataFormat) String() string { - return proto.EnumName(CoPilot_MetadataFormat_name, int32(x)) -} - -func (CoPilot_MetadataFormat) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_aa9a2ab24b00eebe, []int{0, 0} -} - -// This configuration allows executing raw containers in Flyte using the Flyte CoPilot system. -// Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path -// Any outputs generated by the user container - within output_path are automatically uploaded. -// We are starting this as a plugin, but after the container within Pod ordering stabilizes, we can move this -// into the default task definition. -type CoPilot struct { - // File system path (start at root). This folder will contain all the inputs exploded to a separate file. - // Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like - // /var/flyte/inputs/inputs. .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations - // /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format - // /var/flyte/inputs/y -> Y is a file in Binary format - // /var/flyte/inputs/z/... -> Note Z itself is a directory - // More information about the protocol - refer to docs #TODO reference docs here - InputPath string `protobuf:"bytes,1,opt,name=input_path,json=inputPath,proto3" json:"input_path,omitempty"` - // File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file - OutputPath string `protobuf:"bytes,2,opt,name=output_path,json=outputPath,proto3" json:"output_path,omitempty"` - // In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values. - // This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding - Format CoPilot_MetadataFormat `protobuf:"varint,3,opt,name=format,proto3,enum=flyteidl.plugins.CoPilot_MetadataFormat" json:"format,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CoPilot) Reset() { *m = CoPilot{} } -func (m *CoPilot) String() string { return proto.CompactTextString(m) } -func (*CoPilot) ProtoMessage() {} -func (*CoPilot) Descriptor() ([]byte, []int) { - return fileDescriptor_aa9a2ab24b00eebe, []int{0} -} - -func (m *CoPilot) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CoPilot.Unmarshal(m, b) -} -func (m *CoPilot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CoPilot.Marshal(b, m, deterministic) -} -func (m *CoPilot) XXX_Merge(src proto.Message) { - xxx_messageInfo_CoPilot.Merge(m, src) -} -func (m *CoPilot) XXX_Size() int { - return xxx_messageInfo_CoPilot.Size(m) -} -func (m *CoPilot) XXX_DiscardUnknown() { - xxx_messageInfo_CoPilot.DiscardUnknown(m) -} - -var xxx_messageInfo_CoPilot proto.InternalMessageInfo - -func (m *CoPilot) GetInputPath() string { - if m != nil { - return m.InputPath - } - return "" -} - -func (m *CoPilot) GetOutputPath() string { - if m != nil { - return m.OutputPath - } - return "" -} - -func (m *CoPilot) GetFormat() CoPilot_MetadataFormat { - if m != nil { - return m.Format - } - return CoPilot_JSON -} - -func init() { - proto.RegisterEnum("flyteidl.plugins.CoPilot_MetadataFormat", CoPilot_MetadataFormat_name, CoPilot_MetadataFormat_value) - proto.RegisterType((*CoPilot)(nil), "flyteidl.plugins.CoPilot") -} - -func init() { - proto.RegisterFile("flyteidl/plugins/raw_container.proto", fileDescriptor_aa9a2ab24b00eebe) -} - -var fileDescriptor_aa9a2ab24b00eebe = []byte{ - // 239 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x90, 0x4d, 0x4b, 0xc3, 0x40, - 0x10, 0x86, 0xdd, 0xaa, 0xd5, 0x8c, 0x50, 0xc2, 0x9e, 0x7a, 0x11, 0x4b, 0xf1, 0x90, 0x8b, 0xbb, - 0x60, 0xf1, 0xee, 0x07, 0x78, 0x10, 0x6b, 0x42, 0xf4, 0xa2, 0x97, 0x32, 0x69, 0xf3, 0xb1, 0xb0, - 0xdd, 0x59, 0xe2, 0x04, 0xe9, 0x7f, 0xf3, 0xc7, 0x89, 0x6b, 0x2c, 0xb4, 0xb7, 0xe1, 0x7d, 0x9f, - 0xe1, 0x85, 0x07, 0x2e, 0x2b, 0xbb, 0xe1, 0xd2, 0xac, 0xac, 0xf6, 0xb6, 0xab, 0x8d, 0xfb, 0xd4, - 0x2d, 0x7e, 0x2d, 0x96, 0xe4, 0x18, 0x8d, 0x2b, 0x5b, 0xe5, 0x5b, 0x62, 0x92, 0xf1, 0x3f, 0xa5, - 0x7a, 0x6a, 0xfa, 0x2d, 0xe0, 0xe4, 0x81, 0x32, 0x63, 0x89, 0xe5, 0x39, 0x80, 0x71, 0xbe, 0xe3, - 0x85, 0x47, 0x6e, 0xc6, 0x62, 0x22, 0x92, 0x28, 0x8f, 0x42, 0x92, 0x21, 0x37, 0xf2, 0x02, 0xce, - 0xa8, 0xe3, 0x6d, 0x3f, 0x08, 0x3d, 0xfc, 0x45, 0x01, 0xb8, 0x85, 0x61, 0x45, 0xed, 0x1a, 0x79, - 0x7c, 0x38, 0x11, 0xc9, 0xe8, 0x3a, 0x51, 0xfb, 0x73, 0xaa, 0x9f, 0x52, 0xf3, 0x92, 0x71, 0x85, - 0x8c, 0x8f, 0x81, 0xcf, 0xfb, 0xbf, 0xa9, 0x86, 0xd1, 0x6e, 0x23, 0x4f, 0xe1, 0xe8, 0xe9, 0x35, - 0x7d, 0x89, 0x0f, 0x7e, 0xaf, 0xf7, 0xbb, 0xf9, 0x73, 0x2c, 0x64, 0x04, 0xc7, 0x59, 0x9e, 0xbe, - 0xa5, 0xf1, 0xe0, 0xfe, 0xe6, 0x63, 0x56, 0x1b, 0x6e, 0xba, 0x42, 0x2d, 0x69, 0xad, 0xed, 0xa6, - 0x62, 0xbd, 0x15, 0x51, 0x97, 0x4e, 0xfb, 0xe2, 0xaa, 0x26, 0xbd, 0xef, 0xa6, 0x18, 0x06, 0x1d, - 0xb3, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x35, 0x39, 0x82, 0xa5, 0x36, 0x01, 0x00, 0x00, -} diff --git a/gen/pb-go/flyteidl/plugins/raw_container.pb.validate.go b/gen/pb-go/flyteidl/plugins/raw_container.pb.validate.go deleted file mode 100644 index b164c64d9..000000000 --- a/gen/pb-go/flyteidl/plugins/raw_container.pb.validate.go +++ /dev/null @@ -1,107 +0,0 @@ -// Code generated by protoc-gen-validate. DO NOT EDIT. -// source: flyteidl/plugins/raw_container.proto - -package plugins - -import ( - "bytes" - "errors" - "fmt" - "net" - "net/mail" - "net/url" - "regexp" - "strings" - "time" - "unicode/utf8" - - "github.com/golang/protobuf/ptypes" -) - -// ensure the imports are used -var ( - _ = bytes.MinRead - _ = errors.New("") - _ = fmt.Print - _ = utf8.UTFMax - _ = (*regexp.Regexp)(nil) - _ = (*strings.Reader)(nil) - _ = net.IPv4len - _ = time.Duration(0) - _ = (*url.URL)(nil) - _ = (*mail.Address)(nil) - _ = ptypes.DynamicAny{} -) - -// define the regex for a UUID once up-front -var _raw_container_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") - -// Validate checks the field values on CoPilot with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *CoPilot) Validate() error { - if m == nil { - return nil - } - - // no validation rules for InputPath - - // no validation rules for OutputPath - - // no validation rules for Format - - return nil -} - -// CoPilotValidationError is the validation error returned by CoPilot.Validate -// if the designated constraints aren't met. -type CoPilotValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e CoPilotValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e CoPilotValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e CoPilotValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e CoPilotValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e CoPilotValidationError) ErrorName() string { return "CoPilotValidationError" } - -// Error satisfies the builtin error interface -func (e CoPilotValidationError) 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 %sCoPilot.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = CoPilotValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = CoPilotValidationError{} diff --git a/gen/pb-go/flyteidl/service/admin.swagger.json b/gen/pb-go/flyteidl/service/admin.swagger.json index 6361d38bd..99f3bad1e 100644 --- a/gen/pb-go/flyteidl/service/admin.swagger.json +++ b/gen/pb-go/flyteidl/service/admin.swagger.json @@ -2691,6 +2691,17 @@ } } }, + "DataLoadingConfigMetadataFormat": { + "type": "string", + "enum": [ + "JSON", + "YAML", + "PROTO" + ], + "default": "JSON", + "description": "- JSON: JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html\n - PROTO: Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core", + "title": "MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. \nIf the user has access to the protocol buffer definitions, it is recommended to use the PROTO format.\nJSON and YAML do not need any protobuf definitions to read it\nAll remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem)" + }, "ExecutionErrorErrorKind": { "type": "string", "enum": [ @@ -4478,7 +4489,11 @@ "items": { "$ref": "#/definitions/coreContainerPort" }, - "title": "Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but\nnot supported on AWS Batch)" + "title": "Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but\nnot supported on AWS Batch)\nOnly K8s" + }, + "data_config": { + "$ref": "#/definitions/coreDataLoadingConfig", + "title": "BETA: Optional configuration for DataLoading. If not specified, then default values are used.\nThis makes it possible to to run a completely portable container, that uses inputs and outputs\nonly from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.\nIf data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories \nare not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation\nto understand the default paths.\nOnly K8s" } } }, @@ -4493,6 +4508,29 @@ }, "description": "Defines port properties for a container." }, + "coreDataLoadingConfig": { + "type": "object", + "properties": { + "input_path": { + "type": "string", + "title": "File system path (start at root). This folder will contain all the inputs exploded to a separate file. \nExample, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is \"/var/flyte/inputs\", then the file system will look like\n/var/flyte/inputs/inputs.\u003cmetadata format dependent -\u003e .pb .json .yaml\u003e -\u003e Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations \n/var/flyte/inputs/x -\u003e X is a file that contains the value of x (integer) in string format\n/var/flyte/inputs/y -\u003e Y is a file in Binary format\n/var/flyte/inputs/z/... -\u003e Note Z itself is a directory\nMore information about the protocol - refer to docs #TODO reference docs here" + }, + "output_path": { + "type": "string", + "title": "File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file" + }, + "format": { + "$ref": "#/definitions/DataLoadingConfigMetadataFormat", + "title": "In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.\nThis format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding" + }, + "enabled": { + "type": "boolean", + "format": "boolean", + "title": "Flag enables DataLoading Config. If this is not set, data loading will not be used!" + } + }, + "description": "This configuration allows executing raw containers in Flyte using the Flyte CoPilot system.\nFlyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path\nAny outputs generated by the user container - within output_path are automatically uploaded." + }, "coreError": { "type": "object", "properties": { diff --git a/gen/pb-go/flyteidl/service/flyteadmin/README.md b/gen/pb-go/flyteidl/service/flyteadmin/README.md index 91e1c94e0..086ebd7e1 100644 --- a/gen/pb-go/flyteidl/service/flyteadmin/README.md +++ b/gen/pb-go/flyteidl/service/flyteadmin/README.md @@ -191,6 +191,7 @@ Class | Method | HTTP request | Description - [CoreConnectionSet](docs/CoreConnectionSet.md) - [CoreContainer](docs/CoreContainer.md) - [CoreContainerPort](docs/CoreContainerPort.md) + - [CoreDataLoadingConfig](docs/CoreDataLoadingConfig.md) - [CoreError](docs/CoreError.md) - [CoreExecutionError](docs/CoreExecutionError.md) - [CoreIdentifier](docs/CoreIdentifier.md) @@ -233,6 +234,7 @@ Class | Method | HTTP request | Description - [CoreWorkflowMetadataDefaults](docs/CoreWorkflowMetadataDefaults.md) - [CoreWorkflowNode](docs/CoreWorkflowNode.md) - [CoreWorkflowTemplate](docs/CoreWorkflowTemplate.md) + - [DataLoadingConfigMetadataFormat](docs/DataLoadingConfigMetadataFormat.md) - [EventNodeExecutionEvent](docs/EventNodeExecutionEvent.md) - [EventParentTaskExecutionMetadata](docs/EventParentTaskExecutionMetadata.md) - [EventTaskExecutionEvent](docs/EventTaskExecutionEvent.md) diff --git a/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml b/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml index c2bce3ada..bb3c25b41 100644 --- a/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml +++ b/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml @@ -2323,6 +2323,23 @@ definitions: ids: - "ids" - "ids" + DataLoadingConfigMetadataFormat: + type: "string" + title: "MetadataFormat decides the encoding format in which the input metadata\ + \ should be made available to the containers. \nIf the user has access to the\ + \ protocol buffer definitions, it is recommended to use the PROTO format.\n\ + JSON and YAML do not need any protobuf definitions to read it\nAll remote references\ + \ in core.LiteralMap are replaced with local filesystem references (the data\ + \ is downloaded to local filesystem)" + description: "- JSON: JSON / YAML for the metadata (which contains inlined primitive\ + \ values). The representation is inline with the standard json specification\ + \ as specified - https://www.json.org/json-en.html\n - PROTO: Proto is a serialized\ + \ binary of `core.LiteralMap` defined in flyteidl/core" + enum: + - "JSON" + - "YAML" + - "PROTO" + default: "JSON" ExecutionErrorErrorKind: type: "string" title: "Error type: System or User" @@ -5241,6 +5258,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -5373,6 +5395,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -5739,6 +5766,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -5864,6 +5896,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -7707,6 +7744,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -7823,6 +7865,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -10520,6 +10567,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -10636,6 +10688,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -13289,6 +13346,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -13405,6 +13467,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -15999,6 +16066,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -16115,6 +16187,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -17454,6 +17531,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -20077,6 +20159,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -20193,6 +20280,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -21192,9 +21284,21 @@ definitions: ports: type: "array" title: "Ports to open in the container. This feature is not supported by all\ - \ execution engines. (e.g. supported on K8s but\nnot supported on AWS Batch)" + \ execution engines. (e.g. supported on K8s but\nnot supported on AWS Batch)\n\ + Only K8s" items: $ref: "#/definitions/coreContainerPort" + data_config: + title: "BETA: Optional configuration for DataLoading. If not specified, then\ + \ default values are used.\nThis makes it possible to to run a completely\ + \ portable container, that uses inputs and outputs\nonly from the local\ + \ file-system and without having any reference to flyteidl. This is supported\ + \ only on K8s at the moment.\nIf data loading is enabled, then data will\ + \ be mounted in accompanying directories specified in the DataLoadingConfig.\ + \ If the directories \nare not specified, inputs will be mounted onto and\ + \ outputs will be uploaded from a pre-determined file-system path. Refer\ + \ to the documentation\nto understand the default paths.\nOnly K8s" + $ref: "#/definitions/coreDataLoadingConfig" example: args: - "args" @@ -21211,6 +21315,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" @@ -21238,6 +21347,47 @@ definitions: description: "Defines port properties for a container." example: container_port: 6 + coreDataLoadingConfig: + type: "object" + properties: + input_path: + type: "string" + title: "File system path (start at root). This folder will contain all the\ + \ inputs exploded to a separate file. \nExample, if the input interface\ + \ needs (x: int, y: blob, z: multipart_blob) and the input path is \"/var/flyte/inputs\"\ + , then the file system will look like\n/var/flyte/inputs/inputs. .pb .json .yaml> -> Format as defined previously.\ + \ The Blob and Multipart blob will reference local filesystem instead of\ + \ remote locations \n/var/flyte/inputs/x -> X is a file that contains the\ + \ value of x (integer) in string format\n/var/flyte/inputs/y -> Y is a file\ + \ in Binary format\n/var/flyte/inputs/z/... -> Note Z itself is a directory\n\ + More information about the protocol - refer to docs #TODO reference docs\ + \ here" + output_path: + type: "string" + title: "File system path (start at root). This folder should contain all the\ + \ outputs for the task as individual files and/or an error text file" + format: + title: "In the inputs folder, there will be an additional summary/metadata\ + \ file that contains references to all files or inlined primitive values.\n\ + This format decides the actual encoding for the data. Refer to the encoding\ + \ to understand the specifics of the contents and the encoding" + $ref: "#/definitions/DataLoadingConfigMetadataFormat" + enabled: + type: "boolean" + format: "boolean" + title: "Flag enables DataLoading Config. If this is not set, data loading\ + \ will not be used!" + description: "This configuration allows executing raw containers in Flyte using\ + \ the Flyte CoPilot system.\nFlyte CoPilot, eliminates the needs of flytekit\ + \ or sdk inside the container. Any inputs required by the users container are\ + \ side-loaded in the input_path\nAny outputs generated by the user container\ + \ - within output_path are automatically uploaded." + example: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" coreError: type: "object" properties: @@ -22434,6 +22584,11 @@ definitions: value: "value" - name: {} value: "value" + data_config: + format: {} + output_path: "output_path" + enabled: true + input_path: "input_path" env: - value: "value" key: "key" diff --git a/gen/pb-go/flyteidl/service/flyteadmin/model_core_container.go b/gen/pb-go/flyteidl/service/flyteadmin/model_core_container.go index 510d3c5ce..d3089810a 100644 --- a/gen/pb-go/flyteidl/service/flyteadmin/model_core_container.go +++ b/gen/pb-go/flyteidl/service/flyteadmin/model_core_container.go @@ -22,4 +22,5 @@ type CoreContainer struct { // Allows extra configs to be available for the container. TODO: elaborate on how configs will become available. Config []CoreKeyValuePair `json:"config,omitempty"` Ports []CoreContainerPort `json:"ports,omitempty"` + DataConfig *CoreDataLoadingConfig `json:"data_config,omitempty"` } diff --git a/gen/pb-go/flyteidl/service/flyteadmin/model_core_data_loading_config.go b/gen/pb-go/flyteidl/service/flyteadmin/model_core_data_loading_config.go new file mode 100644 index 000000000..0b2a4874d --- /dev/null +++ b/gen/pb-go/flyteidl/service/flyteadmin/model_core_data_loading_config.go @@ -0,0 +1,18 @@ +/* + * 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 + +// This configuration allows executing raw containers in Flyte using the Flyte CoPilot system. Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path Any outputs generated by the user container - within output_path are automatically uploaded. +type CoreDataLoadingConfig struct { + InputPath string `json:"input_path,omitempty"` + OutputPath string `json:"output_path,omitempty"` + Format *DataLoadingConfigMetadataFormat `json:"format,omitempty"` + Enabled bool `json:"enabled,omitempty"` +} diff --git a/gen/pb-go/flyteidl/service/flyteadmin/model_data_loading_config_metadata_format.go b/gen/pb-go/flyteidl/service/flyteadmin/model_data_loading_config_metadata_format.go new file mode 100644 index 000000000..3b758c5b0 --- /dev/null +++ b/gen/pb-go/flyteidl/service/flyteadmin/model_data_loading_config_metadata_format.go @@ -0,0 +1,19 @@ +/* + * 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 +// DataLoadingConfigMetadataFormat : - JSON: JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html - PROTO: Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core +type DataLoadingConfigMetadataFormat string + +// List of DataLoadingConfigMetadataFormat +const ( + DataLoadingConfigMetadataFormatJSON DataLoadingConfigMetadataFormat = "JSON" + DataLoadingConfigMetadataFormatYAML DataLoadingConfigMetadataFormat = "YAML" + DataLoadingConfigMetadataFormatPROTO DataLoadingConfigMetadataFormat = "PROTO" +) diff --git a/gen/pb-go/flyteidl/service/openapi.go b/gen/pb-go/flyteidl/service/openapi.go index 5e47764fd..3221e6ab4 100644 --- a/gen/pb-go/flyteidl/service/openapi.go +++ b/gen/pb-go/flyteidl/service/openapi.go @@ -77,7 +77,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\xb9\xb1\x27\xfa\xbf\x3f\x05\xae\x76\x23\x7a\xda\xa6\xd4\x63\x9f\x3d\x27\xbc\x7d\xe2\xc4\x0d\x8e\xc4\xee\xd1\x19\xb5\x24\xeb\x31\xbd\xbe\x4b\x87\x0c\x56\x81\x24\xac\x22\x8a\x03\xa0\xa4\xa6\x1d\xf3\xdd\x6f\x20\xf1\x28\xa0\x5e\xac\x22\x29\x89\xd2\xd4\xd9\x58\x8f\x9a\x64\xa1\x80\x44\x22\x91\x8f\x5f\x66\xfe\xeb\x77\x08\x1d\x88\x47\x3c\x9b\x11\x7e\xf0\x11\x1d\xfc\xe9\xe8\xfb\x83\x81\xfa\x8c\xb2\x69\x7a\xf0\x11\xa9\xef\x11\x3a\x90\x54\x26\x44\x7d\x3f\x4d\x56\x92\xd0\x38\xf9\x20\x08\x7f\xa0\x11\xf9\x80\xe3\x05\x65\x47\x4b\x9e\xca\x14\x1e\x44\xe8\xe0\x81\x70\x41\x53\xa6\x7e\x6e\xfe\x44\x2c\x95\x48\x10\x79\xf0\x3b\x84\x7e\x85\xe1\x45\x34\x27\x0b\x22\x0e\x3e\xa2\xff\xab\x1f\x9a\x4b\xb9\xb4\x03\xa8\xbf\x85\xfa\xed\xdf\xe0\xb7\x51\xca\x44\x16\xfc\x18\x2f\x97\x09\x8d\xb0\xa4\x29\xfb\xf0\x0f\x91\xb2\xfc\xb7\x4b\x9e\xc6\x59\xd4\xf2\xb7\x58\xce\x45\xbe\xc6\x0f\x78\x49\x3f\x3c\xfc\xf1\x03\x8e\x24\x7d\x20\x77\x09\xce\x58\x34\xbf\x5b\x26\x98\x89\x0f\xff\xa2\xb1\x5a\xe3\x3f\x48\x24\x7f\x85\x7f\xc4\xe9\x02\x53\xa6\xff\x66\x78\x41\x7e\x75\xe3\x20\x74\x30\x23\xd2\xfb\x27\x42\x07\x31\x11\x11\xa7\x4b\x69\xa8\x72\x45\x24\xa7\xe4\x81\x20\x39\x27\x48\xbf\x0e\xe9\xd7\x21\xf5\x3a\x64\xa9\x26\x96\x24\xa2\x53\x4a\x62\x34\x59\x21\xca\x96\x99\x44\x9c\xfc\x92\x11\x21\xd1\x94\x26\x92\x70\x71\x64\x48\x06\x6f\x49\x97\x84\xc3\x3a\x4f\x63\xf5\x96\xcf\x44\x0e\x61\xec\x33\x18\xfa\x32\xc1\xcc\xff\x35\x27\x62\x99\x32\x41\x44\x30\x55\x84\x0e\xfe\xf4\xfd\xf7\x85\x8f\xca\x2b\x18\x22\x91\x45\x11\x11\x62\x9a\x25\xc8\x8e\xe4\x4f\x06\x1e\x82\x4d\xc6\xa5\xc1\x10\x3a\xf8\x9f\x9c\x4c\xd5\x38\xff\xe3\x43\x4c\xa6\x94\x51\x35\xae\xd0\xbc\xe4\xcd\x36\x78\xea\xd7\xdf\x55\xfd\xfd\xab\xb7\xa2\x25\xe6\x78\x41\x14\x59\xdc\xee\xeb\xff\x2b\xac\x45\xed\x97\x7a\x79\xbe\xa7\xc5\x89\x17\x56\x7b\x8e\x17\x04\xa5\x53\xd8\x2e\xf3\x04\xfc\xcd\x89\x48\x33\x1e\x11\x34\x21\x49\xca\x66\x02\xc9\xb4\x44\x03\x0a\x23\x28\x56\x2b\x7e\xa3\xb6\x92\x72\xa2\xf6\x4a\xf2\x8c\x14\xbe\x95\xab\x25\x4c\x52\x48\x4e\xd9\xcc\x27\xc5\xaf\x83\x56\x4b\xd3\x1c\xda\x61\x65\xfa\x81\xda\x85\x8d\xd9\xd0\xfe\x24\xc2\x0c\x4d\x08\x52\xe7\x92\xc6\x84\x93\x18\x61\x81\x30\x12\xd9\x44\x10\x89\x1e\xa9\x9c\x53\xa6\xfe\xad\xd9\x37\xb2\x34\xdb\x1f\xda\xc0\x9f\xcd\x94\xb9\x15\x84\xab\x89\x3f\xd0\x98\xc4\xe8\x01\x27\x19\x41\xd3\x94\x07\xe4\x39\x1a\xb3\x9b\xb9\xa2\xc3\x62\x42\x19\x9c\x3c\x45\x4b\xcb\x21\x7f\xb0\xe4\xfa\x03\x52\xef\x43\x19\xa3\xbf\x64\x24\x59\x21\x1a\x13\x26\xd5\xb9\x16\xc5\xd1\xfe\x90\xc2\xfb\x71\x82\x0e\x91\xa2\x33\xe1\x12\xe8\x9d\x32\x49\xbe\x49\x81\x0e\x51\x42\xef\x09\x7a\x77\x46\x85\x44\xc3\xcb\xd3\x77\x03\xf4\xee\x2c\x17\x1c\xe2\xdd\x33\x50\xd8\xfd\xfd\x37\xef\xe8\x49\x3c\x2b\x1e\xba\x83\xa1\x3a\xcd\xd7\xfa\x9a\xc8\x47\xf8\xdb\xef\xfc\x71\xcc\x7e\x35\xcb\xde\x5c\xf0\x1a\xa9\xdb\x45\xd6\x7e\x22\x32\x9a\xaf\x11\xb4\x62\x4b\x49\xab\xb6\xa3\x28\x6a\xc5\xeb\x92\xb5\x6a\x09\x4f\x2d\x6f\xb7\x11\xb6\x58\xc2\x29\xc0\x94\xe9\x43\xe3\xce\x50\xb8\x33\xe8\xe5\xc4\xca\x36\xf2\xd6\x5b\x8d\x27\x72\xad\x24\xf5\x28\xb1\x27\x6b\x4d\xe8\x82\xae\xdb\xc7\x53\x16\x2b\xb5\xcb\x08\x39\x96\x2d\x26\x84\xab\xa5\x5b\x71\x07\x2b\x9c\x28\xf1\x27\x33\xce\x48\x5c\xb3\xb4\x5f\x32\xc2\x57\x0d\x6b\x9b\xe2\x44\xd4\x2d\x8e\x32\x49\x94\x5e\x5b\xf8\x7a\x9a\xf2\x05\x96\xe6\x07\xff\xf1\xbf\xba\x2e\x5e\xa6\xf7\x64\xdd\x3e\x9f\xea\x5d\x8b\xb0\x80\xed\x5e\x64\x89\xa4\xcb\x84\xa0\x25\x9e\x11\x61\xa8\x90\x25\x52\x0c\xe0\x67\x4a\x97\x26\xfc\xd0\xdd\x36\xf0\x06\x7b\xcb\x66\x02\x3e\x41\x53\x27\xc8\x18\xf9\x26\x61\xa4\x31\x83\x7b\x16\x48\xe4\xdf\x1e\x4f\x40\xca\xcd\xf8\x44\xa4\x5c\xde\x4d\x56\x47\xf7\xa4\xf4\xde\x5a\x6e\xc1\x0c\x61\x29\x39\x9d\x64\x92\xa8\x75\xab\x31\xec\x3d\x09\xa2\x4f\x5f\xc6\x42\x5d\xbe\x17\x27\x17\xdf\xdd\x63\xc9\xd3\x19\x66\xef\x3f\xa2\x61\x1c\x23\x3d\x51\xf5\x1b\x1a\xeb\x2b\x79\x4e\x38\x39\x42\x37\x73\x2a\x90\x98\xa7\x59\x12\x23\x46\x1e\x08\x57\xb4\x25\x8b\xa5\x5c\xed\x1d\xb5\x62\xca\x49\x04\x84\xe9\x72\xc2\xdc\x53\x8a\x68\xca\xe8\x59\x69\xd2\xdd\x93\x15\x28\x2e\x65\xf2\x3d\x03\xbf\x14\xbe\x25\x2c\x5b\x14\xee\x0a\xf8\xfc\x64\x74\x7d\x3c\x3a\x3f\x39\x3d\xff\x5c\x78\x42\xa9\x11\xee\xab\xe0\x9b\xbf\x95\x68\x33\xc5\x59\x02\xa7\xda\x1b\xed\xd9\x14\x97\x68\x4e\x93\x98\x13\xf6\x41\x62\x71\x7f\x47\xbe\x91\x28\xd3\xf7\xec\xbf\xc2\x0f\xee\x94\xf6\x99\xc6\x24\xfc\x24\xf8\x47\xae\xee\x74\x7e\xd4\x59\xa5\x9d\x9f\x04\x1b\xb6\xdd\x73\xf0\x09\x8d\x2b\x7f\x0d\x9f\xac\x59\x83\xfd\x4d\xc3\x64\xed\x4f\x6a\x67\x65\x7f\x60\x14\xb8\xca\xdf\x70\x22\xf9\xea\x0e\x4b\xa9\x4e\xf9\x06\x3a\x23\x6c\x29\x52\xab\x45\xf9\x7e\x1a\xf5\x51\x2b\x8a\x20\xbb\x9d\xe6\xa8\x66\x90\xff\x72\x9d\xbe\x78\x9e\xc6\x64\xe4\x86\xfd\x94\xf2\x1b\x2c\xee\x5f\x83\xce\x18\x4c\xfc\x39\xd4\xc6\x4d\x0f\xd0\x9b\x33\xea\x37\x14\x07\xbd\x0b\x60\x7b\x4a\xb6\x75\x18\xa4\x1c\x89\x95\x90\x64\xb1\xd6\x75\xf0\x7a\x08\x61\xe4\xfd\xbe\x4e\xb8\x70\xe5\xfc\x06\x4e\x7d\x78\x81\xf6\xc7\xbb\x03\xc9\x76\xe5\xf8\xdb\xf7\x75\xda\x10\x4c\xf3\x52\xaf\xed\xf6\xd9\x80\x83\xe1\x93\xbd\x5f\x66\xa0\xda\xed\x7a\x92\x4f\xe4\x35\xa8\xdd\x2b\x4b\xed\x3b\x98\xc0\x1a\x93\x2f\x74\x1d\xbb\xf3\xa7\x1e\xf5\x9d\x2b\xda\x63\x26\x95\xcd\x6b\x7c\x4b\x84\xa3\x28\xe5\x5a\x15\x8c\x1b\xc4\xdb\xf3\x19\x7d\xb7\xe7\xd7\x97\xa3\xe3\xd3\x4f\xa7\xa3\x93\xb2\xd5\x77\x33\xbc\xfe\xa9\xfc\xe9\xd7\x8b\xab\x9f\x3e\x9d\x5d\x7c\x2d\x7f\x73\x36\xbc\x3d\x3f\xfe\xf1\xee\xf2\x6c\x78\xde\xda\x4e\xf4\x27\xd0\x71\x37\x7b\x07\xd8\x2e\x1d\x60\x83\xb7\xeb\x01\x33\xd1\x83\xf6\xde\x2f\x94\x50\x21\x15\x81\xcc\x93\x68\x89\x85\xd0\xf7\xaf\x9e\xc1\xd1\x98\x7d\x49\x39\x41\x94\x4d\x53\x94\x42\x70\x48\x48\x9e\x45\x92\xb2\x99\x7b\xe8\x23\x1a\x67\xdf\x7f\xff\x6f\xd1\x19\x65\xf7\xf0\x17\xd9\x47\xe2\xf4\xee\xc1\x4d\xa8\xd5\xbb\x07\xfd\xef\x5e\x87\x7b\x30\xc6\x12\x7f\xf0\xbd\x82\x4f\x83\x27\xd1\x91\x4b\xcc\x62\x94\x66\x52\xfd\xa9\xde\x8b\xa6\x3c\x5d\xa8\x73\x43\xbe\x51\x01\x52\xe2\x31\xe5\xf7\xd3\x24\x7d\x6c\xe7\xad\xfa\x4c\xa4\xf3\xf7\x9c\x60\x89\x5f\x83\x93\xea\xab\x59\xa1\x9b\xf8\x67\x22\xd5\xdc\xaf\xcc\x5b\x7a\x68\x49\x0f\x2d\x79\x59\x68\xc9\x5e\x79\x8a\x9e\x5e\xf6\x85\x6e\x25\x2d\x00\x6b\xa2\x1e\xb5\x41\x8d\x9a\x98\x85\x17\x92\x78\x4a\xa1\x19\x06\x02\xd6\x08\xcc\xc0\x49\xfe\x5a\x84\x66\x30\xe9\xe7\x17\x98\xbf\x09\x1f\x7e\xef\xa2\xdf\x90\x50\xaf\x52\xae\xb6\xbc\x32\x9e\xcd\xc1\xfe\xf4\x72\xbe\x14\xfe\xee\x12\xef\xee\x10\xe0\x6e\x1d\xd1\x5e\x13\xc2\xae\x8c\x59\x57\x05\xa9\xcb\x51\xe9\xca\x30\xf4\x56\x71\xe7\xae\x57\x52\xfb\x88\xf3\x67\x22\x6f\xb0\xb8\x7f\x75\x57\x52\x30\xe9\xe7\xbf\x92\x7e\xa3\x81\xe6\x3e\xb2\xfc\x84\xa4\x7b\xeb\x17\xd9\xfe\xc6\x8e\x7f\x03\xc1\xe2\x3e\x3a\xdc\x89\x46\x6f\x2b\x1c\xfc\x56\xe3\xbf\xaf\x33\xe0\xdb\x47\x78\xf7\x37\xc2\xfb\xa4\x76\x10\x79\x20\x4c\x0a\xf0\x78\xf9\xea\xf4\xc1\x32\x15\xcd\xea\xff\x31\x27\x58\x12\x84\x0b\xae\x26\x04\x03\x22\x4e\xa2\x94\xc7\x4a\xed\xc7\x68\x39\xc7\x82\x20\xc9\x31\x13\x74\x9d\xea\xaf\x47\x05\xdf\x8e\x1a\xe7\x35\x68\xfd\x81\x23\x0a\x66\xfd\x5c\x3a\xff\x24\x8d\x4b\x47\x43\x9f\x9a\xaa\x6f\x9a\xc5\xcb\xce\x96\x0e\x79\x68\x6d\x56\xfe\x84\xdc\xac\x44\xd9\x86\xdc\x1c\x5a\xa9\x3b\xe1\x66\x30\x0b\x5f\x0b\x37\x07\x36\xec\x6f\x8b\x9b\xab\x96\xbe\x0f\xdc\x6c\x03\xa0\x1b\x72\x74\x39\x7e\xba\x13\xae\x76\x41\xcb\xd7\xc2\xd9\xa5\x28\xeb\x6f\x8b\xbb\xeb\x96\xff\xb2\x1c\xee\x7c\xaf\xbb\xe2\xed\xf5\x8c\xeb\x08\xf0\x1a\x98\xd6\x4d\x56\xcf\xfd\x37\xc3\xad\xa5\x75\xef\x09\x9b\x7e\xe0\x44\xe7\x54\x75\xe2\xd7\x2b\xf3\x50\x67\x8e\xb5\x0f\xf6\x3c\xfb\x9a\x78\xd6\xee\xda\xfe\x70\x6d\x1d\x82\xab\x7b\x9e\x61\x03\x2c\x4b\xa0\x05\x96\xd1\x5c\x7d\xa9\x43\x42\x2d\x8b\x51\xe4\x89\x85\xaf\x8a\xbb\x9f\x23\x9b\xf0\x6d\x3b\x7f\x7b\xa7\xef\x6f\xb0\xe8\xcf\xde\x20\x94\xfb\xac\x88\x1d\x66\x45\x50\xd1\x67\x45\xf4\x59\x11\x6d\x09\xd4\x67\x45\xf4\x59\x11\xde\x77\xaf\x23\x2b\xe2\xe9\x13\x22\x76\x93\xf5\xf0\xaa\x94\xe8\x5e\x81\xee\x15\xe8\x3e\xb5\xc1\x2d\x6d\x57\x02\xcc\x3e\x7d\x10\x93\x84\x48\xd2\x28\x7e\x6e\x08\x5f\x28\xdb\x20\x28\xf0\x5b\x11\x34\xc8\x6b\x07\x39\x0e\x02\xf7\x46\x93\x5c\x72\x63\xbf\x4e\xe9\xe4\xa6\xdf\x67\x62\xf5\xe2\xaa\x17\x57\x9b\x2c\x6d\x7f\xbc\xb2\xde\x61\x7e\x51\xb7\xac\x57\x2e\xf8\x8e\xc6\xbb\xa9\x18\xec\xd4\x46\xbf\x5e\x70\x4e\x8a\xa0\x64\xeb\x66\x4e\xda\xbc\xf8\xee\x69\xfc\x2a\xfc\xb4\x4a\x8e\xc4\x23\x26\xa9\x5c\x39\x94\x1a\xef\x0b\x07\xf7\x85\x83\xdb\xaf\xb5\xf7\x10\xee\xd0\x43\xd8\x17\x0e\xee\x7d\x60\xbd\x0f\xec\xe9\x7d\x60\x2f\xe5\xd0\x7e\xe6\x63\xf9\x5c\x2a\xda\x66\xc0\x24\x16\x23\x4e\x66\x54\x48\xc2\x15\xf5\x2a\x95\xb2\xf5\x48\xa5\xd7\xda\x0a\xa7\x35\xee\xc3\x7f\xed\xc1\xff\x6a\x31\xfd\x2b\x73\x8b\xc2\x51\x9f\xe0\xd8\xf5\xbd\x00\xd5\x69\x81\x57\x68\x8e\x1f\x08\x9a\x62\x9a\x68\xc3\xc8\x48\xc7\x86\x15\x36\x4d\xe8\x7f\x77\x9b\x10\x0e\xa7\xc3\xc9\x94\x70\xc2\x22\x2d\xed\xb5\xf2\x13\xe1\x04\x11\x50\x4a\xf5\x6f\xe6\xca\x4c\x4d\x38\xc1\xf1\x0a\x4d\x08\x61\x8e\x6d\x2a\x34\x85\x9a\x39\xef\x44\x69\x7d\x71\x33\xad\xcc\x3d\xfb\x62\xa4\x3d\x09\x7a\xa6\x5a\x24\x6c\x6f\x9c\x89\x3f\xbd\x2e\x51\xd1\x83\x68\x7a\xa7\xda\xcb\x3b\xd5\x7a\x10\x4d\x6f\x22\xef\x81\x89\xdc\x83\x68\x7a\x10\x4d\xef\x40\x68\x4d\xad\xde\x81\xe0\x7f\xf7\x3a\x40\x34\x4f\xd8\xa7\xf6\xb9\x34\xec\x5e\xc1\xb6\xbf\xeb\x15\xec\x5e\xc1\x7e\xa3\x0a\xf6\x7e\x50\xb8\xd7\xae\x7b\xed\xba\xd7\xae\x7b\xed\xba\xd7\xae\x7b\xed\xda\x3c\xb5\x4b\xed\x1a\xfe\xb2\xd5\x40\xb7\x46\xac\x77\x8f\x72\x7d\x26\xf2\xb5\x86\xb8\x7a\x95\xba\x57\xa9\xf7\x5b\xa5\xde\x9b\x05\xbd\xbd\xea\x7e\x7d\x7d\xbc\xd2\xfd\xf8\x16\xea\xe3\xd9\xa7\x0f\x96\x59\xf3\xf5\x77\xbb\x8c\x6d\xba\x84\x90\x58\x66\x60\x69\xb4\xb8\x0a\xd1\x50\xa2\x45\xaa\xf4\x6e\x46\x82\xdf\x58\x9e\xd7\x20\x82\x19\x7d\x20\x0c\x59\x58\xf0\xc0\x48\xb6\x01\x18\xbf\xbf\x5a\x01\x67\xf2\x34\xb0\x44\x18\x49\xba\x20\x47\xe8\x74\xaa\x19\x28\xc2\x49\x82\x04\x91\xa2\x80\x3c\x51\x0a\x99\x79\x88\xc5\xf9\x5c\xed\xbb\x69\x0e\x44\xd0\x3f\x1b\xd8\xf3\x97\x25\x52\x9f\x46\x3b\xf8\x23\x4d\x12\x35\x07\xc3\xb4\x20\x7c\x16\x84\x27\xf6\xc9\xe0\xb5\xf6\xc7\x0b\x1c\x2b\x6b\xc2\x9b\x42\x9e\x50\xe2\xff\x1e\xc4\x3c\x15\x0e\x4a\x11\x3c\xaf\x9f\x3e\x42\xc6\xee\xd3\x75\xac\x5a\x4d\x63\x8e\x63\x25\xf6\xa3\x39\x89\xb3\x84\x20\x2c\x44\x1a\x51\x2c\x49\x8c\xa8\xbe\x16\x10\x95\xd6\x4a\xb4\x3f\xb2\xaf\x8e\xa9\xc0\x93\x84\xc4\x86\xc6\x24\x47\x76\x34\xce\x9c\x0a\x34\x21\x8a\xc4\xea\xe6\x09\xa9\x3f\xd7\x97\x52\xc5\x6c\xbc\xa9\x90\xf2\x4c\x08\xd3\x13\x69\x50\xaa\x34\x73\xbe\x56\xbd\x4a\xcf\xbe\x4f\xb7\xe9\xb5\xac\x5e\xcb\xea\xb4\xa0\x37\xa5\x65\xed\x11\x1a\xcd\x0a\xa4\x17\x45\xa3\x41\xcc\x4a\x49\xfe\x3b\xe7\x94\x12\x9b\xd9\xeb\xce\xef\xf7\xc5\x0e\x39\x74\x23\x1e\xa7\x6c\x4a\x67\x19\x37\x0e\xf8\x89\x3a\xb1\x6b\x03\x63\x15\xe3\xbc\x8a\x1b\xa7\x7a\xea\xcf\x75\xf1\x74\xb1\x21\xd0\x21\x52\xda\xf5\xdd\xd5\xe8\xfa\xe2\xf6\xea\x78\xf4\x11\x0d\x97\xcb\x84\x6a\xc7\x7e\x94\x09\x99\x2e\xe8\x3f\xd5\x32\x74\xed\x5a\x27\xb9\x8d\x1a\x22\x40\xe1\x80\x48\x82\x38\x1a\x33\x74\x88\x8e\xcf\x6e\xaf\x6f\x46\x57\x35\x03\x1a\x26\x80\x8e\x2d\x64\xb1\x4c\x40\x2b\xb9\xcf\x26\x84\x33\x22\x89\x40\x51\x92\x01\xac\xd9\xc5\x17\xf4\xa0\xa3\xff\x33\x3a\xbe\xbd\x39\xbd\x38\xbf\xfb\xcb\xed\xe8\x76\xf4\x11\x59\x6e\x52\xc3\xaa\x79\xa9\x59\xc4\x2b\x86\x17\xca\xfc\x09\x8b\xec\xfe\x92\x91\x0c\x94\x20\x3a\x63\x0b\xc2\x64\x71\x44\x3b\xe1\xb3\xe1\x0f\xa3\xb3\x70\xe4\x39\x41\x3f\xfd\x39\x9f\x54\x82\x27\x24\x31\x01\x0f\xf0\xe7\x2b\x81\x9d\xbf\xc8\x44\x42\xb2\x92\x98\x7c\x6e\x5b\x2a\xd8\xd0\xb2\x75\x54\xdc\xa1\xf2\x2f\x0a\xe4\x6e\xfa\x41\x40\xbd\xd6\xc6\x56\x38\xc3\x67\x93\x74\xea\x80\xc4\x77\x80\x90\xa6\x44\x7c\xf8\x57\x70\x50\x7e\x7d\xb2\xc2\x1b\xc8\xcb\x16\x34\x92\x6f\x5d\xcf\xbc\xfc\x81\xd7\x20\xef\xfc\xe9\xbe\xa4\x6c\xdb\x91\x3e\xb1\x5f\x2e\x8b\xee\xda\x5a\x6f\x75\xf4\x56\x47\x35\x65\x7a\xb8\x44\x0d\x85\x77\x75\xed\x6c\xe2\xe5\x9b\x52\x92\xc4\xa2\xe4\xa6\x09\xae\x8d\xb5\x2e\x99\xd7\x7b\x63\x3c\xaf\x53\xa6\x8b\x6e\x7c\xe5\xfc\xe7\xc6\xa1\xae\x76\x6b\x41\x24\x86\x16\x84\x32\x45\x19\x4c\xbd\xbf\x85\xca\x64\xee\x6f\xa1\xfe\x16\xaa\xa5\x4c\x7f\x0b\xbd\x62\xe7\x55\x85\xe4\x7e\x51\xef\xd5\x3a\x9b\x6e\xab\xfa\x37\x15\xae\xad\xb2\x2d\x27\x90\x98\x63\xae\x3b\x9d\x44\xe9\x62\x91\x32\x2f\xf2\xba\x5a\x92\x01\x72\xc1\x36\x70\x53\xc0\x34\xd6\x79\xbe\xf2\xd7\xd0\xd7\xe1\xf3\xf2\xe8\xf2\x1c\xa8\xf0\xde\x0e\x5c\x43\xa0\xbe\x50\x50\x5f\x28\xa8\xc7\x69\xf7\x85\x82\x9a\xb9\xa5\x47\x22\xf7\x48\x64\xff\xbb\xbe\x50\xd0\x1e\x15\x0a\x0a\x7b\x88\x6b\xcc\x75\x55\xd3\xfd\x5f\xcb\xdf\xf8\x91\x8b\x52\xcb\x75\x13\xd0\xd0\xfd\xc8\xb7\x87\x66\x87\x2d\x5a\xd7\x45\x36\xfc\xa6\x9e\x7b\xae\xd7\x4e\x93\x95\x24\x34\x4e\xca\xdd\x48\x9f\x01\x3a\x54\xb5\xd1\x6f\xd1\x97\x52\xc1\xb6\xbd\x63\x65\x2d\xa1\xde\x6a\x41\xdf\x5c\x2e\xbd\x22\xa7\x7f\x3b\xe1\x6d\x8b\x9e\xdf\xd5\x88\xf0\xea\xef\x9d\x20\xaf\xfe\x7a\xdb\x3c\xf6\x50\x76\x6f\x9a\xbf\x1e\xc8\xc6\xd7\xe1\xad\xf0\x67\xfc\x1c\xfe\x8a\xc6\xdd\x7f\x73\x72\xbd\x89\x97\x7b\xe9\xde\x92\x5c\x6f\x55\xc6\xf7\xfe\x8c\x5d\xfa\x33\x06\x6f\xd7\xa1\xd1\xe7\x9d\x37\x10\xa7\xf7\xf6\x6c\x42\xad\xde\xdb\xe3\x7f\xf7\x3a\xf2\xce\xcd\x5d\x7d\xa7\xaf\x7a\x0f\xa4\xfe\xe1\x5f\xf9\xdf\x9e\x22\xed\x7d\x58\x11\xf2\xeb\x00\xcc\xb1\xf0\x67\x12\xe7\xea\x47\x3e\x78\x05\x60\xc7\xcc\xe1\xd0\x2a\x25\x79\xf0\x7a\x2d\x7e\xe7\x52\x3f\x7a\x02\x4f\xbe\x2e\xb4\x7b\xcd\xd4\x9f\x17\xd7\x53\xe6\x84\x75\xaa\x13\x40\x06\x9c\x3e\x4d\x35\x9a\xfb\x71\x4e\xe1\x9a\x84\x72\x2e\x70\x95\x78\x1b\x6e\xf3\xe4\x30\x00\xda\xeb\x74\x8e\xe7\x56\xa7\x4a\xec\xde\x6e\xe1\x86\x47\x5f\xef\xba\x5f\x1c\x09\xb1\x86\xef\x5f\x14\x15\xd1\x20\x33\x77\x03\x88\x78\x3e\xf9\xf8\x99\xc8\xb7\x27\x1c\x3f\x13\xf9\x5c\x92\x71\x53\x71\xd8\x28\x12\xf2\xea\xf3\x7b\x22\x0d\x36\x13\x7d\xaf\x6b\x8d\x7d\x5e\x57\x9f\xd7\xf5\x5b\xcf\xeb\xb2\x4f\xb7\xe9\x3d\x7a\x02\x3f\x79\xc6\xab\x4a\xbf\xf0\xed\xdd\x56\x7a\x5d\xfd\x85\xd5\x5f\x58\xdd\xd6\xb8\xaf\x2a\xba\xe5\xe7\x7d\x50\xd1\x3b\xa5\xda\xeb\xe8\x5d\xde\xc5\xc7\xb2\xff\xda\x08\xdd\xa5\x7d\xd9\xeb\x11\x42\xa2\xab\x9c\xd9\x2a\x5d\x6b\x5d\xef\xad\xab\xbc\xe1\x56\x45\xec\xa8\x48\x72\xfb\xeb\xcb\x92\x28\xdb\x77\xaa\xdb\x99\x3f\x97\xb0\xdf\x17\x11\x91\xaf\xfb\x45\x85\x82\xd2\x71\x8b\x90\xaf\x10\x49\x70\xd7\x08\x02\x5b\xf3\xdb\x20\xa1\xbd\xf9\xa7\x05\xa0\x58\xf8\x9d\x81\x8e\xc1\xd7\x30\xe5\xe2\x3c\xec\x87\xfe\x0b\xed\x67\xf9\xc8\xf6\x13\x5b\x25\x14\x3e\xe4\x44\xf2\xd5\x1d\x96\xca\x8e\x90\xdb\xa3\xd3\x42\xab\x61\x0d\x3a\xed\x06\x8b\xfb\x57\x89\x4e\x0b\x27\xfe\xc4\x67\xb6\x35\x4f\xbe\x39\x5c\x43\xdb\x13\xd6\x63\x1c\x36\x20\xdd\x5b\xc5\x3b\x34\x89\xd0\xbd\x99\x61\x41\x8a\xbf\xc5\x93\x1b\xde\x49\xfd\x11\x6d\xa2\xd1\x9b\xab\x60\x57\x50\x35\xd6\xac\xed\x95\x54\xb2\x2b\x6a\x4b\xbb\x9e\xd5\xd3\x40\xa0\xbc\xdd\xe8\xab\x1d\xbf\xd1\x6a\xc7\xed\x8c\x9b\xd6\x96\x4d\x5b\xb3\xa6\x9d\x4d\x53\x6f\xd0\x6c\x81\xa4\x0e\xed\x8c\x4d\x91\xd4\x81\x1e\xff\x2a\xbc\x35\xc1\x8c\x9f\x03\x49\xfd\x1b\x35\x3d\x7a\xbb\xe3\x49\xe8\xf6\x56\x8d\x8e\x3d\xb7\x38\x7a\x0c\xf8\x2e\x31\xe0\x3d\x04\xbc\x87\x80\xb7\x25\x50\x0f\x01\xef\x21\xe0\xde\x77\xaf\x03\x02\x6e\xec\xc5\x6d\xd1\x8b\x55\x2a\x7b\xae\xd0\x06\x85\x61\x36\x57\xdf\x4f\xe3\x57\xa1\xb7\x7b\xf5\x9a\x9c\x65\xcd\x9f\x43\x7f\xef\x0b\x13\xf5\x85\x89\x7a\x25\xee\xb7\xa4\xc4\xf5\x7a\xca\x26\xd4\xea\xf5\x14\xff\xbb\xbe\x30\xd1\x1e\x15\x26\x52\x8a\x53\x80\x5b\x5b\x0b\x9f\x3a\xe6\x04\x4b\xdd\x9d\x8c\xe7\x48\xaa\x82\x02\xd6\xa4\x5d\xe9\x01\x94\x7e\xf5\x1a\x94\x2b\x35\x4f\x3d\xe3\x16\x38\x2a\xff\x85\x07\xff\xab\xc5\xc4\xaf\xcc\x5d\x09\x07\x7a\x82\x63\xd7\x13\x0e\x14\xa4\x05\x5e\xa1\x39\x7e\x20\x68\x8a\x69\xa2\xdd\x54\x46\x06\x36\xac\xad\x69\x42\xff\xbb\xdb\x84\x70\x38\x9d\x1c\x94\xaa\x64\xba\x56\x71\x22\x9c\x20\xa2\x4b\xa8\xc2\x6f\xa0\x61\x9d\x69\x0f\x38\x21\x84\x79\x08\xc7\xb6\x73\xde\x89\x6a\xfa\xe2\x60\x34\x9f\x6f\x5e\x1c\x87\x56\xdf\xe4\x79\x77\x36\xd7\x36\x86\x96\xf8\xd3\x6b\x11\x05\xcf\x61\x56\xbd\xe1\xd0\x47\x1f\xde\xf8\x6d\x56\x5c\xdf\x1b\x95\xbc\x37\x74\x77\x68\xe8\x42\xea\xca\x1b\xb5\x74\xfb\x70\x45\x03\x71\x7a\x37\xc0\x26\xd4\xea\xdd\x00\xfe\x77\xaf\x27\x5c\x51\xaf\x3d\x6f\xd6\x4e\xf0\x09\xf5\xe8\x5e\x8d\xee\xd5\xe8\x5e\x8d\x7e\xb3\x6a\xf4\x7e\x50\xb8\xd7\xa1\x7b\x1d\xba\xd7\xa1\x7b\x1d\xba\xd7\xa1\x7b\x1d\xda\x3c\xb5\x13\x1d\x1a\xfe\xb2\x09\xc4\xbb\xc9\x16\x6e\x17\x91\x32\xe9\xc2\xaf\x45\x79\xee\x15\xe7\x5e\x71\xde\x6f\xc5\x79\x6f\x16\xf4\xf6\x72\x04\xfb\x2c\xbb\xd2\x2d\xf8\x66\xb3\xec\x5c\x33\x81\x0d\x0a\x25\x07\x9f\xd9\x81\x9e\xbb\x7c\xf2\xc0\x4a\x46\xcc\x62\x64\x27\xd1\xa9\x98\xf2\x57\xf3\xd0\xeb\x2a\xbe\x56\x9e\x75\x5f\x42\x19\x79\xbb\xd6\x97\x50\x7e\xc2\x75\xdb\x73\xb6\x66\xe5\x96\x47\xb5\xf7\xea\x95\x2e\xfb\xc5\x61\x3e\xf5\x27\xfd\x45\x41\x3f\x95\x37\x47\x29\xe1\x22\x6f\x45\xf5\xfc\x95\xa3\xb7\xb9\x1a\x3e\x13\xf9\x56\xee\x85\xbe\x7a\x74\x5f\x8c\x73\xe3\x26\x53\x9d\x24\xfc\xeb\x5a\x62\x5f\x20\xbb\x2f\x90\xdd\x17\xc8\x76\x6f\x7d\x8e\x02\xd9\xdb\xdc\xc8\xfa\xf5\x6f\xe5\x52\xee\x8b\x64\xf7\xf7\x72\x7f\x2f\x57\x2e\x71\x0f\x0d\xae\xbd\x28\x01\xee\x0c\xae\x5d\xa5\xb6\xfb\xa1\x2c\x27\x8c\x77\x9a\xe1\x6e\x29\xd9\x67\xb9\x9b\xff\xeb\xb3\xdc\xdb\x2c\xae\xcf\x72\xef\x81\x4b\x7d\x96\x7b\x0f\xcd\xe9\xa1\x39\x7d\x96\xfb\x6b\xc9\x72\xb7\x0a\xd4\x2e\x32\xdd\x2b\x94\xb1\xf5\xd9\xee\x5f\xcb\x96\xc1\xde\x2a\x5a\x76\xae\x7d\xd6\x7b\x9f\xf5\xbe\x2d\xef\xec\x85\x4d\xf6\x24\xd9\xef\x15\x62\x60\x5b\x43\xec\x75\x64\xc1\xdb\xd9\xf6\x29\x3c\x3d\x12\x71\xff\x91\x88\x7b\x97\xc2\xb3\x37\x6a\x7b\x6f\x0c\xef\xd0\x18\xee\xb3\x78\xfa\x2c\x9e\xde\x55\xd0\x9a\x5a\xbd\xab\xc0\xff\xee\x75\x64\xf1\xac\xd7\xa6\x77\x92\x0d\xff\x14\x7a\x75\xaf\x56\xeb\xdf\xf5\x6a\x75\xaf\x56\xbf\x51\xb5\x7a\x3f\x28\xdc\xeb\xd4\xbd\x4e\xdd\xeb\xd4\xbd\x4e\xdd\xeb\xd4\xbd\x4e\x6d\x9e\xda\x99\x4e\xbd\xdb\xec\xf8\x8e\x51\x2c\x2f\xe3\xe2\x35\x29\xd3\xbd\x22\xdd\x2b\xd2\xfb\xad\x48\xef\xcd\x82\xfa\x4c\xf9\x3e\x53\xbe\xf4\xcd\xfe\x66\xca\xff\xce\x30\xc2\x81\x27\xfb\xdd\x25\x71\xf0\x43\x92\x4e\x6e\x56\x4b\xa2\xfe\x7b\x42\x17\x84\x09\xd0\x58\xa8\x5c\xf9\x17\x67\x0d\x81\xcb\xa4\x3d\xb8\x3e\x3d\xff\x7c\xe6\xe7\x90\x1c\x7c\xb9\x3d\xbb\x39\xbd\x1c\x5e\xdd\xd8\x19\xba\x55\xf9\xb4\x30\xcf\x05\x77\xff\x71\xba\x58\x62\x4e\x45\xca\x46\xdf\x96\x9c\x08\x35\xb5\x0b\xb8\x6d\x53\xbe\xd9\xec\x46\x7f\xf1\x67\x76\x1e\xfe\xf3\xf3\x4d\xf8\xaf\x60\x15\x67\x37\xe1\xbf\x46\x8d\xab\xf1\x06\x2e\x9e\xa0\x43\xf4\xf9\xe6\x23\xfa\x0c\x51\x7f\x8e\x6e\xe6\x98\x41\x86\xd2\xd9\xcd\x47\x74\x46\x84\x80\x4f\xf2\x87\x25\x95\x09\xac\xed\x07\xca\x30\x5f\x21\xbb\x7c\x9d\x8c\x84\xc1\x1d\x68\x49\x53\x24\x1e\xfb\x47\xc6\x40\x61\xcd\xa9\x77\x96\xce\x68\x84\x93\xed\x88\x38\x3c\xf7\xcf\xcb\xc1\xc5\x55\x23\x29\xfc\x5f\x97\x69\x31\x3c\x3f\x81\x24\x2c\x3b\xd5\x8a\x95\x9f\x13\x21\x49\xac\x2e\xc0\x58\x33\xaf\xb2\x35\xc8\xca\xbb\x18\xff\x91\x52\x46\x62\x94\x09\xa5\xae\x0d\xcf\x4f\xd0\x07\x74\x71\x35\x66\x17\x3c\xd6\xfe\x02\xa2\x6e\x14\x6d\xab\x50\x81\x58\x2a\x11\x5d\x2c\x53\x2e\x31\x93\xea\x32\x55\x82\x2c\x35\x14\x11\x08\x73\x82\x8e\xd3\xc5\x22\x93\x58\xd2\x07\x52\x22\x2a\xd3\x46\xc0\x35\x91\xa7\x31\x78\x20\x2b\x68\x98\x4e\x02\x45\xe7\x60\xc9\xd5\xf8\x92\x16\xb4\xbf\x03\x1a\x97\xd4\x41\x3b\x04\xe6\x1c\x87\x62\xf0\x80\x4a\xb2\x28\xfe\xbe\x25\x52\xec\xd7\x4a\xdd\xda\x75\x30\x1e\x71\x9e\x72\xf8\x9f\x9f\x28\x8b\x37\xe3\x8a\xdb\xf3\x9f\xce\x2f\xbe\x9e\xfb\x9c\x71\x7b\x3d\xba\xf2\xff\x7d\xfd\xd7\xeb\x9b\xd1\x97\x46\x6e\x29\x8e\x92\xb3\x01\x4c\x0f\xee\x99\x8f\xe8\x5a\x37\xa5\x4d\x39\x52\x9a\xc3\x41\xf5\xa2\xbe\x10\x89\x63\x2c\x71\xfe\x41\x1a\x93\xcd\xd6\xf6\x65\x78\x7e\x3b\x3c\x0b\x96\x72\xfc\xe3\xe8\xe4\xf6\x2c\xb8\x39\xec\xfa\xbc\x4f\xae\x46\xfa\x5e\xf0\x3f\x3b\xfe\xf1\xf4\xec\xe4\xce\xdd\x24\x4d\xd4\x28\xbc\xb7\x78\x7c\x6e\xe6\x04\x2d\x88\x9c\xa7\x31\x9a\xac\xfc\xec\x98\x3c\x4b\xf1\x11\x0b\x94\x80\xf7\x8f\xc4\x47\x63\x2d\x6a\xf4\xa8\x1f\xd5\x29\x42\xe6\x65\xde\x13\x8b\x34\x26\x03\xf3\x1b\x75\x4e\x74\x32\xa7\xba\xcd\xc1\x28\xaa\x1a\x58\xbd\x1d\x33\x44\x59\x4c\x1f\x68\x9c\xe1\x44\x27\x5d\x3a\x1a\x7d\x44\x43\xa4\x8c\x93\x38\x4b\x08\x92\x9c\xce\x66\xa0\xc7\x16\xa6\xaa\x47\x33\x8f\x02\x25\xe1\x39\xd7\x7f\x58\xd9\x3f\xf0\x5a\x63\x00\xd1\x49\xa2\xb5\x44\xfd\x20\x24\x99\x86\x23\x72\x2c\xe7\x84\x57\x4d\xcd\xee\xcb\x47\xed\xb6\xa8\x59\x16\x24\xfd\xe5\x30\x36\x88\xa8\x08\xad\x7e\x2f\x39\x79\xa0\x69\xe6\x3d\x6a\xf2\x61\x83\xcd\xad\x1c\x3e\x27\x00\x90\x2d\x85\x39\xe6\xc3\x84\xdc\x7c\x65\x5d\x9d\xf6\x8f\x11\x93\xbc\xf2\x6a\x6e\x2b\x73\x8c\xe2\x17\x08\x9d\x6a\xfb\xb0\xf4\xee\xf3\xa2\x26\x5f\xb6\x9f\x8d\xf6\xa7\x5e\x72\x74\x50\x69\x38\x82\x76\x5f\x27\xf5\x2a\x14\xb8\x5c\x02\xfc\x0c\x76\xc1\x22\x13\x12\xaa\x6b\x68\x17\x14\xba\xff\xb3\x40\xbf\x64\x18\x20\x86\x47\xe8\x9a\x90\x31\x9b\x4b\xb9\x14\x1f\x3f\x7c\x98\x51\x39\xcf\x26\x47\x51\xba\xf8\x90\x27\x1d\x7f\xc0\x4b\xba\xc0\x8a\x5f\x08\x5f\x7d\x98\x24\xe9\xe4\xc3\x02\x0b\x49\xf8\x87\xe5\xfd\x0c\xbc\x0d\x56\x87\xfd\xe0\x86\x9d\xa5\xff\xe3\xec\xdf\xbe\x3f\x3c\xfb\xf3\xf7\x07\x65\x91\x5a\x77\x3a\x47\x2c\xc2\x4b\x91\x25\xc6\x2b\xc9\x7d\xda\x00\x52\x16\x28\xb1\x6e\xbf\xcf\xc3\xed\xda\x4e\x20\x1f\x5f\xde\x06\x2a\x4e\xf8\xcf\x2f\xa3\x2f\x17\x57\x7f\x0d\x04\xda\xcd\xc5\xd5\xf0\x73\xb3\xaa\x53\x92\xd8\x05\x32\xfc\xc4\xd2\x47\x16\xae\x5e\x14\x17\x9d\x31\x49\x17\xc4\x0a\x6c\xf3\xcf\x1b\xbd\xd2\x0d\x56\x7e\x71\xf3\x63\x78\xf1\x7c\x3a\xfb\xeb\xcd\xe8\xee\xfa\xe4\xa7\xc6\x95\xe8\xc7\x82\x99\x5d\x83\x4b\xe5\x38\x4d\xb2\x05\xf3\xff\xde\x7c\x6e\xa7\xe7\x37\xa3\xcf\xc5\xd9\x5d\x0c\x6f\x42\xb2\x5f\x85\x9e\xba\x83\x1f\x2e\x2e\xce\x46\xc3\x60\x2f\x4f\x86\x37\xa3\x9b\xd3\x2f\x81\x92\x7a\x72\x7b\x35\xbc\x39\xbd\x38\x6f\x5c\xa6\x9d\x41\xc5\x42\xd5\xb2\xfc\x65\xee\x5a\xce\xb4\x3a\xe6\x43\x13\x05\xd3\x07\xe5\xd0\x4b\x91\xd2\x0e\x2e\xd0\x01\x0e\x9d\x7f\x20\xd2\x33\xad\x94\x35\x32\xdc\x26\x54\x2f\xeb\x1a\x37\xba\x49\xe4\xdd\xb8\x29\xc0\xbc\x8c\x1f\x1c\x27\x49\xfa\xa8\x63\x11\x0b\xaa\xb4\x57\x93\xaf\xaa\x7e\x22\x50\x94\x71\x4e\x98\x4c\x56\x47\x15\xe2\x24\xdc\x96\x94\xcb\x13\xe7\xad\xde\x88\xe1\x2a\x5d\xbf\x65\xa7\x6f\x25\xab\x14\x1d\xbd\x76\x5a\x50\x97\x3e\x9d\x7d\x21\x42\xe0\x19\xf9\x64\x83\x61\x3b\x12\x52\xd7\x3f\xfb\xff\xfc\xef\xeb\x35\xfc\x6c\x87\x08\x66\x08\xbe\xcd\xe1\x24\xe5\xd2\x4a\x95\x6d\x78\x39\xc2\x99\xe8\xc4\xcc\xcd\xb1\x3c\x8c\x32\x41\xf8\xa1\x71\x9e\x90\x18\x61\x35\x51\x13\xc8\x83\xea\x51\x4b\x2c\x14\x13\xa5\xa0\xd3\x10\xf3\xf3\x4c\xd7\x93\x42\x30\x9b\x9a\xdb\x75\xc9\x29\x8b\xe8\x12\x27\x1b\x1d\xbd\x82\x77\xc7\xe0\xf6\xbf\xa3\x53\x84\xd9\xea\x7d\x49\xf1\x92\x84\x2f\x20\xa8\x6d\xa6\xe9\x94\x98\x75\x6c\xad\x77\x87\xb1\x54\xe2\xd0\x1d\xb1\xc1\xde\xe8\x68\x4b\xdd\x72\x0b\xa3\x98\xb7\x6b\x43\x12\x27\x97\xd5\x63\x56\x11\xcc\x37\xab\x9a\xb6\xfa\x0b\x5e\xaa\x2d\xd6\x95\x25\x10\xce\xd7\x68\x62\xd5\xa6\x28\x98\xfa\x57\x40\x32\xcf\x2f\xd8\x5e\xc5\xc8\x49\x68\x82\x4e\xe5\x97\x04\x4a\xbb\x07\x23\x30\x2c\x39\xcd\x64\xc6\x95\x32\xa5\xd4\x7e\xf4\x1d\x39\x9a\x1d\xa1\x8b\x9f\x47\x57\x57\xa7\x27\xa3\x01\x1a\x5e\x5e\x8e\xce\x4f\x06\x88\xc8\xe8\xbd\xb5\xb7\x41\x6a\x92\x78\xcc\x64\x6a\xdc\x7f\x2b\x34\x4f\x1f\xd5\xbb\x16\x84\xcf\x48\xb0\x66\xf3\x63\x04\xc9\x21\x33\x2a\xa4\x8e\x94\x80\xfa\xe3\x95\x52\xa1\x8b\xa2\x1e\xa4\x39\x24\x93\xf3\x6d\x58\x03\x0b\x91\x2d\xf0\x24\x21\x77\x14\x2f\xee\x78\x9a\xac\x3b\xc3\x95\x47\x2a\x57\x1d\xef\x84\x76\xb5\xdd\xe1\x28\x4a\x33\x26\x5b\x8f\xb6\x6e\x1f\x4f\x80\x4c\x02\x2d\xd5\x81\x02\x47\x4d\xb9\xf8\x88\x23\x97\x40\x11\x38\x8f\xc0\x7e\x00\x91\x91\xe4\xf0\x0e\xd8\x92\x3a\x5a\x5e\x85\x14\xe8\xe9\xa9\xe9\x59\x45\xae\x63\x5d\x04\xc8\x6a\xe1\x5e\x99\x96\x6d\xe8\x57\x35\x4a\xd3\x48\xe8\xc9\xc5\xd5\xb1\x96\x53\x55\xd5\x6f\xb4\x3f\xa1\x50\xcc\x10\x20\x47\x85\xaa\x4d\x9a\x1f\xd5\x41\xd6\xf2\xe3\x97\x2c\x95\x58\xbc\x3f\x1a\x33\x25\x0c\xef\xc9\x4a\x3b\xd5\x94\xb8\xf9\xbd\xba\x02\x0f\x05\x61\x82\x4a\xfa\x40\x7e\xaf\xcd\x01\x25\x30\x1f\x30\xa7\x8a\xb5\x84\x7a\x83\x29\x16\x15\x16\xe6\x99\xd2\x04\xa2\xea\x6a\x50\x23\xed\x0c\xdc\x60\xe2\x57\xf3\xb1\xdf\xe9\xe9\xcf\x88\x84\x50\x99\xa4\x32\x53\x5b\x1f\xeb\x6a\x54\xa5\xa9\xaf\xd5\xc4\x80\x2b\x4e\x74\x98\x6f\x2b\x8f\xdf\x26\x47\xa6\xab\x2e\x5d\x3c\x0e\x54\x2c\x13\xbc\x2a\x59\xe5\xeb\x8e\x91\xb2\x3d\xc5\x12\x47\x24\x0f\x33\xda\x88\x6c\x94\x2e\x16\x29\x4b\x56\x0e\x5a\x14\xd3\x29\x24\xff\x49\x75\xc4\xd0\x84\xc8\x47\x42\x58\xfe\x29\x32\x47\x1d\x51\x26\x24\x66\xba\xd4\x17\x70\xcb\x58\xd1\x2a\xce\x40\xc3\x1d\x1f\x0c\xd0\xf8\x20\x26\x0f\x24\x49\x97\x0b\xc2\xa4\xfa\x80\xc8\x4a\x81\x36\x5a\x60\x9a\x9c\xa7\x4a\x5d\x89\x70\x9d\x7a\xdc\x76\x5b\x38\x89\xe8\x92\x12\x26\xc5\x1d\x51\xe3\x3e\xa9\x57\x76\x9d\x39\x61\xf1\x4b\x30\x13\x84\xe3\x98\x13\x21\xa0\xc2\x8d\x9d\xa4\x31\x7e\xb4\x33\xdb\x11\xa0\x1d\x0f\x3b\x77\xe8\x6e\xd9\xb8\xda\xac\x8a\x52\xee\x12\x7a\xdd\x8b\xf3\x9a\x24\x8d\x5c\x6b\x2a\x1c\xe5\x95\x33\x6c\x04\xd5\x01\x32\x8a\x4e\xb3\xe2\xb1\x51\x77\x61\xbb\x79\x86\x94\xb9\x56\xcf\x35\x4e\x4d\xf8\x50\x3b\x5b\xe6\x2e\x57\x6d\x8c\xa7\xb0\xe8\x9c\x24\x6b\x67\x1c\x25\xa9\xc8\x78\x4b\x9b\x35\x9c\xf4\xb1\x79\xb4\x69\xde\x23\x5f\x13\xcc\x12\x29\x3a\x29\x9b\x15\x84\x47\x9c\x2c\x39\x11\xc0\x93\xe0\x66\x55\x87\x5b\x9a\x5b\xd6\xfc\x7a\x80\x28\x8b\x92\x2c\x56\x34\xc0\x49\xee\x46\x65\x31\xca\xaf\xb6\x31\x5b\x18\x3b\x0d\x61\x81\x1e\x49\x92\xa8\xff\x46\xe9\x62\x09\x62\xdb\x4c\xd7\x8c\xa4\xec\x69\x89\x25\x19\xa0\x34\x93\x6a\xb0\x81\xae\x08\x68\xb6\xe0\x70\x82\x01\xef\x97\xd7\xf9\x1d\xb3\x5b\x61\x81\x13\x0e\xa6\xa5\x79\x5d\x0b\x30\xca\xd0\x67\x22\x61\x14\xc0\xcd\xfa\x0b\xd4\x95\x0f\x2b\x45\x50\x91\xf6\x5b\x9c\x28\xb3\x92\x0e\x3b\x7f\x46\x25\xe1\x38\xf9\x82\x97\x3f\x24\xe9\xa4\x71\xdf\x87\x68\xa1\xcd\x12\xf3\x16\x44\x8b\x06\xa9\x87\x2f\x5a\xc7\xa3\x84\xf3\x20\x72\xb8\xe6\xf8\x87\x41\xa6\x66\xf6\x84\x10\x0f\x65\x1a\x5d\x0b\xe1\xba\xe2\x3c\x4d\xa2\xfb\xba\x39\x82\x41\x7d\xf7\x7a\xcc\x76\x3d\xdf\x45\xd9\x55\xb1\x8e\x09\x42\x17\xc7\x53\x2f\x06\x0e\x88\x9c\x13\xca\x51\xab\x65\xd9\xf3\x7b\xa7\xcf\x7c\x7b\xa6\xc9\x79\xbb\xce\x53\xa1\x85\x88\x13\x10\x6a\x62\x06\xe7\x1b\x94\xe9\x3c\x1a\xb3\xc2\x24\x50\x4c\x96\x84\xc5\x02\x01\x7b\xd9\xd3\x10\xc8\xfe\x01\x9a\xd2\x6f\x66\x50\x1b\x20\xcb\x7f\xea\x59\x5b\x35\x3e\x98\x39\x2e\xb3\x5d\x87\xfb\xf1\x12\x9e\x6f\x74\x32\xa4\x42\x19\xd4\x91\x52\xac\x38\x89\x52\xae\x44\x22\xbc\xd6\xb9\x45\xd7\xde\x8d\x12\x73\x45\x14\xbc\xce\xea\x0a\xe6\x91\xe3\xde\x63\x2c\xc9\xa1\x32\xdc\xd7\x04\x84\x96\xa9\x7a\x0d\xa2\x0b\x65\x5b\xb8\x18\xa5\xef\xf8\x98\x90\x19\x66\x88\x67\x8c\x51\x36\xab\x99\xad\x15\xed\x5b\x1c\x66\xa5\x59\xe1\x85\x32\x33\x41\x8f\x50\x13\x0a\xe7\x21\x96\x40\xce\xc6\x79\x18\xcb\xfb\xb9\xa8\x26\x1b\xc8\xf6\x88\x9d\x23\xa0\x66\xb2\x19\x94\x57\xdf\x9b\xc9\x26\x58\x48\x64\xe6\x54\x33\x63\x5f\x9b\xdd\x01\x32\xa2\xa9\x44\x9e\x6f\x38\x74\x51\xce\xfd\x29\x22\x41\xa4\xa4\xa6\x94\x5b\x26\x08\xc2\x53\x65\x17\x2f\x08\x9f\x59\x85\x4f\x57\xf7\x70\x47\xdb\x94\xf9\xb0\x72\xd4\x97\x25\x63\x56\x39\xf4\x11\x1a\xb2\x52\x90\xdc\xfa\x30\x02\x7a\x69\xa9\x8d\x93\x47\xbc\x12\x68\x09\xb5\x58\x74\xdc\x3e\x5f\x3c\x38\xed\xc2\x87\xac\x87\x4e\x29\x54\x34\xc2\x49\xb2\x42\x60\xe8\x79\x33\xab\xd9\x2c\xaf\x8e\x63\x7b\x61\xd7\x52\xf7\x2f\x38\xa2\xab\xaa\x3a\x3a\x13\xa8\x52\xd2\x95\x94\xd9\x1c\x47\xe2\x87\x65\x0d\x20\x13\x74\x4b\x63\x5d\x8c\x42\x27\x76\x9d\xc2\x07\x2e\x90\x33\x3c\x21\xc9\xd6\xce\xeb\x8d\x5c\xf5\xf0\x6a\x03\x95\x55\xe6\x37\xd1\xce\x78\x82\x1e\xe7\x84\x17\x45\x9b\x75\xe2\xf0\xac\x9d\x6b\x3e\x5f\x67\x50\x9c\x66\x8b\x85\x5a\xec\xf7\xe6\xf2\xbb\x0e\x17\xee\x5f\x24\x39\x30\xbc\xfa\x16\x29\xba\x6f\xb6\x99\x83\x87\xe0\xae\x9c\x02\xda\x05\x86\x7b\x27\xde\x20\xc7\x33\x2d\xf3\x15\x4f\xa7\x88\xa5\x8c\x20\x2a\xf2\x1f\x43\xf8\x55\x43\x71\x80\x99\x66\x84\x11\x0e\x25\xbf\x6c\xb4\xb6\x5c\x0d\xed\x99\x8d\xf2\xa1\x33\x26\xd1\x94\x92\x24\x16\x88\x11\x65\xd3\x60\xbe\x52\x27\xc4\x08\xb4\x36\xba\xd1\xae\xb4\xd5\x8a\xeb\xc3\xa8\x91\x16\xcf\x0c\xf9\x57\x4a\x13\x2b\xcc\x0b\x0d\x93\x24\xff\x91\x79\xc8\x20\x5f\xc6\xcc\x59\xc1\xc0\x7f\x54\x28\xeb\xee\x08\xc1\xb6\xc9\xfc\x29\x75\xc7\xa8\x0f\xec\x1e\x0e\xac\x2e\x2b\x74\xf6\x52\x17\xdb\xdf\xde\x5b\x39\x1d\x43\x30\x98\xba\x8c\xd4\x0a\x66\xf4\x81\xb0\xca\x2a\xe9\x96\x29\x92\xc0\x0d\xd9\x2c\x75\x4c\x39\xb5\x3d\xf0\x53\xb5\xa7\x94\xda\xe4\xac\xe4\xb9\xd2\xc5\xd2\x72\x23\x3b\x59\xb9\x20\x8e\x6f\xaa\x9c\x6a\xd1\xa2\x8b\x5d\x63\x81\x7e\xcf\x52\xf9\x7b\x94\xdb\x68\xd6\x1c\xd6\xd5\xf6\x8c\x6b\x62\x10\xc0\xec\xd5\xdb\xe0\x84\x1a\x26\x41\xd8\x9d\xd5\x78\x3d\xe5\xb7\x05\xb4\xe6\x41\x95\x27\xd5\xde\x46\xe5\x40\x73\x5d\x9e\x92\x4e\xb5\xdd\x99\x0f\xe0\x39\xea\xbc\x22\xcd\x06\x9c\x40\xd8\x84\xa5\x68\x91\x72\x52\x48\xf7\xd5\xc2\xdb\xde\xeb\x26\xcd\xb2\x3d\x97\x56\xb8\xc3\x74\x0a\x63\x7e\xcc\x03\x37\x58\xb3\xfb\x6b\x17\x10\x8b\x45\x08\xce\x6d\xe0\x80\x35\x00\xdf\x6a\x93\x7c\x13\x58\x44\x9d\x4e\xea\x1c\xd1\x7e\x5d\xc3\x3a\x58\xeb\xd1\x98\x7d\x4a\xb9\xb9\x3b\x85\xc1\xa8\x4f\x70\x74\x7f\x48\x58\x8c\x70\x26\xe7\x1a\x5e\x6a\x7c\xc7\x2b\xb3\xb3\x4a\x2f\x00\x16\xb0\x5b\x1c\x53\x11\x61\x6e\x84\xfe\x14\x3f\xa4\x76\x16\x63\xe6\x0d\x02\x28\x78\xc8\xb4\x81\x6a\x00\x75\x0a\x04\x81\xcc\xc6\x3a\x5a\x54\xe5\xbc\x97\x32\xde\x9b\xcf\x8c\x9f\x37\x3b\x86\xf7\x91\x98\x11\x21\xc6\x07\x7a\xd6\x05\x0a\x9d\x5a\x7f\x94\xb5\x6f\x84\x5f\x3d\xd4\xfd\x52\x9f\x31\xeb\x91\x31\xab\x50\x6a\xca\xf7\x56\x76\x06\x60\xdb\x69\xc6\x01\x5b\x5b\x35\xe6\x77\xd1\x9c\x26\xb9\x8f\xfa\xfd\xc0\x9c\x47\x3d\x64\x42\x1e\x48\xa2\x06\xa6\x2c\xe2\x64\x41\x98\x89\xb6\x7f\x8f\xfe\x4b\xe7\x82\xa3\x3f\x8e\xd9\x67\x10\xab\x49\xb2\x1a\x20\x3a\xcd\x47\xc6\xb2\x30\xcc\x7d\xe5\x04\xd4\x96\x69\xc9\x12\x4c\x44\xef\xf7\x1c\x3f\x90\x31\xb3\xc3\xfc\x17\xba\x47\x7f\x40\x7f\xac\x73\xe4\x18\x60\xf5\x53\xdb\xf9\xc0\xc5\xf6\x5d\x9e\x64\x18\x18\xf5\x11\x24\x87\x75\x03\x84\xad\x72\x9c\xa9\xe6\x14\x5c\x87\x06\xa7\xec\x21\x2d\x47\xaf\xfc\x93\x8b\x39\x61\xf2\x8e\xa5\x31\xb9\x23\x15\xa1\xab\x06\x41\xa1\x2e\xf5\xf3\x34\x26\x6b\x03\x4f\x4e\x41\xfe\x0a\xae\x0b\x91\x4d\xdc\x76\xa8\xf7\xe6\x46\x77\xc8\x60\xd5\x13\x76\x45\x50\x37\x99\xee\xa6\xb1\xb2\x0b\xa3\x5d\x0d\x40\xa2\x9b\x09\x54\xc7\x6b\x74\x13\x26\x80\x1f\x15\x4f\x61\xd1\x43\xac\x7e\xac\x56\x6e\xee\x1c\xaf\xbc\x2b\xa4\xcc\x70\x3a\xa3\x4a\xdb\x6e\x1f\x8f\x03\x21\xb8\x89\x9b\x5b\x27\x7c\xb4\xf2\x73\xe7\xa4\x58\x26\x58\x2a\x2e\x3f\x74\x6c\x97\xc7\x98\x26\x69\x56\xd4\xb9\x0d\x01\xa8\xf0\x81\x51\x46\xbd\x5e\x29\x11\x3c\xd3\xa0\x1b\x32\xa7\x4a\x72\x33\x34\x3c\x3e\x43\xea\x50\xa4\x0b\xa2\x2b\x01\x28\xa2\x65\x72\x9e\x72\xfa\xcf\xda\x80\x6c\xbd\x86\x9d\x07\xd2\xbc\x0e\x44\x30\xcf\x50\xd7\x06\x1e\xd5\x9a\x81\x0c\x0c\x89\x2a\x0b\x07\x4d\xd4\xf3\x1c\x94\x8f\x69\x06\xed\xac\xb4\xc3\x58\xd7\xa5\x11\x61\xbf\x23\x6e\x3b\x67\x69\xc8\x96\x1d\x90\x1a\xc0\x7a\x0c\xce\x23\x14\xcd\x31\x9b\x35\xeb\x91\x7f\xc9\x48\xb6\x23\xd0\x8c\xc9\x7b\x7c\xa1\x70\x3c\x9e\x89\xbc\xf9\x97\xa6\x8d\x12\xc9\x85\x7e\x63\x26\x20\x8f\xc5\x7d\xee\x50\x73\xb8\x65\x6d\x46\x17\xed\xf9\x16\xce\x97\x2b\x73\xfc\x76\xe0\x7e\x79\x8e\x78\x7d\x59\x3f\xaa\x90\x3f\xc0\x7f\x26\xd3\xe7\x59\xbd\x1b\x4e\x86\x17\xf4\x8e\x5d\x7b\x3a\x3a\x58\xd2\x76\x52\x66\x86\x46\xb8\x96\x83\x9b\xd5\xdc\x71\x1d\xfa\x51\x3a\xb3\x84\x7e\xf7\x1d\x84\xb1\xb6\x76\xdf\x7a\x6e\xc9\x1c\x8a\xa8\xb1\xa8\x7a\x35\x24\x7e\x5a\x57\x4b\x18\x18\x0c\xd1\xb0\x5e\x5c\xb0\x0e\xa5\xec\xcd\x68\x83\xdb\xa9\x6c\x08\x55\xcf\xcd\x7e\xdd\x76\x2a\x8d\xe1\x90\x96\xc1\x0d\xb0\xe8\x9b\x8e\xed\x99\x41\x1b\x85\x61\x01\x0d\xa1\x48\xbd\xc0\x28\x44\x08\x32\x81\x24\xc7\x80\xde\x4b\x99\x18\xb3\xaf\x5a\x8b\xa5\x42\xdb\x8b\x26\xbb\x16\xcc\x51\x44\xe1\xdf\x20\x3c\x4d\x22\x9e\x9c\x63\x6d\xe3\x54\x87\x20\x5c\x3d\x0c\x77\x12\xfc\x20\x44\xd5\xcb\xe0\x45\x46\x75\xaf\x1c\xd2\x12\xda\x47\xc8\x96\xda\x33\x57\xfb\x8a\xa9\x00\xa4\x2b\x4e\x6a\x6d\xc6\x49\x9a\x26\x04\xb3\x3a\xb5\xba\xf2\xeb\x92\xb7\x88\xfa\x28\x46\x65\xf5\x29\xcd\x8c\x67\x44\xd9\x14\x38\x49\x0a\xeb\xc2\x50\xb6\x4a\x12\xa6\x9d\x0b\xc6\x30\x54\x13\x8d\xd7\x04\x44\x06\xfe\xc9\x9f\x90\xa4\x13\xd2\x44\x3f\xd0\xc8\x45\xf0\x93\xbc\x32\x52\x2b\x78\xbb\x0f\x80\xa8\x4c\x06\x58\x37\x31\x3f\x85\xa0\xd1\x35\x1c\xc2\xf0\x37\x9c\x62\x26\xe7\x95\xa0\xe7\xa6\x09\x5a\xd4\x75\x1b\x8d\xf5\x23\x68\x8f\x28\x7d\x20\x9c\xd3\x98\x78\x33\x6d\x1f\xe6\x2a\x2d\x3c\x44\x36\x20\x02\x70\x08\x0c\x78\x42\xc5\x5e\x20\x8e\xac\x63\xca\x5d\x47\xc1\xeb\x20\x4f\x18\x1e\x8e\x53\x22\x3c\x0d\x10\x66\xaa\x8f\x17\x9d\x12\xa5\x25\x8e\x99\x52\x81\x7d\x6d\x15\x0b\x25\x07\x96\x3c\x9d\x19\x10\x23\x8e\x78\x2a\x84\x01\x2b\xe8\x71\xc4\x51\xe3\x45\x77\x63\xb2\x4c\x76\x11\x86\x7a\x3e\xdc\x62\xb9\x86\x63\x9e\x83\x5c\xa3\x18\x4d\x88\xcb\xa8\xa9\x15\x4b\xdb\x42\x9a\x2c\xaf\x21\x4e\xb0\x30\xa6\x39\x20\x7f\x0a\x98\x87\x0e\x6a\x8c\x9b\xb3\x46\x00\x1e\xda\xcd\xf6\x59\xc8\x64\xc5\xe9\xf2\x69\x54\x20\xca\x39\x81\xba\x38\x93\xc4\x44\x9c\x02\xae\xa1\x79\x8f\x90\x9c\x22\xce\x0a\xd5\x6f\x06\x31\x2e\xe8\x42\x1d\x10\x48\x07\x66\xe9\x61\xba\x04\xb3\xa6\xf8\xab\x29\xa6\x89\x92\xa7\x34\x6c\x51\xa2\x74\xbf\x43\x28\xf3\x45\x98\xac\xf2\xc3\xdb\x41\xc0\x6f\x4f\x62\xbd\x8d\x9a\x73\xc7\x07\xc3\x1f\x2e\xae\x6e\x46\x27\xe3\x83\x3c\xba\x6a\x91\x38\xf6\xd6\x71\xf9\x51\x29\x1b\x33\x17\x23\x71\xf5\x3b\x61\x2f\x11\x8e\xe3\x3c\x1d\x48\xe3\xf3\xee\xb4\xaf\xb7\xed\xa9\x58\x1b\x26\x29\x0f\xf3\x89\x7e\x23\xf1\x15\x96\x5b\x05\x57\x1a\x83\xd7\xad\x9c\x88\x95\x2c\x9e\x31\x5a\x72\x64\x35\x88\x58\xb7\x94\x5b\xf5\x5c\x7b\x0e\xd6\x27\x01\xf6\xca\x7a\xa3\x04\xe2\x19\x53\x86\x2f\x76\x65\x55\xa7\xc0\x03\x2c\x5a\x0d\x10\xa0\xd5\x15\xd7\xae\xd0\x9f\xd0\x82\x32\x40\x96\x36\xd1\xf6\x36\x5c\x48\x97\x7a\x13\xa7\xe7\xb7\x61\xf9\x99\x1f\x2f\x6e\xaf\xc2\xec\xdf\xbf\x36\x57\x8e\x08\x47\x68\xf2\x36\xe4\x6b\xf4\xd0\x3b\xa9\x26\x85\x23\x4d\xd5\x42\xcf\x8a\x7a\xc4\xdb\xca\xdd\x4b\x9c\x4a\xb3\xeb\xb4\x3d\x0f\xbb\xb1\x17\x19\x7b\x66\xa5\xdb\x25\xeb\x69\xcb\xef\x32\x34\x27\x9f\xf4\x82\xae\x8c\xcf\x6e\x8e\x34\xc8\x17\x00\xa6\x75\xf5\xf5\xdb\x19\x9f\x9f\x8f\x6a\x41\xe2\x1d\xb4\x37\x94\x3f\x6d\x1d\x14\xc2\xf8\x68\x97\x78\x42\x13\x88\x3e\xa5\x5e\xba\x54\x85\x66\x21\x8e\xc6\xcc\xaf\xff\xac\xef\x4c\xc5\x03\x36\x23\x8e\xb2\x19\x4a\x19\x41\x29\xd7\x91\x46\x27\x0e\x07\x3e\x56\xbf\x88\x35\x93\x73\xb4\x4a\x33\xee\xde\x58\x7a\x8f\xe1\x3e\x31\xc7\x16\x8d\x60\xf5\x4c\x13\x2b\xf3\x53\x1a\x61\xbc\x25\x27\xb9\x2d\x08\x2f\x26\x0f\x84\xa1\x47\x65\xf7\xe5\xa1\x93\x31\xf3\x50\x60\x4a\x25\x65\xef\xa4\x83\x7a\xd0\xc4\x74\x44\xc3\x2e\x4e\x94\x7b\x82\x04\xa6\x66\xe4\x66\x06\xde\x01\x9c\x1f\xf2\x13\x36\x63\x3e\x78\xb2\xce\xb9\xa1\x03\x6b\xc0\x03\xbe\xab\x45\x43\x8e\x2b\x59\x96\x7c\x5b\x92\x68\x13\x0c\xf6\xa5\xad\xf0\xd9\xe4\x6c\xf1\x03\x7d\xa6\xc6\x81\xd9\x3a\x99\x5a\xd7\x4f\x71\xb6\x6b\xe6\xd9\x29\x13\x42\x4d\xf4\x67\x93\x3a\xd8\x71\x9e\x36\x17\x62\xca\xd3\x45\xbb\x29\x3e\x0f\xfa\xf7\xa6\x84\xa3\x0d\xbc\x17\x7b\x02\xfb\x5d\x3f\xcb\x3a\xbc\xef\x3a\xa9\xf7\xb3\xbe\x17\x1d\xb4\x1f\xb2\x9c\x09\x9a\x26\x2b\x49\x5c\x4c\xc7\x40\x6d\xfd\x77\xfa\x77\x96\x8b\x6e\x58\x14\x4c\xe1\x14\x04\x71\x93\x09\x41\x46\x1b\xd2\xd0\xd7\x6a\xcc\x2e\x5c\x9f\x55\x0e\x5b\x2f\xf4\x6b\x32\x97\x14\xf1\x84\xc4\x0b\x97\xa7\x5a\xcc\x3d\x2e\x90\x6b\x8d\x34\xda\x15\x06\xf3\x09\x70\xba\x55\xb6\x6e\x80\x1d\x36\x18\x89\xdd\x24\xe8\x15\x6e\xe8\xc6\x89\x05\x19\x7a\xfe\x84\x62\x22\x31\x4d\x84\x9f\x95\x56\xde\xca\xe0\xe6\xd3\x15\xba\xac\x5f\x78\x43\x2b\xd9\x6b\x8b\xea\xef\x3c\xf2\xef\x78\x70\xb2\x2c\xf0\xca\xc3\x6e\xa9\x53\x90\x10\x09\x97\x33\x65\xee\x5f\xa1\xa8\xb5\xcc\xec\xb3\x68\x15\x7e\xe2\x08\xfd\xb0\x72\xd7\x22\x4e\x12\x7f\x26\xda\xb7\x98\x37\xe3\x54\x47\x01\x2e\x31\x74\x7a\x3e\x3c\xbe\x39\xfd\x79\x04\xb8\xa4\x55\x9a\xa1\x47\x2a\x94\x85\x30\x66\xe0\xae\x54\x02\x15\x7e\x27\x53\xa4\x7f\x38\x80\x5f\x01\x5a\x51\x64\x93\x05\x55\xf6\x54\xbe\xc8\x5b\x90\x08\x57\x16\xbb\xa6\xcf\xb1\x7a\x00\xae\x6d\x8b\x8a\xab\x02\xa0\xaf\x39\x1f\x1b\x98\xc1\xf9\x20\xdb\x02\xdf\xbc\x68\xca\xd3\x42\xdf\x3c\x35\xdb\x37\x6b\x2a\x8f\x57\x8f\x7d\xab\x3e\x94\x61\x02\x28\x64\xe9\x52\x21\x0b\x97\x49\x7d\xda\x67\xbe\x05\xbb\x00\xbe\x59\x6d\xbb\x0b\x1a\xc2\x3e\x52\xad\xed\x5c\xbb\x52\x8b\x95\x2a\xd8\x65\xad\x7e\xb3\x6f\xe9\x37\x79\x54\x71\xf3\x18\x55\x17\x73\x2b\x07\x90\xfb\xac\xe0\x01\x24\x42\xe0\x35\x29\x8a\x6e\x96\x4a\x08\x0e\x47\x32\x59\x55\x20\x33\xc6\xac\x5a\x6f\x68\xe6\xb1\x6d\xe3\xbc\x3b\x4d\xd3\x71\x3b\x72\xe5\x56\x61\x3c\x22\x5f\x1d\xb0\x4d\x1b\xa3\xae\x02\x38\x29\x9c\x2b\xeb\x7f\xad\xb1\x02\x40\x5d\xd8\x04\x22\x54\x71\x2a\x5b\x46\x61\xd7\x9e\x0b\x73\x65\x3e\x8d\x05\xb5\x65\xb8\x1a\x32\x55\x77\x9f\x5f\x0b\x4e\xcc\x01\x78\xc8\x4d\x3c\x4a\x59\x58\x7e\x61\x83\x56\x94\x6b\x51\x23\xa8\x46\x86\xe9\x2e\x33\x32\x85\xb0\x89\xb3\x79\xd5\x78\x36\xd9\xae\x20\xdd\x9c\xba\x93\xb1\x98\x70\x46\xb0\x9c\x3f\x5f\xf8\xf3\x78\x5b\x97\xe1\xb3\x85\x42\x8f\x77\x52\x98\xac\x10\x16\xed\x18\x11\xed\x00\x1e\xce\x2b\x38\x95\x8c\xa8\x0a\x57\x97\x87\xc2\x36\x76\x56\x58\x1d\xeb\x29\x22\xbb\xed\xef\x97\x26\x9b\xc4\x39\xb4\x94\xc1\x11\x16\x14\x31\xed\x84\x9a\x2f\x09\x59\x13\xcb\x69\x53\x90\x54\x6b\xed\x41\x75\x48\xfd\x89\xf9\xa0\xa6\x8a\x68\xe1\xb1\xe2\x6a\x7d\x53\x83\xad\x8a\x96\x3a\xe6\x71\x42\x04\x28\x91\xda\x7a\x28\xe8\x89\x4d\x56\xcc\x98\xfd\x98\x3e\x92\x07\xc2\x07\x08\x4b\xb4\x48\x95\x6e\xc0\x88\xdf\x67\x03\x87\x89\xb5\xda\x49\x8e\xd1\x39\x5e\x90\x78\x04\x37\x8c\x07\x56\x33\xb6\x94\xf1\x53\x56\xe5\x2e\x41\x3e\x8e\xde\x06\xeb\x54\x1f\x33\x1c\x49\xfa\x40\x74\xb4\x08\x10\x92\xd4\x2e\x0c\x4e\xd4\xef\x9d\x17\xf5\xf7\x47\xe8\x46\x5d\x85\x54\x84\xf3\xf5\x30\xd0\x75\x73\x1b\xb3\x19\x4f\xb3\xa5\xd3\x75\xd3\x09\x28\xd9\xda\x9b\x5a\xe1\x45\x85\xc9\x58\x17\x6a\x84\x63\x75\xd1\x36\x33\x4e\x60\x8d\xed\x99\x73\x21\x04\x14\xfa\x0c\xa4\xee\x1f\x17\xa8\x32\x60\x04\x60\xa3\xfa\x62\x07\xbb\xf3\xc6\x96\x6a\xcd\x09\x50\xf3\x9c\x11\x1c\xa0\x4b\x6a\x84\x4f\x07\xc7\x81\x35\xb2\xab\x61\x51\xf9\x6b\x75\x2d\x5c\x2d\x38\x48\x75\x71\xe9\x9a\xbd\x6f\x9f\x66\x57\x98\xe5\x65\xc6\x97\x29\xe0\x8a\x93\x95\xc5\x62\x19\xac\xf4\x32\x5d\x66\x1a\x69\x4e\xfd\xb0\x55\xe5\x84\xa8\x90\x5f\xb0\x8c\xe6\x4a\xc3\xc8\x31\xc3\xbb\x48\xff\x0b\x04\xe9\xd3\x5a\x34\x15\x2b\x38\xf6\xdf\x5e\x63\xad\xb7\x36\x56\x75\x06\xa1\x45\x24\xc0\xbf\x92\x24\xef\xf6\x5b\x51\xc0\xaf\x9a\xd6\x41\xcd\xa0\x9d\x87\x6e\xb7\xd0\x38\x4f\x94\x4a\x4e\x19\xca\x7f\x88\x8c\x4f\xba\xf2\x48\x67\x9c\x6e\xa4\x58\x1a\x9f\x06\x79\x20\x4c\xe6\x26\xca\x02\x2f\x11\x55\x72\x5b\xdd\x3c\x7c\x46\x06\xe8\xd1\xb6\x15\x45\x18\x65\x9c\xda\x13\x06\x76\x45\xc3\xf6\x85\x8a\xfd\x07\x1d\x63\xd0\x28\xab\x08\x7b\xe5\xb2\x4c\xf5\xff\x48\x66\xd8\x45\x82\x61\x87\x13\xca\xee\xd5\xcb\x74\x1a\xbf\xf5\x1f\x73\x25\xdf\x52\x6e\x51\xb4\xc1\x9e\xae\xe5\xbc\x2d\x76\xb9\xbe\x62\xe5\xba\xa3\x40\xd9\xcc\xc3\xff\x57\x9b\x55\x6d\xd2\xf1\x2b\x9f\x6c\x57\x4d\xa0\xf2\x51\xab\x4f\x6c\xf2\x6c\x03\x64\x7a\xe3\x52\xa5\x01\x12\xc3\x20\x0f\x8c\x46\xe2\x67\x66\x18\xe5\x1c\xf2\xaa\xa8\xee\x6a\x61\x34\x94\xff\x74\x7f\xe9\x22\x48\x9a\x34\xff\x89\x52\x3e\x66\xfa\xf3\x81\xab\x97\xa0\x7e\x90\xa7\x36\xd5\x24\x03\x3b\x7e\xb2\xc5\x4f\x37\xd3\x2b\x6f\x86\xd7\x3f\xdd\x5d\x8d\xae\x2f\x6e\xaf\x8e\x03\xe5\xf2\xf8\xec\xf6\xfa\x66\x74\x55\xf9\xdd\xe8\xff\x8c\x8e\x6f\x6f\x4e\x2f\xce\xef\xfe\x72\x3b\xba\xad\xf9\xca\x0e\x70\x36\xfc\x61\x74\xd6\xa8\xa4\x56\xcf\xa1\xae\x5a\x2c\x2e\x74\x2f\xcb\xab\x36\xd8\x4b\x75\xb2\x32\x5b\x44\xff\x09\xe6\xf0\xa5\xa6\xeb\xe1\xc0\xfe\xa5\x0b\x84\x1e\xaa\xa3\x6c\x1d\x22\xf9\x29\x18\x33\xe7\xb1\x72\x72\x5b\xe2\x99\xb0\x7d\x59\x82\xd9\x7e\x44\xc3\xa5\xe9\xbd\x92\x86\x2f\x95\x58\xdc\xe7\x33\xb5\x8e\x4a\xd8\x5b\xa8\x36\x2f\x4c\x27\x92\x02\x99\xc3\x01\xcd\x9a\x60\x0a\xc6\x61\x13\xa3\xbc\x32\x6f\xa9\xc6\xab\x19\xb4\xb0\x3f\xd0\xba\x49\x13\x47\xe8\x79\x41\x9a\xd0\x8a\xe1\x05\x8d\xf4\x07\x85\x4c\x19\x93\x43\xb3\x20\x4c\x16\x47\x0c\xb6\x35\x1c\x79\x4e\xd0\x4f\x7f\xce\x27\x05\x66\xb6\x31\x5b\xb3\x52\xc9\x2f\xdb\x14\x3a\xab\xaa\xe0\x52\x21\x9b\xb6\xca\x4d\x12\xf7\x77\xae\x7d\xde\x46\xc2\xf2\x06\x8b\xfb\x8a\x2a\xc3\x95\xf2\xc7\xac\x7f\xcb\x37\xd6\x97\x36\xae\xf6\xc8\x59\xba\xde\xc1\x06\x6e\xf6\xce\xda\xc4\xb0\x35\xaf\xb4\x2b\x4e\x0a\x85\x76\x5a\xbf\x2f\x28\xd4\xd3\x5e\x2a\x43\x6e\x2f\x8d\x20\x8f\x1a\x53\x66\x2a\x38\x10\x57\x3a\xc8\xd6\xb2\xd4\xfd\x1c\x4c\xba\x13\x9e\xa4\x0f\x41\x3e\xdd\x42\xf7\x47\xa8\xd4\xc4\x3c\x7b\x6f\x1b\x0e\x0c\x7b\x37\xb6\xd6\xc6\xec\xe6\x43\x7b\x8b\xca\x3d\x68\x6b\xcf\x15\x17\xb3\x0e\x94\xb5\x81\x67\xd7\x1b\xdd\xb9\x76\xdb\xa8\x60\x27\xb0\xa7\x13\xf0\xdb\xe7\x25\x25\x75\xe5\x62\x30\xd4\x7c\xa3\x7b\x90\x87\xb0\xb5\x6a\xe6\x2e\xcd\x0f\xf6\x1e\x45\x1f\xb4\x27\xe0\x83\x77\x4f\xac\x96\x41\x6f\xff\xe6\x8d\xf6\x68\xb3\x97\xa5\x94\x2a\x5b\xec\x6e\xae\xba\xb5\x9d\xc2\x33\xf4\xc2\xad\x5c\xc4\x53\xd7\x51\xd2\xad\x61\x1c\x6f\xa8\xe5\x5a\x6a\xff\xc1\xae\xe8\x0f\x9a\xa5\xb2\x9a\x9c\x01\x6f\x34\x97\x6c\x88\x0e\xa1\x08\xbb\x01\x28\x9b\x4a\x0f\x02\x1d\xa2\x84\xde\x13\xf4\x0e\x62\x65\xc3\xcb\xd3\x77\x03\xf4\xce\xc7\xe3\xbd\xeb\x20\xfe\xf2\x1a\x69\x66\xde\xa6\xa0\x12\xa8\x45\x01\xd4\xe3\x13\xa0\x72\xbc\x69\x0e\xbd\xda\xea\x90\x0f\x20\x09\xd7\x65\x7f\x20\xbe\xef\x62\xc8\xc6\x5b\xb7\x4e\x36\xe6\x47\x66\xeb\xd2\x34\x6a\xbc\x32\x5a\x78\xc7\x71\xcd\x66\x41\xb8\x06\x7f\x3c\x74\xa5\xbf\xf3\x62\x3e\xa2\x86\x79\xfb\xd8\x7e\xd5\xaa\x02\x6b\xca\x12\xb3\x72\x53\xd6\x31\xde\x6b\x63\xb7\x16\x51\xf4\x61\x15\x45\x0c\x0a\xa2\x46\x13\xeb\xb9\xec\x69\xb9\x6c\x17\x00\x92\x70\x72\xdd\x6f\xb3\x63\xad\x10\x79\xc3\xd8\x24\x3d\xa5\xe1\x5a\x39\x1d\xd6\x3c\x5a\x5f\xe5\xaf\xa3\xc7\xdd\xa3\xc9\x7a\x97\xfb\xb5\x0e\xd5\x68\xd7\x77\x79\xae\xc5\xa9\x0e\x4d\x23\xf2\x65\x4a\x35\xc4\x53\xd2\x05\x19\x20\x68\x5f\x91\x87\x97\xcc\x79\x05\x76\x83\xab\xca\xd4\xb9\xd6\x2f\xe1\xd1\x9c\x3e\x54\xe3\x58\x1b\x37\x78\x8b\xc0\xdc\xf9\xf0\xcb\xe8\xe4\x6e\x74\x7e\x73\x7a\xf3\xd7\xbb\x72\x8c\x2e\xfc\xfa\xea\xf8\xc7\xd3\x9f\xab\xba\xd1\xde\x7d\x1e\x9d\x8f\xae\x86\x37\x79\x8b\xf1\x4a\x4f\x49\xd3\xcb\xaa\x4a\xdc\x19\xa0\x4d\x9a\x17\xac\x8b\x6d\x39\x2c\x9b\xf4\xad\xdd\x0c\x92\xa7\x09\xa2\x52\xa0\x07\x2a\xa8\x49\x59\x30\xca\xde\xed\xa9\xf5\x7c\x54\xbc\xfd\xa3\x87\x55\x1c\xe8\x4c\xe8\xfc\x25\xd4\xf8\x44\x7d\x45\xd0\x84\xe3\x58\xac\x01\x00\xc8\xeb\x22\x72\x54\xf1\x12\x43\xb0\x8f\x68\x68\xb6\xb6\x6a\x7c\x96\x22\xa5\x86\x12\xae\x67\xaf\x63\x75\x6e\xea\xae\x4f\x6d\x4e\x63\xd7\x9a\x38\xaf\xb9\xe7\x06\xd4\x3d\x74\x39\x61\xef\x24\x22\xdf\x96\x09\x8d\xa8\xf4\xea\x00\xa6\x1c\x2d\x30\xc3\x33\x6b\x7e\x64\x82\xf0\x35\xd2\x63\x67\xc1\xbb\x5d\x58\x91\x75\x38\x21\xdf\x52\x32\xec\xe2\xca\xf0\xc8\xd4\x00\xc4\x9f\xcc\x06\xad\x09\x02\x94\x4a\x95\xb4\x9d\xd2\x8e\xcc\xd7\x35\xc8\x24\x83\x4c\x34\xd1\x3f\xd3\xa2\x9c\x91\x47\x7d\x71\xed\x47\x1c\xb1\x82\x0f\x5f\x38\x90\x18\xd4\xfa\xda\x59\x4b\x8e\xbb\xf5\x91\xa6\x6a\x27\xd6\xee\xda\x64\x14\x7a\xa0\xfb\xde\x0c\x6b\x76\x9e\xd7\x97\x3e\xec\xd6\x8d\x20\x20\xe2\xfa\x4e\x04\xd0\xaf\x08\x8b\x9a\x36\x04\x50\x0f\x24\xde\x97\x66\x04\xe5\x94\x95\x70\x72\x2f\xdc\x89\xa0\x30\x99\xfd\x69\x47\xb0\x96\x6e\xfb\x9b\x93\x54\x31\xd1\x16\x6d\x08\x1c\x64\x16\xaa\x0e\x76\x13\xf9\x90\xa6\x44\xe3\x04\x24\x92\x8d\x01\xa9\x43\xd5\xc6\x75\x59\xc4\xea\x05\xde\xe7\xc2\x5a\x4c\x1e\x0b\x68\x3c\x61\x37\xa7\x7a\xa1\x38\x7a\x20\x4c\xee\x44\x5f\x80\x21\x2a\x20\xc5\xed\xfc\x67\xba\x8e\xd6\xe9\x49\x2e\x26\x5c\xe5\x59\x2f\xf0\x26\x39\x8e\xa0\xe0\x9e\xee\x25\x67\x3a\xc8\xd5\xc5\x0c\xd4\xd2\xda\x6d\x11\xfc\xb4\x4c\x97\x35\x28\x1f\x43\xed\xbc\x70\x60\x8e\x20\x48\x23\xe8\xe8\xdc\x29\xcb\x2d\xb8\x99\x59\x0c\xd5\x28\xbc\xf6\x0f\x5a\x59\x2c\xee\xb9\x7e\xe7\x1c\x8b\xe2\x2b\xd7\x6e\xf9\x06\xc9\x31\xc1\x30\x9f\x89\x3c\xc1\x12\xef\xa4\x26\x77\x07\xac\x32\x4c\xe4\x96\x27\x6b\x3b\x5c\x5d\xeb\xa2\x85\x19\x4f\x72\x1f\x01\x46\xea\x42\x3b\xf2\x00\x25\x90\x42\x10\x50\x54\x4f\xa6\x46\x0e\x74\xef\xc9\xf5\x94\x53\x35\xb3\xd9\x28\xd5\x45\x48\x9e\x45\x50\x37\x40\x9d\xb8\xea\x9d\x35\x05\x53\x40\x76\x9a\xb8\x97\x08\xd2\xe0\x6c\xbe\x2c\xe0\x54\x2a\xef\xf5\x7a\xfe\xd9\xd6\x9d\x16\xd6\x7f\x7d\x32\xaf\x5a\x20\xbd\x83\x05\xf4\xd9\x56\x9b\xfa\xca\x4c\x0d\x1d\xc7\x81\x90\x0c\x29\x39\x25\x90\xa5\x9f\xb8\xd4\x9e\x50\xd2\x19\xab\x79\x2d\x63\xa9\x6b\xf5\xa4\xa5\x07\xcd\xb3\x4a\x73\x07\x5e\x9e\xf4\xe3\x45\x6e\xbd\x32\xb9\x18\x8e\x4b\x63\x5b\x98\x5d\x75\x21\x05\xd5\xf9\xc9\x78\xbb\xa1\xd7\x98\xcf\xdb\xed\x02\x14\x7a\xaa\x1a\xa8\xa6\x04\x46\x26\x08\xd7\xbe\x33\x07\xd3\xaf\x28\xcb\x57\x1b\x4f\xac\x6c\xba\xda\x14\xdf\x2f\x35\x7f\xad\xd6\x34\xb4\x93\x12\x7d\xf7\x80\x13\xaa\x34\xbe\x23\x9b\x95\xf5\x1e\xfd\x17\x94\xd9\xfb\xcf\x1a\xa3\x09\xcf\x08\xbf\x8b\xb3\x20\x38\xbf\x6e\x52\x97\xea\xa1\x93\x4c\xae\xaa\xb3\xdb\x02\x83\x27\xc1\xd1\x7d\x97\x8c\x3f\xf5\xfb\x9a\x61\xd7\x9f\x40\xcf\x5b\x1d\x5e\x04\x35\xf9\x74\xa4\x90\x4f\x67\x62\x99\xfe\xfb\x75\xdc\x91\x41\x15\x46\xcf\x5b\x60\x42\xb0\x43\x35\xe7\x23\xf4\x49\x97\xaa\x81\x4b\x4d\xbf\x22\x4a\xb3\x24\x1e\x33\xf2\x4d\x99\xfb\x01\x0a\xa9\xa2\xbc\x88\x41\xc3\x99\x37\x55\x4b\x82\x42\xa1\xcb\xad\x6e\x98\x17\x4f\x7e\x2c\xef\x69\x79\xc9\xd5\x4c\xb6\x95\x2e\xbf\x27\xad\x8f\x8f\x95\x42\xcb\x64\xb2\x1a\x20\xb7\xc8\x02\x5b\x24\xe4\x81\x70\x3c\x23\xa6\x35\xb2\x57\x4a\x06\x6f\xd0\x09\xf9\xb2\x04\xa4\x78\xdd\xed\xbc\x4b\xf8\x8c\xa7\x65\x63\xd3\x0c\x7d\xad\x5e\xd4\x3e\x3e\xd5\x5e\xa6\xdd\xa4\xcb\x43\xdd\x5d\x81\xb9\x1e\xe5\x2e\xe8\x90\x60\x21\xe8\x74\xe5\x35\x1f\x77\x3e\x78\x80\x48\xb8\x8a\x45\x61\x65\xab\x4a\x5d\x23\xc0\x75\xee\x06\x34\xb8\x3d\x7e\xc7\xd8\xcf\x16\x4c\x42\x63\x3f\x21\x06\x2a\xca\x96\x00\xc4\x2d\x8b\xde\x6e\x0b\xeb\x31\x33\x33\xe0\x96\xdd\x4d\xcc\xe2\x65\x37\x43\x1f\x36\x02\xd2\xd7\xca\x87\xe2\xde\x9f\x90\x84\xec\x49\x4f\xbc\x32\x23\x34\xd2\x3a\x4f\xbe\x7e\xb6\xfd\xdf\x6e\x3e\x1b\xc4\xa5\x6a\x20\xec\x3b\xd8\xef\x17\x8e\x6e\xd4\xcc\xee\x33\x69\xe3\xdd\x59\xcb\x8b\x1b\x9d\xab\x3a\xe1\xb8\x05\xb1\x77\x16\xd2\x7c\xe2\x05\xd5\xed\xf5\x35\x91\xc2\x2a\xae\x1e\xa7\x6b\x9f\x89\x39\xa7\x87\x16\xcd\x98\x63\x03\x3b\x6c\xf8\x9e\x04\xdb\xcc\xec\xae\x4c\xc1\xa0\xa7\x13\x87\xeb\xb7\xab\x0b\xbf\xe5\xf3\xdd\xc0\x23\x6a\xc6\xd8\xc5\xed\xff\xb4\xaa\x59\x89\x30\x2d\x8d\x8b\xeb\x72\x2d\x9a\xee\x39\x97\x3c\x65\x77\xe4\x9b\xb2\x39\xc5\xa6\x90\xa4\x5b\x41\x04\x1a\x7e\xbd\x46\x62\xc5\x24\xfe\xf6\x11\x8d\x0f\xbe\xe8\x82\xbb\xe8\xc7\x34\xe3\x02\x9d\xe0\xd5\x61\x3a\x3d\x5c\xa4\x4c\xce\xd1\x17\xf8\x5f\xf3\xd1\x23\x21\xf7\xe8\xaf\x04\xf3\xf1\xc1\x98\x41\xde\xb7\xe9\xbd\xe8\x8a\xe2\xcc\x31\x84\xd5\x84\xa9\xe5\xfb\xc7\x7f\xb7\xc5\x7c\xd5\x6b\xbe\xff\xf0\xc7\x7f\x47\xbf\x87\xff\xf7\xff\xa2\xdf\x8f\x0f\x6a\xee\xa5\x6e\xe0\xa6\xbc\xda\x72\xe5\x68\xf7\x34\xba\x4f\xa7\xd3\x3b\x49\x17\x44\x57\xf2\xb8\xc3\xbc\xb6\x3b\x5b\x47\x70\x35\x35\x05\x46\x74\x89\xc4\x3c\xe3\xd1\xbc\x54\x87\x1f\xad\x12\xe6\x9a\xfa\xeb\x04\x44\x16\x16\xd6\xa0\x02\x9e\x22\x31\x4a\xa7\xd3\x2e\x3e\x40\x9b\x60\x55\x2e\x5f\x96\x07\xb2\xfd\x72\x39\xce\xa8\xf3\x5d\x11\xe9\xba\x72\xc4\x65\x1f\xc9\x1b\xb3\x8a\x61\x81\x4f\x6a\x11\x5f\xa7\x7c\x2b\x11\x7e\x4f\x4a\xfe\xb2\x4e\x0e\x70\x5b\xf9\xc3\xaf\xba\x04\x11\xb2\x94\xbb\x0c\x05\x1d\xd0\x30\x45\x31\xc6\xec\xe6\xe2\xe4\xe2\xbb\x7b\x2c\x79\x3a\xc3\xec\xfd\x47\x34\x8c\x63\xd3\xa0\x07\x19\xa7\x9f\x62\x9e\x39\xe1\xe4\x08\xf9\xdd\x36\x98\x22\x5c\xa5\x47\xdb\xd7\x87\x29\x27\x51\x95\xe1\x5a\x7d\xd8\x15\xf9\x4e\xdc\x23\x35\xd0\xa3\xa0\xbc\x89\x7b\x41\x5e\x38\x00\xd6\x7a\x4f\x56\xa6\x21\x67\x71\xbd\x9b\xf4\x1c\xba\x5e\x92\x48\x59\xbf\xba\x49\x19\x8f\x09\x90\x47\xb7\x79\xa7\x42\xda\xe0\x6b\xe5\xa1\x0a\x1b\xaf\x6d\x03\x88\x2e\x26\x75\x6d\xc1\x29\xba\x4f\x5f\x2e\x1b\x6c\x62\x60\xa1\x01\x24\xc7\x4a\x6c\x6c\x88\xec\x35\x3d\xa0\xfc\xd6\x35\x99\x20\xfc\x70\x8a\x23\x45\xbd\x42\x2b\x39\x5f\x54\x55\xd1\xf1\x06\x8b\xfb\xdd\x3a\x9a\xb6\x2e\xaf\x41\xe3\x3c\x1d\x5d\x73\x63\xb9\x6f\xb1\xb9\x44\x24\x16\xf7\x75\x10\x94\xce\x15\xb1\x15\x29\x2c\x3a\xab\x69\x7e\x66\x64\x2f\xeb\xce\xf4\x2c\x01\xc5\xd4\x4b\x48\x59\xe0\xa5\x6e\xeb\x02\x17\x0c\x4d\x48\x5c\x44\x02\x17\xe7\xbf\x8e\x0d\x74\x56\x8b\xe7\x27\x02\xac\xe9\x42\xa9\xcd\x31\xc4\xe6\x30\x5b\xe9\x83\xa4\x2e\x2c\x2c\xee\x85\xab\xf1\x82\xc4\x02\x27\xc9\x00\x71\x92\x41\x5f\x9e\x01\x12\x24\x99\x1e\xda\x44\xc2\x18\x25\xe9\x8c\x46\x38\x41\x93\x24\x8d\xee\xc5\x98\xa9\x1b\x84\xcd\xf4\xc5\xb7\xe4\x69\x44\x84\xf0\xae\xdc\x3c\xfc\xba\xe4\x69\x9c\x45\xba\xb0\xb5\x6e\x2c\x41\x85\xa4\x51\xa1\x9a\xb1\x92\x88\xd0\x86\x2e\xc2\x60\x60\x00\x62\x75\xa1\xfb\xca\x72\x4a\x34\x10\x35\xb3\xad\x91\x20\x51\x0a\x27\xf4\x9f\xba\xaf\x21\x7e\xa0\x69\x25\xe6\xd4\xdf\xb2\x6d\x54\x43\xb3\x3d\x77\x32\x3c\x0d\x6b\xf8\xf9\xd8\x3c\x06\x67\xa8\x89\x63\xae\x42\x76\x76\xdc\xe0\xd8\xdc\xe5\x33\x59\xa6\xc8\x8b\x3f\xdb\x9c\x31\xfd\x13\x1b\x56\xdd\x33\xdc\x15\x4c\xb9\x06\x6d\xb5\x8e\xa7\x8f\x75\x3d\x65\x93\xa6\xed\x39\xe0\x60\x74\x5b\x71\xd6\x14\x9c\x50\x57\xc4\x83\x62\x12\x4b\x1e\x45\x7b\x75\x8d\x0c\x5c\x91\x63\x2c\xd0\x32\xc9\x66\x94\xe5\xed\x35\x95\x3c\x1c\x33\xa8\x4d\xa4\x5e\x52\xa8\x98\x5b\xe6\xa8\x3d\x2e\x6c\xbc\x1b\xe1\xd8\xb1\xbe\xb1\x25\x72\x17\x26\x0f\xf9\xd6\xb6\xa1\xdc\x38\x9b\x85\x57\x85\xeb\x4d\xbf\x79\xf5\xed\x03\xcd\x6b\x6c\x79\x2f\xaa\xdd\xdb\x8d\xbd\x14\x85\x59\x95\x70\x2c\x74\xaa\x99\x0c\xe6\x06\xa1\x4a\xd3\xa4\xa7\x6e\x46\x2f\x82\x0c\x6e\xda\xc8\x4b\x2c\x75\xa3\x15\xb2\x48\xa5\xae\x2c\xa3\x8b\xbc\x98\xda\x2f\xa6\x76\xcc\x24\x49\x27\x70\xaf\x40\xfd\x17\x58\x77\x50\x9e\xcf\xac\x9b\xc4\xe8\x3b\xef\x9a\x70\x70\x9d\xf7\x75\x11\xf7\xdd\xc1\x93\x8b\xc9\xa3\xb5\x20\xe5\xb0\x20\xc4\x11\xba\xcc\xdd\x4d\xc5\x55\x4d\xb1\x92\xdc\x75\x3d\xa1\xbb\x41\x9a\x83\xdd\xdf\x01\xa4\xb9\xb0\x8c\x9a\x5a\x31\xe9\x2e\xda\xd6\x36\x2f\xea\x2c\x6d\x6f\x47\x6a\x00\xa3\xd6\x3f\x82\xcd\xb1\x6c\xb6\xaa\xda\xa2\xfd\x82\x6b\x17\x0a\x8a\xbc\x2c\x5c\xbb\x30\x99\x7d\x86\x6b\x17\xa6\xba\xbf\x70\xed\x8a\x89\xb6\x80\x6b\x6b\x77\xfb\x9d\x62\xea\x76\x42\x61\xc9\x53\x99\x4e\xb2\xe9\x35\xdc\x26\x6d\xca\xa5\x6a\xe1\x6c\xf5\x1c\x93\x25\x03\xb3\xd5\x3a\x50\x37\x45\xcc\x47\x75\x17\x96\xdc\x12\xd5\x1d\x88\xb4\x1e\xd5\xed\x50\xdd\x65\xba\xec\x23\xaa\xbb\xb0\xe7\xed\x50\xdd\x55\x5b\xbe\x41\x0c\x23\x18\xe6\xcd\xa0\xba\x0b\x14\xdd\x67\x54\x77\x61\xaa\xbb\x43\x75\x57\xef\x6c\x37\x54\x77\xe5\xf5\x5f\xcf\x3f\xdb\x62\xee\xa0\x7e\xd6\x33\xa3\xba\x83\x05\xf4\xa8\xee\x2d\x7b\x68\x84\x2c\x68\x66\x00\x05\x9c\x0d\x50\xb8\x28\xeb\x1a\x70\xdd\xa0\xd2\xee\x80\xa3\x9e\x36\xb6\x0a\x5e\xa8\xb6\x5a\xf7\x30\xa0\x83\x30\x25\x45\xd5\xf5\x67\xb1\xb6\x5e\x9f\xd9\xbe\xd2\xcb\xb6\x35\x38\x0a\x44\x76\xde\x2b\xd8\xb8\x3a\x96\xab\x28\x84\xb7\x05\x03\x9a\x92\x05\x9b\x96\x00\xac\x6f\x3d\xa9\x6b\x3b\xee\x66\xd8\xdf\xf9\xff\xad\x25\xc8\xb6\x9d\x47\xa2\x65\xb6\x09\x3a\x76\xb6\xd9\x63\x0b\xb2\x48\xf9\xba\xf0\x63\x8d\x39\x9b\x72\x3c\x5b\x87\xc8\x6d\x4b\xbd\x6d\xa9\x66\xcb\x71\x76\xf3\x6f\xdc\xd8\xa7\x1a\x0d\x2e\xdb\x9a\xc5\xf7\x80\x83\x4e\x5a\x19\x63\x71\x21\xae\x0d\xa3\x28\x35\x89\x07\xe5\x17\x82\x7b\x55\x10\x7e\xe8\x65\x12\x84\x7e\xcd\xf2\x0c\x02\xba\x5b\x05\x6d\x0b\xb2\x67\xbc\x36\xc6\xdf\x42\xc6\x0e\x75\x21\x67\xa5\xfd\xf9\x05\x13\x8a\x9c\x36\x59\x55\xe0\xd1\xda\x99\xd4\xba\x61\x76\x17\xc7\x30\xfd\xa7\xdb\xe8\x29\x4d\x08\xc2\x51\x44\x84\xae\x62\x62\x30\x20\xba\x60\x65\xc6\x93\x6d\x76\x95\xb2\x19\xac\x5b\x29\x93\x5e\x8b\x0e\xc7\x3c\xfa\xce\x98\xf3\x34\x9b\xcd\xad\x95\x65\xbb\x38\x56\xed\xe5\xd7\x72\x81\xe6\x57\x16\x10\x28\xf4\x75\x2a\x32\x41\xf7\x88\xa9\x25\xc9\x33\x47\x4d\xab\xd6\xd1\x81\x3b\x02\xec\x50\x7e\xfc\xad\x1f\x5b\x6b\x25\x90\x29\x34\x66\xc3\x00\x65\x64\x4b\xe2\x4c\x56\x39\x5a\x41\x5f\xed\x3e\x93\x41\xdb\x62\x63\xbd\x40\x9f\x20\xf5\x17\xa8\x21\xf0\x90\x89\xa7\xda\x98\x29\x00\x2d\x48\x7c\x88\xa3\x55\x94\xd0\xc8\x53\x49\x67\x1c\x2f\xe7\x4d\x9c\xd8\xc3\xfe\x5f\x0a\xf6\xdf\xb2\x58\x7b\x23\x54\xc4\x2f\x77\xfe\xaa\xd3\x11\xca\xec\xd8\x67\x22\x74\x60\xc9\xed\xe6\xb3\x73\x4e\x7c\x4d\x89\x11\xf5\x9c\xf7\xc2\x20\xf4\xf2\xc4\x5e\x32\x1d\xa2\xe2\xbe\xd8\x8c\xba\x2f\x9b\x04\xd1\x6a\x19\xb5\x50\xc3\x16\xf9\x0f\x41\x6f\x2d\x77\xef\xaf\xc9\x86\xa8\xa7\xd2\x9e\xf0\xe0\x2e\xf1\x51\x75\xd2\x66\x3d\x46\xaa\x8b\xaa\xd8\x0d\x2e\xe5\x36\xea\x75\x41\xa6\xdc\xb4\x37\x84\x4d\x0d\xbd\x1e\x00\xf3\x34\x81\x7e\xe1\x01\xb5\xdc\x0b\x1c\xf2\xc2\x11\xc8\x6e\x06\x34\x87\x05\xd5\x35\x2f\x36\xd1\x04\x8e\x72\x9b\xf8\x36\x00\x52\x6b\xec\xa1\x8e\x20\x29\x9f\xa8\xdb\x01\xa5\xb6\xb4\x6f\xba\x81\xa5\x9a\x9a\xfd\x16\xf7\x7b\x83\xb0\x5e\xa9\xb0\x47\x1f\x14\x76\x41\xe1\x6a\xda\xec\x63\x60\xb8\xdc\xec\xb2\x65\x70\xb8\x6e\xfb\x77\xc1\x49\x3b\x0c\x12\xbf\x70\xe8\xb5\x31\xea\xea\x31\xd8\xcb\xc6\xb2\x9b\xc2\xd8\xeb\xd9\xac\x32\x2e\x57\xbf\xa7\x9d\xc2\xc3\x6b\x72\x1c\xec\x5b\xb6\x8d\xe1\x39\xdc\xfd\x93\xc6\xf1\x9c\x9f\xd1\x7b\xa2\x65\x2c\x2f\x4f\x0c\xe8\xe3\x79\x4f\x1a\xcf\xab\x20\xf4\xfa\x98\x5e\xa0\x20\x3c\x6b\x20\xc6\xbe\xf9\x39\x82\x31\xeb\x94\xaa\x6c\x72\xf7\xe4\xe7\xa8\x72\xcd\x6d\x8f\xd3\x57\xb7\xb7\xb6\x30\x3a\x22\x8b\x09\x89\x63\x30\xba\x64\x8a\x52\x48\xbc\xca\x59\x80\x11\xcd\xac\x79\x8b\x7c\x0c\x3d\x82\x68\xac\x01\x99\x4b\x0c\xb5\x5e\xdc\x1d\xaa\x51\x7a\x63\x06\xfb\x9b\x24\x84\x5b\x9d\x9d\xa3\xef\x04\x65\x11\xf1\xf5\x78\x8e\xe2\x94\x08\xf6\x4e\xea\xda\xff\x98\xad\xd0\x3d\x4b\x1f\x13\x12\xcf\x60\x87\x8a\x93\x39\x44\x94\x0c\x10\x95\xee\x31\x4e\x70\x34\x57\xe2\x72\xac\xe6\x0e\x6e\x6d\x7d\xd9\x13\xf3\x2c\x37\x99\xe7\x9e\xc9\x20\xde\x1f\x21\x74\xca\xd0\x14\x2b\xa3\x58\x64\x93\x7c\xfc\x38\x55\x0a\x02\xdc\xfe\xfe\xc2\xf3\x41\x9e\x2c\x10\x57\x19\x78\xab\xd1\x5e\x15\x03\x0c\x13\x8a\xb7\x72\x8c\x3f\xe0\x6d\x52\x01\xbf\x64\x42\xea\x76\x8a\xd0\x54\xdb\xcc\xd7\x80\x9a\x5d\xda\x33\x54\x09\xd2\x29\xc4\x2c\x8d\x6b\x5b\xd9\x17\x96\xd2\x75\x2e\x79\x14\xc3\x14\x27\x32\x26\x11\x8c\xab\xc9\x1d\xa7\x8f\x4c\x48\x4e\xf0\x02\x26\x22\x4c\x57\xd8\xa9\x8e\x57\x68\x67\x03\xe5\xfa\x06\xee\xb2\xc5\x67\x94\xdd\xab\xdd\xcd\x13\xbd\x53\xc8\xa2\x55\x6f\xae\xd8\xb4\x1f\x28\xc3\x7c\xab\xc6\x73\xba\x12\xfd\x46\xa6\xfc\x64\x55\x97\x09\x2f\xf1\xba\xb4\xf7\x2e\x86\xbb\xa0\x0b\x75\x2f\xaa\xd7\x21\x10\x75\xba\xac\x1c\x46\x12\xcf\x14\x7d\xe6\x24\x59\x7a\x45\xa2\x96\x98\x4b\xd7\xd1\xc2\x64\x7f\x46\xe9\x62\x91\x31\x48\xd8\x35\xb6\xc0\xa3\x49\xf3\x33\x7e\xa1\x7c\xf0\xa3\x31\x3b\x95\xef\x84\x3a\x5f\x29\x9b\x25\x2b\x84\xe3\x07\x2a\xf2\xa4\xfb\x28\x65\x22\x5b\x10\x6e\x5e\x41\x85\x6e\x89\xa0\xbb\xb5\x23\x6c\x79\x45\xcd\x4d\x29\x5e\xb6\x62\xa1\xb9\x1b\x66\x68\x42\xa6\xea\xd2\x5d\x62\x2e\xac\x0f\xa2\xc2\x7f\x60\x36\x37\x56\xb4\x7a\xb1\x33\xf9\xb3\x7f\xec\xd0\x22\x3f\xa1\xd8\xe8\xb4\x1f\x8a\xe7\xd3\xf6\x11\xa9\x3f\x9b\x93\xd2\xa2\x50\xf3\xc5\x64\xa8\x70\x52\x6a\xb7\x50\x34\xf5\x6c\xd7\x07\x01\x87\x46\xbd\xc7\x2a\x34\x7a\x72\x9d\xbc\x45\x85\x05\x9a\x59\x6b\x17\x80\x7f\x36\x4d\x13\x5f\x21\xb1\xa4\x91\xd1\x9d\xf2\xba\xba\xfa\xe9\xfa\xad\x6d\x5b\xf0\xb4\x6e\x7b\x45\x84\x93\xf2\x0e\xd7\xd3\xf2\x5a\xff\xbe\x59\xf6\x99\xe3\xa6\xc7\x6e\x84\x41\x44\x69\x92\x74\xc9\xab\x2f\xac\xfc\x38\x7f\xbc\x79\x46\xf9\x7b\xd4\x06\xd8\xbd\x80\x53\xa3\x6b\x01\xe0\xc4\x68\x16\x42\x9a\x5d\xf2\x7f\xa4\x65\xe8\x0a\xb1\x6c\x31\x21\x7c\xcc\xd2\x29\x94\x5b\x48\xea\xcc\xc6\x25\x4f\x17\xb4\x4b\x62\xd2\x05\x6c\xf3\x95\x0d\xf6\xac\xf1\x66\xd9\x90\x90\x3a\x45\x86\xbd\xcc\x1b\x75\xc7\x18\xa6\xf5\x8c\x86\x33\xb4\xc0\xcb\x8d\x08\x5e\x6a\xda\x5e\xa2\xf4\x42\x9b\xae\x86\x7a\x90\x0d\x4d\xa0\x88\x01\x10\xf9\x11\xaf\x72\xb0\x48\x97\xe3\x74\xad\x75\x11\x22\xf2\xa6\xd7\x86\xcb\xbc\x13\xe3\x82\x65\x7a\xbf\x34\x15\xda\x9c\xa0\xe3\x2a\x36\xec\x7c\x96\xec\x9a\x9f\x52\xc9\xf6\x8f\xbd\xaf\x5f\x77\xb9\x0d\xc3\xc3\xe0\x8d\x88\x60\x3a\xcd\xa4\xfa\x12\x70\xce\xce\x69\x54\x18\x07\x69\x5b\xce\xfa\xca\x2f\xab\x47\x7d\x06\x9a\x19\xb6\x6e\x45\xac\x2d\xf1\x67\xdd\xba\x4c\xd8\x37\x56\x34\x95\xf0\xce\x7b\x97\xce\x35\xeb\x6d\x88\xa9\xd2\x5d\xb4\x5a\x99\x4e\xa7\x49\x8a\x95\xa5\x66\x62\xd7\x53\x9a\x10\x71\x84\x4e\x2b\xec\x09\xbf\xf1\x93\x4e\x6f\x85\x48\x88\xd5\x77\x32\x4e\x0d\x2a\x83\x70\xe2\xb4\x1a\x44\x4d\xd1\xe1\xdc\xe5\xc0\x89\x9a\x33\x30\x30\x68\xf2\x73\x65\xe2\xcd\xf5\x00\x14\x1c\x54\x0b\x2c\xa5\x9a\x12\xd8\x76\x54\x6a\x5f\x44\x4c\x96\x84\xc5\xee\x81\x54\x77\x24\xc5\x91\x6e\x17\x9b\xcf\xaa\x66\x4b\x77\x51\xf9\xa4\x7d\x8c\xde\xbe\xb5\xd0\x96\xf9\x77\xfe\x7f\x8b\x33\xbc\x09\x47\xef\x3c\x3b\xa7\x97\x77\x77\xee\x7f\x82\x47\xad\x33\x09\xa3\x29\x27\xe0\x6f\x5c\x38\x5c\x20\x8b\x09\x17\x32\x4d\xe1\x86\xba\x3e\xf9\xe9\xc3\xed\x29\x22\x32\x82\x3a\xac\x63\x16\x89\x87\x81\x52\x68\x7f\xc9\x88\x54\x1f\xd7\x15\xe1\x59\x10\x26\x40\x12\xd0\xb6\xf5\xb8\x2d\x61\xd4\x7f\x4f\xc2\xe7\x1b\x58\xde\xeb\x1c\xad\x0b\x56\x01\xef\xda\xc2\x18\xc0\xa6\x90\x8d\x1d\xb4\xcc\x0c\xf6\x23\x4d\x13\x82\xd9\xa8\xaa\xfa\xd9\x06\xd1\x60\xf6\x8f\x8c\x75\x54\x93\x8e\xf3\x87\xbc\x59\xd4\x68\x61\x8b\x25\xe6\x54\x74\x1b\xde\x3e\x53\x39\xfa\x3a\x21\x62\xe9\x8a\xd1\x44\x53\x0a\xe5\x85\xe2\x90\xe4\x84\x80\x08\x71\xfc\x64\xee\x7a\xb8\xe5\x3d\x6a\x78\x0f\x1d\x8d\xd9\x17\xeb\xff\xcc\x3f\x15\x79\xa3\xe8\xc5\x04\x8a\xae\x64\x60\x33\x85\xa3\xc0\xb0\x31\x15\xee\x03\xc8\xc5\x17\x59\x22\x75\x69\xa4\x29\x65\x38\x71\x13\xd5\xdf\x54\x49\x09\x8e\x59\x34\x87\xfe\x5b\xdb\x44\x68\xa7\x77\x24\xe9\xa2\x3b\x9e\x4e\x47\x89\x50\xfc\x1d\xdd\xd7\x9c\xce\x3f\xd8\x92\x6a\x1d\x36\x28\x5f\x0c\x68\x6e\xb6\x40\x8c\xb6\x4a\xb4\x9f\x2e\xd1\x85\x96\x08\x02\x27\x5b\x11\x1c\xa0\xc1\x94\x6a\x17\x8d\x6e\x6d\xda\xc9\x41\x1b\x48\xeb\x96\x9b\xc0\x5b\x10\x96\x63\xc6\x33\x06\x19\xd5\xce\x7f\x8e\x91\x20\x9c\x6a\x47\x76\x94\x32\xad\x03\x18\xe7\xc9\x4c\x89\x09\xa5\xf9\xe9\x86\x89\x0c\x2c\xaa\x34\x13\x4a\x86\xe0\x05\x91\xea\x82\xfa\x0e\x6a\xfe\xe9\x08\xc6\x00\x2d\x39\x5d\x48\xfa\x40\x5c\x19\x04\x7f\xe7\x2a\x99\x79\x9b\xe8\xd6\x92\x70\x2c\xdb\x56\x55\xa8\x7a\xfb\x85\x1d\xa1\xf2\xc0\x26\x64\x2a\xef\x2a\xfd\x2e\x0d\x26\x86\x1a\x91\xc5\x35\x28\x32\x3a\x9b\xef\x60\xc4\xf6\xa7\xfe\x4f\xc6\x2f\xa6\x8e\xba\x77\xe3\xf3\x34\x95\x9a\xdf\x72\x99\x84\x2c\x35\x41\x5d\x30\x2f\xd5\x95\x98\xd4\xa6\x52\xd8\x55\x75\x86\xef\x59\xfa\xc8\x9c\x6d\xad\xd4\x86\x11\x86\xe2\x60\x4e\xb0\x98\x38\x85\x3e\xd5\x6b\xcf\x73\x50\x6d\x68\x4f\xf2\x38\xfc\x5e\xbd\x50\x41\x31\x59\xa1\xbc\xa2\x54\xf0\x5c\x9b\xeb\x4d\xdb\x9d\xf6\xec\xea\x05\x9b\x22\x2a\x92\x2c\x8d\x6d\x6c\x7a\x50\x3a\x90\x07\xb8\x57\xd5\xab\x8e\xd0\x57\xab\xc9\x41\x18\x28\xaf\x84\x66\xfa\xec\x26\x78\x65\x9b\x9e\x57\x11\x76\x17\x00\xff\x5d\xc7\x66\x9a\x09\xec\x90\x9b\x15\x54\x0e\x2e\x54\xc6\xb4\x85\xd5\x32\x76\x6c\x2e\x6c\xf3\xd0\x35\x69\xc6\x24\x7c\x82\xaa\x2a\xba\x9d\x3e\x78\xab\x52\x96\xac\xfe\x1f\xbd\x59\x00\xec\x77\x9d\x77\x4d\x2d\x0f\xe3\xc3\x54\xe7\x07\x7c\x70\x2c\x95\xea\x52\x9c\xd2\x24\x81\x18\xcb\x11\x1a\x42\x5d\x30\xa8\xf8\xa4\x14\x79\x1b\xbc\xa3\x33\x96\xae\x0b\x31\xd4\x30\x53\xe4\x31\xd3\x75\x3d\x33\x09\xe0\x26\x17\x55\xd8\x11\x47\xed\x00\x82\xa7\x64\x0b\x2e\xa7\x91\xb5\x07\xde\x75\xb8\x8c\x5f\x22\x5c\x57\x9a\xae\x6f\x1a\x57\x4f\xfd\x73\x86\x39\x66\x12\x82\x50\xa6\x7a\x2c\x37\x81\x5e\x68\xa1\x4d\xbe\x41\xb4\x96\x69\xc3\x0e\x3e\xf2\x37\xd7\x3a\xdd\x67\xf4\x81\x30\x44\xe3\x01\xa2\x47\xe4\x68\x60\xaa\xef\x8a\x6c\x92\xff\x72\x8e\x05\xc2\x63\x56\x02\x92\x1d\xa1\x61\x22\x52\xf3\x04\x61\x51\x02\x75\xf8\xbc\x78\x99\xe3\x7c\xe3\x26\x82\x06\xca\x66\x2b\xf3\xe1\x53\xf3\x85\xf7\xe0\x98\x61\xa1\xbd\xd2\x09\x9c\xf4\xfc\xf3\x35\xfd\xcd\x9f\x34\xcf\xb8\x74\x0d\x3d\xd9\x26\xe9\x82\x72\x4d\x1b\x04\xbf\x80\x8d\xc9\x01\x7e\x63\xe6\xd8\x19\x7d\x87\x65\x42\xb0\x90\xe8\x8f\xef\x3b\x05\x67\xec\xfa\x72\xe1\x6a\x4e\x6f\x0e\x43\xb1\xa1\xef\xba\x32\xc1\x50\x86\x08\x61\x68\x8c\xec\x80\x29\x03\xb5\xcd\x32\x45\x0f\x54\x64\x50\xd9\xd0\x83\x55\xe9\xda\x74\x54\x0a\x5b\x66\x45\xfb\x29\x6b\xc4\x88\xad\x14\x6b\xfc\x97\x66\x5a\x15\x8c\x35\xd0\x24\xa7\x5a\xd9\x05\x64\x73\x1e\x84\x9e\x2b\x2d\xd7\x08\x56\x1b\xb7\xf1\x4a\x60\x0d\x93\x24\x0c\xfc\x2a\x05\x27\x26\x4c\x2d\x18\xea\x32\x1e\x21\xbf\x89\xa8\xc8\x63\x85\x61\x69\x66\x77\x56\x94\xe2\x3c\x66\x0e\x9d\xea\x8f\x5d\xa9\xec\x54\x99\x8b\xcf\xa8\x03\x57\xbc\xfe\x4c\x17\xc8\x6c\xa1\x0b\xd7\x57\x19\x6f\x70\xaf\x94\x4c\xf4\x06\xd5\x78\xd7\x2f\x68\xaf\x29\x57\x9b\xbb\x70\xcb\x3e\xa6\x15\xd6\x73\xcd\xe6\x7a\xaa\xc5\x16\x9b\x9a\x07\xad\x9f\xcb\x81\x1b\x4c\xfd\x34\x06\x44\xd9\x7a\x21\x98\x23\xb4\xac\xe8\x00\xbb\x95\xc6\x1e\xc6\xc4\x0b\xc0\x03\x94\xc8\xca\x3d\xf3\xcb\xba\x7a\x58\xaf\x7b\xf9\x83\x7c\xfd\x76\x29\x2e\x0a\x5d\x5e\x78\xbd\xae\x37\x8c\xff\x81\x23\xc2\xa2\x95\x7e\x93\xad\xeb\x97\xeb\x71\xa0\xec\x79\x19\x9c\x18\x6c\xf3\x4a\xed\xd0\xd4\xba\x3d\x42\x23\xb8\x67\x6c\xe9\x5b\x3c\xb5\xfe\x05\xef\xc7\x63\xa6\x0c\x13\x75\xc5\x0b\x3d\x69\x3b\x7e\xc8\xe2\x55\x27\x40\x43\xf7\xb7\x72\xcd\x2c\xd6\x17\x07\xa8\x33\x26\x6c\xe6\x00\x8c\x01\x99\xd6\x68\x34\xfb\x88\xe2\x34\xba\x27\xfc\x03\x27\x31\x15\x1f\xc1\x55\x2e\x6b\x7d\x74\x0b\x65\x6c\x6f\xad\x68\x6c\x5a\x7d\x5e\xbf\xdf\xa0\x8f\xf4\xbd\x45\x94\x86\x30\x05\x6b\xc2\xa2\x0a\x35\xd4\xd0\x94\xbe\x40\x84\x49\xbe\x5a\xa6\x94\x49\x8b\x92\x88\x0a\x84\xb0\x86\x86\xd2\xd9\xea\xb0\x38\x7c\x17\x21\xb5\x0d\x97\x7d\x33\x27\x82\xd8\xf8\x81\x5e\x94\x4c\x91\xae\x0a\xad\xc5\xc5\x12\xcb\xb9\x00\x5c\x64\x48\x03\x63\x73\xc1\xa3\x8a\x42\x78\x09\xe1\x07\xed\xa4\xc8\x1f\x72\x80\x3f\x21\x69\x92\x8c\x19\x23\x24\x16\x08\xea\x14\xbd\xab\xc4\xdf\xaa\x47\x07\x08\xc7\x31\xfa\x9f\xdf\x7d\x3a\xfb\xeb\xcd\xe8\xee\xf4\xfc\xf2\xf6\xe6\xee\xd3\xe9\xd9\xe8\xfd\xc0\x7d\x78\x71\x7b\xe3\x3e\xd5\x0e\x96\x07\xc2\xd1\x02\xdf\x83\x85\xc7\x84\x56\xff\x00\x16\xe7\xcf\xd4\xa6\x3b\xa9\x6f\x04\xb1\x50\x13\xa3\xa6\xb8\x84\x17\xb3\x87\x6b\x52\x12\x3b\xd8\xbe\x57\xee\x91\x66\x1e\xb4\xcc\xe3\x5e\x61\xd5\xc0\x05\x61\x52\xc9\x18\x83\x59\xcb\x4d\xdf\x9c\xe1\x08\x9b\x51\x56\x17\x10\x27\xec\xe1\x29\x75\xf8\x9f\xc8\xea\x67\x65\x5d\x5f\x62\xca\x5b\xf3\xde\x88\x3d\x50\x9e\x32\x58\x9a\xf3\x6a\xe5\x1d\x3a\x08\x2c\xb8\x70\xa8\x84\xd6\x85\x21\xe4\xb2\xac\x05\x5d\xb0\x29\xad\x85\x57\xbd\xd8\x72\x87\xda\x4d\x4c\xbe\x49\x8e\x4d\x43\x50\x61\xc4\x0d\x7e\xc0\x34\x01\xc0\x8c\xbd\x68\x72\x1e\xd4\x8d\x1f\x3e\x22\x92\xe0\x49\xca\x01\x46\xab\x23\x7c\x76\x08\x43\x30\x28\x81\xee\x06\xaa\x03\x6e\xa4\xfc\xe9\x1a\xf2\x04\xf7\xd0\x65\xca\xdb\xdc\xe4\xea\x67\x40\x85\x74\xa9\x4c\xb2\x82\x10\x35\xd7\xec\x94\x60\x5d\x09\x59\x80\xa4\x11\xd9\x52\xad\xc3\x80\x41\x92\x24\x28\xba\xa5\xce\x80\x38\x32\xce\xf1\xfc\x97\x29\x43\x3f\xfd\x59\xa0\x49\x26\xc7\x2c\x1c\x23\x65\xd0\x7f\xe7\x07\x2c\xa3\x79\x95\x61\x57\x7f\xd5\x5e\x6e\xd9\x43\xc4\x2d\xf3\x6e\x19\x8e\x14\x8c\x46\x99\x24\xb3\x62\x8a\x5a\x97\x6a\x29\xe7\x00\xea\x81\x56\xc6\xd0\x5c\x24\x45\xa6\x29\xad\xc1\xf0\x2f\xd3\xf8\x9d\x40\xa7\x97\x4a\xe6\x2a\x1d\x1b\xc2\xd1\x54\x68\x4f\x1a\x44\xa7\x00\xa1\xa7\x9f\xd6\x08\xa1\x01\xfa\x1e\x8d\xb3\xef\xbf\xff\xb7\x08\x7d\xb3\x7f\xfc\xc7\xbf\xff\xfb\xbf\xfd\xc7\x26\xbd\x72\x60\xdc\x9c\x46\x26\x83\xb6\x28\x84\xfd\x1d\x18\x15\x2a\x3a\x77\x8f\x04\x43\x81\xe0\x3b\x68\xb5\xde\x2d\xdd\xab\xa2\x62\xae\x51\x2b\xad\x37\x82\x13\x1d\xad\x87\xb2\xd3\x75\xf0\x24\x22\x44\x47\x55\xab\xb2\xf4\xb4\x19\x07\x8a\xce\x3c\x6e\xda\xfe\x43\x59\x57\x30\x9a\x1e\xc5\x1a\x0b\x1e\xba\x2a\xa0\x7d\x58\x1e\x7b\x2b\xf6\x8f\x37\x53\x36\xf5\xda\x23\x20\x7b\xde\x48\x07\xcd\x78\x9a\x2d\x1d\x04\xd1\x82\x31\xf4\x36\x8c\xd9\x17\x75\xcf\x9f\xb2\x69\xfa\xd1\x30\xec\x19\x65\xf7\xf0\x57\x8d\x8f\x7b\xfb\x3d\x72\x85\xa8\xbd\xcf\xad\x7d\xa0\x29\x7e\x68\xba\x11\xa8\x59\x0b\x89\xa3\x7b\x9d\x1e\xd8\x54\xc8\xbc\x6b\x29\xf6\x1c\xc2\x90\x29\x49\x69\x48\x07\x7d\xa6\x85\x5f\x28\xe9\x81\x62\x84\xd1\xed\xd5\x69\xf5\xbb\xef\x69\x59\x37\xaf\xbe\x05\x42\x06\x81\xff\xf9\x89\x76\x8a\xa2\x15\xd2\x59\x49\xc0\xea\x2e\x2b\xa6\x2e\x41\xab\x90\xd9\xbb\x55\x42\x68\xe7\xd2\x13\xbe\xae\x07\x70\x95\x26\xfe\x70\xb3\x0c\xd3\x11\x1c\xeb\xda\xf7\x5b\xc9\xa2\x0c\x4e\xfd\x08\x64\x78\x70\xdd\x2b\x20\x6e\x68\x36\xbf\x7d\xb5\x13\xbf\xc1\x9a\x2d\x79\x62\xda\x53\xe9\xb9\x4d\x08\xa4\xa6\xd4\xcf\x61\xeb\xfa\x26\xfe\x14\x4c\x39\x85\xba\x19\x8c\xd9\xd0\xfe\xc4\xe1\x22\x98\xa0\xba\x7b\x0d\x78\x76\x45\x36\xd1\xf1\x1f\xe8\xde\xee\x55\xba\x36\x8b\xab\x59\xc4\x96\x7d\xac\x6f\x05\xe1\xce\x7c\x32\x88\x4e\xab\xe9\xd9\x75\xd4\xbc\xd9\x54\xaa\xda\xe2\xe5\xd7\x76\x89\x85\xa2\x57\x55\x2f\x5e\x77\x34\x47\x0e\xf3\x66\x06\xf2\xeb\x6c\x69\xaf\x79\xb2\xca\x7d\xb4\x8a\xe2\xda\x96\x2c\xbc\x2c\x38\xac\x53\x8d\xed\xd8\x4e\x93\xd2\x2e\xa8\x9d\x7b\x47\xe5\x9c\x30\xd0\x13\xda\x8f\x0c\x00\x99\xee\x6a\x10\xce\x41\x20\xd6\x74\xf5\x14\xdb\x8c\x51\x93\x93\x6d\x7c\xf5\x9e\x93\xc2\xf6\x94\xc8\x9f\x57\x66\x12\x96\x54\x4c\x69\x29\x89\xba\x88\xa8\xd9\x86\xea\x9d\x7a\x53\xd8\x6d\x6e\x62\x55\x17\x6c\x39\x42\x9f\x28\x17\xd2\x5b\x92\x52\x5b\x0d\x20\xa6\xae\xda\xb5\x9c\xd7\xb7\x5a\xdb\x85\x6d\x63\x57\xd0\xd6\xe0\x73\x81\xb5\x23\x34\xcc\xcb\x61\x68\x48\x10\x11\x2d\x56\x44\x12\x41\x36\x61\xbe\x56\x1a\x2b\xd8\x01\xc0\x40\x08\xc4\xa5\x50\x9f\xe7\x79\x65\x6e\x9a\x8f\x80\x5d\xc1\xf7\xa4\xae\x47\x46\xd7\xfe\x2a\x6b\xdb\xaa\x0c\x9d\x42\x9a\x6a\x9d\x74\x93\x09\xb6\x3f\x76\x39\x0a\x8b\x4e\x3f\x28\x92\x9b\x86\x65\x3a\x64\x36\x05\x3e\x34\x38\xae\xc7\xb9\xb2\x9b\x72\xa6\xb4\xfb\x27\x74\x3b\xca\x8c\xd8\xd0\x18\x44\x1c\x1d\x81\x8f\xc6\xec\x74\x8a\x58\xea\xc3\xbc\x60\xd6\xee\x90\x6a\x97\x9a\xdb\x6f\x64\xee\x06\x4d\x06\x30\xf0\xed\x50\xe5\xd3\x1c\x38\x23\xb6\x38\xce\xdb\xb5\xb4\x74\x27\xb7\xe6\x1a\xeb\x9a\x44\x57\x7b\x96\x3a\xc5\x5e\x67\x84\x11\x4e\x23\x48\xd0\xd0\xd7\xee\x12\xd3\x2a\x93\xd2\x14\x26\xd8\xd7\x54\xa3\x5d\xe7\x18\x99\xe5\x6e\x98\x5f\x94\xe8\xa7\x35\x46\x3e\x81\x42\x6f\x3a\xaf\x68\x17\xd9\x38\x79\x89\x88\x76\x99\x38\x9a\x79\x84\xae\xc4\xae\xe7\xd5\x8d\x47\x02\x12\x9b\xce\xa9\xda\x3b\x24\x20\x29\x4a\x03\xf9\xd2\xa9\x4b\x9e\xd2\xbe\x25\x9d\x67\xa9\x6c\xcd\xd2\x1f\x3f\x24\xe9\x44\xbc\xf7\xfb\xc7\x99\x77\xe4\x78\xbe\x7a\x16\xdc\x4d\xae\x8e\x25\xc5\x53\xde\x87\xf6\xcc\xf8\xf7\x61\x17\xc2\x57\x33\x55\x1e\x5a\xd3\x70\x06\xcc\xd3\x8c\xd9\x5c\x87\x94\x91\x74\x0a\xf8\x46\xe8\x6c\x63\xad\x42\x80\x41\xb3\x54\x7a\xd0\x05\x4e\x96\x3a\x70\x06\x1a\x6a\x3d\xb9\xb7\xcc\xf7\x59\x47\xe7\xa7\xc8\xf7\xd9\x96\xee\xe6\xe0\xbc\x10\xc1\xb7\xcd\xe2\xd0\x47\xa9\x83\x98\x85\xdf\xaf\x35\xc6\x9d\x1c\x00\xeb\xdb\xaf\xd8\xa4\x91\xba\xe0\x29\x26\x87\x32\x3d\x04\xc8\x17\x00\x89\x74\x06\x5e\x5d\x5d\x8a\x68\x4e\x16\x1d\x92\x9c\xae\xe1\xf7\x2d\xe6\xa9\x7b\x8b\x7f\xf3\x26\x6a\xee\x5e\x81\x6c\xb5\x56\xdd\x72\x1c\x1a\x2f\x81\x7d\xb6\xf6\xe6\xe8\xe8\xe2\xf0\xb7\xb2\xd9\x03\x66\xb2\x4b\x0a\xd9\x51\x26\xa7\x71\x0a\x46\x8f\x9d\xc3\x11\xba\x60\xc9\x0a\xcd\xd3\x45\xaa\xae\xed\x34\x13\xde\x97\x1a\x2e\x04\x97\x4d\x43\xad\xda\xa5\x86\x78\xbf\xdc\x6a\xd4\xd1\x52\x5f\x69\xdd\xd1\xff\xd1\xfa\x14\x51\x6f\x25\x93\x30\xc5\x6e\xcd\xfc\x5d\x6e\x54\x33\xdf\x40\x42\xcf\x82\xce\xe6\xa6\xf2\x87\xdf\x12\x17\x58\x7f\xe1\x0a\x21\xda\xde\x5c\x3a\xa5\x0c\x18\x8a\x55\x95\x3c\xaf\x75\x6f\x77\xc9\xf0\xeb\xd0\xa3\xcc\x43\x00\x3b\xec\x1c\x10\xd9\xe1\x68\x2d\x3e\xcd\x3d\xf8\x90\x97\x9d\x59\x2d\xc9\x00\x4d\x32\xf8\xfe\xfc\xe2\xc6\xf7\x0d\x51\x06\x5f\x1f\x46\x73\x12\xdd\xab\x7d\x41\x5a\x28\x6a\x72\xd9\xfa\x41\x93\xd5\x98\xe5\xc5\x0d\x64\x6a\x1d\x1d\x2b\x97\x3d\xe2\x32\xa8\x52\x8e\x62\x2a\x96\x09\x5e\x21\xf2\x4d\x12\xa6\x6b\xbd\x54\x34\x8a\x54\xcc\xb2\x99\xd9\x02\xd5\x17\x8c\x14\xb0\x7a\x18\xfc\xcb\x2e\xc2\x15\x99\x03\x2c\xf5\x14\x47\x95\x6a\xc7\xd6\xf9\x3c\xdb\xc4\x4f\xea\xea\x88\x78\xa5\x15\xf5\x8e\xfa\xae\x52\x07\xe5\x61\x05\x4c\xce\xd8\xd4\x33\x1b\x1f\x80\x07\x65\x6c\xab\xb0\xa9\x7f\xeb\x2a\x4e\x84\x3f\x90\x78\xcc\x42\xb0\x94\xb9\xca\xf2\x5d\x46\x79\x7e\x79\x9d\xe8\xec\x9e\xc4\xaa\xe8\xec\x72\x2c\x1b\x43\x3b\x10\x20\x2e\x74\x5d\x5f\x53\x33\xa2\xba\x8e\xdb\x13\x24\x66\xb7\x76\x7e\xe4\x09\xed\x26\x1b\xd5\x94\x9b\x20\x3a\x55\x32\x59\xe9\xc6\xfc\x86\x31\x1d\x14\x44\xe3\x44\x1d\xf6\xd5\xe0\x43\x72\xd4\x83\xd9\xf3\xaa\x31\xc6\xcc\x46\x2c\xa7\x59\x92\x68\xec\x7f\x6d\xd7\x47\x0d\x0d\xb3\x11\xc0\x97\xc3\xdf\x38\xbb\x16\x79\x15\x00\xbc\x1e\x89\xcb\x58\xc9\x0e\x16\xad\xf2\xaa\x92\xc0\xbc\x84\x89\x0c\x12\x4f\x6d\xf6\x2f\x00\x9d\x67\x44\x22\xa5\x77\xc4\x59\xa2\x81\xc3\x3c\x63\x06\x67\x86\x93\x04\x51\x29\xc6\xcc\xc1\xe2\x74\x55\x1e\xb8\x0a\x22\x93\x0b\x12\x1b\x5d\x10\x5e\x01\xc3\x9a\x1a\x51\x70\x41\xd0\x88\xca\x60\x4a\xe0\xa9\x5c\xf9\x29\x73\xcb\x25\xc1\x1c\xd4\x45\xdb\xa4\xc0\xd7\x06\x8b\xdb\x60\x9a\x0b\x43\xe9\x9e\xfa\x6e\x21\xbb\xe0\x5e\x5d\xba\xa9\xf3\xa6\x1c\xa1\xa1\x5e\x9d\x52\x05\x6d\xfd\x1a\x3d\x5b\x13\xa6\x36\xf1\x04\xa5\x6f\x49\xe1\x8a\x2d\x3a\x8d\x7a\x89\xb9\xa4\x51\x96\x60\x9e\xac\x94\x74\x99\x66\x09\xa2\x53\xaf\x14\x0f\x6c\x82\x46\x45\x41\x49\xd5\x14\xee\x08\x8b\x7a\x16\x18\xda\xda\x1b\x06\xb7\x86\x67\xe2\x39\x11\x75\xa6\x97\xf6\x4e\xa9\xb1\xde\x1f\xa1\x93\x62\xe1\x25\x38\x16\x1e\x9a\x9a\x0a\x2d\x01\xdd\x7c\x4d\xd2\x28\xd4\x9a\x83\x02\x4e\x74\xaa\x94\xdd\x77\xde\xc1\xab\xab\xf0\x87\xc5\x7d\x47\x0f\xe5\x0d\x16\xf7\x6b\xbd\x94\xa7\xde\x55\x99\x0b\xc0\x1b\x28\x1c\x17\xf8\x2d\xdd\x89\x58\x53\xcd\xbe\xe3\x24\x7d\x24\xfa\x06\x13\xfd\xea\x55\x66\x2b\x4e\x76\xd1\x50\xf9\x07\xf6\xb1\xe3\x54\xbd\xac\xdc\xee\x13\xf5\x38\xc7\xf7\x47\xd7\x52\x76\xbd\x71\xf9\x35\xc8\x8f\x45\x6a\x5e\x4a\xb1\x27\x3a\x82\x51\x28\xfa\x09\x73\x30\x89\xb4\x90\xcb\xe8\x0e\xdb\x84\xa0\x84\xb2\x7b\x7d\x2a\x30\xec\xfc\x00\xe1\x7c\x74\x38\x7c\x7a\xf6\x9a\x99\x6b\x34\x1b\x17\x8d\xde\x4d\x48\xb8\x1d\x62\xa4\x72\x73\xdd\xba\x2b\x9e\x5f\xcf\x88\x55\xeb\x68\xbf\x2d\x8d\x61\x3b\xa7\xc4\xda\x58\x9d\xbe\x60\xc2\x46\x86\xab\x75\xf4\xbd\x2c\x74\x2a\xaf\xd3\x02\x0f\x08\xcb\x16\x07\x1f\xd1\xff\xcd\x29\x73\x7b\x7e\x32\xfa\x74\x7a\x3e\x3a\xf1\x18\xf8\xe0\x2f\xb7\xa3\xdb\xf0\x93\xab\xdb\xf3\xf3\xd3\xf3\xcf\xfe\x47\xd7\xb7\xc7\xc7\xa3\xd1\x49\xf8\xbb\x4f\xc3\xd3\xb3\xc2\xef\xd4\x47\xe1\x8f\x86\x3f\x5c\x5c\xdd\x84\x1f\x5d\xff\x74\x7a\x79\x19\x7e\x74\x73\xfa\x65\x74\x72\x77\x71\x7b\x63\x69\xfd\x37\x8f\xc2\x80\x96\x85\xe8\xae\x9b\x7f\x25\x89\x76\x51\x58\xa3\x6b\xfc\xd9\x43\xca\x4f\x39\x25\x2c\x4e\x56\x79\x5b\x18\x75\xe8\x0a\x41\x4a\x5f\xa4\xd3\x05\x49\xb3\x6d\x30\x03\xca\xf4\x4d\x1f\x94\x49\x9d\x20\x33\x9a\xc1\xe4\x14\xda\xaa\x79\x6f\xe5\x44\xf2\xb2\x1b\xac\x11\x65\x21\xf9\xea\x5a\x72\x2c\xc9\x6c\xd5\x12\xff\x66\x5e\x82\x96\x84\x37\xcd\x05\x2e\x5c\x9e\x2d\x25\x9d\x94\x1d\x4d\x96\x0e\x26\x31\xa5\xb6\xf2\x9f\xf9\xba\xbb\x65\xa7\xf1\xa1\xb4\x52\x5c\x9f\x57\x0b\x3a\x9b\xa8\xbe\x65\x36\x28\x78\xa6\xdb\xef\xc0\xa5\x7b\xa4\x9a\xf5\x8e\x6d\x71\x0b\x65\x32\x4b\xcc\x6a\x80\xff\x1d\x0b\xf0\xe5\xd9\xb8\x3c\x2f\x83\x69\x6e\x2a\x6b\x45\xe4\x68\xe2\x4d\x2c\x6b\x93\x90\xcf\xe2\xbc\x67\x98\x49\xd4\xf7\xaa\x71\x54\x6c\x42\xa1\xc4\xd9\x93\xdf\x32\x8d\x3c\x6f\x30\x89\xa0\xfa\xe9\x8c\x48\xd3\x09\x4f\x5f\xcb\x90\x66\x5c\x1b\xaa\xdb\x71\x45\x44\xa7\x7a\xe6\xe5\xdc\x5c\x81\x40\x2b\x8f\xba\x2b\x1a\x85\x62\x68\x5e\xa1\x38\xdd\x9b\x02\x12\x60\x61\xd8\xdc\x17\x67\x34\x0b\x2d\x07\x1e\x48\x8c\x0e\xfd\x02\x94\xf1\x21\xa0\xcb\xc6\xac\xce\xc2\xac\x28\xde\xe8\x73\xc0\xa5\xad\xcd\xb1\xcd\xde\x57\x50\xbf\xfe\x08\x5a\x62\xb7\x03\x55\x20\xfb\xf3\x23\x54\xef\xca\x34\xfb\x32\xc1\xda\x85\x04\x67\xcb\x15\x1d\xa9\x83\x78\xb9\xbb\xb0\x9b\xc7\xb5\x95\xb7\x15\xbb\xc4\x14\xed\x67\x05\x9d\x65\x8e\xc1\xff\xa6\x6b\x6d\x06\x13\xf7\x4a\x8d\xd6\x19\x2d\x2e\x41\x7d\x3b\xd1\xde\xca\x82\x1c\x68\x44\x80\xab\x1a\xee\x67\xf5\xba\x0a\x05\xdd\x18\xdf\xed\x86\xcb\x05\xc7\x56\xee\x81\xc0\x4a\x70\xa6\x74\xfa\x65\x82\x35\x90\x68\x8e\x85\x66\x69\xeb\xa4\xc4\x13\x9a\x50\x09\xbd\xab\xb5\x79\x5f\xa0\x70\xca\xd1\x02\xf3\x7b\x65\xd1\x92\x64\xaa\x46\x2f\x04\xf7\x2b\x99\x7e\xcb\x40\x5a\x5e\xd8\xe6\x39\x43\x69\xf9\x91\x6d\xeb\x1b\xc8\xd9\xd2\x84\xd1\xf2\xed\xd0\xa5\x97\x65\xea\x15\xe9\xe9\xb6\xb3\x66\xc4\xcb\xe2\xe3\x01\xbd\x2b\x2e\xea\xee\x3e\x5b\x93\x53\xd0\x41\xcc\x17\x33\x0e\x2a\x4f\xd6\x34\x49\x71\x4d\x99\x1d\x3b\xb6\x4e\x20\xa8\x1b\x3b\x4e\x33\x25\xce\x2a\x07\xd7\xb3\x6a\x1e\xbd\xc9\x00\xb3\xe7\x76\x57\x0a\x9d\x2f\x00\xb1\x24\xd0\xb1\x69\x23\x82\xe6\x0d\x9f\xaa\x07\xcf\x38\xae\x42\x77\xb4\x2f\x70\x98\x67\xdb\x58\xe6\x41\x37\xab\x25\xa9\x28\xeb\x16\x60\x97\x37\x34\xe6\xae\x2f\x47\xc7\xa7\x9f\x4e\x0b\x96\xd4\xf0\xfa\x27\xff\xdf\x5f\x2f\xae\x7e\xfa\x74\x76\xf1\xd5\xff\xec\x6c\x78\x7b\x7e\xfc\xe3\xdd\xe5\xd9\xf0\x7c\x8d\xbd\x55\x7e\x45\xd9\xdd\x91\x27\x06\xe4\x38\x6a\x75\x37\x18\xe8\x2f\x98\xba\x15\xe7\xeb\xaa\x22\xb9\x6f\xd3\x56\x42\x4f\xe6\xd2\x74\x93\xb4\x7f\x8c\x98\xe4\xab\x2e\x49\x9f\x28\x26\x02\xee\x21\xe3\xbd\x0c\x13\x0e\x89\x00\x5f\xb0\x1d\xfd\x1c\x04\x9b\xf5\xae\x9b\x10\x8d\xa1\xa3\xba\x58\x12\x5a\xdb\x02\xa4\xba\x97\xfb\x9e\xd0\xc1\xc7\x00\x02\x15\x26\x69\xc6\x62\x5b\x59\x6d\x41\xd9\x87\x05\xfe\xf6\xde\xae\x34\xef\xb4\x06\xf9\xac\xba\x9c\x7d\xa2\xb4\x8e\x15\xe2\x19\x6b\x26\xd7\x98\x35\xd0\x6b\xfd\xcd\xa0\xfb\x0c\xd2\x7f\x82\x8a\x93\xeb\xa3\xda\x63\xfc\x40\x56\x55\xfb\x57\x4a\xa4\xd2\x5e\x69\xa3\x03\xc3\x20\x4b\x4e\xa0\x90\xa8\xf3\x47\x27\x3a\xce\xe0\xfe\x0d\xf1\xce\x20\xbf\xb4\xea\x4e\x0a\x6d\xf1\xad\xce\x4d\xa5\x17\xe0\x09\x52\xe1\xcc\x9b\xd4\xa6\x69\x9f\x80\x4d\x3b\x35\xf1\xdd\x18\x3d\xce\x89\xde\xad\x7f\xa4\x13\x34\x85\x70\xb8\x29\x1f\xc3\x49\x04\xee\x0d\xb5\x17\x36\xbd\x08\x60\xb5\x25\x47\x83\xe5\x81\x84\x08\x70\xb6\x41\x29\x46\xf2\x4b\x66\xb0\x73\x7f\xfc\xbe\x5b\xca\x96\xe4\x2b\x24\x0c\x99\xfd\x70\xbc\x41\xa3\x18\x9f\x1d\xcc\x2b\x63\xb4\xaa\xe4\xdb\x95\x2e\x42\xf8\xbc\xb5\x5e\x0b\x2f\x35\xff\x5c\x8b\x58\xb8\xb1\x69\x30\xfa\xf7\x4f\x96\x1f\xf1\x73\x21\x2d\xc2\xbc\x0e\x02\x91\x66\x74\xe1\xa1\xee\x95\x65\xf4\x88\x79\xac\x1d\x03\xe0\x23\x3a\x42\x3f\xa6\x8f\xe4\x81\xf0\x01\x8a\x08\x97\xd8\xc0\x95\xd5\x59\x4b\x12\x38\x50\x66\x9c\x31\x83\xd8\xbc\xc6\x7e\x33\x28\xbd\x23\xe9\x6c\xae\x94\x47\x63\x84\x9a\x72\x9d\x82\x48\x80\x1a\x92\x6f\x4b\x12\x69\x50\x46\x5d\x24\x7a\x9a\xe0\x87\x32\xfe\x7a\x13\x68\xad\x57\x91\xd4\xb6\x4b\x32\x39\x2b\x8d\x4e\x29\x5b\xd8\x52\x4b\xcd\xe5\x4a\xce\x53\x36\x40\xb3\x34\xc1\x6c\x76\x74\x74\x84\x88\x8c\x8e\xde\x77\x62\x74\x33\xa0\xf7\xba\x3c\xa2\x96\xa4\x82\x24\x2b\x6b\xe1\xe5\xc8\x07\x45\x65\x40\x5a\x08\xaa\xcd\x9b\x0a\xee\xbf\x2e\x22\x74\x9f\xd7\x4d\x56\xad\x95\x76\x86\xfa\xd4\x8c\x53\xec\x73\xb2\x6e\x24\xfd\xfb\x6a\x4d\xbb\x03\x74\x0d\x2a\x39\xd0\x38\xc9\x21\x6c\x35\x19\x54\x29\xeb\x8a\xcb\xfa\x39\xad\xab\x52\xb3\x51\xca\x41\xe5\x48\x06\x20\xbe\x11\x52\xa9\xcc\xd1\x15\x1c\xe7\x40\x7d\x5b\xa5\x37\x25\xd9\xa2\x5c\x6a\x71\x57\x5a\x54\x3e\x49\xfd\xd7\x31\xbc\xae\x7d\x5d\x03\x57\x8c\x27\xe5\x1a\x4d\x65\xe6\x6b\x7a\x7e\xc3\x98\x20\x2d\x39\x15\x90\x68\xb1\x09\xe0\xc9\x0d\xa3\x87\x06\xf7\xac\xb2\x61\x74\x79\x34\xd3\x88\x06\x30\x5c\xae\x9f\x8c\x7e\x44\x68\x55\x07\x7c\xba\xf5\x92\x21\x07\x89\x6e\x64\xf5\x9c\x5f\x9c\x8f\x7c\x53\xe6\xf4\xfc\x66\xf4\x79\x74\x15\xc4\xa0\xce\x2e\x86\x37\x41\xbc\xe9\xe6\xaa\x10\xa6\xfa\xe1\xe2\xe2\x6c\x34\x3c\xf7\x3f\x3a\x19\xde\x8c\x6e\x4e\xbf\x04\x83\x9f\xdc\x5e\x0d\x6f\x4e\x2f\x82\xdf\xfd\x70\x7a\x3e\xbc\xfa\xab\xff\xc9\xe8\xea\xea\xe2\xaa\xf0\xbe\xdb\xe3\xe6\x48\x56\xb0\x8c\xea\x9d\xc8\x95\x65\x0f\x2f\x5b\xa5\x14\xde\x60\x71\xbf\xe3\xe8\x2b\xa0\x0d\x36\xec\xf0\x5b\x23\x94\x62\x72\xb7\x59\x60\xb6\x2e\xb8\x5c\xf9\x1e\xa5\x0f\xae\xee\xb0\x94\x64\xb1\xdc\xae\xd0\x43\xfb\x83\xd3\x2d\xe6\x0b\x26\x4d\x8b\x98\x6f\xb0\xab\xfb\x13\xf3\xad\x08\xe7\x96\x63\xbe\xa7\xe7\xa7\x37\xa7\xc3\xb3\xd3\xff\xaf\x30\xe2\xd7\xe1\xe9\xcd\xe9\xf9\xe7\xbb\x4f\x17\x57\x77\x57\xa3\xeb\x8b\xdb\xab\xe3\xd1\x75\xcb\x88\x6f\xd9\xc7\x72\x88\xfc\xf7\x7c\x44\x37\xa9\xab\x52\x60\xb4\x42\x53\x0e\x5a\x51\x1c\xda\x6b\x51\x09\x30\x5c\xca\x66\x03\x68\x17\xf0\x11\x8d\x38\x3f\x5d\xe0\x19\xb9\xcc\x92\x64\x80\x5c\xc1\x11\xe8\x9a\x0c\x3f\xbb\x4c\xe3\x53\xef\xb9\x31\x43\x87\xa8\x72\x19\xf0\x7e\x53\xd8\x43\xbf\x7e\x60\xde\xef\x05\x38\x9c\x83\xc4\x14\x58\x71\x55\x64\x3e\xa2\x1f\x70\x74\x9f\x4e\x4d\x19\x85\x81\x33\x71\xd1\x2f\x59\x2a\x31\x22\xdf\x22\x42\x62\x5b\xea\xb5\xc8\x27\x67\xe9\x56\x9d\xb9\xba\xf4\xf4\xf0\xcf\xf4\xfa\x50\x79\xe5\x73\x26\xb3\xe1\xae\xba\x4b\x44\xb5\x20\x30\xab\xfc\xa2\x1f\xd5\x4d\x22\x6a\xa2\xea\x32\xd9\x81\xff\xee\x2c\x9d\x55\xa3\x88\x5d\x47\x4d\x2a\xbc\x3a\x02\x10\x0d\x48\x67\x48\x50\x76\x3f\x66\x5f\x95\x41\x9b\x66\x5c\x7f\x24\x53\x0e\x80\xf4\x69\x92\x89\x39\x81\xf2\x5b\x03\xf4\x48\xd0\x02\xaf\x74\x54\x20\xac\x4f\x0c\x2c\xa3\x98\x13\x9e\x4e\x28\x53\xd2\x62\x49\xad\x06\x59\xdc\xfa\x5d\x18\x98\x31\x15\xce\xce\x7e\xc2\x50\x4d\xee\x29\x7c\x9c\x13\xc0\xfd\x7a\xd5\xcd\x6c\x61\x54\x2d\xb9\x21\xc7\x2c\x4d\xef\xb3\xa5\x69\x6b\x87\xc5\xfd\x3b\x8b\xa2\x03\x72\x3f\xa4\x34\x46\x71\xb6\x4c\xbc\xae\x92\x8f\x29\xaf\x45\x3d\x68\x4b\xa7\x03\xea\xa1\x60\xbf\x37\x2d\xac\xc2\x8c\xf2\xac\xb6\x06\xfc\xc3\x13\x23\x40\xbc\x9a\x27\x99\x20\xfc\x50\x72\x3a\x9b\x81\xde\x68\x9d\x32\xfb\x0f\x11\xb1\xbc\xb9\xba\xdb\xde\xff\xe0\xbb\xaa\x13\x5d\x11\xd6\x95\x6a\x50\x3c\xb5\x5c\x26\x2b\x0b\xdc\xd4\x04\xb4\xc7\x7e\x99\x71\x5d\xc8\x69\x8a\xdc\x84\x6a\x43\xb4\x4b\x4e\xd4\x5b\xe2\x3b\x5d\x46\x66\xfb\xf2\x36\xa7\x53\xa5\x09\x9a\x9e\xc8\x79\x21\x9e\xbc\x58\x89\xbd\xe1\xf2\x77\xdb\xb4\x0a\x9d\xd1\xcc\x74\x43\xc4\x47\x66\x5b\x45\x62\xa1\x5d\x23\xd0\x30\x7e\x95\xf7\x91\x84\x86\x74\x90\x0f\xed\x7a\x0c\x9a\x0c\x4d\xe3\xe3\xd4\x95\x0a\x5f\x1e\xd2\xe3\x04\x35\x20\x55\xc3\x96\x55\x45\x11\xb9\x6d\xde\x85\xc3\x3f\x6c\xaa\x11\x37\xdb\x74\xb3\x24\x9d\xe0\x24\x59\x55\x64\x64\xf8\xb7\x4e\x37\x07\xa6\x6d\xac\x15\xde\x59\x16\xd9\x04\xa1\xf2\xb4\x21\xd3\x3d\x68\xff\xb0\xd3\x94\x95\xed\x09\x96\xc9\x54\x67\x9b\x83\x47\x56\x2d\xee\xb4\xd0\x9e\xe0\x48\xe3\x97\x4f\xe3\xca\x42\x29\xf9\x89\xb1\x94\xaf\x93\xce\x15\x3e\x94\x4e\x19\x37\x4b\x4e\xac\xf7\x6c\x45\xa4\x73\x9a\x25\x16\x5f\xbd\x5a\x86\x15\xe9\xfd\xa8\x81\xf5\x0b\xda\x78\x84\xee\x1f\xed\xd5\xbc\x4d\x19\x61\x52\x57\xfe\x64\xe9\x98\x99\xc1\x6d\xfe\x9e\x2b\x81\x63\x02\x21\x9a\x30\x03\x63\x83\x80\x54\x50\xba\x68\xf2\x60\x9a\xc1\x3a\x9a\xc8\x14\xf0\xf5\x6a\x82\xc7\x4a\x9c\x2b\xe5\x05\xb3\x38\xaf\x59\x3a\x27\x63\x56\x48\x62\xf3\xda\x50\x5b\x8e\xf5\x9f\xdf\x59\x62\x4f\xa0\xef\x34\x91\xbe\x36\xb1\x67\x9d\xe0\x9a\xe2\xa8\x0b\xc0\x7e\xb5\x24\xf1\xa9\x7b\xae\x99\x19\x02\xd7\x49\xec\x85\x96\x82\x43\xae\x79\x40\x0b\x6c\xa1\xb3\xa3\x84\xeb\x24\xeb\x36\xc9\x15\x55\x72\xc5\xda\xd5\x16\xcd\xb0\x2d\xd8\x2f\x5c\xb5\x76\x88\x76\x07\x2e\xef\x42\x73\x25\xa7\x4b\x45\xa9\x90\x3a\xbe\x06\x8f\x4c\x31\x4d\x32\x5e\xab\x22\x68\xb6\xdc\x79\xda\xe1\x31\x0c\x8b\xaa\x76\xcd\xf9\xa5\xbd\x63\xe4\x7c\xd2\xae\x69\x53\x92\xcd\x28\x13\x21\xd7\xd7\x17\x2f\x2d\x15\x72\x5e\xb3\xe1\x79\xed\xe7\xf6\xb2\x78\xa8\x0f\x7b\xa1\x45\x7a\x75\x05\x27\xa3\xb4\x79\x73\x1f\xb3\x1b\xb8\xab\x75\x56\x9d\x3b\x66\x50\x61\x4b\x17\x4c\x81\x2a\xd6\x55\xeb\x0d\xe4\x79\xc8\xa9\x5b\x01\x5a\xaa\xf2\xdf\xd6\x03\xe7\xbe\xe0\x65\x53\x6a\xd2\xd6\x23\xae\xdb\x06\xe7\xdd\x2c\x1e\xc3\x62\x59\xe4\x0a\xea\x39\xf0\xdf\xb3\x04\xf1\xba\x24\x4a\x3b\x0c\xa8\x29\x31\x50\xca\x72\x0d\x14\x53\xff\xd1\xee\x30\xe0\x3c\x7a\x65\x3a\x31\xea\x01\x27\x1a\xb8\xe9\x63\x4d\xb7\xc8\xb2\x75\x1b\x53\xe8\x94\x5d\xb5\x1d\x5b\xe2\xe0\x72\xe8\xf2\x33\xc2\xe0\x7e\x2e\x91\xa8\x2b\x0a\xee\xc1\x87\xfd\xc2\xdd\x90\xf7\x29\x6b\xa5\x31\x3b\xf4\xdb\xcf\x21\x76\x3b\x20\x71\x4a\x5b\x81\xdc\xcb\xd5\xf7\x40\x69\x89\x09\x4b\x25\x41\x18\x31\x9a\x7c\x60\x59\x92\x7c\x38\x87\x36\x31\x42\xd0\x99\xae\x42\x0d\x1e\x93\xa0\xad\x37\x60\x87\x3d\x57\x99\x77\x04\xe0\x8a\x54\x53\xd2\x5e\x3c\xa9\x24\xa6\xda\x82\x64\x35\x66\xea\x09\xad\x62\xb9\x1e\xad\xb6\xd7\x23\xbc\xcd\xe6\x35\x99\x77\x29\xdb\x98\xad\xfc\xc1\x2b\x18\xac\x29\x15\x68\xab\x90\x66\x5f\x23\x72\x6f\x6a\x44\xa6\xdc\x7a\x9e\x3a\x54\x8b\xac\x3f\x54\x1b\x97\x6b\x74\x8a\x98\x0b\x09\xb4\xe0\xc7\x97\x0c\x07\x3c\x65\x62\xd8\xd6\x59\x60\x96\x52\xbb\xf0\x8a\xfe\x92\x91\x8c\xb2\xd9\xdd\x24\x8b\x67\x64\x2b\x1f\x5d\x2a\x71\x82\x1e\x31\x95\xe0\xa2\xf3\xd5\x76\x73\x2e\x62\x92\xe0\x95\xce\xa4\x50\x6f\x25\x1d\x5b\xda\xdb\xd5\x3a\xde\x55\x5c\xc6\xbd\x7a\x0d\x63\x76\x93\x3a\xa3\xd2\x9c\xd8\x69\xa6\xb4\xd1\x06\xe9\x67\x47\x3d\xd1\x94\xdf\x0a\xa6\xb9\x4b\xaf\x50\xa3\xa7\xcc\x46\xdb\xac\x87\xd9\xef\xe6\x16\x4c\xc2\x20\xc9\xf4\x99\x87\x0e\x08\x32\x34\x8c\x74\x95\x0c\x0b\x56\x33\xbd\x48\x32\xec\xb0\xfb\x40\x4b\x45\x70\x93\x58\x9e\x31\xc0\x9e\x91\x6f\x3a\x7d\x3f\x59\xf9\xa3\x42\xa2\x27\x8c\xd8\x31\x22\x0f\x36\xb7\xcb\xc5\x5d\xbb\xd1\xf5\xbb\xb9\xad\x13\x4c\xe7\x3a\x2c\x13\xcc\xee\xb4\x72\xf3\x02\x6e\x30\x2f\xdf\xa2\xae\x14\x94\xd7\xf3\x70\x37\xf3\x74\x12\xfe\x2a\xc8\x82\xf2\x9b\xa0\x0d\x8a\xe5\x62\xad\x46\xe2\xba\xc1\x1b\x63\xdc\xd4\x03\xff\x56\x05\x68\x59\xef\xca\xc3\x05\xc3\xdd\x15\xc4\x5f\xe3\xcb\x2b\x75\x29\xdd\x33\x7f\x5e\x9b\x9d\x2f\x30\x78\x71\xdb\xbb\xbb\x92\x4a\x17\xc5\x46\xee\xa4\x35\xd3\x7a\x5a\x97\x52\xad\xe9\x54\x76\x2d\x7d\x0d\x9b\x69\x45\xd0\x9d\x32\x4a\xb2\x98\x20\x91\x2a\x7d\xce\x5a\x76\xd5\xf9\x34\x05\x1c\xc7\x93\xd6\x0f\x09\xd3\xa5\x5b\x03\xa2\x74\x05\x21\x74\xca\x90\xb5\xd0\x06\x68\x7c\xa0\x39\x4b\x8c\x0f\xc2\xce\xe3\xb6\x3c\x51\xd8\x50\xa2\xe8\x78\xd5\x31\x11\xef\x06\x61\x9e\x7b\xa0\x48\x97\x1a\x2f\xc6\x4b\xd6\x05\xf2\xd0\x62\x3a\x6c\x3a\xd1\x03\x18\xa5\x54\xeb\xda\x2b\x5b\x34\x08\x52\x87\x79\x16\x49\xaf\xb7\xa9\xad\xb1\xf2\x83\x7d\x50\x91\x68\x99\x25\xa6\x77\xbb\xad\x69\x92\xf2\x31\xb3\xa3\xe5\xa5\x0e\x87\x49\x52\x1a\xaa\x5c\x5e\xc8\xe3\x55\x28\x36\x66\x71\xdc\x90\x1f\xa0\x7e\x04\x48\xb7\x92\x1c\x18\x33\x9d\xd5\xe7\x12\x4a\x8f\xd0\xb0\xd0\xf3\x35\xac\xa4\xe3\x17\xd2\x49\x12\x5b\x45\x46\xd7\x66\xf1\x4a\x87\x88\x0c\xfa\x34\x4c\x33\x25\x8e\xdc\xdb\x65\x3a\x66\x50\x54\x49\xb7\xef\xb7\x74\x19\xb3\x2f\xa9\xb0\x7d\xe8\x44\x4e\x0f\xab\x33\x18\xb2\xbd\x73\x70\x76\xf3\xc1\x89\x12\x22\xea\x29\x65\xda\x16\x92\x99\x21\x6e\x07\xe8\x82\x01\x5a\xa5\x19\x0f\x54\xc5\x31\xfb\x87\x22\x8f\xad\x14\x94\xba\x2e\xc9\x70\x88\x6d\xf2\x37\xfa\xee\xef\x7a\xd0\xef\xfe\xfd\xfd\xdf\xdf\xeb\x3a\x6c\x99\xc8\x94\x84\x1d\x84\x57\x88\x9d\xa8\xda\x52\xc0\xb6\xd8\x15\xb8\xd6\x0f\xf9\x2b\x1a\x6b\x0a\x18\x67\xf1\xae\x2b\x68\xe7\x1e\xa7\x21\x8a\xb0\x8c\xe6\x87\xd8\xf0\x9e\x5f\x3d\x89\x8a\xbc\x3e\xfb\xe3\x9c\x30\x68\x4f\x16\xd6\x74\xd7\x09\x15\x28\x56\x92\x6d\xe1\xd2\x71\x03\x7e\xd1\x8d\x6a\x8c\x56\x58\xc8\x43\xb6\x6f\x02\xe6\xcc\x33\x61\xbf\xe6\x92\xc1\xfe\xdc\xe6\x07\xe4\x6e\x22\xe3\x1a\x53\x26\x6b\x8c\xc6\x1a\x4f\x3b\x3e\xb0\xdb\x3f\x66\xcb\xc9\x51\xb2\x9a\xca\x23\x40\xf7\x1e\x29\xb2\x1c\x8d\x1a\xfb\xd9\xe8\x4b\xe8\x2e\x2e\x6b\xe5\x6b\xc8\x5d\xab\xd7\x57\xeb\x3b\x8e\x3a\xee\x4d\xed\x95\x16\x6d\xda\x3a\xfa\x5c\x87\xbe\x6f\xe2\x6c\x65\xa2\xe3\x19\x03\x5b\x1d\x07\xb3\xb0\x05\xb3\x3b\x9f\x50\xaa\x49\x5d\x74\x58\xd2\x08\x74\x05\xcc\x70\xb2\x82\x2c\x9d\xc1\x98\xc5\x94\x93\x08\x7a\x43\x46\xab\x28\xa1\x91\xa9\x74\x13\xea\x42\xe4\x81\x30\x19\x80\x09\x47\xea\x93\xe7\x52\x87\xea\x60\x8c\xd5\xd4\xbf\xad\x51\x85\x5c\x55\xb2\xd0\x5b\x50\x64\x13\x93\x9b\xcf\x3b\xd6\x36\x70\xaf\x07\xd1\x1c\x5b\x3f\x4f\xca\xe9\x8c\x32\x2c\x53\x8e\xbe\x03\xb7\x67\x92\x10\xfe\xde\x35\xd8\x01\x2a\x56\x4f\x63\xde\xa9\x71\x41\x45\x99\x9b\xea\xcb\x36\x8a\x32\xce\x49\x7c\x57\x46\x8f\x75\xcd\x03\x6d\xc6\xd6\x28\xd5\x9a\x2e\x88\x90\x78\xb1\xf4\x1b\xcd\xbb\x8c\x25\x43\x99\x44\x13\x01\xd9\x89\x0d\x10\x05\x80\x98\x0b\x53\x8f\x99\x09\x50\xeb\x7d\x4b\x79\x45\x81\x83\xe2\x2a\x41\x70\xb4\x68\x42\xd4\xa0\x8f\x74\x6d\x61\x54\x74\x94\x5d\x9d\x59\x0c\x41\x1a\x74\xe4\xf7\x3a\x63\x53\x38\xcf\x70\x4e\x2b\x7a\x6b\x8f\x59\x0e\x41\x3a\x4e\xd2\x2c\x46\xc6\x4d\x68\x9c\x6e\xfc\x08\x51\x72\x34\x40\xe2\xdf\x3e\x7e\xf8\x70\x74\xb4\xa3\xbe\x07\x61\xe3\xac\x6a\x0e\xd7\xad\xad\xaa\x20\x7e\x6b\x8e\x56\x50\xe7\xec\xae\x9b\xe5\x61\x53\x38\x80\x5b\x7c\xcb\x3c\x04\xb0\x14\x5f\xb9\xc4\x9c\x30\x79\x07\xa0\xec\x6e\x2f\x84\x17\x5d\xc2\xe3\x01\x9e\xb8\x95\xd9\x93\xd7\x49\x34\x09\x99\x58\xdc\xa3\xef\x28\x78\xd0\xdf\x1b\x63\x1c\x7a\xc3\x37\x94\x2f\x2b\x4b\xe0\xa6\xd9\x3c\x93\x28\xae\x03\xcc\xb7\x99\x7e\xf0\xec\xd6\x17\xc8\x36\x38\xfb\x46\x3f\xd8\x89\xab\xc5\x0b\xb1\xf3\x53\x86\xa2\x74\x31\x51\x42\x5c\xb1\xba\x73\x4c\x00\x5c\x7e\x68\x31\x97\x0e\x30\x66\x31\x66\xba\x9a\x45\x01\xb1\xee\xbc\xd9\x3e\x22\x4c\xb3\x68\xe1\x6e\xaa\xeb\x95\xa5\xd9\xf9\x09\x52\x02\xaa\x8f\xfa\xb0\xb8\x82\xbc\x3a\xf4\x3d\x8d\xee\x89\xba\xe7\xa6\x79\x15\x1b\x5f\xba\xb9\xfb\xcd\x41\xe4\x4c\xe3\x7d\x8d\xc7\x20\x66\xdd\x77\x54\xd7\x00\x25\xb6\xe1\xad\x87\xa5\x79\x27\xaa\x89\xf3\xd4\xf9\x0b\xd5\xb4\x80\xf1\x1d\xca\xd6\xe4\xd1\x3a\xd5\x42\x2b\x63\x20\x91\xff\xe4\xe4\xa1\x20\x51\xca\x1c\x32\x77\x27\x17\x7d\x45\x6e\x43\xf5\x74\xe1\xbb\x52\x02\xee\x3a\xad\x63\x4b\xe5\x27\x57\x7c\x6c\x03\x71\x6d\x30\x43\xdc\x12\xe0\x39\xea\xdd\x03\xb4\xc0\x94\x99\x63\x00\xcd\x04\x51\x4c\x26\xd9\x6c\x56\x7b\x27\x27\xe9\x2e\xda\x4f\x37\x53\xf5\x2c\x6d\x70\x10\xb8\x15\x26\x4d\xe8\xf6\x35\x1c\xfa\x86\x94\xaf\x46\x34\xd8\x2e\xd4\xa7\x53\xfb\x26\x6d\x04\x4e\x69\x42\x9e\x47\x63\xda\x91\xfa\x77\xda\x46\xfd\xb3\x5e\x04\x88\xe0\xea\x75\x38\x3b\xef\x37\xa4\x17\x6a\x44\xdc\x9d\x7a\xf2\x49\x61\x71\x0e\xc8\x0b\x87\x55\x03\xde\x94\x6c\x8a\x05\x24\xcc\xef\x1e\x27\x07\xb2\x7d\x1d\xfa\x7e\xeb\x82\x11\xd7\xe9\x82\x20\x78\x95\xd0\xb9\x59\xc8\x84\xa0\x07\xe0\x75\x54\x0b\x44\x8b\x2c\x91\x74\x99\x18\xe1\x6f\xdc\x6a\xd1\x1c\xb3\x99\xd7\x29\x01\x7d\xc7\xc8\x23\x52\xb2\x76\xe0\xbb\x61\xbc\xed\x19\x20\x22\xa3\xf7\x4a\xb7\x09\xa2\x36\x9c\x44\x29\x8f\x21\x39\x62\x86\x79\x0c\xd1\x3c\xc3\xf0\x09\x8e\xee\xa1\x02\x15\x5c\x47\xfa\x8d\x36\x80\x68\xf2\x07\xb4\xfb\x32\x1f\x8d\xb2\x48\xf7\x92\xb7\x05\x2e\xdc\xfc\xf4\xe3\x02\xe1\x88\xa7\x42\x7b\xa2\x6c\xe1\x21\x0d\x4f\x01\xf5\xeb\x81\xc6\x19\x4e\xf4\x1b\xbb\xc4\x0c\x2f\x0d\x43\x58\x24\x85\xe7\x04\x03\x29\x19\xa4\xfa\x7f\x4a\xb9\xc9\x05\x00\x8a\x5f\x9a\x8a\x02\x3f\xd2\x07\x32\x40\xd7\x4b\xcc\xef\x07\xe8\x64\xc5\xf0\x82\x46\xff\x9d\x4e\xaa\xfc\x29\x25\x68\xc2\xd6\x2a\xf1\xee\xab\xf7\x56\x1f\xf4\xaf\x25\xe0\x05\xaa\x4b\x82\x7f\x9d\xde\x94\x1a\xd4\xc8\x5b\xbf\xd4\xd7\xc4\xe4\x7a\xc7\xc8\x4e\x2f\xc0\x4a\x43\xd9\xba\x39\x70\xbc\xa0\x2c\xb0\xd5\xf6\xca\xd9\x5a\xdc\xd4\x2a\x94\x56\x20\x8c\x5b\x59\xb7\xbb\xd0\x1c\x2f\xb1\xb2\x72\x94\x41\xb9\x48\x25\xd1\xf7\xbe\x90\x29\x27\x26\xa3\x58\xab\x93\xd0\x66\x88\x0a\xfd\x4d\x5d\x09\xce\x28\x49\x45\xc6\x5b\x8a\x8d\xf2\x86\x1d\x9b\xc7\x1b\xb5\x93\x74\xb1\x84\xe8\x0b\x27\x22\x4b\xa4\xa8\xb0\xd7\x4a\x6e\xeb\x9d\x04\xf2\xcb\xd3\xfd\x42\x24\x3e\x29\xf9\xb5\x1c\x6f\x07\xf8\x19\x48\x84\x1a\x35\xf0\x74\xdd\x15\x3b\xf2\xe3\x17\xea\x6c\xdb\x26\x4e\xa6\x51\x05\x65\xb3\xa4\xae\xb6\xfb\x98\x99\x3e\x17\x9e\xec\xc3\x79\x3e\x8f\x55\xc8\x6c\x4a\xe7\x63\x50\xe3\xdf\x35\xc9\x30\x40\x18\x6c\x0c\x76\xa7\x17\xc1\x5d\x3e\x80\x02\x55\x1a\x18\xc4\xa0\x3e\xd9\x98\x89\x6c\x72\x98\xc3\x55\x52\x0e\xd2\x15\x0a\x4c\x2c\x31\x87\x7c\xf9\x39\x4d\xe2\xc3\x32\x18\xd1\x68\x39\xd0\x1e\xc3\x15\x63\x9b\x10\xa8\xb7\x04\x3b\xae\x5b\xd1\xe9\x68\xa9\x5b\xbb\x1b\x67\x92\x49\x44\x5c\xbb\x01\x2a\x8c\xf3\xa8\xa0\x49\x04\xf2\x22\xf0\x0d\xbc\xb4\x47\x70\xbd\xbc\xa8\x4b\xd7\x7b\xfb\x72\x22\xa0\x59\x1b\x39\x71\x13\x7a\xe1\xec\xa9\xc1\xcc\x49\x8e\x3a\x52\x89\x3b\xed\x42\x7b\x42\xe4\xe0\x57\x97\x92\x6e\x93\xac\xc4\x12\x3f\x32\x03\x12\xe9\x54\x5e\xb6\x9d\x7c\xa8\xae\x03\xa2\xe4\x43\xe1\x1b\x5f\x52\xa8\xeb\x08\x82\xfc\xd4\x25\x3f\x0e\xbc\x2c\x6f\x68\x3d\x94\x67\xb4\xe4\xe6\xcf\x98\xe5\xe8\xa5\xbc\x57\x6a\x54\x14\xdc\x06\x14\x14\x43\xa0\x95\x0c\x2c\xa2\x61\xa0\x33\x00\x8d\x91\x72\x38\xc1\x50\x0a\x59\x4a\x4e\x27\x99\x2c\x95\xa4\x09\x4e\x73\x65\x90\x63\x17\xd6\xc1\xe9\xd3\xb7\xf6\xa8\xbe\x36\xf2\xd6\x28\x39\x54\xa9\xb8\x74\xaf\x44\xd7\xf3\x97\xe5\xe8\x96\x69\xe4\xd5\xcd\x6a\xcf\xe1\xa5\x6c\x46\x53\x33\x0a\x2c\xea\xd8\xab\x78\x1e\x00\x29\x80\x84\x79\x45\x78\x07\x32\xf1\x92\x3e\x94\x88\xc2\x33\x82\x16\x24\xa6\x59\x31\x91\x6d\x7d\xf4\x6c\xaf\xcc\xce\x36\x9c\xa5\x0c\x70\x67\x88\x9e\x83\xb1\xf0\xa8\x6e\x6d\x0d\x41\x03\xa7\x47\x75\x51\x09\x0f\x06\x8a\xe5\x3b\xe1\xa2\x71\x21\xc5\xac\x8b\xe9\x8c\x0a\xf9\x73\xa1\x9a\xf3\x06\xf9\x52\x49\xf6\x74\xd8\x3f\x3b\x55\x3d\x4d\xef\x89\x46\x8c\xdb\x55\xd0\x0a\x17\x98\x4c\xbb\x2b\x00\x23\x62\x33\xc9\xd4\xbc\xbb\x08\xf0\xbf\x3b\x7a\xfd\xdd\x34\xeb\xe5\x78\xb9\x24\x1c\x99\x86\xbd\xc5\x16\xbc\x3a\x2d\x0b\xde\x32\x66\x5a\x61\xfa\xef\xeb\x8b\xf3\x5c\x72\xe7\x76\x54\x61\x68\xf8\x19\x90\xee\xa8\x7a\xe7\xce\xb3\x24\xa9\xdd\xb9\x16\xd5\xd2\x6e\xcf\xce\xee\x7e\x1e\x9e\xdd\x8e\x9a\xab\x91\xe5\x3f\xab\xa5\x89\x9b\x89\xa1\x89\xbe\xc6\x24\x5c\x5d\xd9\x82\x18\x07\x16\x28\x23\x66\xd5\x1a\xe0\x90\x25\x49\x98\x59\x33\x66\x7f\x37\xe3\x00\x00\x2e\x63\x5a\xcd\x1c\x33\xd4\x48\xb8\xf0\xfd\xf0\xb3\xbf\xab\xc1\xff\xae\x9f\x3d\x44\xf9\x22\x3e\xa2\x73\xf7\xd6\x1a\xba\x1a\xa7\xeb\x16\xc7\x41\x27\xf8\x3c\x57\xee\xe0\x66\xc7\xe3\x96\xd9\x42\x81\x26\xe5\x6f\x27\xa7\x43\xd3\xee\xef\xa1\x09\xe3\xf2\x9b\x63\x2d\xe7\x61\xdc\x81\xce\xf8\xd2\xcd\xdc\x5d\x52\xd4\x98\x69\x3c\x01\xb4\xf0\x4d\xeb\xe7\x84\x4e\x99\x46\x36\x26\x98\xcd\x32\x3c\x23\x62\x80\xec\xcb\xc7\xcc\x35\x8c\x35\x05\x4a\x5c\x23\x12\x0c\x65\xd7\x43\x16\xd2\xae\x4e\xf2\x0d\x2f\x96\x10\x82\x61\x63\x66\xd6\xc4\x66\xf9\xf0\xda\x0b\xfa\xdf\xd7\x6e\x39\x8a\xd3\xdc\x40\x26\x69\x8d\x8d\x99\xde\x5c\x9d\xb1\x68\x75\x3b\x70\x00\x41\x87\xe8\x80\x75\x31\x27\x36\x4f\x16\x64\xfa\x0c\xb4\x4c\x5d\xa3\xda\x86\x18\x95\xa4\xf7\x8a\xac\x68\x87\xb3\x9e\xd2\x7a\x79\x62\x37\xc3\x9e\x09\x33\xb7\x6a\xae\xdf\xfa\x0e\x50\x07\xae\xba\x2f\x40\x33\xdb\xe6\x62\x6c\x8d\x34\xcf\x19\x8a\x15\x8f\x30\x2a\x42\xd1\x21\x78\xbd\x83\x1e\x08\xad\xa7\xa4\x7f\xdf\x38\xa9\x0e\xad\x13\x5a\xbf\xd6\xa4\x5b\x37\xbd\x56\x59\x38\xcd\x2f\xdd\x81\x89\x14\x4c\xca\x3c\xb0\x8e\x18\x59\x54\xd3\xa5\x62\xeb\x98\x58\x91\x44\x56\xfa\x34\x4d\x28\xa1\x62\xa3\xe9\xe4\xfa\x53\xeb\x19\x39\x0d\xc1\x5c\x76\x9d\x24\xac\xb9\xe7\x02\x01\x5b\x23\x26\x0d\x36\xcb\xb8\x65\x08\xd5\xe2\x85\x41\x39\x43\x6c\x00\x1e\x03\xc7\x44\x83\x7c\xe7\x06\xba\xbe\x7a\xc6\x85\x12\x97\x46\xde\x19\xa9\xad\xcc\x9c\x31\xb3\xe9\x03\x56\x1c\x0f\x6d\xcb\x27\xee\x3e\xd5\x71\xc6\xa5\x06\xdf\x82\xc6\x2a\xf3\x5e\x61\x58\x8e\x19\xe4\xa6\x33\x30\x21\x27\x02\xb2\xa7\x4c\x06\xb6\xf9\xc2\x2b\x67\x85\x99\xab\xf1\xbe\x46\xe6\x15\xd4\x80\xe0\x9e\xff\x9d\xfa\xff\xbf\xfe\xee\xff\x0f\x00\x00\xff\xff\x4d\x2a\x87\x1c\x83\xf6\x02\x00") +var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\xf9\x73\x23\xb9\x95\x27\xfe\xbb\xff\x0a\xac\x66\x23\xba\xca\xa6\xa8\xb6\xe7\x08\x6f\x4d\x4c\x7c\x83\x2d\xb1\xaa\x35\xad\x92\x34\x3a\xba\xc6\xbb\x9c\x90\xc1\x4c\x90\x84\x95\x04\xd8\x00\x52\x2a\xda\xd1\xff\xfb\x37\xf0\x70\x24\xf2\x64\x26\x49\x5d\xd5\x39\x1b\xeb\x56\x91\x4c\x24\xce\x87\x77\x7c\xde\xe7\xfd\xe3\x77\x08\x1d\xc8\x47\x3c\x9f\x13\x71\xf0\x01\x1d\xfc\x69\xf8\xfd\xc1\x40\x7f\x46\xd9\x8c\x1f\x7c\x40\xfa\x7b\x84\x0e\x14\x55\x09\xd1\xdf\xcf\x92\xb5\x22\x34\x4e\x8e\x24\x11\x0f\x34\x22\x47\x38\x5e\x52\x36\x5c\x09\xae\x38\x3c\x88\xd0\xc1\x03\x11\x92\x72\xa6\x7f\x6e\xff\x44\x8c\x2b\x24\x89\x3a\xf8\x1d\x42\xbf\x42\xf3\x32\x5a\x90\x25\x91\x07\x1f\xd0\xff\x33\x0f\x2d\x94\x5a\xb9\x06\xf4\xdf\x52\xff\xf6\x7f\xe0\xb7\x11\x67\x32\xcd\xfd\x18\xaf\x56\x09\x8d\xb0\xa2\x9c\x1d\xfd\x4d\x72\x96\xfd\x76\x25\x78\x9c\x46\x2d\x7f\x8b\xd5\x42\x66\x63\x3c\xc2\x2b\x7a\xf4\xf0\xc7\x23\x1c\x29\xfa\x40\xee\x12\x9c\xb2\x68\x71\xb7\x4a\x30\x93\x47\xff\xa0\xb1\x1e\xe3\xdf\x48\xa4\x7e\x85\x7f\xc4\x7c\x89\x29\x33\x7f\x33\xbc\x24\xbf\xfa\x76\x10\x3a\x98\x13\x15\xfc\x13\xa1\x83\x98\xc8\x48\xd0\x95\xb2\xb3\x72\x45\x94\xa0\xe4\x81\x20\xb5\x20\xc8\xbc\x0e\x99\xd7\x21\xfd\x3a\xe4\x66\x4d\xae\x48\x44\x67\x94\xc4\x68\xba\x46\x94\xad\x52\x85\x04\xf9\x25\x25\x52\xa1\x19\x4d\x14\x11\x72\x68\xa7\x0c\xde\xc2\x57\x44\xc0\x38\x4f\x63\xfd\x96\x4f\x44\x8d\xa0\xed\x33\x68\xfa\x32\xc1\x2c\xfc\xb5\x20\x72\xc5\x99\x24\x32\xd7\x55\x84\x0e\xfe\xf4\xfd\xf7\x85\x8f\xca\x23\x18\x21\x99\x46\x11\x91\x72\x96\x26\xc8\xb5\x14\x76\x06\x1e\x82\x45\xc6\xa5\xc6\x10\x3a\xf8\xdf\x82\xcc\x74\x3b\xff\x74\x14\x93\x19\x65\x54\xb7\x2b\xcd\x5e\x0a\x7a\x9b\x7b\xea\xd7\xdf\x55\xfd\xfd\x6b\x30\xa2\x15\x16\x78\x49\xf4\xb4\xf8\xd5\x37\xff\x57\x18\x8b\x5e\x2f\xfd\xf2\x6c\x4d\x8b\x1d\x2f\x8c\xf6\x1c\x2f\x09\xe2\x33\x58\x2e\xfb\x04\xfc\x2d\x88\xe4\xa9\x88\x08\x9a\x92\x84\xb3\xb9\x44\x8a\x97\xe6\x80\x42\x0b\x7a\xab\x15\xbf\xd1\x4b\x49\x05\xd1\x6b\xa5\x44\x4a\x0a\xdf\xaa\xf5\x0a\x3a\x29\x95\xa0\x6c\x1e\x4e\xc5\xaf\x83\x56\x43\x33\x3b\xb4\xc3\xc8\xcc\x03\xb5\x03\x9b\xb0\x91\xfb\x49\x84\x19\x9a\x12\xa4\xcf\x25\x8d\x89\x20\x31\xc2\x12\x61\x24\xd3\xa9\x24\x0a\x3d\x52\xb5\xa0\x4c\xff\xdb\x6c\xdf\xc8\xcd\xd9\xeb\x99\x1b\xf8\xb3\x79\x66\x6e\x25\x11\xba\xe3\x0f\x34\x26\x31\x7a\xc0\x49\x4a\xd0\x8c\x8b\xdc\xf4\x0c\x27\xec\x66\xa1\xe7\x61\x39\xa5\x0c\x4e\x9e\x9e\x4b\xb7\x43\xfe\xe0\xa6\xeb\x0f\x48\xbf\x0f\xa5\x8c\xfe\x92\x92\x64\x8d\x68\x4c\x98\xd2\xe7\x5a\x16\x5b\xfb\x03\x87\xf7\xe3\x04\x1d\x22\x3d\xcf\x44\x28\x98\x6f\xce\x14\xf9\xaa\x24\x3a\x44\x09\xbd\x27\xe8\xbb\x33\x2a\x15\x1a\x5d\x9e\x7e\x37\x40\xdf\x9d\x65\x82\x43\x7e\xf7\x0c\x33\xec\xff\xfe\x9f\xe0\xe8\x29\x3c\x2f\x1e\xba\x83\x91\x3e\xcd\xd7\xe6\x9a\xc8\x5a\xf8\x9f\xdf\x85\xed\xd8\xf5\x6a\x96\xbd\x99\xe0\xb5\x52\xb7\x8b\xac\xfd\x48\x54\xb4\xd8\x20\x68\xe5\x8e\x92\x56\x2f\x47\x51\xd4\xca\xb7\x25\x6b\xf5\x10\x9e\x5a\xde\xee\x22\x6c\xb1\x82\x53\x80\x29\x33\x87\xc6\x9f\xa1\xfc\xca\xa0\x97\x13\x2b\xbb\xc8\xdb\x60\x34\x81\xc8\x75\x92\x34\x98\x89\x57\x32\xd6\x84\x2e\xe9\xa6\x75\x3c\x65\xb1\x56\xbb\xac\x90\x63\xe9\x72\x4a\x84\x1e\xba\x13\x77\x30\xc2\xa9\x16\x7f\x2a\x15\x8c\xc4\x35\x43\xfb\x25\x25\x62\xdd\x30\xb6\x19\x4e\x64\xdd\xe0\x28\x53\x44\xeb\xb5\x85\xaf\x67\x5c\x2c\xb1\xb2\x3f\xf8\xb7\x7f\xe9\x3a\x78\xc5\xef\xc9\xa6\x75\x3e\x35\xab\x16\x61\x09\xcb\xbd\x4c\x13\x45\x57\x09\x41\x2b\x3c\x27\xd2\xce\x42\x9a\x28\x39\x80\x9f\x69\x5d\x9a\x88\x43\x7f\xdb\xc0\x1b\xdc\x2d\x9b\x4a\xf8\x04\xcd\xbc\x20\x63\xe4\xab\x82\x96\x26\x0c\xee\x59\x98\xa2\xf0\xf6\x78\x82\xa9\xdc\x6e\x9f\x48\x2e\xd4\xdd\x74\x3d\xbc\x27\xa5\xf7\xd6\xee\x16\xcc\x10\x56\x4a\xd0\x69\xaa\x88\x1e\xb7\x6e\xc3\xdd\x93\x20\xfa\xcc\x65\x2c\xf5\xe5\x7b\x71\x72\xf1\xee\x1e\x2b\xc1\xe7\x98\xbd\xff\x80\x46\x71\x8c\x4c\x47\xf5\x6f\x68\x6c\xae\xe4\x05\x11\x64\x88\x6e\x16\x54\x22\xb9\xe0\x69\x12\x23\x46\x1e\x88\xd0\x73\x4b\x96\x2b\xb5\x7e\x75\xb3\x15\x53\x41\x22\x98\x98\x2e\x27\xcc\x3f\xa5\x27\x4d\x1b\x3d\x6b\x33\x75\xf7\x64\x0d\x8a\x4b\x79\xfa\x9e\x61\xbf\x14\xbe\x25\x2c\x5d\x16\xee\x0a\xf8\xfc\x64\x7c\x7d\x3c\x3e\x3f\x39\x3d\xff\x54\x78\x42\xab\x11\xfe\xab\xdc\x37\xff\x53\x9a\x9b\x19\x4e\x13\x38\xd5\x41\x6b\xcf\xa6\xb8\x44\x0b\x9a\xc4\x82\xb0\x23\x85\xe5\xfd\x1d\xf9\x4a\xa2\xd4\xdc\xb3\xff\xc8\x7f\x70\xa7\xb5\x4f\x1e\x93\xfc\x27\xb9\x7f\x64\xea\x4e\xe7\x47\xbd\x55\xda\xf9\x49\xb0\x61\xdb\x3d\x07\x9f\xd0\xb8\xf2\xd7\xf0\xc9\x86\x31\xb8\xdf\x34\x74\xd6\xfd\xa4\xb6\x57\xee\x07\x56\x81\xab\xfc\x8d\x20\x4a\xac\xef\xb0\x52\xfa\x94\x6f\xa1\x33\xc2\x92\x22\x3d\x5a\x94\xad\xa7\x55\x1f\x8d\xa2\x08\xb2\xdb\x6b\x8e\xba\x07\xd9\x2f\x37\xe9\x8b\xe7\x3c\x26\x63\xdf\xec\x47\x2e\x6e\xb0\xbc\x7f\x0b\x3a\x63\xae\xe3\xcf\xa1\x36\x6e\x7b\x80\xbe\x39\xa3\x7e\x4b\x71\xd0\xbb\x00\x76\x9f\xc9\xb6\x0e\x03\x2e\x90\x5c\x4b\x45\x96\x1b\x5d\x07\x6f\x67\x22\xac\xbc\x7f\xad\x1d\x2e\x5c\x39\xbf\x81\x53\x9f\xbf\x40\xfb\xe3\xdd\x61\xca\xf6\xe5\xf8\x7b\xed\xe3\x74\x21\x98\xe6\xa1\x5e\xbb\xe5\x73\x01\x07\xbb\x4f\x5e\xfd\x30\x73\xaa\xdd\xbe\x3b\xf9\x44\x5e\x83\xda\xb5\x72\xb3\x7d\x07\x1d\xd8\x60\xf2\xe5\x5d\xc7\xfe\xfc\xe9\x47\x43\xe7\x8a\xf1\x98\x29\x6d\xf3\x5a\xdf\x12\x11\x28\xe2\xc2\xa8\x82\x71\x83\x78\x7b\x3e\xa3\xef\xf6\xfc\xfa\x72\x7c\x7c\xfa\xf1\x74\x7c\x52\xb6\xfa\x6e\x46\xd7\x3f\x95\x3f\xfd\x72\x71\xf5\xd3\xc7\xb3\x8b\x2f\xe5\x6f\xce\x46\xb7\xe7\xc7\x3f\xde\x5d\x9e\x8d\xce\x5b\xdb\x89\x61\x07\x3a\xae\x66\xef\x00\xdb\xa7\x03\x6c\xf0\xed\x7a\xc0\x6c\xf4\xa0\xbd\xf7\x0b\x25\x54\x2a\x3d\x41\xf6\x49\xb4\xc2\x52\x9a\xfb\xd7\xf4\x60\x38\x61\x9f\xb9\x20\x88\xb2\x19\x47\x1c\x82\x43\x52\x89\x34\x52\x94\xcd\xfd\x43\x1f\xd0\x24\xfd\xfe\xfb\x7f\x8e\xce\x28\xbb\x87\xbf\xc8\x6b\x9c\x9c\xde\x3d\xb8\xcd\x6c\xf5\xee\xc1\xf0\xbb\xb7\xe1\x1e\x8c\xb1\xc2\x47\xa1\x57\xf0\x69\xf0\x24\x26\x72\x89\x59\x8c\x78\xaa\xf4\x9f\xfa\xbd\x68\x26\xf8\x52\x9f\x1b\xf2\x95\x4a\x90\x12\x8f\x5c\xdc\xcf\x12\xfe\xd8\xce\x5b\xf5\x89\x28\xef\xef\x39\xc1\x0a\xbf\x05\x27\xd5\x17\x3b\x42\xdf\xf1\x4f\x44\xe9\xbe\x5f\xd9\xb7\xf4\xd0\x92\x1e\x5a\xf2\xb2\xd0\x92\x57\xe5\x29\x7a\x7a\xd9\x97\x77\x2b\x19\x01\x58\x13\xf5\xa8\x0d\x6a\xd4\xc4\x2c\x82\x90\xc4\x53\x0a\xcd\x7c\x20\x60\x83\xc0\xcc\x39\xc9\xdf\x8a\xd0\xcc\x75\xfa\xf9\x05\xe6\x6f\xc2\x87\xdf\xbb\xe8\xb7\x9c\xa8\x37\x29\x57\x5b\x5e\x19\xcf\xe6\x60\x7f\x7a\x39\x5f\x0a\x7f\x77\x89\x77\x77\x08\x70\xb7\x8e\x68\x6f\x08\x61\x57\xc6\xac\xab\x82\xd4\xe5\xa8\x74\x65\x18\x7a\xa7\xb8\x73\xd7\x2b\xa9\x7d\xc4\xf9\x13\x51\x37\x58\xde\xbf\xb9\x2b\x29\xd7\xe9\xe7\xbf\x92\x7e\xa3\x81\xe6\x3e\xb2\xfc\x84\x53\xf7\xad\x5f\x64\xaf\x37\x76\xfc\x1b\x08\x16\xf7\xd1\xe1\x4e\x73\xf4\x6d\x85\x83\xbf\xd5\xf8\xef\xdb\x0c\xf8\xf6\x11\xde\xd7\x1b\xe1\x7d\x52\x3b\x88\x3c\x10\xa6\x24\x78\xbc\x42\x75\xfa\x60\xc5\x65\xb3\xfa\x7f\x2c\x08\x56\x04\xe1\x82\xab\x09\x41\x83\x48\x90\x88\x8b\x58\xab\xfd\x18\xad\x16\x58\x12\xa4\x04\x66\x92\x6e\x52\xfd\x4d\xab\xe0\xdb\xd1\xed\xbc\x05\xad\x3f\xe7\x88\x82\x5e\x3f\x97\xce\x3f\xe5\x71\xe9\x68\x98\x53\x53\xf5\x4d\xb3\x78\xd9\xdb\xd0\x21\x0f\xad\xcd\xc8\x9f\x70\x37\x6b\x51\xb6\xe5\x6e\xce\x5b\xa9\x7b\xd9\xcd\x60\x16\xbe\x95\xdd\x9c\xb3\x61\x7f\x5b\xbb\xb9\x6a\xe8\xaf\x61\x37\xbb\x00\xe8\x96\x3b\xba\x1c\x3f\xdd\xcb\xae\xf6\x41\xcb\xb7\xb2\xb3\x4b\x51\xd6\xdf\xd6\xee\xae\x1b\xfe\xcb\xee\x70\xef\x7b\xdd\xd7\xde\xde\xbc\x71\xfd\x04\xbc\x85\x4d\xeb\x3b\x6b\xfa\xfe\x9b\xd9\xad\xa5\x71\xbf\x92\x6d\x7a\x24\x88\xc9\xa9\xea\xb4\x5f\xaf\xec\x43\x9d\x77\xac\x7b\xb0\xdf\xb3\x6f\x69\xcf\xba\x55\x7b\x3d\xbb\xb6\x0e\xc1\xd5\x3d\xcf\xb0\x01\x96\x25\xd1\x12\xab\x68\xa1\xbf\x34\x21\xa1\x96\x64\x14\x59\x62\xe1\x9b\xda\xdd\xcf\x91\x4d\xf8\x6d\x3b\x7f\x7b\xa7\xef\x6f\x90\xf4\xe7\xd5\x20\x94\xfb\xac\x88\x3d\x66\x45\x50\xd9\x67\x45\xf4\x59\x11\x6d\x27\xa8\xcf\x8a\xe8\xb3\x22\x82\xef\xde\x46\x56\xc4\xd3\x27\x44\xec\x27\xeb\xe1\x4d\x29\xd1\xbd\x02\xdd\x2b\xd0\x7d\x6a\x83\x1f\xda\xbe\x04\x98\x7b\xfa\x20\x26\x09\x51\xa4\x51\xfc\xdc\x10\xb1\xd4\xb6\x41\x8e\xe0\xb7\x22\x68\x90\x71\x07\xf9\x1d\x04\xee\x8d\x26\xb9\xe4\xdb\x7e\x9b\xd2\xc9\x77\xbf\xcf\xc4\xea\xc5\x55\x2f\xae\xb6\x19\xda\xeb\xf1\xca\x06\x87\xf9\x45\xdd\xb2\x01\x5d\xf0\x1d\x8d\xf7\xc3\x18\xec\xd5\xc6\x90\x2f\x38\x9b\x8a\x1c\x65\xeb\x76\x4e\xda\x8c\x7c\xf7\x34\x7e\x13\x7e\x5a\x2d\x47\xe2\x31\x53\x54\xad\x3d\x4a\x4d\xf4\xc4\xc1\x3d\x71\x70\xfb\xb1\xf6\x1e\xc2\x3d\x7a\x08\x7b\xe2\xe0\xde\x07\xd6\xfb\xc0\x9e\xde\x07\xf6\x52\x0e\xed\x67\x3e\x96\xcf\xa5\xa2\x6d\x07\x4c\x62\x31\x12\x64\x4e\xa5\x22\x42\xcf\x5e\xa5\x52\xb6\x19\xa9\xf4\x56\x4b\xe1\xb4\xc6\x7d\x84\xaf\x3d\xf8\x97\x16\xdd\xbf\xb2\xb7\x28\x1c\xf5\x29\x8e\x7d\xdd\x0b\x50\x9d\x96\x78\x8d\x16\xf8\x81\xa0\x19\xa6\x89\x31\x8c\xac\x74\x6c\x18\x61\x53\x87\xfe\x4f\xb7\x0e\xe1\x7c\x77\x04\x99\x11\x41\x58\x64\xa4\xbd\x51\x7e\x22\x9c\x20\x02\x4a\xa9\xf9\xcd\x42\x9b\xa9\x89\x20\x38\x5e\xa3\x29\x21\xcc\x6f\x9b\x0a\x4d\xa1\xa6\xcf\x7b\x51\x5a\x5f\xdc\x4c\x2b\xef\x9e\xd7\x62\xa4\x3d\x09\x7a\xa6\x5a\x24\xec\x6e\x9c\xc9\x3f\xbd\x2d\x51\xd1\x83\x68\x7a\xa7\xda\xcb\x3b\xd5\x7a\x10\x4d\x6f\x22\xbf\x02\x13\xb9\x07\xd1\xf4\x20\x9a\xde\x81\xd0\x7a\xb6\x7a\x07\x42\xf8\xdd\xdb\x00\xd1\x3c\x61\x9d\xda\xe7\xd2\xb0\x7b\x05\xdb\xfd\xae\x57\xb0\x7b\x05\xfb\x1b\x55\xb0\x5f\xc7\x0c\xf7\xda\x75\xaf\x5d\xf7\xda\x75\xaf\x5d\xf7\xda\x75\xaf\x5d\xdb\xa7\xf6\xa9\x5d\xc3\x5f\x8e\x0d\x74\x67\xc4\x7a\xf7\x28\xd7\x27\xa2\xde\x6a\x88\xab\x57\xa9\x7b\x95\xfa\x75\xab\xd4\xaf\x66\x40\xdf\x1e\xbb\x5f\xcf\x8f\x57\xba\x1f\xbf\x05\x7e\x3c\xf7\xf4\xc1\x2a\x6d\xbe\xfe\x6e\x57\xb1\x4b\x97\x90\x0a\xab\x14\x2c\x8d\x16\x57\x21\x1a\x29\xb4\xe4\x5a\xef\x66\x24\xf7\x1b\xb7\xe7\x0d\x88\x60\x4e\x1f\x08\x43\x0e\x16\x3c\xb0\x92\x6d\x00\xc6\xef\xaf\x4e\xc0\xd9\x3c\x0d\xac\x10\x46\x8a\x2e\xc9\x10\x9d\xce\xcc\x06\x8a\x70\x92\x20\x49\x94\x2c\x20\x4f\xb4\x42\x66\x1f\x62\x71\xd6\x57\xf7\x6e\x9a\x01\x11\xcc\xcf\x06\xee\xfc\xa5\x89\x32\xa7\xd1\x35\xfe\x48\x93\x44\xf7\xc1\x6e\x5a\x10\x3e\x4b\x22\x12\xf7\x64\xee\xb5\xee\xc7\x4b\x1c\x6b\x6b\x22\xe8\x42\x96\x50\x12\xfe\x1e\xc4\x3c\x95\x1e\x4a\x91\x7b\xde\x3c\x3d\x44\xd6\xee\x33\x3c\x56\xad\xba\xb1\xc0\xb1\x16\xfb\xd1\x82\xc4\x69\x42\x10\x96\x92\x47\x14\x2b\x12\x23\x6a\xae\x05\x44\x95\xb3\x12\xdd\x8f\xdc\xab\x63\x2a\xf1\x34\x21\xb1\x9d\x63\x92\x21\x3b\x1a\x7b\x4e\x25\x9a\x12\x3d\xc5\xfa\xe6\xc9\xcf\xfe\xc2\x5c\x4a\x15\xbd\x09\xba\x42\xca\x3d\x21\xcc\x74\xa4\x41\xa9\x32\x9b\xf3\xad\xea\x55\xa6\xf7\x7d\xba\x4d\xaf\x65\xf5\x5a\x56\xa7\x01\x7d\x53\x5a\xd6\x2b\x42\xa3\x39\x81\xf4\xa2\x68\x34\x88\x59\x69\xc9\x7f\xe7\x9d\x52\x72\x3b\x7b\xdd\xfb\xfd\x3e\xbb\x26\x47\xbe\xc5\x63\xce\x66\x74\x9e\x0a\xeb\x80\x9f\xea\x13\xbb\x31\x30\x56\xd1\xce\x9b\xb8\x71\xaa\xbb\xfe\x5c\x17\x4f\x17\x1b\x02\x1d\x22\xad\x5d\xdf\x5d\x8d\xaf\x2f\x6e\xaf\x8e\xc7\x1f\xd0\x68\xb5\x4a\xa8\x71\xec\x47\xa9\x54\x7c\x49\xff\xae\x87\x61\xb8\x6b\xbd\xe4\xb6\x6a\x88\x04\x85\x03\x22\x09\x72\x38\x61\xe8\x10\x1d\x9f\xdd\x5e\xdf\x8c\xaf\x6a\x1a\xb4\x9b\x00\x2a\xb6\x90\xe5\x2a\x01\xad\xe4\x3e\x9d\x12\xc1\x88\x22\x12\x45\x49\x0a\xb0\x66\x1f\x5f\x30\x8d\x8e\xff\x7b\x7c\x7c\x7b\x73\x7a\x71\x7e\xf7\x5f\xb7\xe3\xdb\xf1\x07\xe4\x76\x93\x6e\x56\xf7\x4b\xf7\x22\x5e\x33\xbc\xd4\xe6\x4f\x9e\x64\xf7\x97\x94\xa4\xa0\x04\xd1\x39\x5b\x12\xa6\x8a\x2d\xba\x0e\x9f\x8d\x7e\x18\x9f\xe5\x5b\x5e\x10\xf4\xd3\x9f\xb3\x4e\x25\x78\x4a\x12\x1b\xf0\x00\x7f\xbe\x16\xd8\xd9\x8b\x6c\x24\x24\x2d\x89\xc9\xe7\xb6\xa5\x72\x0b\x5a\xb6\x8e\x8a\x2b\x54\xfe\x45\x61\xba\x9b\x7e\x90\x9b\xbd\xd6\xc6\x56\xbe\x87\xcf\x26\xe9\xf4\x01\x89\xef\x00\x21\x4d\x89\x3c\xfa\x47\xee\xa0\xfc\xfa\x64\xc4\x1b\x28\xc8\x16\xb4\x92\x6f\x53\xcd\xbc\xec\x81\xb7\x20\xef\xc2\xee\xbe\xa4\x6c\xdb\x93\x3e\xf1\xba\x5c\x16\xdd\xb5\xb5\xde\xea\xe8\xad\x8e\xea\x99\xe9\xe1\x12\x35\x33\xbc\xaf\x6b\x67\x1b\x2f\xdf\x8c\x92\x24\x96\x25\x37\x4d\xee\xda\xd8\xe8\x92\x79\xbb\x37\xc6\xf3\x3a\x65\xba\xe8\xc6\x57\xde\x7f\x6e\x1d\xea\x7a\xb5\x96\x44\x61\x28\x41\xa8\x38\x4a\xa1\xeb\xfd\x2d\x54\x9e\xe6\xfe\x16\xea\x6f\xa1\xda\x99\xe9\x6f\xa1\x37\xec\xbc\xaa\x90\xdc\x2f\xea\xbd\xda\x64\xd3\xed\xc4\x7f\x53\xe1\xda\x2a\xdb\x72\x12\xc9\x05\x16\xa6\xd2\x49\xc4\x97\x4b\xce\x82\xc8\xeb\x7a\x45\x06\xc8\x07\xdb\xc0\x4d\x01\xdd\xd8\xe4\xf9\xca\x5e\x43\xdf\x86\xcf\x2b\x98\x97\xe7\x40\x85\xf7\x76\xe0\x86\x09\xea\x89\x82\x7a\xa2\xa0\x1e\xa7\xdd\x13\x05\x35\xef\x96\x1e\x89\xdc\x23\x91\xc3\xef\x7a\xa2\xa0\x57\x44\x14\x94\xaf\x21\x6e\x30\xd7\x55\x45\xf7\x7f\x2d\x7f\x13\x46\x2e\x4a\x25\xd7\x6d\x40\xc3\xd4\x23\xdf\x1d\x9a\x9d\x2f\xd1\xba\x29\xb2\x11\x16\xf5\x7c\xe5\x7a\xed\x2c\x59\x2b\x42\xe3\xa4\x5c\x8d\xf4\x19\xa0\x43\x55\x0b\xfd\x2d\xfa\x52\x2a\xb6\x6d\xef\x58\xd9\x38\x51\xdf\x2a\xa1\x6f\x26\x97\xde\x90\xd3\xbf\x9d\xf0\x76\xa4\xe7\x77\x35\x22\xbc\xfa\x7b\x2f\xc8\xab\xbf\xde\x35\x8f\x3d\x2f\xbb\xb7\xcd\x5f\xcf\xc9\xc6\xb7\xe1\xad\x08\x7b\xfc\x1c\xfe\x8a\xc6\xd5\xff\xe6\xe4\x7a\xd3\x5e\xee\xa5\x7b\xcb\xe9\xfa\x56\x65\x7c\xef\xcf\xd8\xa7\x3f\x63\xf0\xed\x3a\x34\xfa\xbc\xf3\x86\xc9\xe9\xbd\x3d\xdb\xcc\x56\xef\xed\x09\xbf\x7b\x1b\x79\xe7\xf6\xae\xbe\x33\x57\x7d\x00\x52\x3f\xfa\x47\xf6\x77\xa0\x48\x07\x1f\x56\x84\xfc\x3a\x00\x73\x1c\xfc\x99\xc4\x99\xfa\x91\x35\x5e\x01\xd8\xb1\x7d\x38\x74\x4a\x49\x16\xbc\xde\x88\xdf\xb9\x34\x8f\x9e\xc0\x93\x6f\x0b\xed\x5e\xd3\xf5\xe7\xc5\xf5\x94\x77\xc2\x26\xd5\x09\x20\x03\x5e\x9f\xa6\x06\xcd\xfd\xb8\xa0\x70\x4d\x02\x9d\x0b\x5c\x25\xc1\x82\xbb\x3c\x39\x0c\x80\xf6\x3a\x9d\xe3\xb9\xd5\xa9\xd2\x76\x6f\x37\x70\xbb\x47\xdf\xee\xb8\x5f\x1c\x09\xb1\x61\xdf\xbf\x28\x2a\xa2\x41\x66\xee\x07\x10\xf1\x7c\xf2\xf1\x13\x51\xdf\x9e\x70\xfc\x44\xd4\x73\x49\xc6\x6d\xc5\x61\xa3\x48\xc8\xd8\xe7\x5f\x89\x34\xd8\x4e\xf4\xbd\xad\x31\xf6\x79\x5d\x7d\x5e\xd7\x6f\x3d\xaf\xcb\x3d\xdd\xa6\xf6\xe8\x09\xfc\xe4\x19\xaf\x2a\xf3\xc2\x6f\xef\xb6\x32\xe3\xea\x2f\xac\xfe\xc2\xea\x36\xc6\xd7\xaa\xa2\xbb\xfd\xfc\x1a\x54\xf4\x4e\xa9\xf6\x26\x7a\x97\x55\xf1\x71\xdb\x7f\x63\x84\xee\xd2\xbd\xec\xed\x08\x21\xd9\x55\xce\xec\x94\xae\xb5\xa9\xf6\xd6\x55\x56\x70\xab\x22\x76\x54\x9c\x72\xf7\xeb\xcb\x92\x28\x7b\xed\xb3\xee\x7a\xfe\x5c\xc2\xfe\xb5\x88\x88\x6c\xdc\x2f\x2a\x14\xb4\x8e\x5b\x84\x7c\xe5\x91\x04\x77\x8d\x20\xb0\x0d\xbf\xcd\x25\xb4\x37\xff\xb4\x00\x14\xcb\x7f\x67\xa1\x63\xf0\x35\x74\xb9\xd8\x0f\xf7\x61\xf8\x42\xf7\x59\xd6\xb2\xfb\xc4\xb1\x84\xc2\x87\x82\x28\xb1\xbe\xc3\x4a\xdb\x11\x6a\x77\x74\x5a\xde\x6a\xd8\x80\x4e\xbb\xc1\xf2\xfe\x4d\xa2\xd3\xf2\x1d\x7f\xe2\x33\xdb\x7a\x4f\x7e\x73\xb8\x86\xb6\x27\xac\xc7\x38\x6c\x31\x75\xdf\x2a\xde\xa1\x49\x84\xbe\x9a\x1e\x16\xa4\xf8\xb7\x78\x72\xf3\x77\x52\x7f\x44\x9b\xe6\xe8\x9b\x63\xb0\x2b\xa8\x1a\x1b\xc6\xf6\x46\x98\xec\x8a\xda\xd2\xbe\x7b\xf5\x34\x10\xa8\x60\x35\x7a\xb6\xe3\x6f\x94\xed\xb8\x9d\x71\xd3\xda\xb2\x69\x6b\xd6\xb4\xb3\x69\xea\x0d\x9a\x1d\x90\xd4\x79\x3b\x63\x5b\x24\x75\x4e\x8f\x7f\x13\xde\x9a\x5c\x8f\x9f\x03\x49\xfd\x1b\x35\x3d\x7a\xbb\xe3\x49\xe6\xed\x5b\x35\x3a\x5e\xb9\xc5\xd1\x63\xc0\xf7\x89\x01\xef\x21\xe0\x3d\x04\xbc\xed\x04\xf5\x10\xf0\x1e\x02\x1e\x7c\xf7\x36\x20\xe0\xd6\x5e\xdc\x15\xbd\x58\xa5\xb2\x67\x0a\x6d\x8e\x18\x66\x7b\xf5\xfd\x34\x7e\x13\x7a\x7b\xc0\xd7\xe4\x2d\x6b\xf1\x1c\xfa\x7b\x4f\x4c\xd4\x13\x13\xf5\x4a\xdc\x6f\x49\x89\xeb\xf5\x94\x6d\x66\xab\xd7\x53\xc2\xef\x7a\x62\xa2\x57\x44\x4c\xa4\x15\xa7\x1c\x6e\x6d\x23\x7c\xea\x58\x10\xac\x4c\x75\x32\x91\x21\xa9\x0a\x0a\x58\x93\x76\x65\x1a\xd0\xfa\xd5\x5b\x50\xae\x74\x3f\x4d\x8f\x5b\xe0\xa8\xc2\x17\x1e\xfc\x4b\x8b\x8e\x5f\xd9\xbb\x12\x0e\xf4\x14\xc7\xbe\x26\x1c\x28\x48\x4b\xbc\x46\x0b\xfc\x40\xd0\x0c\xd3\xc4\xb8\xa9\xac\x0c\x6c\x18\x5b\x53\x87\xfe\x4f\xb7\x0e\xe1\x7c\x77\x32\x50\xaa\x96\xe9\x46\xc5\x89\x70\x82\x88\xa1\x50\x85\xdf\x40\xc1\x3a\x5b\x1e\x70\x4a\x08\x0b\x10\x8e\x6d\xfb\xbc\x17\xd5\xf4\xc5\xc1\x68\xe1\xbe\x79\x71\x1c\x5a\x7d\x91\xe7\xfd\xd9\x5c\xbb\x18\x5a\xf2\x4f\x6f\x45\x14\x3c\x87\x59\xf5\x0d\x87\x3e\xfa\xf0\xc6\x6f\x93\x71\xfd\xd5\xa8\xe4\xbd\xa1\xbb\x47\x43\x17\x52\x57\xbe\x51\x4b\xb7\x0f\x57\x34\x4c\x4e\xef\x06\xd8\x66\xb6\x7a\x37\x40\xf8\xdd\xdb\x09\x57\xd4\x6b\xcf\xdb\x95\x13\x7c\x42\x3d\xba\x57\xa3\x7b\x35\xba\x57\xa3\xbf\x59\x35\xfa\x75\xcc\x70\xaf\x43\xf7\x3a\x74\xaf\x43\xf7\x3a\x74\xaf\x43\xf7\x3a\xb4\x7d\x6a\x2f\x3a\x34\xfc\xe5\x12\x88\xf7\x93\x2d\xdc\x2e\x22\x65\xd3\x85\xdf\x8a\xf2\xdc\x2b\xce\xbd\xe2\xfc\xba\x15\xe7\x57\x33\xa0\x6f\x2f\x47\xb0\xcf\xb2\x2b\xdd\x82\xdf\x6c\x96\x9d\x2f\x26\xb0\x05\x51\x72\xee\x33\xd7\xd0\x73\xd3\x27\x0f\x9c\x64\xc4\x2c\x46\xae\x13\x9d\xc8\x94\xbf\xd8\x87\xde\x16\xf9\x5a\xb9\xd7\x3d\x85\x32\x0a\x56\xad\xa7\x50\x7e\xc2\x71\xbb\x73\xb6\x61\xe4\x6e\x8f\x1a\xef\xd5\x1b\x1d\xf6\x8b\xc3\x7c\xea\x4f\xfa\x8b\x82\x7e\x2a\x6f\x8e\x52\xc2\x45\x56\x8a\xea\xf9\x99\xa3\x77\xb9\x1a\x3e\x11\xf5\xad\xdc\x0b\x3d\x7b\x74\x4f\xc6\xb9\x75\x91\xa9\x4e\x12\xfe\x6d\x0d\xb1\x27\xc8\xee\x09\xb2\x7b\x82\x6c\xff\xd6\xe7\x20\xc8\xde\xe5\x46\x36\xaf\xff\x56\x2e\xe5\x9e\x24\xbb\xbf\x97\xfb\x7b\xb9\x72\x88\xaf\xd0\xe0\x7a\x15\x14\xe0\xde\xe0\xda\x57\x6a\x7b\x18\xca\xf2\xc2\x78\xaf\x19\xee\x6e\x26\xfb\x2c\x77\xfb\x7f\x7d\x96\x7b\x9b\xc1\xf5\x59\xee\x3d\x70\xa9\xcf\x72\xef\xa1\x39\x3d\x34\xa7\xcf\x72\x7f\x2b\x59\xee\x4e\x81\xda\x47\xa6\x7b\x85\x32\xb6\x39\xdb\xfd\x4b\xd9\x32\x78\xb5\x8a\x96\xeb\x6b\x9f\xf5\xde\x67\xbd\xef\xba\x77\x5e\x85\x4d\xf6\x24\xd9\xef\x15\x62\x60\x57\x43\xec\x6d\x64\xc1\xbb\xde\xf6\x29\x3c\x3d\x12\xf1\xf5\x23\x11\x5f\x5d\x0a\xcf\xab\x51\xdb\x7b\x63\x78\x8f\xc6\x70\x9f\xc5\xd3\x67\xf1\xf4\xae\x82\xd6\xb3\xd5\xbb\x0a\xc2\xef\xde\x46\x16\xcf\x66\x6d\x7a\x2f\xd9\xf0\x4f\xa1\x57\xf7\x6a\xb5\xf9\x5d\xaf\x56\xf7\x6a\xf5\x37\xaa\x56\xbf\x8e\x19\xee\x75\xea\x5e\xa7\xee\x75\xea\x5e\xa7\xee\x75\xea\x5e\xa7\xb6\x4f\xed\x4d\xa7\xde\x6f\x76\x7c\xc7\x28\x56\x90\x71\xf1\x96\x94\xe9\x5e\x91\xee\x15\xe9\xd7\xad\x48\xbf\x9a\x01\xf5\x99\xf2\x7d\xa6\x7c\xe9\x9b\xd7\x9b\x29\xff\x3b\xbb\x11\x0e\x02\xd9\xef\x2f\x89\x83\x1f\x12\x3e\xbd\x59\xaf\x88\xfe\xef\x09\x5d\x12\x26\x41\x63\xa1\x6a\x1d\x5e\x9c\x35\x13\x5c\x9e\xda\x83\xeb\xd3\xf3\x4f\x67\x61\x0e\xc9\xc1\xe7\xdb\xb3\x9b\xd3\xcb\xd1\xd5\x8d\xeb\xa1\x1f\x55\x38\x17\xf6\xb9\xdc\xdd\x7f\xcc\x97\x2b\x2c\xa8\xe4\x6c\xfc\x75\x25\x88\xd4\x5d\xbb\x80\xdb\x96\x8b\xed\x7a\x37\xfe\xaf\xb0\x67\xe7\xf9\x7f\x7e\xba\xc9\xff\x2b\x37\x8a\xb3\x9b\xfc\xbf\xc6\x8d\xa3\x09\x1a\x2e\x9e\xa0\x43\xf4\xe9\xe6\x03\xfa\x04\x51\x7f\x81\x6e\x16\x98\x41\x86\xd2\xd9\xcd\x07\x74\x46\xa4\x84\x4f\xb2\x87\x15\x55\x09\x8c\xed\x07\xca\xb0\x58\x23\x37\x7c\x93\x8c\x84\xc1\x1d\xe8\xa6\xa6\x38\x79\xec\x6f\x29\x03\x85\x35\x9b\xbd\x33\x3e\xa7\x11\x4e\x76\x9b\xc4\xd1\x79\x78\x5e\x0e\x2e\xae\x1a\xa7\x22\xfc\x75\x79\x2e\x46\xe7\x27\x90\x84\xe5\xba\x5a\x31\xf2\x73\x22\x15\x89\xf5\x05\x18\x9b\xcd\xab\x6d\x0d\xb2\x0e\x2e\xc6\xbf\x71\xca\x48\x8c\x52\xa9\xd5\xb5\xd1\xf9\x09\x3a\x42\x17\x57\x13\x76\x21\x62\xe3\x2f\x20\xfa\x46\x31\xb6\x0a\x95\x88\x71\x85\xe8\x72\xc5\x85\xc2\x4c\xe9\xcb\x54\x0b\x32\x6e\x67\x44\x22\x2c\x08\x3a\xe6\xcb\x65\xaa\xb0\xa2\x0f\xa4\x34\xa9\xcc\x18\x01\xd7\x44\x9d\xc6\xe0\x81\xac\x98\x43\x3e\xcd\x29\x3a\x07\x2b\xa1\xdb\x57\xb4\xa0\xfd\x1d\xd0\xb8\xa4\x0e\xba\x26\xb0\x10\x38\x2f\x06\x0f\xa8\x22\xcb\xe2\xef\x5b\x22\xc5\x7e\xad\xd4\xad\x4f\xb0\xc2\x67\x1c\xc7\x94\xcd\x4d\x1e\xdc\x67\xa2\x70\x8c\x15\xfe\xe8\xdc\x1b\x5b\xec\x8e\xff\xbc\xbe\x38\x0f\xb7\xc7\x5f\x46\x9f\xcf\xc2\x7f\x5f\x5e\x5d\xdc\x5c\x34\xee\x98\x5c\x0b\xe5\x2d\xa3\xbf\xfe\x00\xff\x8b\x8e\x90\x6e\xdd\xab\x0a\x4b\xdb\x7d\xf4\xce\x64\x8a\x78\x3c\x39\x65\x09\xec\x90\x95\xa0\x4b\xaa\x57\xd5\xda\x68\xef\x61\x2b\x21\x41\xf4\xf9\x20\x4c\xf9\x3d\x62\x1e\x30\x59\x5f\x70\xcf\x29\xcc\x62\x2c\x62\xf4\x37\xc9\x99\xbf\xf5\xcc\xcf\xb1\x74\x1f\x90\x18\x1d\xa2\x85\x52\x2b\xf9\xe1\xe8\xe8\xf1\xf1\x71\xa8\x7f\x3d\xe4\x62\x7e\xa4\xff\x38\x24\x6c\xb8\x50\xcb\x04\x8e\x3b\xcc\xc2\x07\x74\x29\xb8\xe2\xfa\x85\x18\x49\x22\x28\x4e\x20\x17\x6d\x6a\xce\x3a\x9f\xa1\xbf\x46\x5c\x90\xe1\x19\x55\x44\xe0\xe4\x33\x5e\xfd\xd5\x18\x21\x24\x46\x94\xa1\x59\xb2\x56\x84\xc6\xc9\x91\xfe\x51\xc5\xc1\xc9\xaf\x26\x8a\x49\x44\x63\x7b\x6f\x13\x16\xf1\x18\xdc\x1d\xe6\x3b\xca\x7c\x72\x0d\xb1\x91\x03\x3f\x99\xd6\xa6\x9f\x12\xb4\xc4\x31\x41\xf8\x01\xd3\xc4\xa4\x88\x72\xe3\xa1\x32\xb3\x4c\x84\x1c\xa2\x09\x3b\x35\x5a\x4e\xaa\x35\x3a\xc0\x7a\x81\xdd\xe2\x7e\xbb\xd2\xe3\x8d\x78\x82\xa6\xe9\x4c\x6b\x04\xc1\x95\x34\x40\x54\xe9\x99\x10\x24\xe2\xcb\x25\x61\xc6\x89\xa5\x1b\x82\x27\x61\xc2\x6c\x77\x87\x13\x06\xcb\x8f\x59\x6c\x36\x40\xcc\xe1\x54\x33\xa2\xb5\x63\xb6\x36\xaf\x99\xa6\xb3\x5c\x64\x44\x71\x24\x08\x8e\x11\x55\x13\x36\x4a\xb4\x1d\xb5\xe4\x8a\x84\xa0\x35\x70\xa3\xe6\xe6\x1b\xa4\x81\x20\xab\x04\x47\x2e\x09\x30\xe1\x11\x4e\xd0\x8c\x26\xc4\x96\x46\x0e\x1a\x78\x07\xaa\xbd\x9e\x34\x2a\x51\xcc\x1f\x59\xc2\xb1\x1d\x47\xf1\xb1\xf7\x79\xc1\xe2\x8b\x89\x8f\x85\xe0\x02\xfe\xe7\x27\xca\xe2\xed\x8e\xe0\xed\xf9\x4f\xe7\x17\x5f\x72\xa7\xf0\xf6\x7a\x7c\x15\xfe\xfb\xfa\x2f\xd7\x37\xe3\xcf\x8d\xc7\xb0\xd8\x4a\xb6\xb1\xa0\x7b\xa0\xf2\x7d\x40\xd7\x66\x12\xb8\x40\x5a\x89\xaf\x19\x94\xdb\x89\xd9\x07\x3c\x26\xdb\x8d\xed\xf3\xe8\xfc\x76\x94\x13\x28\xd7\xc7\x3f\x8e\x4f\x6e\xcf\x72\x4a\x9c\x1b\x5f\xf0\xc9\xd5\xd8\xa8\x68\xe1\x67\xc7\x3f\x9e\x9e\x9d\xdc\x79\xa5\xae\x69\x36\x0a\xef\x2d\x8a\xa5\x1b\x23\x7e\x16\x3c\x46\xd3\x75\x98\xa8\x96\x25\x0c\x3f\x62\x89\x12\x70\xc4\x93\x78\x38\x31\xb7\xbe\x69\xf5\x03\x48\x21\xfb\xb2\xe0\x89\x25\x8f\xc9\xc0\xfe\x46\x5f\x59\x26\xaf\x5a\x2b\xd6\xe0\x9f\xa8\x6a\x58\xbf\x1d\x33\x44\x59\x4c\x1f\x68\x9c\xe2\xc4\xe4\x3f\xfb\x39\xfa\x80\x46\x48\xea\x1f\xa6\xfa\x00\x0b\x3a\x9f\x83\x49\x59\xe8\xaa\x69\xcd\x3e\x0a\x33\x09\xcf\xf9\x52\xe0\x70\xa4\xf5\x6b\xad\x2f\x82\x6a\x71\xa0\xa5\xb0\x79\x10\xf2\xbd\xf3\x2d\x0a\xac\x16\x44\x54\x75\xcd\xad\xcb\x07\xe3\x41\xac\x19\x16\x1c\xbd\x0c\x51\x0a\x22\x4a\x1a\x4b\x78\x25\xc8\x03\xe5\x69\xf0\xa8\x4d\x4d\xcf\x2d\x6e\x65\xf3\xd9\x04\xc0\xb4\x71\xe8\x63\xd6\x4c\x7e\x37\x5f\xb9\xa8\x83\xfb\x63\xcc\x94\xa8\xd4\x92\xdb\x5e\xff\xd6\x06\xcb\xdd\xff\xd5\xae\x9a\xd2\xbb\xcf\x8b\x46\x75\xd9\x95\x65\x0d\x31\xfd\x92\x61\xa6\x15\x84\x3e\x1c\xb8\x04\xeb\x14\x90\x0a\x5b\x2a\x93\x00\x3f\x83\x89\xbe\x4c\xa5\x02\xa2\x1b\xe3\x0d\x46\xf7\x7f\x96\xe8\x97\x14\x03\xda\x77\x88\xae\x09\x99\x30\x77\x1b\xce\xa9\x5a\xa4\xd3\x61\xc4\x97\x47\x59\xfe\xff\x11\x5e\xd1\x25\xd6\xfb\x85\x88\xf5\xd1\x34\xe1\xd3\xa3\x25\x96\x8a\x88\xa3\xd5\xfd\x1c\x1c\x7f\xce\x9c\x3c\xf2\xcd\xce\xf9\x3f\x9d\xfd\xf3\xf7\x87\x67\x7f\xfe\xfe\xa0\xac\xdd\xd4\x9d\xce\x31\x8b\xf0\x4a\xa6\x89\x0d\x10\x88\x70\x6e\xe0\x16\x81\x99\xd8\xb4\xde\xe7\xf9\xe5\xda\x4d\x20\x1f\x5f\xde\xe6\xac\x8d\xfc\x3f\x3f\x8f\x3f\x5f\x5c\xfd\x25\x27\xd0\x6e\x2e\xae\x46\x9f\x9a\xad\x8e\x92\xc4\x2e\x4c\xc3\x4f\x8c\x3f\xb2\xfc\xe8\x65\x71\xd0\x29\x53\x74\x49\x9c\xc0\xb6\xff\xbc\x31\x23\xdd\x62\xe4\x17\x37\x3f\xe6\x2f\x9e\x8f\x67\x7f\xb9\x19\xdf\x5d\x9f\xfc\xd4\x38\x12\xf3\x58\xae\x67\xd7\xe0\xdd\x3c\xe6\x49\xba\x64\xe1\xdf\xdb\xf7\xed\xf4\xfc\x66\xfc\xa9\xd8\xbb\x8b\xd1\x4d\x7e\xda\xaf\xf2\x4e\xf3\x83\x1f\x2e\x2e\xce\xc6\xa3\xdc\x5a\x9e\x8c\x6e\xc6\x37\xa7\x9f\x73\xf6\xe2\xc9\xed\xd5\xe8\xe6\xf4\xe2\xbc\x71\x98\xae\x07\x15\x03\xd5\xc3\x0a\x87\xb9\x6f\x39\xd3\xea\x98\x8f\x6c\x40\xda\x1c\x94\xc3\x20\x5b\xd1\xf8\x9a\x41\x07\x38\xf4\xfa\x77\x64\x7a\x5a\x29\x6b\x54\x7e\x99\x50\xbd\xac\x6b\x5c\xe8\x26\x91\x77\xe3\xbb\x00\xfd\xb2\x21\x29\x9c\x24\xfc\xd1\x84\x05\x97\x54\x1b\x92\x36\x75\x5c\xff\x44\xa2\x28\x15\x82\x30\x95\xac\x87\x15\xe2\x24\xbf\x2c\x5c\xa8\x13\x1f\x38\xda\x6a\xc3\x55\x46\x61\xca\xf1\x97\xca\xad\x52\x8c\xb9\xb8\x6e\x41\x89\x08\x3e\xff\x4c\xa4\xc4\x73\xb2\x8b\xe1\x56\x25\xa4\xae\x7f\x0e\xff\x09\x86\x59\x1b\x01\x94\xeb\x21\x84\x19\x46\x53\x2e\x94\x93\x2a\xbb\xec\xe5\x08\xa7\xb2\xd3\x66\x6e\x0e\xab\x63\xb0\x54\x0e\x33\x03\x0e\xeb\x8e\xda\x98\x3a\x10\xb9\xad\xb0\xd4\x9b\x88\x83\x4e\x43\xec\xcf\x53\x43\xed\x86\xa0\x37\x35\xb7\xeb\x4a\x50\x16\xd1\x15\x4e\xb6\x3a\x7a\x05\x47\xab\x4d\xa1\x79\x47\x67\xda\xc0\x79\x5f\x52\xbc\x14\x11\x4b\xc0\x97\xd8\x6e\x7a\x25\x66\xd3\xb6\x36\xab\xc3\x18\x37\xc6\xaf\xdc\x65\x6d\x8c\x51\x5d\x37\xdc\x42\x2b\xf6\xed\xc6\xa7\x83\x93\xcb\xea\x36\xab\x26\x2c\xf8\xf2\xd7\xa6\xa5\xd6\xf6\x1b\x9f\x59\x92\x17\x84\xb3\x31\x5a\xd8\x88\xe5\xe7\x73\xb6\x69\xa0\xac\x7a\x17\x7d\x7b\x15\x23\x9b\x42\xeb\x5b\x28\xbf\x24\xa7\xb4\x07\x88\x1e\xbb\x25\x67\xa9\x4a\x85\x56\xa6\xb4\xda\x8f\xde\x91\xe1\x7c\x88\x2e\x7e\x1e\x5f\x5d\x9d\x9e\x8c\x07\x68\x74\x79\x39\x3e\x3f\x19\x20\xa2\xa2\xf7\xce\xf5\x65\x7d\x01\x13\xa6\xb8\x75\x41\xac\xd1\x82\x3f\xea\x77\x2d\x89\x98\x93\xdc\x98\x9d\xe3\x00\xf2\xb4\xe6\x54\x2a\x61\xdd\x17\x2c\x0e\x59\x8d\xe8\xb2\xa8\x07\x99\x1d\x92\xaa\xc5\x2e\x5b\x03\x4b\x99\x2e\xf1\x34\x21\x77\x14\x2f\xef\x04\x4f\x36\x9d\xe1\xca\x23\x95\xa9\x8e\x77\xd2\x78\xbd\xef\x70\x14\xf1\x94\xa9\xd6\xad\x6d\x5a\xc7\x13\x98\x26\x89\x56\xfa\x40\x81\xcf\xb4\xcc\x03\xe4\xa7\x4b\xa2\x08\xfc\xb8\x60\x3f\x80\xc8\x48\x32\xa4\x15\x2c\x49\xdd\x5c\x5e\xe5\x67\xa0\x9f\x4f\x33\x9f\x55\xd3\x75\x6c\xf8\xb8\x9c\x16\x1e\x30\x26\xed\x32\x7f\x55\xad\x34\xb5\x84\x9e\x5c\x5c\x1d\x1b\x39\x55\x45\x44\x65\xfc\x09\x05\x5e\x51\x70\x57\x15\x08\xd4\xcc\x7e\xd4\x07\xd9\xc8\x8f\x5f\x52\xae\xb0\x7c\x3f\x9c\x30\x2d\x0c\xef\xc9\xda\xf8\xb7\xb5\xb8\xf9\xbd\xbe\x02\x0f\x25\x61\x12\x3c\xa2\xbf\x37\xe6\x80\x16\x98\x0f\x58\x50\xbd\xb5\xc0\x21\x66\x79\xdb\xf2\x1c\x59\xe0\xc6\xb2\x8d\x5a\x69\x97\x79\x09\x33\x62\x2d\xf7\x9d\xe9\xfe\x9c\x28\x88\x5a\x2b\xaa\x52\xbd\xf4\xb1\x21\x86\x2b\x75\x7d\xa3\x26\x06\xbb\xe2\xc4\x44\xdc\x77\x72\xbe\x6f\x73\x64\xba\xea\xd2\xc5\xe3\x40\xe5\x2a\xc1\xeb\x92\x55\xbe\xe9\x18\x69\xdb\x53\xae\x70\x44\xb2\x88\xbf\x03\x47\x44\x7c\xb9\xe4\x2c\x59\x7b\x94\x5f\x4c\x67\xe0\x91\x54\xfa\x88\xa1\x29\x51\x8f\x84\xb0\xec\x53\x64\x8f\x3a\xa2\x4c\x2a\xcc\x0c\xeb\x1e\xec\x96\x89\x9e\xab\x38\x05\x0d\x77\x72\x30\x40\x93\x83\x98\x3c\x90\x84\xaf\x96\x84\x29\xfd\x01\x51\x95\x02\x6d\xbc\xc4\x34\x39\xe7\xca\xfb\xc4\x77\x59\x16\x41\x22\xba\xa2\x84\x29\x79\x47\x74\xbb\x4f\x1a\x20\xd9\x64\x4e\x38\x28\x21\xf4\x04\xe1\x38\x16\x44\x4a\x20\x9b\x72\x9d\xb4\xc6\x8f\x89\x2b\xf9\x09\x68\xb7\x87\xbd\x3b\x74\xbf\xdb\xb8\xda\xac\x8a\xb8\xf0\xb9\xf5\xfe\xc5\x19\x3d\x50\xe3\xae\xb5\x64\x63\x19\x89\x8d\x03\x33\x78\x6c\x54\xd1\x69\x56\x3c\x36\xfa\x2e\x6c\xd7\xcf\xfc\xcc\x5c\xeb\xe7\x1a\xbb\x26\x43\xd4\xab\x63\x9c\xcc\x54\x1b\xeb\x29\x2c\x3a\x27\xc9\xc6\x1e\x47\x09\x97\xa9\x68\x69\xb3\xe6\x3b\x7d\x6c\x1f\x6d\xea\xf7\x38\xd4\x04\xd3\x44\xc9\x4e\xca\x66\xc5\xc4\x67\x51\x2c\x93\x7d\x0f\x87\x5b\xd9\x5b\xd6\xfe\x7a\x80\x28\x8b\x92\x14\x22\x3f\x38\xc9\xdc\xa8\x2c\x46\xd9\xd5\x36\x61\x3e\xf4\x83\x25\x7a\x24\x49\xa2\xff\x1b\xf1\xe5\x0a\xc4\xb6\xed\xae\x6d\x49\xdb\xd3\x0a\x2b\x32\x40\x3c\x55\xba\xb1\x81\x21\xe7\xb4\x4b\x70\x38\xc5\x00\xbd\xcd\x28\xb7\x27\xec\x56\x3a\x0c\x93\x47\x4c\x9a\xbd\x6e\x04\x18\x65\xe8\x13\x51\xd0\x0a\x40\xd8\xc3\x01\x1a\x12\xd2\x4a\x11\x54\x9c\xfb\x1d\x4e\x94\x1d\x49\x87\x95\xcf\x02\x46\x3f\x24\x7c\xda\xb8\xee\x23\xb4\x34\x66\x89\x7d\x0b\xa2\x45\x83\x34\x80\xfa\x6d\xda\xa3\x44\x88\x5c\x10\x7f\xc3\xf1\xcf\x07\x99\x9a\xb7\x27\x84\x78\x28\x33\x01\x37\x88\x8a\x16\xfb\x69\x39\x27\x36\xf5\x11\x0c\xea\xbb\xb7\x63\xb6\x9b\xfe\x2e\xcb\xae\x8a\x4d\x9b\x20\xef\xe2\x78\xea\xc1\xc0\x01\x51\x0b\x42\x05\x6a\x35\x2c\x77\x7e\xef\xcc\x99\x6f\xbf\x69\xb2\xbd\x5d\xe7\xa9\x30\x42\xc4\x0b\x08\xdd\x31\x0b\xb9\xcf\x31\xe6\x0e\x27\xac\xd0\x09\x14\x93\x15\x61\xb1\x44\xb0\xbd\xdc\x69\xc8\xc9\xfe\x01\x9a\xd1\xaf\xb6\x51\x17\x20\xcb\x7e\x1a\x58\x5b\x35\x3e\x98\x05\x2e\x6f\xbb\x0e\xf7\xe3\x25\x3c\xdf\xe8\x64\xe0\x52\x1b\xd4\x91\x56\xac\x04\x89\xb8\xd0\x22\x11\x5e\xeb\xdd\xa2\x1b\xef\x46\x85\x85\x9e\x14\xbc\xc9\xea\xca\xf5\x23\x4b\x41\x89\xb1\x22\x87\xda\x70\xdf\x10\x10\x5a\x71\xfd\x1a\x44\x97\xda\xb6\x08\xe2\xfd\x99\x84\x9d\x92\x39\x66\x48\xa4\x8c\x51\x36\xaf\xe9\xad\x13\xed\x3b\x1c\x66\xad\x59\xe1\xa5\x36\x33\x41\x8f\xd0\x1d\xca\xf7\x43\xae\x60\x3a\x1b\xfb\x61\x2d\xef\xe7\x9a\x35\xd5\x30\x6d\x8f\xd8\x3b\x02\x6a\x3a\x9b\x42\xa5\x83\x57\xd3\xd9\x04\x4b\x85\x6c\x9f\x6a\x7a\x1c\x6a\xb3\x7b\x00\x29\x35\xb1\x55\x86\x86\x43\x17\xe5\x3c\xec\x22\x92\x44\x29\x6a\x59\x15\x53\x49\x10\x9e\x69\xbb\x78\x49\xc4\xdc\x29\x7c\x86\x68\xc7\x1f\x6d\xcb\xb8\xe3\xe4\x68\x28\x4b\x26\xac\xb2\xe9\x21\x1a\xb1\x52\x90\xdc\xf9\x30\x72\xf3\x65\xa4\x36\x4e\x1e\xf1\x5a\xa2\x15\x00\x44\x4c\xdc\x3e\x1b\x3c\x38\xed\xf2\x0f\x39\x0f\x9d\x56\xa8\x68\x84\x93\x64\x8d\xc0\xd0\x0b\x7a\x56\xb3\x58\x01\xa5\x6a\x7b\x61\xd7\x52\xf7\x2f\x38\xa2\xab\x08\x56\xbd\x09\x54\x29\xe9\x4a\xca\x6c\x86\x23\x09\xc3\xb2\x16\x1b\x0d\xba\xa5\xb5\x2e\xc6\x79\x27\x76\x9d\xc2\x07\x2e\x90\x33\x3c\x25\xc9\xce\xce\xeb\xad\x5c\xf5\xf0\x6a\x8b\x5a\xd7\xe6\x37\x31\xce\x78\x82\x1e\x17\x44\x14\x45\x9b\x73\xe2\x88\xb4\x9d\x6b\x3e\x1b\x67\x8e\x27\x6a\x87\x81\xba\x34\x8c\xed\xe5\x77\x5d\x8a\x46\x78\x91\x64\x39\x1a\xd5\xb7\x48\xd1\x7d\xb3\x4b\x1f\x82\x64\x8a\xca\x2e\xa0\x7d\xa4\x53\xec\xc5\x1b\xe4\xf7\x4c\xcb\xd4\xe1\xd3\x19\x62\x9c\x11\x44\x65\xf6\x63\x08\xbf\x1a\x28\x0e\x6c\xa6\x39\x61\x44\x00\xfb\x9e\x8b\xd6\x96\x89\x09\x9f\xd9\x28\x1f\x79\x63\x12\xcd\x28\x49\x62\x89\x18\xd1\x36\x0d\x16\x6b\xc0\xc2\x19\x81\xd6\x46\x37\xda\x97\xb6\x5a\x71\x7d\x58\x35\xd2\xa5\x16\x40\x2a\xa4\xd6\xc4\x0a\xfd\x42\x06\x2b\x68\x7f\x64\x1f\xb2\xc8\x97\x09\xf3\x56\x30\xec\x3f\x2a\xb5\x75\x37\x44\xb0\x6c\x2a\x7b\x4a\xdf\x31\xfa\x03\xb7\x86\x03\xa7\xcb\x4a\x93\x48\xd8\xc5\xf6\x77\xf7\x56\x36\x8f\x79\x30\x98\x83\xac\xce\xe9\x03\x61\x95\x05\x0b\xdc\xa6\x48\x72\x6e\xc8\x66\xa9\x63\x99\x0d\x5f\x81\x9f\xaa\xfd\x4c\xe9\x45\x4e\x4b\x9e\x2b\xc3\x5b\x98\x19\xd9\xc9\xda\x07\x71\x42\x53\xc5\xe2\x58\x0d\xef\x3c\x96\xe8\xf7\x8c\xab\xdf\x07\x40\x5f\x67\x0e\x1b\xe2\x4b\xeb\x9a\x18\xe4\x32\x5e\xf4\xdb\xe0\x84\xda\x4d\x82\xb0\x3f\xab\xf1\xe6\x99\xdf\x15\x5b\x9e\x05\x55\x9e\x54\x7b\x1b\x97\x03\xcd\x75\x29\x83\x26\xeb\x7d\x6f\x3e\x80\xe7\xa0\x5c\x46\x66\x1b\x08\x02\x61\x13\xc6\xd1\x92\x0b\x52\xc8\xbc\x37\xc2\xdb\xdd\xeb\x36\xe3\xb9\xfd\x2e\xad\x70\x87\x99\x6c\xe2\xec\x98\xe7\xdc\x60\xcd\xee\xaf\x7d\x40\x2c\x96\x79\x70\x6e\xc3\x0e\xd8\x00\xf0\xad\x36\xc9\xb7\x81\x45\xd4\xe9\xa4\xde\x11\x1d\x52\x8c\xd6\xc1\x5a\x87\x13\xf6\x91\x0b\x7b\x77\x4a\x9b\x2e\x32\xc5\xd1\xfd\x21\x61\x31\xc2\xa9\x5a\x18\x78\xa9\xf5\x1d\xaf\xed\xca\x6a\xbd\x00\xb6\x80\x5b\xe2\x98\xca\x08\x0b\x2b\xf4\x67\xf8\x81\xbb\x5e\x4c\x58\xd0\x08\x24\xa4\x40\xd2\x1b\x10\x73\xd4\x29\x10\x04\x92\x8c\xeb\xe6\xa2\x8a\x7e\xa2\x44\x3e\xd1\x7c\x66\xc2\x14\xf6\x09\xbc\x8f\xc4\x8c\x48\x39\x39\x30\xbd\x2e\xcc\xd0\xa9\xf3\x47\x39\xfb\x46\x86\x44\xbe\xfe\x97\xe6\x8c\x39\x8f\x8c\x1d\x85\x56\x53\xbe\x77\xb2\x33\x07\xb6\x9d\xa5\x02\xb0\xb5\x55\x6d\xbe\x8b\x16\x34\xc9\x7c\xd4\xef\x07\xf6\x3c\x9a\x26\x13\xf2\x40\x12\x93\x92\x11\x09\xb2\x24\xcc\x46\xdb\xbf\x47\xff\x61\x68\x19\xd0\x1f\x27\xec\x13\x88\xd5\x24\x59\x0f\x10\x9d\x65\x2d\x63\x55\x68\xe6\xbe\xb2\x03\x7a\xc9\x8c\x64\xc9\x75\xc4\xac\xf7\x02\x3f\x90\x09\x73\xcd\xfc\x07\xba\x47\x7f\x40\x7f\xac\x73\xe4\x58\x60\xf5\x53\xdb\xf9\xb0\x8b\xdd\xbb\x02\xc9\x30\xb0\xea\x23\x48\x0e\xe7\x06\xc8\x57\xad\xf2\xa6\x9a\x57\x70\x3d\x1a\x9c\xb2\x07\x5e\x8e\x5e\x85\x27\x17\x0b\xc2\xd4\x1d\xe3\x31\xb9\x23\x15\xa1\xab\x06\x41\xa1\x2f\xf5\x73\x1e\x93\x8d\x81\x27\xaf\x20\x7f\x01\xd7\x85\x4c\xa7\x7e\x39\xf4\x7b\x33\xa3\x3b\xbf\xc1\xaa\x3b\xec\x33\x33\xb6\xe9\xee\xb6\xb1\xb2\x0b\xab\x5d\x0d\x40\xa2\xdb\x0e\x54\xc7\x6b\x4c\x3d\x34\x80\x1f\x15\x4f\x61\xd1\x43\xac\x7f\xac\x47\x6e\xef\x9c\x20\xe7\x04\xb2\xd7\x04\x9d\x53\xad\x6d\xb7\x8f\xc7\x81\x10\xdc\xc6\xcd\x6d\x12\x3e\x5a\xf9\xb9\xb3\xa9\x58\x25\x58\xe9\x5d\x7e\xe8\xb7\x5d\x16\x63\x9a\xf2\xb4\xa8\x73\xdb\x09\xa0\x32\x04\x46\x59\xf5\x7a\xad\x45\xf0\xdc\x80\x6e\xc8\x82\x6a\xc9\xcd\xd0\xe8\xf8\x0c\xe9\x43\xc1\x97\xc4\x90\x72\xe8\x49\x4b\xd5\x82\x0b\xfa\xf7\xda\x80\x6c\xbd\x86\x9d\x05\xd2\x82\x62\x60\xd0\xcf\xbc\xae\x0d\x7b\xd4\x68\x06\x2a\x67\x48\x54\x59\x38\x68\xaa\x9f\x17\xa0\x7c\xcc\xd2\xc4\xe4\x23\x45\x5c\xc4\x86\x22\x4a\xe6\x4b\x8f\x09\x57\xc4\xce\x40\xb6\x5c\x83\xd4\x02\xd6\x6d\xc6\x53\xb4\xc0\x6c\xde\xac\x47\xfe\x57\x4a\xd2\x3d\x81\x66\x6c\x0a\xf2\x0b\x85\xe3\xf1\x5c\x66\x75\xf8\xcc\xdc\x68\x91\x5c\x28\xfd\x67\x03\xf2\x58\xde\x67\x0e\x35\x8f\x5b\x36\x66\x74\xd1\x9e\x6f\xe1\x7c\xb9\xb2\xc7\x6f\x0f\xee\x97\xe7\x88\xd7\x97\xf5\xa3\x0a\xf9\x03\xfb\xcf\x66\xfa\x3c\xab\x77\xc3\xcb\xf0\x82\xde\xb1\x6f\x4f\x47\x07\x4b\xda\x75\xca\xf6\xd0\x0a\xd7\x72\x70\xb3\x7a\x77\x5c\xe7\xfd\x28\x9d\xb7\x84\x79\xf7\x1d\x84\xb1\x76\x76\xdf\x06\x6e\xc9\x0c\x8a\x68\xb0\xa8\x66\x34\x24\x7e\x5a\x57\x4b\x3e\x30\x98\x47\xc3\x06\x71\xc1\x3a\x94\x72\xd0\xa3\x2d\x6e\xa7\xb2\x21\x54\xdd\x37\xf7\x75\xdb\xae\x34\x86\x43\x5a\x06\x37\xc0\xa2\x6f\x3a\xb6\x67\x16\x6d\x94\x0f\x0b\x18\x08\x05\x0f\x02\xa3\x10\x21\x48\x25\x52\x02\x03\x7a\x8f\x33\x39\x61\x5f\x8c\x16\x4b\xa5\xb1\x17\x6d\xa2\x3b\x98\xa3\x36\xb3\x16\x84\xa7\x4d\xc4\x53\x0b\x6c\x6c\x9c\xea\x10\x84\xa7\xa6\xf1\x27\x21\x0c\x42\x54\xbd\x0c\x5e\x64\x55\xf7\xca\x26\xdd\x44\x87\x08\xd9\x52\xa5\xf4\x6a\x5f\x31\x95\x80\x74\xc5\x49\xad\xcd\x38\xe5\x3c\x21\x98\xd5\xa9\xd5\x95\x5f\x97\xbc\x45\x34\x44\x31\x6a\xab\x4f\x6b\x66\x22\x25\xda\xa6\xc0\x49\x52\x18\x17\x06\x06\x39\xe5\x13\x95\x8d\x61\xa8\x3b\x1a\x6f\x08\x88\x0c\xc2\x93\x3f\x25\x49\x27\xa4\x89\x79\xa0\x71\x17\xc1\x4f\x32\x92\xb2\x56\xf0\xf6\x10\x00\x51\x99\x0c\xb0\xa9\x63\x61\x0a\x41\xa3\x6b\x38\x0f\xc3\xdf\xb2\x8b\xa9\x5a\x54\x82\x9e\x9b\x3a\xe8\x50\xd7\x6d\x34\xd6\x0f\xa0\x3d\x22\xfe\x40\x84\xa0\x31\x09\x7a\xda\x3e\xcc\x55\x1a\x78\x1e\xd9\x00\x39\xf8\x4b\x10\x88\x90\xa4\x64\xf2\xc6\x9d\x63\xca\x5f\x47\xb9\xd7\x41\x9e\x30\x3c\x1c\x73\x22\x03\x0d\x10\x7a\x6a\x8e\x17\x9d\x11\xad\x25\x4e\x98\x56\x81\x43\x6d\x15\x4b\x2d\x07\x56\x82\xcf\x2d\x88\x11\x47\x82\x4b\x69\xc1\x0a\xa6\x1d\x39\x6c\xbc\xe8\x6e\x6c\x96\xc9\x3e\xc2\x50\xcf\x87\x5b\x2c\xd3\xa9\x66\x39\xc8\x35\x8a\xd1\x94\xf8\x8c\x9a\x5a\xb1\xb4\x2b\xa4\xc9\xed\x35\x24\x08\x96\xd6\x34\x07\xe4\x4f\x01\xf3\xd0\x41\x8d\xf1\x7d\x36\x08\xc0\x43\xb7\xd8\xe1\x16\xb2\x59\x71\x86\xc9\x90\x4a\x44\x85\x20\x40\x51\x35\x4d\x6c\xc4\x29\xb7\x6b\x68\x56\xae\x27\x9b\x11\x6f\x85\x9a\x37\x83\x18\x97\x74\xa9\x0f\x08\xa4\x03\x33\x7e\xc8\x57\x60\xd6\x14\x7f\x35\xc3\x34\xd1\xf2\x94\xe6\xab\x05\x69\xdd\xef\x10\x18\xf7\x08\x53\x55\x7e\x78\xd7\x08\xf8\xed\x49\x6c\x96\xd1\xec\xdc\xc9\xc1\xe8\x87\x8b\xab\x9b\xf1\xc9\xe4\x20\x8b\xae\x3a\x24\x8e\xbb\x75\x7c\x7e\x14\x67\x13\xe6\x63\x24\x9e\x4a\x17\xd6\x12\xe1\x38\xce\xd2\x81\x0c\x3e\xef\xce\xf8\x7a\xdb\x9e\x8a\x8d\x61\x92\x72\x33\x1f\xe9\x57\x12\x5f\x61\xb5\x53\x70\xa5\x31\x78\xdd\xca\x89\x58\xb9\xc5\x53\x46\x4b\x8e\xac\x06\x11\xeb\x87\x72\xab\x9f\x6b\xbf\x83\xcd\x49\x80\xb5\x72\xde\x28\x89\x44\xca\xb4\xe1\x8b\x3d\xc3\xf1\x0c\xf6\x00\x8b\xd6\x03\x04\x68\x75\xbd\x6b\xd7\xe8\x4f\x68\x49\x19\x20\x4b\x9b\xe6\xf6\x36\x3f\x90\x2e\x7c\x13\xa7\xe7\xb7\x79\x26\xa8\x1f\x2f\x6e\xaf\xf2\xd9\xbf\x7f\x69\x66\x8e\xc8\xb7\xd0\xe4\x6d\xc8\xc6\x18\xa0\x77\xb8\x99\x0a\x3f\x35\x55\x03\x3d\x2b\xea\x11\xdf\x56\xee\x5e\xe2\x55\x9a\x7d\xa7\xed\x05\xd8\x8d\x57\x91\xb1\x67\x47\xba\x5b\xb2\x9e\xb1\xfc\x2e\xf3\xe6\xe4\x93\x5e\xd0\x95\xf1\xd9\xed\x91\x06\xd9\x00\xc0\xb4\xae\xbe\x7e\x3b\xe3\xf3\xb3\x56\x1d\x48\xbc\x83\xf6\x86\xb2\xa7\x9d\x83\x42\x5a\x1f\xed\x0a\x4f\x69\x02\xd1\x27\x1e\xa4\x4b\x55\x68\x16\x72\x38\x61\x21\x15\xbb\xb9\x33\xf5\x1e\x70\x19\x71\x94\xcd\x11\x67\x04\x71\x61\x22\x8d\x5e\x1c\x0e\x42\xac\x7e\x11\x6b\xa6\x16\x68\xcd\x53\xe1\xdf\x58\x7a\x8f\xdd\x7d\x72\x81\x1d\x1a\xc1\xe9\x99\x36\x56\x16\xa6\x34\x42\x7b\x2b\x41\x32\x5b\x10\x5e\x4c\x1e\x08\x43\x8f\xda\xee\xcb\x42\x27\x13\x16\xa0\xc0\xb4\x4a\xca\xbe\x53\x1e\xea\x41\x13\x5b\x9c\x10\xfb\x38\x51\xe6\x09\x92\x98\xda\x96\x9b\x37\xf0\x1e\xe0\xfc\x90\x9f\xb0\xdd\xe6\x83\x27\xeb\x9c\x1b\x26\xb0\x06\x7b\x20\x74\xb5\x18\xc8\x71\xe5\x96\x25\x5f\x57\x24\xda\x06\x83\x7d\xe9\xc8\x76\x9b\x9c\x2d\x61\xa0\xcf\x72\x1c\xd8\xa5\x53\xdc\xb9\x7e\x8a\xbd\xdd\xd0\xcf\x4e\x99\x10\xba\xa3\x3f\xdb\xd4\xc1\x8e\xfd\x74\xb9\x10\x33\xc1\x97\xed\xba\xf8\x3c\xe8\xdf\x9b\x12\x8e\x36\xe7\xbd\x78\x25\xb0\xdf\xcd\xbd\xac\xc3\xfb\x6e\x92\x7a\x3f\x9b\x7b\xd1\x43\xfb\x21\xcb\x99\x18\xe2\x39\x1f\xd3\xb1\x50\xdb\xf0\x9d\xe1\x9d\xe5\xa3\x1b\x0e\x05\x53\x38\x05\xb9\xb8\xc9\x94\x20\xab\x0d\x19\xe8\x6b\x35\x66\x17\xae\xcf\x2a\x87\x6d\x10\xfa\xb5\x99\x4b\x7a\xf2\xa4\xc2\x4b\x9f\xa7\x5a\xcc\x3d\x2e\x4c\xd7\x06\x69\xb4\x2f\x0c\xe6\x13\xe0\x74\xab\x6c\xdd\x1c\x76\xd8\x62\x24\xf6\x93\xa0\x57\xb8\xa1\x1b\x3b\x96\xcb\xd0\x0b\x3b\x14\x13\x85\x69\x22\xc3\xac\xb4\xf2\x52\xe6\x6e\x3e\xc3\xd0\xe5\xfc\xc2\x5b\x5a\xc9\x41\x85\xe2\x70\xe5\x51\x78\xc7\x83\x93\x65\x89\xd7\x01\x76\x4b\x9f\x82\x84\x28\xb8\x9c\x29\xf3\xff\xca\x8b\x5a\xb7\x99\xc3\x2d\x5a\x85\x9f\x18\xa2\x1f\xd6\xfe\x5a\xc4\x49\x12\xf6\x44\x5a\xd6\x41\x57\x17\x57\x1f\x05\xb8\xc4\xd0\xe9\xf9\xe8\xf8\xe6\xf4\xe7\x31\xe0\x92\xd6\x3c\x45\x8f\x54\x6a\x0b\x61\xc2\xc0\x5d\x69\x88\x2a\x4d\x55\x07\xf3\xc3\x01\xfc\x0a\xd0\x8a\x32\x9d\x2e\xa9\xb6\xa7\xb2\x41\xde\x82\x44\xb8\x72\xd8\x35\x73\x8e\xf5\x03\x70\x6d\x3b\x54\x5c\x15\x00\x7d\xc3\xf9\xd8\xc2\x0c\xce\x1a\xd9\x15\xf8\x16\x44\x53\x9e\x16\xfa\x16\xa8\xd9\xa1\x59\x53\x79\xbc\x7a\xec\x5b\xf5\xa1\xcc\x27\x80\x42\x96\x2e\x95\xaa\x70\x99\xd4\xa7\x7d\x66\x4b\xb0\x0f\xe0\x9b\xd3\xb6\xbb\xa0\x21\xdc\x23\xd5\xda\xce\xb5\xa7\x5a\xac\x54\xc1\x2e\x6b\xf5\x9b\xd7\x96\x7e\x93\x45\x15\xb7\x8f\x51\x75\x31\xb7\x32\x00\x79\xb8\x15\x02\x80\x44\x1e\x78\x4d\x8a\xa2\x9b\x71\x05\xc1\xe1\x48\x25\xeb\x0a\x64\xc6\x84\x55\xeb\x0d\xcd\x7b\x6c\xd7\x38\xef\x5e\xd3\x74\xfc\x8a\x5c\xf9\x51\x58\x8f\xc8\x17\x0f\x6c\x33\xc6\xa8\x27\xe3\x27\x85\x73\xe5\xfc\xaf\x35\x56\x00\xa8\x0b\xdb\x40\x84\x2a\x4e\x65\xcb\x28\xec\xc6\x73\x61\xaf\xcc\xa7\xb1\xa0\x76\x0c\x57\x43\xa6\xea\xfe\xf3\x6b\xc1\x89\x39\x00\x0f\xb9\x8d\x47\x01\xfb\x72\x40\x6c\xd0\x6a\xe6\x5a\x70\x04\xd5\xc8\x30\x53\xf0\x49\x71\x08\x9b\x78\x9b\x57\xb7\xe7\x09\x9a\xf3\xd2\xcd\xab\x3b\x29\x8b\x89\x60\x04\xab\xc5\xf3\x85\x3f\x8f\x77\x75\x19\x3e\x5b\x28\xf4\x78\x2f\xc4\x64\x85\xb0\x68\xc7\x88\x68\x07\xf0\x70\xc6\xe0\x54\x32\xa2\x2a\x5c\x5d\x01\x0a\xdb\xda\x59\x79\x76\xac\xa7\x88\xec\xb6\xbf\x5f\x9a\x6c\x12\xef\xd0\xd2\x06\x47\x9e\x50\xc4\x56\xf6\x6a\xbe\x24\x54\x4d\x2c\xa7\x0d\x21\xa9\xd1\xda\x73\xec\x90\xe6\x13\xfb\x41\x0d\x8b\x68\xe1\xb1\xe2\x68\x43\x53\x83\xad\x8b\x96\x3a\x16\x71\x42\x24\x28\x91\xc6\x7a\x28\xe8\x89\x4d\x56\xcc\x84\xfd\xc8\x1f\xc9\x03\x11\x03\x84\x15\x5a\x72\xad\x1b\x30\x12\x96\xbc\xc1\xf9\xc4\x5a\xe3\x24\xc7\xe8\x1c\x2f\x49\x3c\x86\x1b\x26\x00\xab\x59\x5b\xca\xfa\x29\xab\x72\x97\x20\x1f\xc7\x92\xf7\xdb\x8e\x4e\x18\x8e\x80\xd3\x1f\xa2\x45\x80\x90\xa4\x6e\x60\x70\xa2\x7e\xef\xbd\xa8\xbf\x1f\xa2\x1b\x7d\x15\x52\x99\xef\x6f\x80\x81\xae\xeb\xdb\x84\xcd\x05\x4f\x57\x5e\xd7\xe5\x53\x50\xb2\x8d\x37\xb5\xc2\x8b\x0a\x9d\x71\x2e\xd4\x08\xc7\xfa\xa2\x6d\xde\x38\x39\x6b\xec\x95\x39\x17\xf2\x80\xc2\x70\x03\xe9\xfb\xc7\x07\xaa\x2c\x18\x01\xb6\x51\x3d\xd9\xc1\xfe\xbc\xb1\x25\xae\x39\x09\x6a\x9e\x37\x82\x73\xe8\x92\x1a\xe1\xd3\xc1\x71\xe0\x8c\xec\x6a\x58\x54\xf6\x5a\x5b\x15\x01\x04\x07\xa9\x26\x97\xae\x59\xfb\xf6\x69\x76\x85\x5e\x5e\xa6\x62\xc5\x01\x57\x9c\xac\x1d\x16\xcb\x62\xa5\x57\x7c\x95\x1a\xa4\x39\x0d\xc3\x56\x95\x1d\xa2\x52\x7d\xc6\x2a\x5a\x68\x0d\x23\xc3\x0c\xef\x23\xfd\x2f\x27\x48\x9f\xd6\xa2\xa9\x18\xc1\x71\xf8\xf6\x1a\x6b\xbd\xb5\xb1\x6a\x32\x08\x1d\x22\x01\xfe\x95\x24\x59\xe1\xed\x0a\x02\xbf\xea\xb9\xce\x71\x06\xed\x3d\x74\xbb\x83\xc6\x79\x02\x15\x2c\x18\x0a\xea\x60\x58\x9f\x74\xe5\x91\x4e\x05\xdd\x4a\xb1\xb4\x3e\x0d\xf2\x40\x98\xca\x4c\x94\x25\x5e\x21\xaa\xe5\xb6\xbe\x79\xc4\x9c\x0c\xd0\xa3\xab\xf0\x8b\x30\x4a\x05\x75\x27\x0c\xec\x8a\x86\xe5\xcb\x2b\xf6\x47\x26\xc6\x60\x50\x56\x11\x0e\xe8\xb2\x2c\xfb\x7f\xa4\x52\xec\x23\xc1\xb0\xc2\x09\x65\xf7\xfa\x65\x26\x8d\xdf\xf9\x8f\x85\x96\x6f\x5c\x38\x14\x6d\x6e\x4d\x37\xee\xbc\x1d\x56\xb9\x9e\xb1\x72\xd3\x51\xa0\x6c\x1e\xe0\xff\xab\xcd\xaa\x36\xe9\xf8\x95\x4f\xb6\x63\x13\xa8\x7c\xd4\xe9\x13\xdb\x3c\xdb\x00\x99\xde\x9a\xaa\x34\x87\xc4\xb0\xc8\x03\xab\x91\x84\x99\x19\x56\x39\x87\xbc\x2a\x6a\xaa\x5a\x58\x0d\xe5\xdf\xfd\x5f\x86\x04\xc9\x4c\xcd\xbf\x23\x2e\x26\xcc\x7c\x3e\xf0\x7c\x09\xfa\x07\x59\x6a\x53\x4d\x32\xb0\xdf\x4f\x8e\xfc\x74\x3b\xbd\xf2\x66\x74\xfd\xd3\xdd\xd5\xf8\xfa\xe2\xf6\xea\x38\xa7\x5c\x1e\x9f\xdd\x5e\xdf\x8c\xaf\x2a\xbf\x1b\xff\xf7\xf8\xf8\xf6\xe6\xf4\xe2\xfc\xee\xbf\x6e\xc7\xb7\x35\x5f\xb9\x06\xce\x46\x3f\x8c\xcf\x1a\x95\xd4\xea\x3e\xd4\xb1\xc5\xe2\x42\x21\xc1\x8c\xb5\xc1\x5d\xaa\xd3\xb5\x5d\x22\xfa\x77\x30\x87\x2f\xcd\xbc\x1e\x0e\xdc\x5f\x86\x20\xf4\x50\x1f\x65\xe7\x10\xc9\x4e\xc1\x84\x79\x8f\x95\x97\xdb\x0a\xcf\xa5\xab\xcb\x92\xeb\xed\x07\x34\x5a\xd9\xda\x2b\x3c\xff\x52\x85\xe5\x7d\xd6\x53\xe7\xa8\x84\xb5\x05\xb6\x79\x69\x2b\x91\x14\xa6\x39\xdf\xa0\x1d\x13\x74\xc1\x3a\x6c\x62\x94\x31\xf3\x96\x38\x5e\x6d\xa3\x85\xf5\x81\x2a\x6a\x66\x72\xa4\xe9\x17\xa4\x09\xad\x19\x5e\xd2\xc8\x7c\x50\xc8\x94\xb1\x39\x34\x4b\xc2\x54\xb1\xc5\xdc\xb2\xe6\x5b\x5e\x10\xf4\xd3\x9f\xb3\x4e\x81\x99\x6d\xcd\xd6\xb4\x44\xf9\xe5\xea\xb3\xa7\x55\x0c\x2e\x15\xb2\x69\xa7\xdc\x24\x79\x7f\xe7\x2b\x59\x6e\x25\x2c\x6f\xb0\xbc\xaf\x60\x19\xae\x94\x3f\x76\xfc\x3b\xbe\xb1\x9e\xda\xb8\xda\x23\xe7\xe6\xf5\x0e\x16\x70\xbb\x77\xd6\x26\x86\x6d\x78\xa5\x1b\x71\x52\x20\xda\x69\xfd\xbe\x1c\x51\x4f\x7b\xa9\x0c\xb9\xbd\x34\xca\xca\x8c\x99\x2d\xe6\xa9\x83\x1c\x97\xa5\xa9\xe7\x60\xd3\x9d\xf0\x94\x3f\xe4\xf2\xe9\x96\xa6\x3e\x42\xa5\x26\x16\xd8\x7b\xbb\xec\xc0\x7c\x19\xd5\xd6\xda\x98\x5b\x7c\x28\x6f\x51\xb9\x06\x6d\xed\xb9\xe2\x60\x36\x81\xb2\xb6\xf0\xec\x06\xad\x7b\xd7\x6e\x1b\x15\xec\x04\xd6\x74\x0a\x7e\xfb\x8c\x52\xd2\x30\x17\x83\xa1\x16\x1a\xdd\x83\x2c\x84\x6d\x54\x33\x7f\x69\x1e\xb9\x7b\x14\x1d\x19\x4f\xc0\x51\x70\x4f\xac\x57\xfa\x82\x58\x4e\x2d\xcc\xb7\x79\xa1\x83\xb9\x79\x95\x54\x4a\x95\xd5\xae\xb7\x57\xdd\xda\x76\xe1\x19\xca\x52\x57\x0e\xe2\xa9\x79\x94\x4c\x69\x18\xbf\x37\xf4\x70\xdd\x6c\xff\xc1\x8d\xe8\x0f\x66\x4b\xa5\x35\x39\x03\x41\x6b\x3e\xd9\x10\x1d\x02\x09\xbb\x05\x28\x5b\xa6\x07\x89\x0e\x51\x42\xef\x09\xfa\x0e\x62\x65\xa3\xcb\xd3\xef\x06\xe8\xbb\x10\x8f\xf7\x5d\x07\xf1\x97\x71\xa4\xd9\x7e\x5b\x42\x25\x50\x8b\x72\x50\x8f\x8f\x80\xca\x09\xba\x39\x0a\xb8\xd5\x21\x1f\x40\x11\x61\x68\x7f\x20\xbe\xef\x63\xc8\xd6\x5b\xb7\x49\x36\x66\x47\x66\x67\x6a\x1a\xdd\x5e\x19\x2d\xbc\xe7\xb8\x66\xb3\x20\xdc\x80\x3f\x1e\x79\xea\xef\x8c\xcc\x47\xd6\x6c\xde\x3e\xb6\x5f\x35\xaa\x9c\x35\xe5\x26\xb3\x72\x51\x36\x6d\xbc\xb7\xb6\xdd\x5a\x44\xd1\x47\x55\x33\x62\x51\x10\x35\x9a\x58\xbf\xcb\x9e\x76\x97\xed\x03\x40\x92\xef\x5c\xf7\xdb\xec\xd8\x28\x44\x41\x33\x2e\x49\x4f\x6b\xb8\x4e\x4e\xe7\x39\x8f\x36\xb3\xfc\x75\xf4\xb8\x07\x73\xb2\xd9\xe5\x7e\x6d\x42\x35\xc6\xf5\x5d\xee\x6b\xb1\xab\x23\x65\x59\x18\x38\x35\x10\x4f\x45\x97\x64\x80\xa0\x7c\x45\x16\x5e\xb2\xe7\x15\xb6\x1b\x5c\x55\x96\xe7\xda\xbc\x44\x44\x0b\xfa\x50\x8d\x63\x6d\x5c\xe0\x1d\x02\x73\xe7\xa3\xcf\xe3\x93\xbb\xf1\xf9\xcd\xe9\xcd\x5f\xee\xca\x31\xba\xfc\xd7\x57\xc7\x3f\x9e\xfe\x5c\x55\x8d\xf6\xee\xd3\xf8\x7c\x7c\x35\xba\xc9\xaa\xfd\x57\x7a\x4a\x9a\x5e\x56\x45\x71\x67\x81\x36\x3c\x23\xac\x8b\x1d\x1d\x96\x4b\xfa\x36\x6e\x06\x25\x78\x82\xa8\x92\xe8\x81\x4a\x6a\x53\x16\xac\xb2\x77\x7b\xea\x3c\x1f\x15\x6f\xff\x10\x60\x15\x07\x26\x13\x3a\x7b\x09\xb5\x3e\xd1\x50\x11\xb4\xe1\x38\x16\x1b\x00\x00\x0a\xaa\x88\x0c\x2b\x5e\x62\x27\xec\x03\x1a\xd9\xa5\xad\x6a\x9f\x71\xa4\xd5\x50\x22\x4c\xef\x4d\xac\xce\x77\xdd\xd7\xa9\xcd\xe6\xd8\x97\x26\xce\x38\xf7\x7c\x83\xa6\x86\xae\x20\xec\x3b\x85\xc8\xd7\x55\x42\x23\xaa\x02\x1e\x40\x2e\xd0\x12\x33\x3c\x77\xe6\x47\x2a\x89\xd8\x20\x3d\xf6\x16\xbc\xdb\x87\x15\x59\x87\x13\x0a\x2d\x25\xbb\x5d\x3c\x0d\x8f\xe2\x16\x20\xfe\x64\x36\x68\x4d\x10\xa0\x44\x55\xd2\xb6\x4b\x7b\x32\x5f\x37\x20\x93\x2c\x32\xd1\x46\xff\xb0\xb4\xd7\xdd\xa3\xb9\xb8\x5e\x47\x1c\xb1\x62\x1f\xbe\x70\x20\x31\xc7\xf5\xb5\xb7\x92\x1c\x77\x9b\x23\x4d\xd5\x4e\xac\xfd\x95\xc9\x28\xd4\x40\x0f\xbd\x19\xce\xec\x3c\xaf\xa7\x3e\xec\x56\x8d\x20\x37\x89\x9b\x2b\x11\x40\xbd\x22\x2c\x6b\xca\x10\x00\x1f\x48\xfc\x5a\x8a\x11\x94\x53\x56\xf2\x9d\x7b\xe1\x4a\x04\x85\xce\xbc\x9e\x72\x04\x1b\xe7\xed\xf5\xe6\x24\x55\x74\xb4\x45\x19\x02\x0f\x99\x05\xd6\xc1\x6e\x22\x1f\xd2\x94\x68\x9c\x80\x44\x72\x31\x20\x7d\xa8\xda\xb8\x2e\x8b\x58\xbd\x9c\xf7\xb9\x30\x16\x9b\xc7\x02\x1a\x4f\xbe\x9a\x53\xbd\x50\x1c\x3f\x10\xa6\xf6\xa2\x2f\x40\x13\x15\x90\xe2\x76\xfe\x33\xc3\xa3\x75\x7a\x92\x89\x09\xcf\x3c\x1b\x04\xde\x94\xc0\x11\x10\xee\x99\x5a\x72\xb6\x82\x5c\x5d\xcc\x40\x0f\xad\xdd\x12\xc1\x4f\xcb\xf3\xb2\x01\xe5\x63\x67\x3b\x23\x0e\xcc\x10\x04\x3c\x82\x8a\xce\x9d\xb2\xdc\x72\x37\x33\x8b\x81\x8d\x22\x28\xff\x60\x94\xc5\xe2\x9a\x9b\x77\x2e\xb0\x2c\xbe\x72\xe3\x92\x6f\x91\x1c\x93\x6b\xe6\x13\x51\x27\x58\xe1\xbd\x70\x72\x77\xc0\x2a\x43\x47\x6e\x45\xb2\xb1\xc2\xd5\xb5\x21\x2d\x4c\x45\x92\xf9\x08\x30\xd2\x17\xda\x30\x00\x94\x40\x0a\x41\x6e\x46\x4d\x67\x6a\xe4\x40\xf7\x9a\x5c\x4f\xd9\x55\xdb\x9b\xad\x52\x5d\xa4\x12\x69\x04\xbc\x01\xfa\xc4\x55\xaf\xac\x25\x4c\x01\xd9\x69\xe3\x5e\x32\x97\x06\xe7\xf2\x65\x01\xa7\x52\x79\xaf\xd7\xef\x9f\x5d\xdd\x69\x79\xfe\xd7\x27\xf3\xaa\xe5\xa4\x77\x6e\x00\x7d\xb6\xd5\xb6\xbe\x32\xcb\xa1\xe3\x77\x20\x24\x43\x2a\x41\x09\x64\xe9\x27\x3e\xb5\x27\x2f\xe9\xac\xd5\xbc\x71\x63\xe9\x6b\xf5\xa4\xa5\x07\x2d\xb0\x4a\x33\x07\x5e\x96\xf4\x13\x44\x6e\x03\x9a\x5c\x0c\xc7\xa5\xb1\x2c\xcc\xbe\xaa\x90\x82\xea\xfc\x64\x7b\xbb\xa1\xd6\x58\xb8\xb7\xdb\x05\x28\x4c\x57\x0d\x50\x4d\x0b\x8c\x54\x12\x61\x7c\x67\x1e\xa6\x5f\x41\xcb\x57\x1b\x4f\xac\x2c\xba\xda\x14\xdf\x2f\x15\x7f\xad\xd6\x34\x8c\x93\x12\xbd\x7b\xc0\x09\xd5\x1a\xdf\xd0\x65\x65\xbd\x47\xff\x01\x34\x7b\xff\x5e\x63\x34\xe1\x39\x11\x77\x71\x9a\x0b\xce\x6f\xea\xd4\xa5\x7e\xe8\x24\x55\xeb\xea\xec\xb6\x9c\xc1\x93\xe0\xe8\xbe\x4b\xc6\x9f\xfe\x7d\x4d\xb3\x9b\x4f\x60\xe0\xad\xce\x5f\x04\x35\xf9\x74\xa4\x90\x4f\x67\x63\x99\xe1\xfb\x4d\xdc\x91\x01\x0b\x63\xe0\x2d\xb0\x21\xd8\x91\xee\xf3\x10\x7d\x34\x54\x35\x70\xa9\x99\x57\x44\x3c\x4d\xe2\x09\x23\x5f\xb5\xb9\x9f\x43\x21\x55\xd0\x8b\x58\x34\x9c\x7d\x53\xb5\x24\x28\x10\x5d\xee\x74\xc3\xbc\x78\xf2\x63\x79\x4d\xcb\x43\xae\xde\x64\x3b\xe9\xf2\xaf\xa4\xf4\xf1\xb1\x56\x68\x99\x4a\xd6\x03\xe4\x07\x59\xd8\x16\x09\x79\x20\x02\xcf\x89\x2d\x8d\x1c\x50\xc9\xe0\x2d\x2a\x21\x5f\x96\x80\x14\x6f\xbb\x9c\x77\x09\x9f\xf1\xb4\xdb\xd8\x16\x43\xdf\xa8\x17\xb5\x8f\x4f\xb5\x97\x69\x37\x7c\x75\x68\xaa\x2b\x30\x5f\xa3\xdc\x07\x1d\x12\x2c\x25\x9d\xad\x83\xe2\xe3\xde\x07\x0f\x10\x09\xcf\x58\x94\x67\xb6\xaa\xd4\x35\x72\xb8\xce\xfd\x80\x06\x77\xc7\xef\x58\xfb\xd9\x81\x49\x68\x1c\x26\xc4\x00\xa3\x6c\x09\x40\xdc\x92\xf4\x76\x57\x58\x8f\xed\x99\x05\xb7\xec\xaf\x63\x0e\x2f\xbb\x1d\xfa\xb0\x11\x90\xbe\x51\x3e\x14\xd7\xfe\x84\x24\xe4\x95\xd4\xc4\x2b\x6f\x84\xc6\xb9\xce\x92\xaf\x9f\x6d\xfd\x77\xeb\xcf\x16\x71\xa9\x1a\x08\xfb\x1e\xd6\xfb\x85\xa3\x1b\x35\xbd\xfb\x44\xda\x78\x77\x36\xee\xc5\xad\xce\x55\x9d\x70\xdc\x61\xb2\xf7\x16\xd2\x7c\xe2\x01\xd5\xad\xf5\x35\x51\xd2\x29\xae\xc1\x4e\x37\x3e\x13\x7b\x4e\x0f\x1d\x9a\x31\xc3\x06\x76\x58\xf0\x57\x12\x6c\xb3\xbd\xbb\xb2\x84\x41\x4f\x27\x0e\x37\x2f\x57\x97\xfd\x96\xf5\x77\x0b\x8f\xa8\x6d\x63\x1f\xb7\xff\xd3\xaa\x66\xa5\x89\x69\x69\x5c\x5c\x97\xb9\x68\xba\xe7\x5c\x0a\xce\xee\xc8\x57\x6d\x73\xca\x6d\x21\x49\xb7\x92\x48\x34\xfa\x72\x8d\xe4\x9a\x29\xfc\xf5\x03\x9a\x1c\x7c\x36\x84\xbb\xe8\x47\x9e\x0a\x89\x4e\xf0\xfa\x90\xcf\x0e\x97\x9c\xa9\x05\xfa\x0c\xff\x6b\x3f\x7a\x24\xe4\x1e\xfd\x85\x60\x31\x39\x98\x30\xc8\xfb\xb6\xb5\x17\x3d\x29\xce\x02\x43\x58\x4d\x5a\x2e\xdf\x3f\xfe\xab\x23\xf3\xd5\xaf\xf9\xfe\xe8\x8f\xff\x8a\x7e\x0f\xff\xef\xff\x43\xbf\x9f\x1c\xd4\xdc\x4b\xdd\xc0\x4d\x19\xdb\x72\x65\x6b\xf7\x34\xba\xe7\xb3\xd9\x9d\xa2\x4b\x62\x98\x3c\xee\xb0\xa8\xad\xce\xd6\x11\x5c\x4d\x2d\xc1\x88\xa1\x48\xcc\x32\x1e\xed\x4b\x4d\xf8\xd1\x29\x61\xbe\xa8\xbf\x49\x40\x64\x79\x62\x0d\x2a\xe1\x29\x12\x23\x3e\x9b\x75\xf1\x01\xba\x04\xab\x32\x7d\x59\x16\xc8\x0e\xe9\x72\xbc\x51\x17\xba\x22\xf8\x26\x3a\xe2\xb2\x8f\xe4\x1b\xb3\x8a\x61\x80\x4f\x6a\x11\x5f\x73\xb1\x93\x08\xbf\x27\x25\x7f\x59\x27\x07\xb8\x63\xfe\x08\x59\x97\x20\x42\xc6\x85\xcf\x50\x30\x01\x0d\x4b\x8a\x31\x61\x37\x17\x27\x17\xef\xee\xb1\x12\x7c\x8e\xd9\xfb\x0f\x68\x14\xc7\xb6\x40\x0f\xb2\x4e\x3f\xbd\x79\x16\x44\x90\x21\x0a\xab\x6d\x30\x3d\x71\x95\x1e\xed\x50\x1f\xa6\x82\x44\x55\x86\x6b\xf5\x61\xd7\xd3\x77\xe2\x1f\xa9\x81\x1e\xe5\xe8\x4d\xfc\x0b\x32\xe2\x00\x18\xeb\x3d\x59\xdb\x82\x9c\xc5\xf1\x6e\x53\x73\xe8\x7a\x45\x22\x6d\xfd\x9a\x22\x65\x22\x26\x30\x3d\xa6\xcc\x3b\x95\xca\x05\x5f\x2b\x0f\x55\xbe\xf0\xda\x2e\x80\xe8\x62\x52\xd7\x0e\x3b\xc5\xd4\xe9\xcb\x64\x83\x4b\x0c\x2c\x14\x80\x14\x58\x8b\x8d\x2d\x91\xbd\xb6\x06\x54\x58\xba\x26\x95\x44\x1c\xce\x70\xa4\x67\xaf\x50\x4a\x2e\x14\x55\x55\xf3\x78\x83\xe5\xfd\x7e\x1d\x4d\x3b\xd3\x6b\xd0\x38\x4b\x47\x37\xbb\xb1\x5c\xb7\xd8\x5e\x22\x0a\xcb\xfb\x3a\x08\x4a\x67\x46\x6c\x3d\x15\x0e\x9d\xd5\xd4\x3f\xdb\x72\x90\x75\x67\x6b\x96\x80\x62\x1a\x24\xa4\x2c\xf1\xca\x94\x75\x81\x0b\x86\x26\x24\x2e\x22\x81\x8b\xfd\xdf\xb4\x0d\x4c\x56\x4b\xe0\x27\x02\xac\xe9\x52\xab\xcd\x31\xc4\xe6\x30\x5b\x9b\x83\xa4\x2f\x2c\x2c\xef\xa5\xe7\x78\x41\x72\x89\x93\x64\x80\x04\x49\xa1\x2e\xcf\x00\x49\x92\xcc\x0e\x5d\x22\x61\x8c\x12\x3e\xa7\x11\x4e\xd0\x34\xe1\xd1\xbd\x9c\x30\x7d\x83\xb0\xb9\xb9\xf8\x56\x82\x47\x44\xca\xe0\xca\xcd\xc2\xaf\x2b\xc1\xe3\x34\x32\xc4\xd6\xa6\xb0\x04\x95\x8a\x46\x05\x36\x63\x2d\x11\xa1\x0c\x5d\x84\xc1\xc0\x00\xc4\xea\xd2\xd4\x95\x15\x94\x18\x20\x6a\xea\x4a\x23\x41\xa2\x14\x4e\xe8\xdf\x4d\x5d\x43\xfc\x40\x79\x25\xe6\x34\x5c\xb2\x5d\x54\x43\xbb\x3c\x77\x2a\x7f\x1a\x36\xec\xe7\x63\xfb\x18\x9c\xa1\xa6\x1d\x73\x95\xdf\xce\x7e\x37\xf8\x6d\xee\xf3\x99\xdc\xa6\xc8\xc8\x9f\x5d\xce\x98\xf9\x89\x0b\xab\xbe\x32\xdc\x15\x74\xb9\x06\x6d\xb5\x69\x4f\x1f\x1b\x3e\x65\x9b\xa6\x1d\x38\xe0\xa0\x75\xc7\x38\x6b\x09\x27\xf4\x15\xf1\xa0\x37\x89\x9b\x1e\x3d\xf7\xfa\x1a\x19\x78\x92\x63\x2c\xd1\x2a\x49\xe7\x94\x65\xe5\x35\xb5\x3c\x9c\x30\xe0\x26\xd2\x2f\x29\x30\xe6\x96\x77\xd4\x2b\x26\x36\xde\x8f\x70\xec\xc8\x6f\xec\x26\xb9\xcb\x26\xcf\xef\x5b\x57\x86\x72\xeb\x6c\x16\x51\x15\xae\xb7\xf5\xe6\xf5\xb7\x0f\x34\xe3\xd8\x0a\x5e\x54\xbb\xb6\x5b\x7b\x29\x0a\xbd\x2a\xe1\x58\xe8\xcc\x6c\x32\xe8\x1b\x84\x2a\x6d\x91\x9e\xba\x1e\xbd\x08\x32\xb8\x69\x21\x2f\xb1\x32\x85\x56\xc8\x92\x2b\xc3\x2c\x63\x48\x5e\x2c\xf7\x8b\xe5\x8e\x99\x26\x7c\x0a\xf7\x0a\xf0\xbf\xc0\xb8\x73\xf4\x7c\x76\xdc\x24\x46\xef\x82\x6b\xc2\xc3\x75\xde\xd7\x45\xdc\xf7\x07\x4f\x2e\x26\x8f\xd6\x82\x94\xf3\x84\x10\x43\x74\x99\xb9\x9b\x8a\xa3\x9a\x61\x2d\xb9\xeb\x6a\x42\x77\x83\x34\xe7\x56\x7f\x0f\x90\xe6\xc2\x30\x6a\xb8\x62\xf8\x3e\xca\xd6\x36\x0f\xea\x8c\xb7\xb7\x23\x0d\x80\xd1\xe8\x1f\xb9\xc5\x71\xdb\x6c\x5d\xb5\x44\xaf\x0b\xae\x5d\x20\x14\x79\x59\xb8\x76\xa1\x33\xaf\x19\xae\x5d\xe8\xea\xeb\x85\x6b\x57\x74\xb4\x05\x5c\xdb\xb8\xdb\xef\xf4\xa6\x6e\x27\x14\x56\x82\x2b\x3e\x4d\x67\xd7\x70\x9b\xb4\xa1\x4b\x35\xc2\xd9\xe9\x39\x36\x4b\x06\x7a\x6b\x74\xa0\x6e\x8a\x58\x88\xea\x2e\x0c\xb9\x25\xaa\x3b\x27\xd2\x7a\x54\xb7\x47\x75\x97\xe7\xe5\x35\xa2\xba\x0b\x6b\xde\x0e\xd5\x5d\xb5\xe4\x5b\xc4\x30\x72\xcd\x7c\x33\xa8\xee\xc2\x8c\xbe\x66\x54\x77\xa1\xab\xfb\x43\x75\x57\xaf\x6c\x37\x54\x77\xe5\xf5\x5f\xbf\x7f\x76\xc5\xdc\x01\x7f\xd6\x33\xa3\xba\x73\x03\xe8\x51\xdd\x3b\xd6\xd0\xc8\x6f\x41\xdb\x03\x20\x70\xb6\x40\xe1\xa2\xac\x6b\xc0\x75\x83\x4a\xbb\x87\x1d\xf5\xb4\xb1\x55\xf0\x42\xb5\xd5\xba\x47\xb9\x79\x90\x96\x52\x54\x5f\x7f\x0e\x6b\x1b\xd4\x99\xed\x99\x5e\x76\xe5\xe0\x28\x4c\xb2\xf7\x5e\xc1\xc2\xd5\x6d\xb9\x0a\x22\xbc\x1d\x36\xa0\xa5\x2c\xd8\x96\x02\xb0\xbe\xf4\xa4\xe1\x76\xdc\x4f\xb3\xbf\x0b\xff\x5b\x3b\x21\xbb\x56\x1e\x89\x56\xe9\x36\xe8\xd8\xf9\x76\x8f\x2d\xc9\x92\x8b\x4d\xe1\xc7\x1a\x73\x96\x0b\x3c\xdf\x84\xc8\x6d\x3b\x7b\xbb\xce\x9a\xa3\xe3\xec\xe6\xdf\xb8\x71\x4f\x35\x1a\x5c\xae\x34\x4b\xe8\x01\x07\x9d\xb4\x32\xc6\xe2\x43\x5c\x5b\x46\x51\x6a\x12\x0f\xca\x2f\x04\xf7\xaa\x24\xe2\x30\xc8\x24\xc8\xfb\x35\xcb\x3d\xc8\xcd\xbb\x53\xd0\x76\x98\xf6\x54\xd4\xc6\xf8\x5b\xc8\xd8\x91\x21\x72\xd6\xda\x5f\x48\x98\x50\xdc\x69\xd3\x75\x05\x1e\xad\x9d\x49\x6d\x0a\x66\x77\x71\x0c\xd3\xbf\xfb\x85\x9e\xd1\x84\x20\x1c\x45\x44\x1a\x16\x13\x8b\x01\x31\x84\x95\xa9\x48\x76\x59\x55\xca\xe6\x30\x6e\xad\x4c\x06\x25\x3a\xfc\xe6\x31\x77\xc6\x42\xf0\x74\xbe\x70\x56\x96\xab\xe2\x58\xb5\x96\x5f\xca\x04\xcd\x6f\x2c\x20\x50\xa8\xeb\x54\xdc\x04\xdd\x23\xa6\x6e\x4a\x9e\x39\x6a\x5a\x35\x8e\x0e\xbb\x23\x87\x1d\xca\x8e\xbf\xf3\x63\x1b\xad\x04\x32\x85\x26\x6c\x94\x43\x19\x39\x4a\x9c\xe9\x3a\x43\x2b\x98\xab\x3d\xdc\x64\x50\xb6\xd8\x5a\x2f\x50\x27\x48\xff\x05\x6a\x08\x3c\x64\xe3\xa9\x2e\x66\x0a\x40\x0b\x12\x1f\xe2\x68\x1d\x25\x34\x0a\x54\xd2\xb9\xc0\xab\x45\xd3\x4e\xec\x61\xff\x2f\x05\xfb\x6f\x49\xd6\xde\x08\x15\x09\xe9\xce\xdf\x74\x3a\x42\x79\x3b\xf6\x99\x08\x1d\xb6\xe4\x6e\xfd\xd9\xfb\x4e\x7c\x4b\x89\x11\xf5\x3b\xef\x85\x41\xe8\xe5\x8e\xbd\x64\x3a\x44\xc5\x7d\xb1\xdd\xec\xbe\x6c\x12\x44\xab\x61\xd4\x42\x0d\x5b\xe4\x3f\xe4\x6a\x6b\xf9\x7b\x7f\x43\x36\x44\xfd\x2c\xbd\x92\x3d\xb8\x4f\x7c\x54\x9d\xb4\xd9\x8c\x91\xea\xa2\x2a\x76\x83\x4b\xf9\x85\x7a\x5b\x90\x29\xdf\xed\x2d\x61\x53\xa3\xa0\x06\xc0\x82\x27\x50\x2f\x3c\x37\x5b\xfe\x05\x1e\x79\xe1\x27\xc8\x2d\x06\x14\x87\x05\xd5\x35\x23\x9b\x68\x02\x47\xf9\x45\xfc\x36\x00\x52\x1b\xec\xa1\x8e\x20\xa9\x70\x52\x77\x03\x4a\xed\x68\xdf\x74\x03\x4b\x35\x15\xfb\x2d\xae\xf7\x16\x61\xbd\x12\xb1\x47\x1f\x14\xf6\x41\xe1\xea\xb9\x79\x8d\x81\xe1\x72\xb1\xcb\x96\xc1\xe1\xba\xe5\xdf\xc7\x4e\xda\x63\x90\xf8\x85\x43\xaf\x8d\x51\xd7\x60\x83\xbd\x6c\x2c\xbb\x29\x8c\xbd\x79\x9b\x55\xc6\xe5\xea\xd7\xb4\x53\x78\x78\x43\x8e\x83\x7b\xcb\xae\x31\x3c\x8f\xbb\x7f\xd2\x38\x9e\xf7\x33\x06\x4f\xb4\x8c\xe5\x65\x89\x01\x7d\x3c\xef\x49\xe3\x79\x15\x13\xbd\x39\xa6\x97\x53\x10\x9e\x35\x10\xe3\xde\xfc\x1c\xc1\x98\x4d\x4a\x55\x3a\xbd\x7b\xf2\x73\x54\x39\xe6\xb6\xc7\xe9\x8b\x5f\x5b\x47\x8c\x8e\xc8\x72\x4a\xe2\x18\x8c\x2e\xc5\x11\x87\xc4\xab\x6c\x0b\x30\x62\x36\x6b\x56\x22\x1f\x43\x8d\x20\x1a\x1b\x40\xe6\x0a\x03\xd7\x8b\xbf\x43\x0d\x4a\x6f\xc2\x60\x7d\x93\x84\x08\xa7\xb3\x0b\xf4\x4e\x52\x16\x91\x50\x8f\x17\x28\xe6\x44\xb2\xef\x94\xe1\xfe\xc7\x6c\x8d\xee\x19\x7f\x4c\x48\x3c\x87\x15\x2a\x76\xe6\x10\x51\x32\x40\x54\xf9\xc7\x04\xc1\xd1\x42\x8b\xcb\x89\xee\x3b\xb8\xb5\xcd\x65\x4f\xec\xb3\xc2\x66\x9e\x07\x26\x83\x7c\x3f\x44\xe8\x94\xa1\x19\xd6\x46\xb1\x4c\xa7\x59\xfb\x31\xd7\x0a\x02\xdc\xfe\xe1\xc0\xb3\x46\x9e\x2c\x10\x57\x19\x78\xab\xd1\x5e\xf5\x06\x18\x25\x14\xef\xe4\x18\x7f\xc0\xbb\xa4\x02\x7e\x4e\xa5\x32\xe5\x14\xa1\xa8\xb6\xed\xaf\x05\x35\xfb\xb4\x67\x60\x09\x32\x29\xc4\x8c\xc7\xb5\xa5\xec\x0b\x43\xe9\xda\x97\x2c\x8a\x61\xc9\x89\xac\x49\x04\xed\x9a\xe9\x8e\xf9\x23\x93\x4a\x10\xbc\x84\x8e\x48\x5b\x15\x76\x66\xe2\x15\xc6\xd9\x40\x85\xb9\x81\xbb\x2c\xf1\x19\x65\xf7\x7a\x75\xb3\x44\x6f\x0e\x59\xb4\xfa\xcd\x15\x8b\xf6\x03\x65\x58\xec\x54\x78\xce\x30\xd1\x6f\x65\xca\x4f\xd7\x75\x99\xf0\x0a\x6f\x4a\x7b\xef\x62\xb8\x4b\xba\xd4\xf7\xa2\x7e\x1d\x02\x51\x67\x68\xe5\x30\x52\x78\xae\xe7\x67\x41\x92\x55\x40\x12\xb5\xc2\x42\xf9\x8a\x16\x36\xfb\x33\xe2\xcb\x65\xca\x20\x61\xd7\xda\x02\x8f\x36\xcd\xcf\xfa\x85\xb2\xc6\x87\x13\x76\xaa\xbe\x93\xfa\x7c\x71\x36\x4f\xd6\x08\xc7\x0f\x54\x66\x49\xf7\x11\x67\x32\x5d\x12\x61\x5f\x41\xa5\x29\x89\x60\xaa\xb5\x23\xec\xf6\x8a\xee\x9b\x56\xbc\x1c\x63\xa1\xbd\x1b\xe6\x68\x4a\x66\xfa\xd2\x5d\x61\x21\x9d\x0f\xa2\xc2\x7f\x60\x17\x37\xd6\x73\xf5\x62\x67\xf2\xe7\xf0\xd8\xa1\x65\x76\x42\xb1\xd5\x69\x8f\x8a\xe7\xd3\xd5\x11\xa9\x3f\x9b\xd3\xd2\xa0\x50\xf3\xc5\x64\x67\xe1\xa4\x54\x6e\xa1\x68\xea\xb9\xaa\x0f\x12\x0e\x8d\x7e\x8f\x53\x68\x4c\xe7\x3a\x79\x8b\x0a\x03\xb4\xbd\x36\x2e\x80\xf0\x6c\xda\x22\xbe\x52\x61\x45\x23\xab\x3b\x65\xbc\xba\xe6\xe9\xfa\xa5\x6d\x4b\x78\x5a\xb7\xbc\x32\xc2\x49\x79\x85\xeb\xe7\xf2\xda\xfc\xbe\x59\xf6\xd9\xe3\x66\xda\x6e\x84\x41\x44\x3c\x49\xba\xe4\xd5\x17\x46\x7e\x9c\x3d\xde\xdc\xa3\xec\x3d\x7a\x01\xdc\x5a\xc0\xa9\x31\x5c\x00\x38\xb1\x9a\x85\x54\x76\x95\xc2\x1f\x19\x19\xba\x46\x2c\x5d\x4e\x89\x98\x30\x3e\x03\xba\x85\xa4\xce\x6c\x5c\x09\xbe\xa4\x5d\x12\x93\x2e\x60\x99\xaf\x5c\xb0\x67\x83\x37\xcb\x85\x84\xf4\x29\xb2\xdb\xcb\xbe\xd1\x54\x8c\x61\x46\xcf\x68\x38\x43\x4b\xbc\xda\x6a\xc2\x4b\x45\xdb\x4b\x33\xbd\x34\xa6\xab\x9d\x3d\xc8\x86\x26\x40\x62\x00\x93\xfc\x88\xd7\x19\x58\xa4\xcb\x71\xba\x36\xba\x08\x91\x59\xd1\x6b\xbb\xcb\x82\x13\xe3\x83\x65\x66\xbd\xcc\x2c\xb4\x39\x41\xc7\x55\xdb\xb0\xf3\x59\x72\x63\x7e\x4a\x25\x3b\x3c\xf6\xa1\x7e\xdd\xe5\x36\xcc\x1f\x86\xa0\x45\x04\xdd\x69\x9e\xaa\xcf\xb9\x9d\xb3\xf7\x39\x2a\xb4\x83\x8c\x2d\xe7\x7c\xe5\x97\xd5\xad\x3e\xc3\x9c\xd9\x6d\xdd\x6a\xb2\x76\xc4\x9f\x75\xab\x32\xe1\xde\x58\x51\x54\x22\x38\xef\x5d\x2a\xd7\x6c\xb6\x21\x66\x5a\x77\x31\x6a\x25\x9f\xcd\x12\x8e\xb5\xa5\x66\x63\xd7\x33\x9a\x10\x39\x44\xa7\x15\xf6\x44\x58\xf8\xc9\xa4\xb7\x42\x24\xc4\xe9\x3b\xa9\xa0\x16\x95\x41\x04\xf1\x5a\x0d\xa2\x96\x74\x38\x73\x39\x08\xa2\xfb\x0c\x1b\x18\x34\xf9\x85\x36\xf1\x16\xa6\x01\x0a\x0e\xaa\x25\x56\x4a\x77\x09\x6c\x3b\xaa\x8c\x2f\x22\x26\x2b\xc2\x62\xff\x00\x37\x15\x49\x71\x64\xca\xc5\x66\xbd\xaa\x59\xd2\x7d\x30\x9f\xb4\x8f\xd1\xbb\xb7\x16\xca\x32\xff\x2e\xfc\x6f\xb1\x87\x37\xf9\xd6\x3b\xf7\xce\xeb\xe5\xdd\x9d\xfb\x1f\xe1\x51\xe7\x4c\xc2\x68\x26\x08\xf8\x1b\x97\x1e\x17\xc8\x62\x22\xa4\xe2\x1c\x6e\xa8\xeb\x93\x9f\x8e\x6e\x4f\x11\x51\x11\xf0\xb0\x4e\x58\x24\x1f\x06\x5a\xa1\xfd\x25\x25\x4a\x7f\x5c\x47\xc2\xb3\x24\x4c\x82\x24\xa0\x6d\xf9\xb8\xdd\xc4\xe8\xff\x9e\xe4\x9f\x6f\xd8\xf2\x41\xe5\x68\x43\x58\x05\x7b\xd7\x11\x63\xc0\x36\x85\x6c\xec\x5c\xc9\xcc\xdc\x7a\x70\x9e\x10\xcc\xc6\x55\xec\x67\x5b\x44\x83\xd9\xdf\x52\xd6\x51\x4d\x3a\xce\x1e\x0a\x7a\x51\xa3\x85\x2d\x57\x58\x50\xd9\xad\x79\xf7\x4c\x65\xeb\x9b\x84\x88\x9b\x57\x8c\xa6\x66\xa6\x50\x46\x14\x87\x94\x20\x04\x44\x88\xdf\x4f\xf6\xae\x87\x5b\x3e\x98\x8d\xe0\xa1\xe1\x84\x7d\x76\xfe\xcf\xec\x53\x99\x15\x8a\x5e\x4e\x81\x74\x25\x05\x9b\x29\xdf\x0a\x34\x1b\x53\xe9\x3f\x80\x5c\x7c\x99\x26\xca\x50\x23\xcd\x28\xc3\x89\xef\xa8\xf9\xa6\x4a\x4a\x08\xcc\xa2\x05\xd4\xdf\xda\x25\x42\x3b\xbb\x23\x49\x17\xdd\xf1\x74\x36\x4e\xa4\xde\xdf\xd1\x7d\xcd\xe9\xfc\x83\xa3\x54\xeb\xb0\x40\xd9\x60\x40\x73\x73\x04\x31\xc6\x2a\x31\x7e\xba\xc4\x10\x2d\x11\x04\x4e\xb6\x22\x38\xc0\x80\x29\xf5\x2a\x5a\xdd\xda\x96\x93\x83\x32\x90\xce\x2d\x37\x85\xb7\x20\xac\x26\x4c\xa4\x0c\x32\xaa\xbd\xff\x1c\x23\x49\x04\x35\x8e\xec\x88\x33\xa3\x03\x58\xe7\xc9\x5c\x8b\x09\xad\xf9\x99\x82\x89\x0c\x2c\x2a\x9e\x4a\x2d\x43\xf0\x92\x28\x7d\x41\xbd\x03\xce\x3f\x13\xc1\x18\xa0\x95\xa0\x4b\x45\x1f\x88\xa7\x41\x08\x57\xae\x72\x33\xef\x12\xdd\x5a\x11\x81\x55\x5b\x56\x85\xaa\xb7\x5f\xb8\x16\x2a\x0f\x6c\x42\x66\xea\xae\xd2\xef\xd2\x60\x62\xe8\x16\x59\x5c\x83\x22\xa3\xf3\xc5\x1e\x5a\x6c\x7f\xea\xff\x64\xfd\x62\xfa\xa8\x07\x37\xbe\xe0\x5c\x99\xfd\x96\xc9\x24\xe4\x66\x13\xd4\x05\xfb\x52\xc3\xc4\xa4\x17\x95\xc2\xaa\xea\x33\x7c\xcf\xf8\x23\xf3\xb6\xb5\x56\x1b\xc6\x18\xc8\xc1\xbc\x60\xb1\x71\x0a\x73\xaa\x37\x9e\xe7\x1c\xdb\xd0\x2b\xc9\xe3\x08\x6b\xf5\x02\x83\x62\xb2\x46\x19\xa3\x54\xee\xb9\x36\xd7\x9b\xb1\x3b\xdd\xd9\x35\x03\xb6\x24\x2a\x8a\xac\xac\x6d\x6c\x6b\x50\x7a\x90\x07\xb8\x57\xf5\xab\x86\xe8\x8b\xd3\xe4\x20\x0c\x94\x31\xa1\xd9\x3a\xbb\x09\x5e\xbb\xa2\xe7\x55\x13\xbb\x0f\x80\xff\xbe\x63\x33\xcd\x13\xec\x91\x9b\x15\xb3\x9c\xbb\x50\x19\x33\x16\x56\xcb\xd8\xb1\xbd\xb0\xed\x43\xd7\xa4\x19\x93\xf0\x11\x58\x55\x4c\x39\x7d\xf0\x56\x71\x96\xac\xff\x97\x59\x2c\x00\xf6\xfb\xca\xbb\x96\xcb\xc3\xfa\x30\xf5\xf9\x01\x1f\x1c\xe3\x4a\x5f\x8a\x33\x9a\x24\x10\x63\x19\xa2\x11\xf0\x82\x01\xe3\x93\x56\xe4\x5d\xf0\x8e\xce\x19\xdf\x14\x62\xa8\xd9\x4c\x51\xb0\x99\xae\xeb\x37\x93\x84\xdd\xe4\xa3\x0a\x7b\xda\x51\x7b\x80\xe0\x69\xd9\x82\xcb\x69\x64\xed\x81\x77\x1d\x2e\xe3\x97\x08\xd7\x95\xba\x1b\x9a\xc6\xd5\x5d\xff\x94\x62\x81\x99\x82\x20\x94\x65\x8f\x15\x36\xd0\x0b\x25\xb4\xc9\x57\x88\xd6\x32\x63\xd8\xc1\x47\xe1\xe2\x3a\xa7\xfb\x9c\x3e\x10\x86\x68\x3c\x40\x74\x48\x86\x03\xcb\xbe\x2b\xd3\x69\xf6\xcb\x05\x96\x08\x4f\x58\x09\x48\x36\x44\xa3\x44\x72\xfb\x04\x61\x51\x02\x3c\x7c\x41\xbc\xcc\xef\x7c\xeb\x26\x82\x02\xca\x76\x29\xb3\xe6\xb9\xfd\x22\x78\x70\xc2\xb0\x34\x5e\xe9\x04\x4e\x7a\xf6\xf9\x86\xfa\xe6\x4f\x9a\x67\x5c\xba\x86\x9e\x6c\x91\x0c\xa1\x5c\xd3\x02\xc1\x2f\x60\x61\x32\x80\xdf\x84\xf9\xed\x8c\xde\x61\x95\x10\x2c\x15\xfa\xe3\xfb\x4e\xc1\x19\x37\xbe\x4c\xb8\xda\xd3\x9b\xc1\x50\x5c\xe8\xbb\x8e\x26\x18\x68\x88\x10\x86\xc2\xc8\x1e\x98\x32\xd0\xcb\xac\x38\x7a\xa0\x32\x05\x66\xc3\x00\x56\x65\xb8\xe9\xa8\x92\x8e\x66\xc5\xf8\x29\x6b\xc4\x88\x63\x8a\xb5\xfe\x4b\xdb\xad\x8a\x8d\x35\x30\x53\x4e\x8d\xb2\x0b\xc8\xe6\x2c\x08\xbd\xd0\x5a\xae\x15\xac\x2e\x6e\x13\x50\x60\x8d\x92\x24\x1f\xf8\xd5\x0a\x4e\x4c\x98\x1e\x30\xf0\x32\x0e\x51\x58\x44\x54\x66\xb1\xc2\x3c\x35\xb3\x3f\x2b\x5a\x71\x9e\x30\x8f\x4e\x0d\xdb\xae\x54\x76\xaa\xcc\xc5\x67\xd4\x81\x2b\x5e\x7f\x66\x08\x32\x5b\xe8\xc2\xf5\x2c\xe3\x0d\xee\x95\x92\x89\xde\xa0\x1a\xef\xfb\x05\xed\x35\xe5\x6a\x73\x17\x6e\xd9\x47\x5e\x61\x3d\xd7\x2c\x6e\xa0\x5a\xec\xb0\xa8\x59\xd0\xfa\xb9\x1c\xb8\xb9\xae\x9f\xc6\x80\x28\xdb\x2c\x04\x33\x84\x96\x13\x1d\x60\xb7\xd2\x38\xc0\x98\x04\x01\x78\x80\x12\x39\xb9\x67\x7f\x59\xc7\x87\xf5\xb6\x87\x3f\xc8\xc6\xef\x86\xe2\xa3\xd0\xe5\x81\xd7\xeb\x7a\xa3\xf8\x6f\x38\x22\x2c\x5a\x9b\x37\x39\x5e\xbf\x4c\x8f\x03\x65\x2f\xc8\xe0\xc4\x60\x9b\x57\x6a\x87\x96\xeb\x76\x88\xc6\x70\xcf\x38\xea\x5b\x3c\x73\xfe\x85\xe0\xc7\x13\xa6\x0d\x13\x7d\xc5\x4b\xd3\x69\xd7\x7e\x7e\x8b\x57\x9d\x00\x03\xdd\xdf\xc9\x35\xb3\xdc\x4c\x0e\x50\x67\x4c\xb8\xcc\x01\x68\x03\x32\xad\xd1\x78\xfe\x01\xc5\x3c\xba\x27\xe2\x48\x90\x98\xca\x0f\xe0\x2a\x57\xb5\x3e\xba\xa5\x36\xb6\x77\x56\x34\xb6\x65\x9f\x37\xef\xb7\xe8\x23\x73\x6f\x11\xad\x21\xcc\xc0\x9a\x70\xa8\x42\x03\x35\xb4\xd4\x17\x88\x30\x25\xd6\x2b\x4e\x99\x72\x28\x89\xa8\x30\x11\xce\xd0\xd0\x3a\x5b\x1d\x16\x47\xec\x23\xa4\xb6\xe5\xb0\x6f\x16\x44\x12\x17\x3f\x30\x83\x52\x1c\x19\x56\x68\x23\x2e\x56\x58\x2d\x24\xe0\x22\xf3\x73\x60\x6d\x2e\x78\x54\xcf\x10\x5e\x41\xf8\xc1\x38\x29\xb2\x87\x3c\xe0\x4f\x2a\x9a\x24\x13\xc6\x08\x89\x25\x02\x9e\xa2\xef\x2a\xf1\xb7\xfa\xd1\x01\xc2\x71\x8c\xfe\xf7\xbb\x8f\x67\x7f\xb9\x19\xdf\x9d\x9e\x5f\xde\xde\xdc\x7d\x3c\x3d\x1b\xbf\x1f\xf8\x0f\x2f\x6e\x6f\xfc\xa7\xc6\xc1\xf2\x40\x04\x5a\xe2\x7b\xb0\xf0\x98\x34\xea\x1f\xc0\xe2\xc2\x9e\xba\x74\x27\xfd\x8d\x24\x0e\x6a\x62\xd5\x14\x9f\xf0\x62\xd7\x70\x43\x4a\x62\x07\xdb\xf7\xca\x3f\xd2\xbc\x07\xdd\xe6\xf1\xaf\x70\x6a\xe0\x92\x30\xa5\x65\x8c\xc5\xac\x65\xa6\x6f\xb6\xe1\x08\x9b\x53\x56\x17\x10\x27\xec\xe1\x29\x75\xf8\x9f\xc8\xfa\x67\x6d\x5d\x5f\x62\x2a\x5a\xef\xbd\x31\x7b\xa0\x82\x33\x18\x9a\xf7\x6a\x65\x15\x3a\x08\x0c\xb8\x70\xa8\xa4\xd1\x85\x21\xe4\xb2\xaa\x05\x5d\xb0\x19\xad\x85\x57\xbd\xd8\x70\x47\xc6\x4d\x4c\xbe\x2a\x81\x6d\x41\x50\x69\xc5\x0d\x7e\xc0\x34\x01\xc0\x8c\xbb\x68\xb2\x3d\x68\x0a\x3f\x7c\x40\x24\xc1\x53\x2e\x00\x46\x6b\x22\x7c\xae\x09\x3b\x61\x40\x81\xee\x1b\xaa\x03\x6e\x70\xf1\x74\x05\x79\x72\xf7\xd0\x25\x17\x6d\x6e\x72\xfd\x33\x98\x05\xbe\xd2\x26\x59\x41\x88\xda\x6b\x76\x46\xb0\x61\x42\x96\x20\x69\x64\xba\xd2\xe3\xb0\x60\x90\x24\xc9\x91\x6e\xe9\x33\x20\x87\xd6\x39\x9e\xfd\x92\x33\xf4\xd3\x9f\x25\x9a\xa6\x6a\xc2\xf2\x6d\x70\x06\xf5\x77\x7e\xc0\x2a\x5a\xbc\x9f\xb0\x0b\x6d\x30\xfe\xf4\xe7\x9a\x84\x9c\x18\x2b\x7c\x57\xbd\xbf\xea\xe7\xe4\x04\x2b\x7c\xc6\x71\x4c\xd9\xfc\xd8\x3c\x5a\x3d\x17\x3f\x8c\x6f\x46\x1f\xd0\x85\xb5\xc6\x7d\xcd\xd8\x2c\x8d\x2b\x68\x08\x64\x2b\x0c\xc4\x09\x04\x90\xca\xcc\x4b\x71\xeb\xec\x02\x45\x48\xdf\x3d\x13\x06\x53\x69\x04\x24\x55\x68\xc5\x2d\x43\x8a\x36\xb0\x38\x12\x29\xb3\x4e\x69\xeb\x13\xd4\xb3\x03\x3b\xd2\x2f\x86\x55\xad\x40\x35\x29\xcb\xed\x09\x03\x53\xdb\x83\xd6\x13\x1e\xe1\x04\xa2\xe5\x87\x81\x77\x4e\x1b\xe0\x3c\x05\xe8\x31\x84\xa9\xd8\x3a\x0f\x6a\x71\xfc\x75\x99\x7e\x15\x2e\x14\x98\xf2\xb0\x8e\x96\xd6\x65\xc9\xb5\xf0\x18\x4e\xd8\xe9\xcc\x04\xd3\x13\x33\x3b\xfa\x41\xc2\x74\xf7\xfd\xb4\xe8\x6f\x9d\x68\x01\x8a\x5b\x93\xf1\x8a\x23\x70\xc4\xb3\x35\x40\xa1\x80\x3a\x83\x43\x50\x26\x13\xb4\x76\x53\x96\x56\xd1\x5f\x6f\xe1\x63\x13\x66\x82\xf8\xb9\x85\xb1\xb3\x55\x7c\x3d\x67\x80\x31\xc8\xae\x3e\xaf\x2c\xac\x2c\xe6\xc0\xea\xed\x2b\x41\x0e\x5d\x29\x04\xfd\x69\x30\xa9\xfa\xb6\x1c\xa2\xab\xd0\x54\x8e\x79\x94\x2e\x5d\x4e\x2b\x60\xb4\x6d\x70\xda\x5e\x88\x7e\x8b\x98\x4b\xba\x72\xcb\xff\x2e\xfc\x6f\xa5\x9e\x79\xb9\x63\x01\x1d\xbf\xad\xee\x56\xf9\x96\x72\xad\x51\xa6\xc8\xbc\x98\x9f\xd9\x85\x2a\xe8\x1c\x10\x6d\x50\xc7\x1b\x2a\xeb\x70\x64\x2b\x32\xdb\x04\x96\x15\x8f\xbf\x93\xe8\xf4\x52\x2b\x1c\xda\xc0\xf4\xe7\x24\x95\xca\x84\x66\x01\x9e\x6a\x9e\x36\xf0\xb8\x01\xfa\x1e\x4d\xd2\xef\xbf\xff\xe7\x08\x7d\x75\x7f\xfc\xdb\xbf\xfe\xeb\x3f\xff\xdb\x36\x85\xa2\xa0\xdd\x6c\x8e\x6c\xfa\x78\x51\x03\x09\x57\xa0\x2c\x4d\x76\xd1\xf8\xa1\x06\x97\xde\x08\xdb\xc1\x22\x68\xe2\x15\x41\xdd\x08\x7a\x67\x3d\x55\x0a\x22\x5d\xef\x9d\xfc\xe6\x49\x4c\x84\xd9\xde\xde\xb9\xe4\x5d\x5e\xb0\xf5\xc9\xd7\x55\xc2\x63\x57\x87\x5e\x92\x15\x86\xab\x4e\x6f\xf5\x21\x9a\xb0\xf1\x57\xac\x25\xd3\xc0\xd1\xa7\x9b\x5a\x5f\x10\x23\x98\xe1\x88\x20\xa3\x55\xbe\xfb\xfa\x41\x7f\x36\x40\xeb\x0f\x00\x5f\x18\xa0\xbf\x7f\xb0\x59\x43\x58\xa8\x3b\xfd\xd1\x7b\xa7\x16\xda\x26\xa0\xd7\x54\xa2\xc9\xc1\xd1\x03\x16\x86\x3f\xf3\xc8\x12\xec\x1c\x58\xd9\xe1\x79\xa5\x42\x45\x32\xe1\xfc\xde\x82\x3b\x4a\x4f\xda\xff\x0c\xcd\xe6\xf0\x3e\x7e\xb3\x6f\x2d\x4e\x47\x2b\x3d\x87\xf0\x03\x82\x86\xab\x29\x1a\xfe\x4d\x72\x86\x86\x6b\xbc\x4c\xec\xa7\xee\x5b\x8b\x3d\xc1\xd2\x22\xa8\x63\x2d\x0f\x1e\x28\x4f\x65\xb2\x36\x6e\xbd\x1f\x12\x3e\x85\x71\x7d\x76\x63\x35\xe8\x0d\xe8\x68\x26\x5f\x33\x91\x6c\x07\x42\xb5\xb1\x89\x63\x93\x49\x05\xd4\xfc\xfa\x27\x26\x0c\x5d\x35\xac\xaf\xbe\x4f\xff\x6d\x82\x98\x30\x2b\x0e\xf3\x6d\x5c\x99\x7a\xb2\x2c\x64\x71\x86\xbe\xa2\x77\xf6\x04\xbf\xd7\x62\xd4\x62\x65\xcc\x3c\x54\xbd\x60\xed\x5f\xf0\x97\xe0\x05\x94\x21\x83\xe2\x6f\x78\xf2\xef\x47\xc3\xe1\xd0\x3f\x7d\xae\xc7\xf2\x7f\x11\x55\x92\x24\x33\xd3\x92\x13\xd2\xeb\x09\xfb\xac\x55\xfe\xd0\xd5\x9a\xe5\xbe\x02\x5f\x76\xc4\x13\x74\x98\xb9\x1f\x63\x1e\x49\xf4\x4f\x5a\x09\x0b\xe6\x12\x3e\xd4\x56\x47\x13\xf3\xee\x73\x1d\x2c\xeb\xbe\x2d\x1e\xad\x30\xa3\xd1\x9b\x61\x58\x5f\xde\x31\x7d\xa0\x71\xea\x36\x83\xde\x3a\x47\x36\xeb\x11\x2a\x1a\x28\xf2\x55\xc1\x57\xd5\x83\xab\xc6\x51\x55\xeb\x3f\x25\x69\xe5\x60\x66\x66\x57\xd7\x0c\xdf\x26\xfe\x59\xd9\x60\x46\x39\x08\x3d\xfd\x5a\x32\xb3\x90\x64\x40\xa6\xcb\x25\x16\xeb\xa3\xec\xb0\x95\xb7\x66\xc6\x35\x03\x52\x26\x71\xc3\x87\x68\x63\x62\x4f\x96\x0d\xb8\x07\x65\xd7\x16\x1e\x73\x87\x62\x12\xd1\xd8\xa2\xfd\xb0\x21\xc2\x23\x2c\xe2\xb1\xdd\xd5\x59\xaa\x42\xfe\x46\xf6\xbf\x29\xdf\xc5\x2e\x07\x49\x66\x8e\x23\xa6\x4c\xfe\x92\xfd\x85\x7b\xb8\xce\xae\x03\x2d\xa7\x6e\x93\x59\xf7\x69\x6d\x7e\x4a\xd5\xd7\xd9\x26\x4c\xf0\xdc\xaa\x51\x32\x54\x7f\x50\x4e\xff\x31\x6a\x1a\x68\x3c\x44\x0d\xf2\x6a\x98\x77\x0e\x58\x0f\xc8\xff\xea\x70\x43\xc2\xbc\xe7\x75\x60\xec\x2c\x28\x67\xad\x0b\xfc\x98\xdd\x95\x00\x7b\x30\x9e\x8b\xd4\x27\x8e\x98\x7f\x1f\xf3\x4b\x9a\xe8\x1e\xc2\x89\x1a\x4e\x58\xee\xe3\x01\x22\x09\x5d\x52\xe6\x81\x9c\xe6\x36\xe1\x33\xa3\x8e\xde\x53\xa5\xb7\x88\x8c\xef\xb5\xc0\x74\x39\x78\x81\x8d\x32\x62\x6b\xb7\x55\x7d\xd0\xc6\x5a\xe7\xa9\xd4\xfd\xca\xec\x57\xad\x1c\xea\x26\x0e\xad\x82\x47\x83\x8d\x0e\xd2\x62\xc2\x74\x6b\xee\xe4\xce\x09\x23\xc2\x11\xc4\xb9\xf6\x82\xe6\x0e\x41\xa1\xa6\x0e\x25\x0f\x2d\xc0\x3b\x70\xaa\xb8\x16\x6e\x11\x4e\x92\xb5\xd7\x27\x2b\xb4\x89\x71\xa1\x38\x4a\x77\x50\x25\xd4\xda\xb8\x63\x3c\x26\x1d\x99\x13\x2a\x8a\x4f\x58\x0f\xad\x0b\xec\x09\x62\x80\xaf\x20\x95\xea\x90\xfe\x44\xca\x8e\x5e\xcb\xca\x2a\x2e\xb6\x1d\xe0\x6f\x7c\xdc\xb6\x92\x5e\x26\x41\xa1\x15\xa7\xbf\x07\x89\x0a\xb9\xb9\xcf\x57\x9a\xd9\x49\x99\x8e\xb7\xf3\xdb\x9a\xb1\x47\x30\xed\x59\x4d\x4a\x34\x17\x3c\x5d\xf9\x6c\x1e\x87\x6b\x36\xcb\x60\xef\xcf\x53\x36\xe3\x1f\xac\xfa\x7b\x46\xd9\xbd\xb9\x79\x9f\x6a\x8d\x7c\x4d\x97\xe0\x73\x27\x31\xcd\x8c\x1f\xda\xc2\x5e\xba\xd7\x52\xe1\xe8\xde\x30\x6d\x34\xd5\x04\xea\x5a\xd5\x28\x13\x8c\x69\x92\xd8\xd7\x66\xe2\x3a\xe3\x1c\x7d\xa0\x18\x61\x74\x7b\x75\x5a\xfd\xee\x7b\x5a\x76\x73\x57\x5f\x9e\xf9\x0d\x02\xff\xf3\x13\xed\x04\x48\x2b\x30\xc3\x90\xdc\x56\xf7\xb6\x7a\x1d\xd7\x41\x81\x24\x67\x27\x6e\x95\xce\x2c\x6e\xa1\xdb\x14\x90\xdf\x4d\xfb\xc3\xf7\x32\x9f\xd9\xeb\xb7\xae\x7b\xbf\x93\x2c\xfa\xd2\x32\x8f\x80\x3c\x15\xa6\xec\x56\xac\x15\x83\xfa\x94\xa7\x1d\x89\x03\xc3\x5a\xc5\x8e\x3d\xd0\x70\x28\xd8\xbe\x4d\x09\x64\x79\xd7\xf7\x61\x67\xaa\xc0\xb0\x0b\x96\x99\xac\xae\x07\x13\x36\x72\x3f\xf1\x10\x63\xb8\xfd\x84\x09\x76\x01\xb8\xc4\x40\xa9\xe0\x06\x0a\x8a\xc6\xd8\xc1\xd5\x0c\x82\xe1\xe5\x2e\x92\xe0\x56\xdf\x80\x9e\xe3\xc1\x58\x1a\x4e\xf5\x72\xe3\xa8\x79\xb3\x25\x7d\xdd\xe1\xe5\xd7\x6e\x88\x05\xfe\xd8\xaa\x17\x6f\x3a\x9a\x63\x9f\x3e\x62\x1b\x0a\x29\x6b\x0d\x00\x25\x59\x67\x70\x07\x3d\xe3\x46\x6b\x29\xbc\x2c\x77\x58\x67\x06\x26\xbd\x9b\x5f\xc6\x28\xd5\x7b\x07\x1a\x68\x5b\x1a\xf4\x84\xf6\x2d\x03\xd6\xbc\xbb\x53\x05\x67\x78\xea\x4c\x8d\xf6\x3e\xe2\x94\x51\x4b\x6f\x64\xed\xa6\x20\xde\xe7\xfc\x0b\xd9\xf3\x54\x22\x89\x15\x95\x33\x5a\xa9\x3f\x85\xe0\xf4\x5d\x66\xbd\x53\x99\x37\xb7\xcc\x4d\x5b\xd5\xe3\x96\x86\xe8\x23\x15\x52\x05\x43\x52\xdc\x63\xcb\xeb\x0a\xc7\x68\x53\xeb\x29\xc3\x04\x6e\x04\xb5\x01\x82\xe2\x68\x1c\x46\x6d\x88\x46\x99\xd1\x67\xd0\xf5\xc6\x9c\xdb\x30\x22\x92\x48\xb2\xcd\xe6\x6b\xa5\xb1\x82\x57\x11\x36\x10\x02\x71\x29\xf5\xe7\x19\x45\x83\xef\xe6\x23\xc0\xc0\xf1\x3d\xa9\x2b\x37\xd7\xb5\x54\xe1\xc6\x0a\x85\x23\xaf\x90\x72\xa3\x93\x6e\xd3\xc1\xf6\xc7\x2e\x4b\x68\xa0\xb3\x23\x3d\xe5\xb6\xf6\xaf\x71\x53\xcd\x60\x1f\xda\x94\x88\xc7\x05\x97\xe1\x39\x73\xeb\x27\x4d\x65\xf7\x94\x38\x94\x19\x80\xf7\xfc\x04\x1b\x5f\x3f\xe3\x61\xc6\x04\xf4\xda\x1f\x52\x13\x9d\xf6\xeb\x8d\xec\xdd\x60\xa6\x01\x0c\x52\xd7\x54\xf9\x34\xe7\xe2\x7a\x3b\x1c\xe7\xdd\xaa\xc3\xfb\x93\x5b\x73\x8d\x75\xe5\xa3\xa8\x3d\x4b\x9d\x60\x8c\x60\x8b\xd2\x08\x72\x9d\xcd\xb5\xbb\xc2\xb4\xca\x41\x6d\x39\xbe\x5e\x6b\xd6\xfe\xbe\xd3\xf5\xed\x70\xb7\x4c\xd5\x4f\xcc\xd3\xce\x23\xc5\x1f\x5d\x8a\xfe\x3e\x12\xdb\x33\xb6\xb5\x76\x49\xed\x66\xf3\x48\x53\xd4\xc8\xf4\xab\xdb\x1e\xc9\x4d\xb1\x71\x51\xda\xf8\x9d\x84\x58\x9f\xc9\x89\xe1\x33\xcf\x43\x60\xc2\xb4\x86\xb2\x44\xdb\x9a\xa5\x3f\x7e\x48\xf8\x54\xbe\x0f\x4b\x31\xdb\x77\x64\xa9\x31\xf5\x5b\x70\x3f\x69\xef\x6e\x2a\x9e\xf2\x3e\x74\x67\x26\xbc\x0f\xbb\x4c\x7c\xf5\xa6\xca\xa2\xa8\x06\x19\x8c\x05\x4f\x99\x4b\x1b\xe6\x8c\xf0\x19\xf8\xcc\xc0\xe9\xed\xac\x42\xc8\x28\x64\x5c\x05\x28\x60\x41\x56\x06\x83\x06\x1a\x6a\xfd\x74\xef\x98\x3a\xbf\x69\x9e\x9f\x22\x75\x7e\xd7\x79\xb7\x07\xe7\x85\x26\x7c\xd7\x84\x68\x73\x94\x3a\x88\x59\xf8\xfd\x46\x63\xdc\xcb\x01\xb0\xbe\x43\xf2\x53\x93\xf4\x06\xa1\x6f\x72\xa8\xf8\x21\x64\x4f\x00\x26\xdf\x90\x59\xd4\x51\xbc\x45\x0b\xb2\xec\xc0\x17\x70\x0d\xbf\x6f\xd1\x4f\x83\x77\xf8\x1a\x74\xd4\xde\xbd\x12\xb9\xc2\x07\xa0\xcc\x30\xa8\x61\x0a\xf6\xd9\xc6\x9b\xa3\xa3\x8b\x23\x5c\xca\x66\x0f\x98\x4d\xd4\x2e\x10\x0d\xf8\x58\x1b\x0e\x84\xc0\x10\x41\x4c\x7f\xc1\x97\x5c\x5f\xdb\x3c\x95\xc1\x97\x06\x14\x02\x97\x4d\x43\xd9\x87\x95\xc9\x96\x7c\xb9\xd1\xe8\xa3\xa5\xbf\x32\xba\x63\xf8\xa3\xcd\x6c\x2b\xc1\x48\xa6\x79\xb6\x8a\x0d\xfd\xf7\x34\x03\xcd\xfb\x06\xa2\xab\x4b\x3a\x5f\x58\x12\x3d\x9b\x3c\x4c\xff\xae\x2d\x48\xbd\xa5\x3c\xfe\xc2\x97\xb9\x35\x51\x5f\xd8\x50\xac\xaa\x7a\x50\xad\x7b\xbb\x0b\x59\x46\x87\x72\xbf\x41\x32\x5d\x16\xbb\xd5\x93\xec\x23\x68\x2e\xd5\xc3\x3f\xf8\x90\x31\x38\xae\x57\x64\x80\xa6\x29\x7c\x7f\x7e\x71\x13\xfa\x86\x28\x83\xaf\x0f\xa3\x05\x89\xee\x01\xa9\x64\x84\xa2\x99\x2e\x47\xc5\x39\x5d\x4f\x58\xc6\x13\xa6\xb8\x73\x74\xac\x7d\x22\xb6\x27\x23\xe0\x02\xc5\x54\xae\x12\xbc\x46\xe4\xab\x22\xcc\xc4\x4d\x2a\x6a\xae\xeb\xcd\xb2\x9d\xd9\x02\x44\x66\x56\x0a\x38\x3d\x0c\xfe\xe5\x06\xe1\xf9\x9a\x3d\xe4\xa0\x4a\xed\xd8\x39\x35\x7e\x97\xf8\x49\x1d\x25\x5f\xc0\x52\x6e\x56\x34\x74\x95\x7a\x54\x3c\x2b\xc0\xdb\x27\x07\x0e\x04\x01\x1e\x94\x89\x23\x34\xd6\xff\x36\x84\xa8\x44\x3c\x90\x78\xc2\xf2\x79\x07\xf6\x2a\xcb\x56\x19\x65\x54\x4d\x75\xa2\xb3\x3b\x1f\x8c\x9e\x67\x4f\x57\xd2\x18\xda\x01\xac\x65\x96\x64\xe9\xe3\xfc\x0d\xd4\x51\xd5\x94\xc8\x4f\xc0\x71\xd4\xda\xf9\x91\x71\x43\x59\x62\x17\xcb\xdc\x46\x4c\x30\x39\x01\xec\x9a\xdf\x98\x1e\x55\x6d\x52\xae\x7c\x44\xd2\x46\x28\x4b\xb8\xb6\xaa\x36\x26\xcc\xe1\x9f\x66\x69\x92\x98\x34\xda\xda\x02\xea\x26\xcb\xc2\x45\x00\x5f\x0e\xca\xee\xed\x5a\x14\x90\x69\x05\xe5\xc6\x57\x31\xc0\x6e\xa2\x75\x46\xd0\x0e\x9b\x97\x30\x99\x02\x2e\xc5\x11\xe9\x00\xd0\x70\x4e\x14\xd2\x7a\x47\x9c\x26\x06\x95\x04\x08\x49\x48\xd9\xc0\x49\x82\xa8\x92\x13\xe6\x33\x4c\x0c\xc1\x25\x5c\x05\x0e\x42\x19\x5b\x5d\x10\x5e\x01\xcd\x5a\xba\x55\xb8\x20\x68\x44\x55\xae\x4b\xe0\xa9\x5c\x87\xec\x13\xab\x15\xc1\x26\xa6\xed\xea\x7d\x85\xda\x60\x71\x19\x6c\x00\x18\x58\x30\xeb\x0b\xef\xed\x63\xf7\x1a\x16\xd4\xce\x8b\x32\x44\x23\x33\x3a\xad\x0a\x3a\x2a\x48\xd3\x5b\x0b\x7a\xb3\xf1\x04\xad\x6f\x29\xe9\x79\xcb\xbd\x46\xbd\xc2\x42\xd1\x28\x4d\xb0\x48\xd6\x5a\xba\xcc\xd2\x04\xd1\x59\xc0\x6a\x09\x8b\x60\x12\x0c\xa0\x3a\x01\x87\x3b\xc2\x61\x30\x24\x5e\x92\x00\x30\x66\x0d\xcf\x24\x70\x22\x1a\xd2\x04\xe3\x9d\xd2\x6d\xbd\x1f\xa2\x93\x22\x87\x29\x1c\x8b\x20\x31\x91\x4a\x23\x01\x7d\x7f\x03\xe8\x81\xe1\x42\xa5\x33\xad\xec\x7e\x17\x1c\xbc\x3a\xb2\x6c\x2c\xef\x3b\x7a\x28\x6f\xb0\xbc\xdf\xe8\xa5\x3c\xad\x04\x3a\xdd\x00\x07\x73\xce\x6f\xe9\x4f\xc4\x86\xc2\x50\x1d\x3b\x19\x26\x75\x6e\xd1\xd1\x2f\x01\xc9\x71\xb1\xb3\xcb\x06\x12\x4d\x58\xc7\x8e\x5d\x0d\x08\x6e\xba\x77\x34\xd8\x39\xa1\x3f\xba\x76\x66\x37\x1b\x97\x5f\x72\x54\x33\x48\xf7\x4b\x2b\xf6\xc4\x44\x30\x0a\xfc\xf9\xd0\x07\xcb\x49\x03\xb4\x20\xfe\xb0\x4d\x09\x4a\x28\xbb\x77\xd8\x4a\xbd\xf2\x03\x84\xb3\xd6\xe1\xf0\x99\xde\x9b\xcd\x5c\xa3\xd9\xf8\x68\xf4\x7e\x42\xc2\xed\x10\x23\x95\x8b\xeb\xc7\x5d\xf1\xfc\xe6\x8d\x58\x35\x8e\xf6\xcb\xd2\x18\xb6\xf3\x4a\xac\x8b\xd5\x99\x0b\x26\x5f\x13\x7c\xbd\x69\x7e\x2f\x17\xb8\xba\xf8\x44\x41\x0b\x3c\x20\x2c\x5d\x1e\x7c\x40\xff\x2f\x9b\x99\xdb\xf3\x93\xf1\xc7\xd3\xf3\xf1\x49\xb0\x81\x0f\xfe\xeb\x76\x7c\x9b\xff\xe4\xea\xf6\xfc\xfc\xf4\xfc\x53\xf8\xd1\xf5\xed\xf1\xf1\x78\x7c\x92\xff\xdd\xc7\xd1\xe9\x59\xe1\x77\xfa\xa3\xfc\x8f\x46\x3f\x5c\x5c\xdd\xe4\x3f\xba\xfe\xe9\xf4\xf2\x32\xff\xd1\xcd\xe9\xe7\xf1\xc9\xdd\xc5\xed\x8d\x9b\xeb\xff\x09\x66\x18\xf0\xe8\x10\xdd\xf5\xfd\xaf\x9c\xa2\x7d\x70\xd4\x75\x8d\x3f\x07\x49\xa7\x33\x41\x09\x8b\x93\x75\x56\x61\x51\x1f\xba\x42\x90\x32\x14\xe9\x74\x49\x78\xba\x0b\x66\x40\x9b\xbe\xfc\x41\x9b\xd4\x09\xb2\xad\x59\x4c\x4e\xa1\x42\x71\xf0\x56\x41\x94\x28\xbb\xc1\x1a\x51\x16\x4a\xac\xaf\x95\xc0\x8a\xcc\xd7\x2d\xd1\xf4\xf6\x25\x68\xa5\x6f\xc2\xfa\xbe\xc0\x85\x2b\xd2\x95\xa2\xd3\xb2\xa3\xa9\x23\x48\xb1\xbb\x65\x67\x52\xad\xaa\x91\xbe\xe7\xd5\x82\xce\x71\x3e\xed\x48\xac\x02\x9e\xe9\xf6\x2b\x70\xe9\x1f\xa9\xde\x7a\xc7\x8e\x27\x4e\x9b\xcc\x0a\xb3\x9a\x1c\xda\x8e\x5c\xd6\x19\xb1\x8d\xc8\x18\xe5\xed\x4d\xe5\xac\x88\x2c\x31\x6f\x1b\xcb\xda\x72\x5b\xb1\x38\x2b\xbf\x6b\x39\xaf\x02\x62\xbb\x8a\x45\x28\xb0\x05\x3f\xf9\x2d\xd3\xb8\xe7\x2d\x26\x11\x54\x3f\x43\x2e\x62\xb3\x8f\xcc\xb5\x0c\x8c\x3d\xb5\xa1\xba\x3d\x93\x8b\x7b\xd5\x33\x63\x46\xf6\x5c\xdb\x4e\x1e\x75\x57\x34\x0a\xbc\xc2\x01\xe7\xb2\x29\xf3\x06\x5c\x32\xd0\x6c\xe6\x8b\xb3\x9a\x85\x91\x03\x0f\x24\x46\x87\x21\x97\x7b\x7c\x08\xe8\xb2\x09\xab\xb3\x30\x2b\x78\xd0\xc3\x1d\x70\xe9\x68\xee\x76\x59\xfb\x8a\xd9\xaf\x3f\x82\x6e\xb2\xdb\x81\x2a\x90\xfb\xf9\x10\xd5\xbb\x32\xed\xba\x4c\xb1\x71\x21\xc1\xd9\xf2\xfc\x7d\x75\x10\x2f\x7f\x17\x76\xf3\xb8\xb6\xf2\xb6\xe2\x7c\x76\xa0\xd1\x59\x16\x18\xfc\x6f\x86\xb6\x3e\xd7\xf1\x80\xb5\xbf\xce\x68\xf1\x5c\x4f\x7b\xc4\x9f\xd7\x59\x90\x03\x83\x08\xf0\x05\x78\x42\x82\x1c\x4f\xf6\xd5\x6d\xe3\xfb\xd5\xf0\xb4\x4a\xd8\xc9\x3d\x10\x58\x09\x4e\xb5\x4e\xbf\x4a\xb0\x01\x12\x2d\xb0\x34\x5b\xda\x39\x29\xf1\x94\x26\x54\xad\xa1\xc6\x02\x98\xf7\x85\x19\xe6\x02\x2d\xb1\xb8\x77\x99\x28\x38\x43\x88\x37\x6d\xfa\x1d\x03\x69\x19\x47\xe4\x73\x86\xd2\xb2\x23\xdb\xd6\x37\x90\x6d\x4b\x1b\x46\xcb\x96\xc3\x54\x31\x51\x3c\xe0\xbb\xec\xb6\xb2\xb6\xc5\xcb\xe2\xe3\xb9\xf9\xae\xb8\xa8\xb7\xc8\xa0\x33\x19\x8a\x1d\xc4\x7c\x31\x7f\xb1\xf2\x64\xcd\x12\x8e\x6b\x18\x2b\x5d\xdb\x26\x1d\xb1\xae\xed\x98\xa7\xd3\xba\x0c\x1e\xd3\xab\xe6\xd6\x9b\x0c\x30\x77\x6e\xf7\xa5\xd0\x85\x02\x10\x2b\x02\xc5\x4f\xb7\x9a\xd0\xac\x76\x6a\x75\xe3\x36\x93\xa4\xf5\x98\x4b\x1b\x2d\x4b\x5c\xf7\x99\x42\x37\xeb\x15\xa9\x60\x48\xce\x61\x97\xb7\x34\xe6\xae\x2f\xc7\xc7\xa7\x1f\x4f\x0b\x96\xd4\xe8\xfa\xa7\xf0\xdf\x5f\x2e\xae\x7e\xfa\x78\x76\xf1\x25\xfc\xec\x6c\x74\x7b\x7e\xfc\xe3\xdd\xe5\xd9\xe8\x7c\x83\xbd\x55\x7e\x45\xd9\xdd\x91\x25\x06\x64\x38\x6a\x7d\x37\x58\xe8\x2f\x98\xba\x15\xe7\xeb\xaa\x82\x27\x63\xdb\xaa\x9c\x4f\xe6\xd2\xf4\x9d\x74\x7f\x8c\x99\x12\xeb\x2e\xfc\x29\x28\x26\x12\xee\x21\xeb\xbd\xcc\x73\x77\x10\x09\xbe\x60\xd7\xfa\x39\x08\x36\xe7\x5d\xb7\x21\x1a\x3b\x8f\x90\x36\x4f\x6b\xab\xe9\x25\x7a\xc3\xbd\xd6\x79\x08\x31\x80\x30\x0b\x53\x9e\xb2\xd8\x91\x14\x2f\x29\x3b\x5a\xe2\xaf\xef\xdd\x48\xb3\xa2\xc5\x90\x93\x68\x2a\x43\x25\x5a\xeb\x58\x23\x91\xb2\xe6\xe9\x9a\xb0\x86\xf9\xda\x7c\x33\x98\x92\xdd\xf4\xef\xa0\xe2\x64\xfa\xa8\xf1\x18\x3f\x90\x75\xd5\xfa\x95\xd2\xb2\x8d\x57\xda\xea\xc0\xd0\xc8\x4a\x10\xe0\xe4\xf7\xfe\xe8\xc4\xc4\x19\xfc\xbf\x21\xde\x99\xa3\x6a\xa9\xba\x93\xf2\xb6\xf8\x4e\xe7\xa6\xd2\x0b\xf0\x04\x89\xf5\xf6\x4d\x7a\xd1\x8c\x4f\xc0\x65\x68\xda\xf8\x6e\x8c\x1e\x5d\x16\xf5\xdf\xf8\x14\xcd\x20\x1c\x6e\x99\x18\x05\x89\xc0\xbd\xa1\xd7\xc2\xa5\x17\x01\xac\xb6\xe4\x68\x70\x7b\x20\x21\x12\x9c\x6d\xc0\x6a\x4e\x7e\x49\x2d\x76\xee\x8f\xdf\x77\x4b\xd9\x52\x62\x8d\xa4\x9d\xe6\x30\x1c\x6f\xd1\x28\xd6\x67\x07\xfd\x4a\x19\xad\x62\x4f\xbe\x32\x7c\xde\xcf\x5b\x36\xa1\xf0\x52\xfb\xcf\x8d\x88\x85\x1b\x97\x06\x63\x7e\xff\x64\xf9\x11\x3f\x17\xd2\x22\xec\xeb\x20\x10\x69\x5b\x97\x01\xea\x5e\x5b\x46\x8f\x58\xc4\xc6\x31\x00\x3e\xa2\x21\xfa\x91\x3f\x92\x07\x22\x06\x28\x22\x42\x61\x0b\x57\xd6\x67\x2d\x49\xe0\x40\xd9\x76\x26\x0c\x62\xf3\x06\xfb\xcd\x80\xc5\x52\xd1\xf9\x42\x2b\x8f\xd6\x08\xb5\xcc\xf7\x92\x28\x80\x1a\x92\xaf\x2b\x12\x19\x50\x46\x5d\x24\x7a\x96\xe0\x87\x32\xfe\x7a\x1b\x68\x6d\x40\xee\xef\x2a\x8f\xda\x9c\x95\x46\xa7\x94\xe3\x88\x37\x52\x73\xb5\x56\x0b\xce\x06\x68\xce\x13\xcc\xe6\xc3\xe1\x10\x11\x15\x0d\xdf\x77\xda\xe8\xb6\xc1\xe0\x75\x59\x44\x2d\xe1\x92\x24\x6b\xcf\x2a\xe0\x91\x0f\x7a\x96\x01\x69\x21\xa9\x31\x6f\x2a\x76\xff\x75\x11\xa1\xfb\xbc\x6e\xb2\x6a\xad\xb4\x33\xd4\xa7\xa6\x9d\x62\xc9\xc0\x4d\x2d\x99\xdf\x57\x6b\xda\x1d\xa0\x6b\x8e\xfc\x26\x83\xb0\xd5\x64\x50\x71\xd6\x15\x97\xf5\x33\xaf\x23\x7c\xdc\x2a\xe5\xa0\xb2\x25\x0b\x10\xdf\x0a\xa9\x54\xde\xd1\x15\x3b\xce\x83\xfa\x76\x4a\x6f\x4a\xd2\x65\x99\xb5\x7c\x5f\x5a\x54\xd6\x49\xf3\xd7\x31\xbc\xae\x3d\x45\x98\xe7\xb5\xe4\xc2\xa0\xa9\x6c\x7f\x8d\xdf\xc3\x6c\x26\x90\x96\x82\x4a\x48\xb4\xd8\x06\xf0\xe4\x9b\x31\x4d\x83\x7b\x56\xdb\x30\x86\x69\xd8\xd6\x74\x04\x0c\x97\x2f\xcd\x68\x1e\x91\x46\xd5\x01\x9f\x6e\xbd\x64\xc8\x40\xa2\x5b\x59\x3d\xe7\x17\xe7\xe3\xd0\x94\x39\x3d\xbf\x19\x7f\x1a\x5f\xe5\x62\x50\x67\x17\xa3\x9b\x5c\xbc\xe9\xe6\xaa\x10\xa6\xfa\xe1\xe2\xe2\x6c\x3c\x3a\x0f\x3f\x3a\x19\xdd\x8c\x6f\x4e\x3f\xe7\x1a\x3f\xb9\xbd\x1a\xdd\x9c\x5e\xe4\x7e\xf7\xc3\xe9\xf9\xe8\xea\x2f\xe1\x27\xe3\xab\xab\x8b\xab\xc2\xfb\x6e\x8f\x9b\x23\x59\xb9\x61\x54\xaf\x44\xa6\x2c\x07\x78\xd9\x2a\xa5\xf0\x06\xcb\xfb\x3d\x47\x5f\x01\x6d\xd0\x25\x7a\x5a\x19\x2c\xcd\x09\xa5\x98\xdc\x6d\x17\x98\xad\x0b\x2e\x57\xbe\x47\xeb\x83\xeb\x3b\xac\x14\x59\xae\x76\xa3\x8d\x6a\x7f\x70\xba\xc5\x7c\xc1\xa4\x69\x11\xf3\xcd\xad\xea\xeb\x89\xf9\x56\x84\x73\xcb\x31\xdf\xd3\xf3\xd3\x9b\xd3\xd1\xd9\xe9\xff\x2d\xb4\xf8\x65\x74\x7a\x73\x7a\xfe\xe9\xee\xe3\xc5\xd5\xdd\xd5\xf8\xfa\xe2\xf6\xea\x78\x7c\xdd\x32\xe2\x5b\xf6\xb1\x1c\xa2\xf0\x3d\x1f\xd0\x0d\xf7\x2c\x05\x56\x2b\xb4\x95\x55\xf4\x8c\x43\xa5\x5a\xaa\x00\x86\x4b\xd9\x7c\x00\xe4\x4c\x1f\xd0\x58\x88\xd3\x25\x9e\x93\xcb\x34\x49\x06\xc8\xd3\x97\x1d\x0b\x82\x15\xfc\xec\x92\xc7\xa7\xc1\x73\x13\x86\x0e\x51\xe5\x30\xe0\xfd\x96\x26\xcc\xbc\x7e\x60\xdf\x1f\x04\x38\xbc\x83\xc4\x72\xa2\x78\x42\xc6\x0f\xe8\x07\x1c\xdd\xf3\x99\xa5\x51\x18\x78\x13\x17\xfd\x92\x72\x85\x11\xf9\x1a\x11\x12\xbb\xaa\x09\xc5\x7d\x72\xc6\x77\xa2\xf9\xea\x52\x1e\x2f\x3c\xd3\x9b\x43\xe5\x95\xcf\xd9\xcc\x86\xbb\x2e\x44\x41\x76\x94\x9f\xcd\xa3\x96\x1d\xa8\xb2\x75\xa5\x92\x3d\xf8\xef\xce\xf8\xbc\x1a\x45\xec\x8b\xd3\x53\x19\xf0\x08\x40\x34\x80\xcf\x91\xa4\xec\x7e\xc2\xbe\x68\x83\x96\xa7\xc2\x7c\xa4\xb8\x00\x40\xfa\x2c\x49\xe5\x82\x00\x9d\xdf\x00\x3d\x12\xb4\xc4\x6b\x13\x15\xc8\x97\xfa\x80\x2d\xa3\x37\x27\x3c\x9d\x50\xa6\xa5\xc5\x8a\x3a\x0d\xb2\xb8\xf4\xfb\x30\x30\x63\x2a\xbd\x9d\xfd\x84\xa1\x9a\xcc\x53\xf8\xb8\x20\x80\xfb\x0d\x88\x82\x5d\x8d\x01\x23\xb9\x21\xc7\x8c\xf3\xfb\x74\x65\x2b\x44\x63\x79\xff\x9d\x43\xd1\xc1\x74\x3f\x70\x1a\xa3\x38\x5d\x25\x41\x81\xf6\x47\x2e\x6a\x51\x0f\xc6\xd2\xe9\x80\x7a\x28\xd8\xef\x4d\x03\xab\x30\xa3\x02\xab\xad\x01\xff\xf0\xc4\x08\x90\x80\xf3\x24\x95\x44\x1c\x2a\x41\xe7\x73\xd0\x1b\x9d\x53\xe6\xf5\x43\x44\xdc\xde\x5c\xdf\xed\xee\x7f\x08\x5d\xd5\x89\x29\xae\xe0\xa9\x1a\xf4\x9e\x5a\xad\x92\xb5\x03\x6e\x9a\x09\x74\xc7\x7e\x95\x0a\x43\x0b\x39\x43\xbe\x43\xb5\x21\xda\x95\x20\xfa\x2d\xf1\x9d\xa1\x91\xd9\x9d\xde\xe6\x74\x66\xc8\xb3\x0c\x31\x89\x1f\x44\x46\x56\xe2\x6e\xb8\xec\xdd\x2e\xad\xc2\x64\x34\x33\x53\x5b\xfc\x91\xb9\xaa\xeb\x58\x1a\xd7\x08\xe3\xa0\x9b\xf8\x54\x0b\xa8\xed\x6c\x68\xc5\x5c\xb9\x6e\x9b\xa1\x69\x7d\x9c\x86\xf4\xfb\xe5\x21\x3d\x5e\x50\x03\x52\x35\x5f\xfd\xb5\x28\x22\x77\xcd\xbb\xf0\xf8\x87\x6d\x35\xe2\x66\x9b\x6e\x9e\xf0\xa9\xe1\xe1\x2a\x65\x64\x84\xb7\x4e\x37\x07\xa6\xab\x51\x9b\xbf\xb3\x1c\xb2\x09\x42\xe5\xbc\x21\xd3\x3d\x57\x49\x6d\xaf\x29\x2b\xbb\x4f\x58\xaa\x78\xc0\x7c\xa6\x07\x77\x5a\xa8\xf4\x35\x34\xf8\xe5\xd3\xb8\x92\x28\x25\x3b\x31\x6e\xe6\xeb\xa4\x73\x85\x0f\xa5\x53\xc6\xcd\x4a\x10\xe7\x3d\x5b\x13\xe5\x9d\x66\x89\xc3\x57\xaf\x57\xf9\xe2\x4e\x61\xd4\xc0\xf9\x05\x5d\x3c\x82\x40\x02\x40\x50\x3e\x82\x33\xc2\x94\xb4\x44\xcf\x13\x66\x1b\x77\xf9\x7b\x9e\x02\xc7\x06\x42\xcc\xc4\x0c\xac\x0d\x62\x99\x3f\x25\x4f\x1e\x0c\x5d\x5d\x36\x27\x8a\x03\xbe\x5e\x77\xf0\x58\x8b\x73\xad\xbc\x60\x16\x67\xf4\xff\x0b\x32\x61\x85\x24\x36\x41\xe6\x54\x2a\xb8\x58\xdc\x8e\x0d\x9f\xdf\x5b\x62\x4f\x4e\xdf\x69\x9a\xfa\xda\xc4\x9e\x4d\x82\x6b\x86\xa3\x2e\x00\xfb\xf5\x8a\xc4\xa7\xfe\xb9\xe6\xcd\x90\x73\x9d\xc4\x41\x68\x29\x77\xc8\xcd\x1e\x70\xac\x8a\x90\x1d\x05\x47\x35\x95\xe1\x22\x79\x52\x25\x5f\xf7\x48\x2f\xd1\x1c\xbb\xda\x57\xd2\x17\x3e\x82\x68\x77\xce\xe5\x5d\xa8\x53\xea\x75\xa9\x88\x4b\x65\xe2\x6b\xf0\xc8\x0c\xd3\x24\x15\xb5\x2a\x82\xd9\x96\x7b\x4f\x3b\x3c\x86\x66\x51\xd5\xaa\x79\xbf\x74\x70\x8c\xbc\x4f\xda\xd7\x3f\x4d\xd2\x39\x65\x32\xbf\xeb\xeb\xeb\x00\x94\x6a\xa2\x6c\x58\xf0\xac\x8c\x4a\x7b\x59\x3c\x32\x87\x5d\xc2\xe0\x21\x0e\x51\xcf\xe0\x64\x95\xb6\xa0\xef\x13\x76\x03\x77\xb5\xc9\xaa\xf3\xc7\x0c\x1b\xf6\x5b\x21\x15\x54\xaa\xac\x1c\x6f\x4e\x9e\xe7\x77\xea\x4e\x80\x96\xaa\xfc\xb7\xcd\xc0\xb9\xcf\x78\xd5\x94\x9a\xb4\x73\x8b\x9b\x96\xc1\x7b\x37\x8b\xc7\xb0\xc8\x54\x5f\x31\x7b\x1e\xfc\xf7\x2c\x41\xbc\x2e\x89\xd2\x1e\x03\x6a\x29\x06\x4a\x59\xae\x39\xc5\x34\x7c\xb4\x3b\x0c\x38\x8b\x5e\x59\xa2\x66\xd3\xe0\xd4\x00\x37\x43\xac\xe9\x0e\x59\xb6\x7e\x61\x5c\x5b\x0d\xcb\xb1\x23\x0e\x2e\x83\x2e\x3f\x23\x0c\xee\xe7\xd2\x14\x75\x45\xc1\x3d\x84\xb0\x5f\xb8\x1b\xb2\x92\xbf\xad\x34\x66\x8f\x7e\xfb\x39\x8f\xdd\xce\x4d\x31\xa7\xad\x40\xee\x65\xf6\x3d\x50\x5a\x62\xc2\xb8\x22\x08\x23\x46\x93\x23\x96\x26\xc9\xd1\x39\x54\x5c\x94\x92\xce\x4d\x41\x17\xc3\xe3\x0e\x51\xc2\x8c\x0f\x26\xe7\x2a\x0b\x8e\x00\x5c\x91\xba\x4b\xc6\x8b\xa7\xb4\xc4\xd4\x4b\x90\xac\x27\x4c\x3f\x61\x54\x2c\x43\xa3\x41\xb3\xb2\xe9\xf0\x36\xcf\x19\x6f\xde\xa5\x6d\x63\xb6\x0e\x1b\xaf\xd8\x60\x4d\xa9\x40\x3b\x85\x34\x7b\x8e\xc8\x57\xc3\x11\xc9\x85\x27\x50\x6f\xcf\x16\x59\x7f\xa8\xb6\xa6\x6b\xf4\x8a\x98\x0f\x09\xb4\xd8\x8f\x2f\x19\x0e\x78\xca\xc4\xb0\x9d\xb3\xc0\xdc\x4c\xed\xc3\x2b\xfa\x4b\x4a\x52\xca\xe6\x77\xd3\x34\x9e\x93\x9d\x7c\x74\x5c\xe1\x04\x3d\x62\xaa\xc0\x45\x17\xaa\xed\xf6\x5c\xc4\x24\xc1\x6b\x93\x49\xa1\xdf\x4a\x0a\x7c\x25\x9b\x2e\xd1\xcf\x41\x09\x09\xeb\xbd\x51\x54\x04\x7c\x0d\x13\x76\xc3\xbd\x51\x69\x4f\xec\x2c\xd5\xda\x68\x83\xf4\x73\xad\x9e\x98\x99\xdf\x09\xa6\xb9\x4f\xaf\x50\xa3\xa7\xcc\x45\xdb\x9c\x87\x39\x2c\x8c\x9c\xeb\x84\x45\x92\x99\x33\x0f\xc5\xc4\x54\xde\x30\x32\x2c\x19\x0e\xac\x66\x0b\xe3\xa4\xd8\x63\xf7\x61\x2e\xf5\x84\xdb\xc4\xf2\x94\x01\xf6\x8c\x7c\x35\xe9\xfb\xc9\x3a\x6c\x15\x12\x3d\xa1\xc5\x8e\x11\x79\xb0\xb9\x7d\x2e\xee\xc6\x85\xae\x5f\xcd\x5d\x9d\x60\x26\xd7\x61\x95\x60\x76\x67\x94\x9b\x17\x70\x83\x05\xf9\x16\x75\x54\x50\x41\xf9\xf0\xfd\xf4\xd3\x4b\xf8\xab\x5c\x16\x54\x58\x4f\x78\x50\xa4\x8b\x75\x1a\x09\xa0\x05\xb3\x0a\x9e\x96\x9b\x9f\x7c\xad\x02\xb4\x6c\x76\xe5\xe1\x82\xe1\xee\x09\xf1\x37\xf8\xf2\x4a\x05\xff\x5f\x99\x3f\xaf\xcd\xca\x17\x36\x78\x71\xd9\xbb\xbb\x92\x4a\x17\xc5\x56\xee\xa4\x0d\xdd\x7a\x5a\x97\x52\xad\xe9\x54\x76\x2d\x7d\xc9\xd7\xa5\x8d\xa0\xd0\x7b\x94\xa4\x31\x41\x92\x6b\x7d\xce\x59\x76\xd5\xf9\x34\x05\x1c\xc7\x93\xf2\x87\xe4\xd3\xa5\x5b\x03\xa2\x0c\x83\x10\x3a\xcd\xaa\xbe\x0c\xd0\xe4\xc0\xec\x2c\x39\x39\x30\x9c\x7b\x2e\x2d\xcb\xd1\x13\xe5\x0b\x4a\x14\x1d\xaf\x26\x26\x12\xdc\x20\x2c\x70\x0f\x14\xe7\xa5\xc6\x8b\xf1\x92\xbc\x40\x01\x5a\xcc\x84\x4d\xa7\xa6\x01\xab\x94\x1a\x5d\x7b\xed\x48\x83\x20\x75\x58\xa4\x91\xca\x06\xec\x39\x56\x7e\x70\x0f\xea\x29\x5a\xa5\x50\xb4\x25\xce\x0a\x08\x71\x31\x61\xae\xb5\x8c\xea\x70\x94\x24\xa5\xa6\xca\xf4\x42\xc1\x5e\x05\xb2\x31\x87\xe3\x86\xfc\x00\xfd\x23\x40\xba\x95\xe4\x00\xd4\xad\x9b\x92\x2c\xa1\x74\x88\x32\x82\x2b\x53\xa5\x3f\xcf\xa4\x13\x12\xe9\x24\x89\x63\x91\x31\xdc\x2c\x01\x75\x88\x4c\xa1\x4e\xc3\x2c\xd5\xe2\xc8\xbf\x5d\xf1\x09\x03\x52\xa5\x19\xd5\x87\xc4\xcd\xcb\x84\x7d\xe6\xd2\x95\x74\x96\xa4\x54\xa7\xcf\x4e\xdb\x77\x1e\xce\x6e\x3f\x38\xd1\x42\x44\x3f\xa5\x4d\xdb\x42\x32\x33\xc4\xed\x00\x5d\x30\x40\x6b\x9e\x8a\x9c\xaa\x38\x61\x7f\xd3\xd3\xe3\x98\x82\xec\xb2\xf2\x99\x39\xc4\x2e\xf9\x1b\xbd\xfb\xab\x69\xf4\xdd\xbf\xbe\xff\xeb\x7b\xc3\xc3\x96\xca\x54\x4b\xd8\x41\xfe\x0a\x71\x1d\xd5\x4b\x0a\xd8\x16\x5f\x12\xca\x95\x7e\xc8\x5e\xd1\xc8\x29\x60\x9d\xc5\xfb\x66\xd0\xce\x3c\x4e\x23\x14\x61\x15\x2d\x0e\xb1\xdd\x7b\x21\x7b\x12\x95\x19\x3f\xfb\xe3\x82\x30\xa8\xf4\x9b\xe7\x74\x37\x09\x15\xc8\x17\x49\x94\xf9\x79\xd0\xfb\xc5\x14\xaa\xb1\x5a\x61\x21\x0f\xd9\xbd\x09\x36\x67\x96\x09\xfb\x25\x93\x0c\xee\xe7\x2e\x3f\x20\x28\x3d\x65\x5c\x63\xda\x64\x8d\xd1\xc4\xe0\x69\x27\x07\x6e\xf9\x27\x6c\x35\x1d\x26\xeb\x99\x1a\x02\xba\x77\xa8\xa7\x65\x38\x6e\xac\x67\x63\x2e\xa1\xbb\xb8\xac\x95\x6f\x98\xee\x5a\xbd\xbe\x5a\xdf\xf1\xb3\xe3\xdf\xd4\x5e\x69\x31\xa6\xad\x9f\x9f\xeb\xbc\xef\x9b\x78\x5b\x99\x98\x78\xc6\xc0\xb1\xe3\x60\x16\x87\x8a\x55\x76\x3e\x81\xaa\x49\x5f\x74\xbe\x68\x11\x66\x38\x59\x43\x96\xce\x60\xc2\x4c\xf5\x36\x12\x23\x1c\xad\xa3\x84\x46\x96\xe9\x26\xaf\x0b\x91\x07\xc2\x54\x0e\x4c\x38\xd6\x9f\x3c\x97\x3a\x54\x07\x63\xac\x9e\xfd\xdb\x1a\x55\xc8\xb3\x92\xe5\xbd\x05\xc5\x6d\x62\x73\xf3\x45\x47\x6e\x03\xff\x7a\x10\xcd\xb1\xf3\xf3\x70\x41\xe7\x94\x61\xc5\x05\x7a\x07\x6e\xcf\x24\x21\xe2\xbd\x2f\xb0\x03\xb3\x58\xdd\x8d\x45\xa7\xc2\x05\x15\x34\x37\xd5\x97\x6d\x14\xa5\x42\x90\xf8\xae\x8c\x1e\xeb\x9a\x07\xda\x8c\xad\xd1\xaa\x35\x5d\x12\xa9\xf0\x72\x85\x44\x56\x2c\xc7\x67\x2c\xd9\x99\x49\xcc\x24\x20\xd7\xb1\x01\xa2\x00\x10\xf3\x61\xea\x09\xb3\x01\x6a\xb3\x6e\x5c\x54\x10\x1c\x14\x47\x69\xaa\x7e\x6d\x89\xcd\xb3\x84\x6f\x1d\x4b\x18\x15\x1d\x65\x57\x67\x0e\x43\x90\x5d\x04\x39\xc9\x0a\x03\x85\x12\x74\x5a\x11\xf5\x35\x3b\x3d\x0c\x6a\xc2\x32\x08\xd2\x71\xc2\xd3\x18\x59\x37\xa1\x75\xba\x89\x21\xa2\x64\x38\x40\xf2\x9f\x3f\x1c\x1d\x0d\x87\x7b\xaa\x7b\x90\x2f\x9c\x55\xbd\xc3\x4d\x69\xab\x2a\x88\xdf\x86\xa3\x95\xe3\x39\xbb\xeb\x66\x79\xb8\x14\x0e\xd8\x2d\xa1\x65\x9e\x07\xb0\x14\x5f\xb9\xc2\x82\x30\x75\x07\xa0\xec\x6e\x2f\x84\x17\x5d\xc2\xe3\x39\x3c\x71\x2b\xb3\x27\xe3\x49\xb4\x09\x99\x58\xde\xa3\x77\x14\x3c\xe8\xef\xad\x31\xae\x75\xe5\x26\xfa\xb2\xb2\x04\x6e\xea\xcd\x33\x89\xe2\x3a\xc0\x7c\x9b\xee\xe7\x9e\xdd\xf9\x02\xd9\x05\x67\xdf\xe8\x07\x3b\xf1\x5c\xbc\x10\x3b\x3f\x65\x28\xe2\xcb\xa9\x16\xe2\x7a\xab\x7b\xc7\x04\xc0\xe5\x47\x0e\x73\xe9\x01\x63\x0e\x63\x66\xd8\x2c\x0a\x88\x75\xef\xcd\x0e\x11\x61\x66\x8b\x16\xee\xa6\xba\x5a\x59\x66\x3b\x3f\x41\x4a\x40\xf5\x51\x1f\x15\x47\x90\xb1\x43\xdf\xd3\xe8\x9e\xe8\x7b\x6e\x96\xb1\xd8\x84\xd2\xcd\xdf\x6f\x1e\x22\x37\x61\x30\x43\x06\x8f\x41\xec\xb8\xef\xa8\xe1\x00\x25\x5a\xa7\x09\x30\x57\x1c\x51\xf5\x9d\xac\x9e\x9c\xa7\xce\x5f\xa8\x9e\x0b\x68\xdf\xa3\x6c\x6d\x1e\xad\x57\x2d\x8c\x32\x06\x12\xf9\x4f\x5e\x1e\x4a\x12\x71\xe6\x91\xb9\x7b\xb9\xe8\x2b\x72\x1b\xaa\xbb\x0b\xdf\x95\x12\x70\x37\x69\x1d\x3b\x2a\x3f\x99\xe2\xb3\x12\x3c\xb2\x09\xc5\x0a\x49\x88\x5b\x02\x3c\x47\xbf\x7b\x80\x96\x98\x32\x7b\x0c\xa0\x98\x20\x8a\xc9\x34\x9d\xcf\x6b\xef\xe4\x84\xcf\x9f\xd4\x41\xe0\x32\x01\x6a\x1d\x04\x7e\x84\x49\x13\xba\x7d\xc3\x0e\xfd\x86\x94\xaf\x46\x34\xd8\x3e\xd4\xa7\x53\xf7\x26\x63\x04\xce\x28\xd4\x28\x7f\x06\x8d\x69\x4f\xea\xdf\x69\x1b\xf5\xcf\x79\x11\x20\x82\x6b\x2b\x21\x3b\x3b\xef\x37\xa4\x17\x1a\x44\xdc\x9d\x7e\xf2\x49\x61\x71\x1e\xc8\x0b\x87\xd5\x00\xde\xb4\x6c\x8a\x25\x24\xcc\xef\x1f\x27\x07\xb2\x7d\x13\xfa\x7e\x67\xc2\x88\x6b\xbe\x24\x08\x5e\x25\x4d\x6e\x16\xb2\x21\xe8\x01\x78\x1d\xf5\x00\x6d\xad\xfe\xc4\x0a\x7f\xeb\x56\x8b\x16\x98\xcd\x83\x4a\x09\xe8\x1d\x23\x8f\x48\xcb\xda\x41\xe8\x86\x09\x96\x67\x80\x88\x8a\xde\x6b\xdd\x26\x17\xb5\x11\x24\xe2\x22\x86\xe4\x88\x39\x16\x31\x44\xf3\xec\x86\x4f\x70\x74\x0f\x0c\x54\x70\x1d\x99\x37\xba\x00\xa2\xcd\x1f\x30\xee\xcb\xac\x35\xca\x22\x01\x10\x59\x47\x70\xe1\xfb\x67\x1e\x97\x08\x47\x82\x4b\xe3\x89\x72\xc4\x43\x06\x9e\x12\x56\x60\x87\x37\x76\x89\x19\x5e\xda\x0d\xe1\x90\x14\x81\x13\x0c\xa4\x64\x2e\xd5\xff\x23\x17\x36\x17\x00\x66\xfc\xd2\x32\x0a\xfc\x48\x1f\xc8\x00\x5d\xaf\xb0\xb8\x1f\xa0\x93\x35\xc3\x4b\x1a\xfd\x27\x9f\x56\xf9\x53\x4a\xd0\x84\x9d\x55\xe2\xfd\xb3\xf7\x56\x1f\xf4\x2f\x25\xe0\x05\xaa\x4b\x82\x7f\x9b\xde\x94\x1a\xd4\xc8\xb7\x7e\xa9\x6f\x88\xc9\xf5\x8e\x91\xbd\x5e\x80\x95\x86\xb2\x73\x73\xe0\x78\x49\x59\xce\x56\x7b\x55\xce\xd6\xe2\xa2\x56\xa1\xb4\x72\xc2\xb8\x95\x75\xbb\x0f\xcd\xf1\x12\x6b\x2b\x47\x1b\x94\x4b\xae\x88\xb9\xf7\xa5\xe2\x82\xd8\x8c\x62\xa3\x4e\x42\x99\x21\x2a\xcd\x37\x75\x14\x9c\x51\xc2\x65\x2a\x5a\x8a\x8d\xf2\x82\x1d\xdb\xc7\x1b\xb5\x13\xbe\x5c\x41\xf4\x45\x10\x99\x26\x4a\x56\xd8\x6b\x25\xb7\xf5\x5e\x02\xf9\xe5\xee\x7e\x26\x0a\x9f\x94\xfc\x5a\x7e\x6f\xe7\xf0\x33\x90\x08\x35\x6e\xd8\xd3\x75\x57\xec\x38\x8c\x5f\xe8\xb3\xed\x8a\x38\xd9\x42\x15\x94\xcd\x93\x3a\x6e\xf7\x09\xb3\x75\x2e\x02\xd9\x87\xb3\x7c\x1e\xa7\x90\xb9\x94\xce\xc7\x1c\xc7\xbf\x2f\x92\x61\x81\x30\xd8\x1a\xec\x5e\x2f\x82\xbb\x7c\x00\x04\x55\x06\x18\xc4\x80\x9f\x6c\xc2\x64\x3a\x3d\xcc\xe0\x2a\x5c\x80\x74\x05\x82\x89\x15\x16\x90\x2f\xbf\xa0\x49\x7c\x58\x06\x23\x5a\x2d\x07\xca\x63\x78\x32\xb6\x29\x01\xbe\x25\x58\x71\x53\x8a\xce\x44\x4b\xfd\xd8\x7d\x3b\xd3\x54\x21\xe2\xcb\x0d\x50\x69\x9d\x47\x05\x4d\x22\x27\x2f\x72\xbe\x81\x97\xf6\x08\x6e\x96\x17\x75\xe9\x7a\xdf\xbe\x9c\xc8\xcd\x59\x1b\x39\x71\x93\xf7\xc2\xb9\x53\x83\x99\x97\x1c\x75\x53\x25\xef\x8c\x0b\xed\x09\x91\x83\x5f\x7c\x4a\xba\x4b\xb2\x92\x2b\xfc\xc8\x2c\x48\xa4\x13\xbd\x6c\x3b\xf9\x50\xcd\x03\xa2\xe5\x43\xe1\x9b\x50\x52\xe8\xeb\x08\x82\xfc\xd4\x27\x3f\x0e\x82\x2c\x6f\x28\x3d\x94\x65\xb4\x64\xe6\xcf\x84\x65\xe8\xa5\xac\x56\x6a\x54\x14\xdc\x16\x14\x14\x43\xa0\x95\x0c\x1c\xa2\x61\x60\x32\x00\xad\x91\x72\x38\xc5\x40\x85\xac\x94\xa0\xd3\x54\x95\x28\x69\x72\xa7\xb9\x32\xc8\xb1\x0f\xeb\xe0\xf4\xe9\x4b\x7b\x54\x5f\x1b\x59\x69\x94\x0c\xaa\x54\x1c\x7a\x40\xd1\xf5\xfc\xb4\x1c\xdd\x32\x8d\x02\xde\xac\xf6\x3b\xbc\x94\xcd\x68\x39\xa3\xc0\xa2\x8e\x03\xc6\xf3\x1c\x90\x02\xa6\x30\x63\x84\xf7\x20\x93\x20\xe9\x43\x8b\x28\x3c\x27\x68\x49\x62\x9a\x16\x13\xd9\x36\x47\xcf\x5e\x95\xd9\xd9\x66\x67\x69\x03\xdc\x1b\xa2\xe7\x60\x2c\x3c\xea\x5b\xdb\x40\xd0\xc0\xe9\x51\x4d\x2a\x11\xc0\x40\xb1\xfa\x4e\xfa\x68\x5c\x7e\xc6\x9c\x8b\xe9\x8c\x4a\xf5\x73\x81\xcd\x79\x8b\x7c\xa9\x24\x7d\x3a\xec\x9f\xeb\xaa\xe9\x66\xf0\x44\x23\xc6\xed\x2a\x57\x0a\x17\x36\x99\x71\x57\x00\x46\xc4\x65\x92\xe9\x7e\x77\x11\xe0\x7f\xf5\xf3\xf5\x57\x5b\xac\x57\xe0\xd5\x8a\x08\x64\x0b\xf6\x16\x4b\xf0\x9a\xb4\x2c\x78\xcb\x84\x19\x85\xe9\x3f\xaf\x2f\xce\x33\xc9\x9d\xd9\x51\x85\xa6\xe1\x67\x30\x75\xc3\xea\x95\x3b\x4f\x93\xa4\x76\xe5\x5a\xb0\xa5\xdd\x9e\x9d\xdd\xfd\x3c\x3a\xbb\x1d\x37\xb3\x91\x65\x3f\xab\x9d\x13\xdf\x13\x3b\x27\xe6\x1a\x53\x70\x75\xa5\x4b\x62\x1d\x58\xa0\x8c\xd8\x51\x1b\x80\x43\x9a\x24\xf9\xcc\x9a\x09\xfb\xab\x6d\x07\x00\x70\x29\x33\x6a\xe6\x84\xa1\xc6\x89\xcb\xbf\x1f\x7e\xf6\x57\xdd\xf8\x5f\xcd\xb3\x87\x28\x1b\xc4\x07\x74\xee\xdf\x5a\x33\xaf\xd6\xe9\xba\xc3\x71\x30\x09\x3e\xcf\x95\x3b\xb8\xdd\xf1\xb8\x65\x8e\x28\xd0\xa6\xfc\xed\xe5\x74\x98\xb9\xfb\x6b\xde\x84\xf1\xf9\xcd\xb1\x91\xf3\xd0\xee\xc0\x64\x7c\x99\x62\xee\x3e\x29\x6a\xc2\x0c\x9e\x00\x4a\xf8\xf2\xfa\x3e\xa1\x53\x66\x90\x8d\x09\x66\xf3\x14\xcf\x89\x1c\x20\xf7\xf2\x09\xf3\x05\x63\x2d\x41\x89\x2f\x44\x82\x81\x76\x3d\xbf\x85\x8c\xab\x93\x7c\xc5\xcb\x15\x84\x60\xd8\x84\xd9\x31\xb1\x79\xd6\xbc\xf1\x82\xfe\xe7\xb5\x1f\x8e\xde\x69\xbe\x21\x9b\xb4\xc6\x26\xcc\x2c\xae\xc9\x58\x74\xba\x1d\x38\x80\xa0\x42\x74\x6e\xeb\x62\x41\x5c\x9e\x2c\xc8\xf4\x39\x68\x99\x86\xa3\xda\x85\x18\xb5\xa4\x0f\x48\x56\x8c\xc3\xd9\x74\x69\xb3\x3c\x71\x8b\xe1\xce\x84\xed\x5b\xf5\xae\xdf\xf9\x0e\xd0\x07\xae\xba\x2e\x40\xf3\xb6\xcd\xc4\xd8\x06\x69\x9e\x6d\x28\x56\x3c\xc2\xa8\x08\x45\x87\xe0\xf5\x1e\x6a\x20\xb4\xee\x92\xf9\x7d\x63\xa7\x3a\x94\x4e\x68\xfd\x5a\x9b\x6e\xdd\xf4\x5a\x6d\xe1\x34\xbf\x74\x0f\x26\x52\xae\x53\xf6\x81\x4d\x93\x91\x46\x35\x55\x2a\x76\x8e\x89\x15\xa7\xc8\x49\x9f\xa6\x0e\x25\x54\x6e\xd5\x9d\x4c\x7f\x6a\xdd\x23\xaf\x21\xd8\xcb\xae\x93\x84\xb5\xf7\x5c\x4e\xc0\xd6\x88\x49\x8b\xcd\xb2\x6e\x19\x42\x8d\x78\x61\x40\x67\x88\x2d\xc0\x63\xe0\x37\xd1\x20\x5b\xb9\x81\xe1\x57\x4f\x85\xd4\xe2\xd2\xca\x3b\x2b\xb5\xb5\x99\x33\x61\x2e\x7d\xc0\x89\xe3\x91\x2b\xf9\x24\xfc\xa7\x26\xce\xb8\x32\xe0\x5b\xd0\x58\x55\x56\x2b\x0c\xab\x09\x83\xdc\x74\x06\x26\xe4\x54\x42\xf6\x94\xcd\xc0\xb6\x5f\x04\x74\x56\x98\x79\x8e\xf7\x0d\x32\xaf\xa0\x06\xe4\xee\xf9\xdf\xe9\xff\xff\xeb\xef\xfe\xff\x00\x00\x00\xff\xff\xea\x57\x4c\x49\x59\x05\x03\x00") func adminSwaggerJsonBytes() ([]byte, error) { return bindataRead( @@ -92,7 +92,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 194179, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 197977, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/gen/pb-java/flyteidl/core/Tasks.java b/gen/pb-java/flyteidl/core/Tasks.java index fc03bc14f..3ec07d4cf 100644 --- a/gen/pb-java/flyteidl/core/Tasks.java +++ b/gen/pb-java/flyteidl/core/Tasks.java @@ -7712,6 +7712,7 @@ flyteidl.core.Literals.KeyValuePairOrBuilder getConfigOrBuilder( *
      * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
      * not supported on AWS Batch)
+     * Only K8s
      * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -7722,6 +7723,7 @@ flyteidl.core.Literals.KeyValuePairOrBuilder getConfigOrBuilder( *
      * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
      * not supported on AWS Batch)
+     * Only K8s
      * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -7731,6 +7733,7 @@ flyteidl.core.Literals.KeyValuePairOrBuilder getConfigOrBuilder( *
      * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
      * not supported on AWS Batch)
+     * Only K8s
      * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -7740,6 +7743,7 @@ flyteidl.core.Literals.KeyValuePairOrBuilder getConfigOrBuilder( *
      * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
      * not supported on AWS Batch)
+     * Only K8s
      * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -7750,12 +7754,56 @@ flyteidl.core.Literals.KeyValuePairOrBuilder getConfigOrBuilder( *
      * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
      * not supported on AWS Batch)
+     * Only K8s
      * 
* * repeated .flyteidl.core.ContainerPort ports = 7; */ flyteidl.core.Tasks.ContainerPortOrBuilder getPortsOrBuilder( int index); + + /** + *
+     * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+     * This makes it possible to to run a completely portable container, that uses inputs and outputs
+     * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+     * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+     * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+     * to understand the default paths.
+     * Only K8s
+     * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + boolean hasDataConfig(); + /** + *
+     * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+     * This makes it possible to to run a completely portable container, that uses inputs and outputs
+     * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+     * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+     * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+     * to understand the default paths.
+     * Only K8s
+     * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + flyteidl.core.Tasks.DataLoadingConfig getDataConfig(); + /** + *
+     * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+     * This makes it possible to to run a completely portable container, that uses inputs and outputs
+     * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+     * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+     * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+     * to understand the default paths.
+     * Only K8s
+     * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + flyteidl.core.Tasks.DataLoadingConfigOrBuilder getDataConfigOrBuilder(); } /** * Protobuf type {@code flyteidl.core.Container} @@ -7866,6 +7914,19 @@ private Container( input.readMessage(flyteidl.core.Tasks.ContainerPort.parser(), extensionRegistry)); break; } + case 74: { + flyteidl.core.Tasks.DataLoadingConfig.Builder subBuilder = null; + if (dataConfig_ != null) { + subBuilder = dataConfig_.toBuilder(); + } + dataConfig_ = input.readMessage(flyteidl.core.Tasks.DataLoadingConfig.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(dataConfig_); + dataConfig_ = subBuilder.buildPartial(); + } + + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -8208,6 +8269,7 @@ public flyteidl.core.Literals.KeyValuePairOrBuilder getConfigOrBuilder( *
      * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
      * not supported on AWS Batch)
+     * Only K8s
      * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -8219,6 +8281,7 @@ public java.util.List getPortsList() { *
      * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
      * not supported on AWS Batch)
+     * Only K8s
      * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -8231,6 +8294,7 @@ public java.util.List getPortsList() { *
      * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
      * not supported on AWS Batch)
+     * Only K8s
      * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -8242,6 +8306,7 @@ public int getPortsCount() { *
      * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
      * not supported on AWS Batch)
+     * Only K8s
      * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -8253,6 +8318,7 @@ public flyteidl.core.Tasks.ContainerPort getPorts(int index) { *
      * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
      * not supported on AWS Batch)
+     * Only K8s
      * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -8262,6 +8328,57 @@ public flyteidl.core.Tasks.ContainerPortOrBuilder getPortsOrBuilder( return ports_.get(index); } + public static final int DATA_CONFIG_FIELD_NUMBER = 9; + private flyteidl.core.Tasks.DataLoadingConfig dataConfig_; + /** + *
+     * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+     * This makes it possible to to run a completely portable container, that uses inputs and outputs
+     * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+     * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+     * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+     * to understand the default paths.
+     * Only K8s
+     * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + public boolean hasDataConfig() { + return dataConfig_ != null; + } + /** + *
+     * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+     * This makes it possible to to run a completely portable container, that uses inputs and outputs
+     * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+     * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+     * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+     * to understand the default paths.
+     * Only K8s
+     * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + public flyteidl.core.Tasks.DataLoadingConfig getDataConfig() { + return dataConfig_ == null ? flyteidl.core.Tasks.DataLoadingConfig.getDefaultInstance() : dataConfig_; + } + /** + *
+     * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+     * This makes it possible to to run a completely portable container, that uses inputs and outputs
+     * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+     * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+     * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+     * to understand the default paths.
+     * Only K8s
+     * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + public flyteidl.core.Tasks.DataLoadingConfigOrBuilder getDataConfigOrBuilder() { + return getDataConfig(); + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -8297,6 +8414,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) for (int i = 0; i < ports_.size(); i++) { output.writeMessage(7, ports_.get(i)); } + if (dataConfig_ != null) { + output.writeMessage(9, getDataConfig()); + } unknownFields.writeTo(output); } @@ -8341,6 +8461,10 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(7, ports_.get(i)); } + if (dataConfig_ != null) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, getDataConfig()); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -8373,6 +8497,11 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getConfigList())) return false; if (!getPortsList() .equals(other.getPortsList())) return false; + if (hasDataConfig() != other.hasDataConfig()) return false; + if (hasDataConfig()) { + if (!getDataConfig() + .equals(other.getDataConfig())) return false; + } if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -8410,6 +8539,10 @@ public int hashCode() { hash = (37 * hash) + PORTS_FIELD_NUMBER; hash = (53 * hash) + getPortsList().hashCode(); } + if (hasDataConfig()) { + hash = (37 * hash) + DATA_CONFIG_FIELD_NUMBER; + hash = (53 * hash) + getDataConfig().hashCode(); + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -8576,6 +8709,12 @@ public Builder clear() { } else { portsBuilder_.clear(); } + if (dataConfigBuilder_ == null) { + dataConfig_ = null; + } else { + dataConfig_ = null; + dataConfigBuilder_ = null; + } return this; } @@ -8647,6 +8786,11 @@ public flyteidl.core.Tasks.Container buildPartial() { } else { result.ports_ = portsBuilder_.build(); } + if (dataConfigBuilder_ == null) { + result.dataConfig_ = dataConfig_; + } else { + result.dataConfig_ = dataConfigBuilder_.build(); + } result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -8801,6 +8945,9 @@ public Builder mergeFrom(flyteidl.core.Tasks.Container other) { } } } + if (other.hasDataConfig()) { + mergeDataConfig(other.getDataConfig()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -10009,6 +10156,7 @@ private void ensurePortsIsMutable() { *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10024,6 +10172,7 @@ public java.util.List getPortsList() { *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10039,6 +10188,7 @@ public int getPortsCount() { *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10054,6 +10204,7 @@ public flyteidl.core.Tasks.ContainerPort getPorts(int index) { *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10076,6 +10227,7 @@ public Builder setPorts( *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10095,6 +10247,7 @@ public Builder setPorts( *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10116,6 +10269,7 @@ public Builder addPorts(flyteidl.core.Tasks.ContainerPort value) { *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10138,6 +10292,7 @@ public Builder addPorts( *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10157,6 +10312,7 @@ public Builder addPorts( *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10176,6 +10332,7 @@ public Builder addPorts( *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10196,6 +10353,7 @@ public Builder addAllPorts( *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10214,6 +10372,7 @@ public Builder clearPorts() { *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10232,6 +10391,7 @@ public Builder removePorts(int index) { *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10244,6 +10404,7 @@ public flyteidl.core.Tasks.ContainerPort.Builder getPortsBuilder( *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10259,6 +10420,7 @@ public flyteidl.core.Tasks.ContainerPortOrBuilder getPortsOrBuilder( *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10275,6 +10437,7 @@ public flyteidl.core.Tasks.ContainerPortOrBuilder getPortsOrBuilder( *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10287,6 +10450,7 @@ public flyteidl.core.Tasks.ContainerPort.Builder addPortsBuilder() { *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10300,6 +10464,7 @@ public flyteidl.core.Tasks.ContainerPort.Builder addPortsBuilder( *
        * Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but
        * not supported on AWS Batch)
+       * Only K8s
        * 
* * repeated .flyteidl.core.ContainerPort ports = 7; @@ -10322,6 +10487,213 @@ public flyteidl.core.Tasks.ContainerPort.Builder addPortsBuilder( } return portsBuilder_; } + + private flyteidl.core.Tasks.DataLoadingConfig dataConfig_; + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.DataLoadingConfig, flyteidl.core.Tasks.DataLoadingConfig.Builder, flyteidl.core.Tasks.DataLoadingConfigOrBuilder> dataConfigBuilder_; + /** + *
+       * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+       * This makes it possible to to run a completely portable container, that uses inputs and outputs
+       * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+       * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+       * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+       * to understand the default paths.
+       * Only K8s
+       * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + public boolean hasDataConfig() { + return dataConfigBuilder_ != null || dataConfig_ != null; + } + /** + *
+       * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+       * This makes it possible to to run a completely portable container, that uses inputs and outputs
+       * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+       * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+       * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+       * to understand the default paths.
+       * Only K8s
+       * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + public flyteidl.core.Tasks.DataLoadingConfig getDataConfig() { + if (dataConfigBuilder_ == null) { + return dataConfig_ == null ? flyteidl.core.Tasks.DataLoadingConfig.getDefaultInstance() : dataConfig_; + } else { + return dataConfigBuilder_.getMessage(); + } + } + /** + *
+       * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+       * This makes it possible to to run a completely portable container, that uses inputs and outputs
+       * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+       * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+       * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+       * to understand the default paths.
+       * Only K8s
+       * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + public Builder setDataConfig(flyteidl.core.Tasks.DataLoadingConfig value) { + if (dataConfigBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + dataConfig_ = value; + onChanged(); + } else { + dataConfigBuilder_.setMessage(value); + } + + return this; + } + /** + *
+       * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+       * This makes it possible to to run a completely portable container, that uses inputs and outputs
+       * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+       * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+       * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+       * to understand the default paths.
+       * Only K8s
+       * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + public Builder setDataConfig( + flyteidl.core.Tasks.DataLoadingConfig.Builder builderForValue) { + if (dataConfigBuilder_ == null) { + dataConfig_ = builderForValue.build(); + onChanged(); + } else { + dataConfigBuilder_.setMessage(builderForValue.build()); + } + + return this; + } + /** + *
+       * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+       * This makes it possible to to run a completely portable container, that uses inputs and outputs
+       * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+       * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+       * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+       * to understand the default paths.
+       * Only K8s
+       * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + public Builder mergeDataConfig(flyteidl.core.Tasks.DataLoadingConfig value) { + if (dataConfigBuilder_ == null) { + if (dataConfig_ != null) { + dataConfig_ = + flyteidl.core.Tasks.DataLoadingConfig.newBuilder(dataConfig_).mergeFrom(value).buildPartial(); + } else { + dataConfig_ = value; + } + onChanged(); + } else { + dataConfigBuilder_.mergeFrom(value); + } + + return this; + } + /** + *
+       * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+       * This makes it possible to to run a completely portable container, that uses inputs and outputs
+       * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+       * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+       * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+       * to understand the default paths.
+       * Only K8s
+       * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + public Builder clearDataConfig() { + if (dataConfigBuilder_ == null) { + dataConfig_ = null; + onChanged(); + } else { + dataConfig_ = null; + dataConfigBuilder_ = null; + } + + return this; + } + /** + *
+       * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+       * This makes it possible to to run a completely portable container, that uses inputs and outputs
+       * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+       * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+       * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+       * to understand the default paths.
+       * Only K8s
+       * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + public flyteidl.core.Tasks.DataLoadingConfig.Builder getDataConfigBuilder() { + + onChanged(); + return getDataConfigFieldBuilder().getBuilder(); + } + /** + *
+       * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+       * This makes it possible to to run a completely portable container, that uses inputs and outputs
+       * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+       * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+       * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+       * to understand the default paths.
+       * Only K8s
+       * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + public flyteidl.core.Tasks.DataLoadingConfigOrBuilder getDataConfigOrBuilder() { + if (dataConfigBuilder_ != null) { + return dataConfigBuilder_.getMessageOrBuilder(); + } else { + return dataConfig_ == null ? + flyteidl.core.Tasks.DataLoadingConfig.getDefaultInstance() : dataConfig_; + } + } + /** + *
+       * BETA: Optional configuration for DataLoading. If not specified, then default values are used.
+       * This makes it possible to to run a completely portable container, that uses inputs and outputs
+       * only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment.
+       * If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories 
+       * are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation
+       * to understand the default paths.
+       * Only K8s
+       * 
+ * + * .flyteidl.core.DataLoadingConfig data_config = 9; + */ + private com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.DataLoadingConfig, flyteidl.core.Tasks.DataLoadingConfig.Builder, flyteidl.core.Tasks.DataLoadingConfigOrBuilder> + getDataConfigFieldBuilder() { + if (dataConfigBuilder_ == null) { + dataConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + flyteidl.core.Tasks.DataLoadingConfig, flyteidl.core.Tasks.DataLoadingConfig.Builder, flyteidl.core.Tasks.DataLoadingConfigOrBuilder>( + getDataConfig(), + getParentForChildren(), + isClean()); + dataConfig_ = null; + } + return dataConfigBuilder_; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -10375,89 +10747,1276 @@ public flyteidl.core.Tasks.Container 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_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; + public interface DataLoadingConfigOrBuilder extends + // @@protoc_insertion_point(interface_extends:flyteidl.core.DataLoadingConfig) + com.google.protobuf.MessageOrBuilder { - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; + /** + *
+     * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
+     * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
+     * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
+     * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
+     * /var/flyte/inputs/y -> Y is a file in Binary format
+     * /var/flyte/inputs/z/... -> Note Z itself is a directory
+     * More information about the protocol - refer to docs #TODO reference docs here
+     * 
+ * + * string input_path = 1; + */ + java.lang.String getInputPath(); + /** + *
+     * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
+     * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
+     * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
+     * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
+     * /var/flyte/inputs/y -> Y is a file in Binary format
+     * /var/flyte/inputs/z/... -> Note Z itself is a directory
+     * More information about the protocol - refer to docs #TODO reference docs here
+     * 
+ * + * string input_path = 1; + */ + com.google.protobuf.ByteString + getInputPathBytes(); + + /** + *
+     * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
+     * 
+ * + * string output_path = 2; + */ + java.lang.String getOutputPath(); + /** + *
+     * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
+     * 
+ * + * string output_path = 2; + */ + com.google.protobuf.ByteString + getOutputPathBytes(); + + /** + *
+     * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
+     * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
+     * 
+ * + * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + */ + int getFormatValue(); + /** + *
+     * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
+     * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
+     * 
+ * + * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + */ + flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat getFormat(); + + /** + *
+     * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
+     * 
+ * + * bool enabled = 4; + */ + boolean getEnabled(); } - 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\036google/protobuf/duratio" + - "n.proto\032\034google/protobuf/struct.proto\"\232\002" + - "\n\tResources\0228\n\010requests\030\001 \003(\0132&.flyteidl" + - ".core.Resources.ResourceEntry\0226\n\006limits\030" + - "\002 \003(\0132&.flyteidl.core.Resources.Resource" + - "Entry\032S\n\rResourceEntry\0223\n\004name\030\001 \001(\0162%.f" + - "lyteidl.core.Resources.ResourceName\022\r\n\005v" + - "alue\030\002 \001(\t\"F\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\"\225\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.f" + - "lyteidl.core.RuntimeMetadata.RuntimeType" + - "\022\017\n\007version\030\002 \001(\t\022\016\n\006flavor\030\003 \001(\t\"\'\n\013Run" + - "timeType\022\t\n\005OTHER\020\000\022\r\n\tFLYTE_SDK\020\001\"\235\002\n\014T" + - "askMetadata\022\024\n\014discoverable\030\001 \001(\010\022/\n\007run" + - "time\030\002 \001(\0132\036.flyteidl.core.RuntimeMetada" + - "ta\022*\n\007timeout\030\004 \001(\0132\031.google.protobuf.Du" + - "ration\022-\n\007retries\030\005 \001(\0132\034.flyteidl.core." + - "RetryStrategy\022\031\n\021discovery_version\030\006 \001(\t" + - "\022 \n\030deprecated_error_message\030\007 \001(\t\022\027\n\rin" + - "terruptible\030\010 \001(\010H\000B\025\n\023interruptible_val" + - "ue\"\206\002\n\014TaskTemplate\022%\n\002id\030\001 \001(\0132\031.flytei" + - "dl.core.Identifier\022\014\n\004type\030\002 \001(\t\022-\n\010meta" + - "data\030\003 \001(\0132\033.flyteidl.core.TaskMetadata\022" + - "0\n\tinterface\030\004 \001(\0132\035.flyteidl.core.Typed" + - "Interface\022\'\n\006custom\030\005 \001(\0132\027.google.proto" + - "buf.Struct\022-\n\tcontainer\030\006 \001(\0132\030.flyteidl" + - ".core.ContainerH\000B\010\n\006target\"\'\n\rContainer" + - "Port\022\026\n\016container_port\030\001 \001(\r\"\352\001\n\tContain" + - "er\022\r\n\005image\030\001 \001(\t\022\017\n\007command\030\002 \003(\t\022\014\n\004ar" + + /** + *
+   * This configuration allows executing raw containers in Flyte using the Flyte CoPilot system.
+   * Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path
+   * Any outputs generated by the user container - within output_path are automatically uploaded.
+   * 
+ * + * Protobuf type {@code flyteidl.core.DataLoadingConfig} + */ + public static final class DataLoadingConfig extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:flyteidl.core.DataLoadingConfig) + DataLoadingConfigOrBuilder { + private static final long serialVersionUID = 0L; + // Use DataLoadingConfig.newBuilder() to construct. + private DataLoadingConfig(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private DataLoadingConfig() { + inputPath_ = ""; + outputPath_ = ""; + format_ = 0; + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private DataLoadingConfig( + 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(); + + inputPath_ = s; + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + outputPath_ = s; + break; + } + case 24: { + int rawValue = input.readEnum(); + + format_ = rawValue; + break; + } + case 32: { + + enabled_ = input.readBool(); + 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_DataLoadingConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_DataLoadingConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.core.Tasks.DataLoadingConfig.class, flyteidl.core.Tasks.DataLoadingConfig.Builder.class); + } + + /** + *
+     * MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. 
+     * If the user has access to the protocol buffer definitions, it is recommended to use the PROTO format.
+     * JSON and YAML do not need any protobuf definitions to read it
+     * All remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem)
+     * 
+ * + * Protobuf enum {@code flyteidl.core.DataLoadingConfig.MetadataFormat} + */ + public enum MetadataFormat + implements com.google.protobuf.ProtocolMessageEnum { + /** + *
+       * JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html
+       * 
+ * + * JSON = 0; + */ + JSON(0), + /** + * YAML = 1; + */ + YAML(1), + /** + *
+       * Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core
+       * 
+ * + * PROTO = 2; + */ + PROTO(2), + UNRECOGNIZED(-1), + ; + + /** + *
+       * JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html
+       * 
+ * + * JSON = 0; + */ + public static final int JSON_VALUE = 0; + /** + * YAML = 1; + */ + public static final int YAML_VALUE = 1; + /** + *
+       * Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core
+       * 
+ * + * PROTO = 2; + */ + public static final int PROTO_VALUE = 2; + + + 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 MetadataFormat valueOf(int value) { + return forNumber(value); + } + + public static MetadataFormat forNumber(int value) { + switch (value) { + case 0: return JSON; + case 1: return YAML; + case 2: return PROTO; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + MetadataFormat> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public MetadataFormat findValueByNumber(int number) { + return MetadataFormat.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.DataLoadingConfig.getDescriptor().getEnumTypes().get(0); + } + + private static final MetadataFormat[] VALUES = values(); + + public static MetadataFormat 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 MetadataFormat(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:flyteidl.core.DataLoadingConfig.MetadataFormat) + } + + public static final int INPUT_PATH_FIELD_NUMBER = 1; + private volatile java.lang.Object inputPath_; + /** + *
+     * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
+     * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
+     * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
+     * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
+     * /var/flyte/inputs/y -> Y is a file in Binary format
+     * /var/flyte/inputs/z/... -> Note Z itself is a directory
+     * More information about the protocol - refer to docs #TODO reference docs here
+     * 
+ * + * string input_path = 1; + */ + public java.lang.String getInputPath() { + java.lang.Object ref = inputPath_; + 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(); + inputPath_ = s; + return s; + } + } + /** + *
+     * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
+     * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
+     * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
+     * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
+     * /var/flyte/inputs/y -> Y is a file in Binary format
+     * /var/flyte/inputs/z/... -> Note Z itself is a directory
+     * More information about the protocol - refer to docs #TODO reference docs here
+     * 
+ * + * string input_path = 1; + */ + public com.google.protobuf.ByteString + getInputPathBytes() { + java.lang.Object ref = inputPath_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + inputPath_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int OUTPUT_PATH_FIELD_NUMBER = 2; + private volatile java.lang.Object outputPath_; + /** + *
+     * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
+     * 
+ * + * string output_path = 2; + */ + public java.lang.String getOutputPath() { + java.lang.Object ref = outputPath_; + 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(); + outputPath_ = s; + return s; + } + } + /** + *
+     * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
+     * 
+ * + * string output_path = 2; + */ + public com.google.protobuf.ByteString + getOutputPathBytes() { + java.lang.Object ref = outputPath_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + outputPath_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int FORMAT_FIELD_NUMBER = 3; + private int format_; + /** + *
+     * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
+     * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
+     * 
+ * + * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + */ + public int getFormatValue() { + return format_; + } + /** + *
+     * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
+     * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
+     * 
+ * + * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + */ + public flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat getFormat() { + @SuppressWarnings("deprecation") + flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat result = flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat.valueOf(format_); + return result == null ? flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat.UNRECOGNIZED : result; + } + + public static final int ENABLED_FIELD_NUMBER = 4; + private boolean enabled_; + /** + *
+     * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
+     * 
+ * + * bool enabled = 4; + */ + public boolean getEnabled() { + return enabled_; + } + + 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 (!getInputPathBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, inputPath_); + } + if (!getOutputPathBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, outputPath_); + } + if (format_ != flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat.JSON.getNumber()) { + output.writeEnum(3, format_); + } + if (enabled_ != false) { + output.writeBool(4, enabled_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getInputPathBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, inputPath_); + } + if (!getOutputPathBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, outputPath_); + } + if (format_ != flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat.JSON.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(3, format_); + } + if (enabled_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(4, enabled_); + } + 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.DataLoadingConfig)) { + return super.equals(obj); + } + flyteidl.core.Tasks.DataLoadingConfig other = (flyteidl.core.Tasks.DataLoadingConfig) obj; + + if (!getInputPath() + .equals(other.getInputPath())) return false; + if (!getOutputPath() + .equals(other.getOutputPath())) return false; + if (format_ != other.format_) return false; + if (getEnabled() + != other.getEnabled()) 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) + INPUT_PATH_FIELD_NUMBER; + hash = (53 * hash) + getInputPath().hashCode(); + hash = (37 * hash) + OUTPUT_PATH_FIELD_NUMBER; + hash = (53 * hash) + getOutputPath().hashCode(); + hash = (37 * hash) + FORMAT_FIELD_NUMBER; + hash = (53 * hash) + format_; + hash = (37 * hash) + ENABLED_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getEnabled()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static flyteidl.core.Tasks.DataLoadingConfig parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Tasks.DataLoadingConfig 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.DataLoadingConfig parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Tasks.DataLoadingConfig 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.DataLoadingConfig parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Tasks.DataLoadingConfig parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.core.Tasks.DataLoadingConfig parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.core.Tasks.DataLoadingConfig 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.DataLoadingConfig parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static flyteidl.core.Tasks.DataLoadingConfig 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.DataLoadingConfig parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.core.Tasks.DataLoadingConfig 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.DataLoadingConfig 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; + } + /** + *
+     * This configuration allows executing raw containers in Flyte using the Flyte CoPilot system.
+     * Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path
+     * Any outputs generated by the user container - within output_path are automatically uploaded.
+     * 
+ * + * Protobuf type {@code flyteidl.core.DataLoadingConfig} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:flyteidl.core.DataLoadingConfig) + flyteidl.core.Tasks.DataLoadingConfigOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_DataLoadingConfig_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_DataLoadingConfig_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.core.Tasks.DataLoadingConfig.class, flyteidl.core.Tasks.DataLoadingConfig.Builder.class); + } + + // Construct using flyteidl.core.Tasks.DataLoadingConfig.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(); + inputPath_ = ""; + + outputPath_ = ""; + + format_ = 0; + + enabled_ = false; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_DataLoadingConfig_descriptor; + } + + @java.lang.Override + public flyteidl.core.Tasks.DataLoadingConfig getDefaultInstanceForType() { + return flyteidl.core.Tasks.DataLoadingConfig.getDefaultInstance(); + } + + @java.lang.Override + public flyteidl.core.Tasks.DataLoadingConfig build() { + flyteidl.core.Tasks.DataLoadingConfig result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public flyteidl.core.Tasks.DataLoadingConfig buildPartial() { + flyteidl.core.Tasks.DataLoadingConfig result = new flyteidl.core.Tasks.DataLoadingConfig(this); + result.inputPath_ = inputPath_; + result.outputPath_ = outputPath_; + result.format_ = format_; + result.enabled_ = enabled_; + 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.DataLoadingConfig) { + return mergeFrom((flyteidl.core.Tasks.DataLoadingConfig)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(flyteidl.core.Tasks.DataLoadingConfig other) { + if (other == flyteidl.core.Tasks.DataLoadingConfig.getDefaultInstance()) return this; + if (!other.getInputPath().isEmpty()) { + inputPath_ = other.inputPath_; + onChanged(); + } + if (!other.getOutputPath().isEmpty()) { + outputPath_ = other.outputPath_; + onChanged(); + } + if (other.format_ != 0) { + setFormatValue(other.getFormatValue()); + } + if (other.getEnabled() != false) { + setEnabled(other.getEnabled()); + } + 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.DataLoadingConfig parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (flyteidl.core.Tasks.DataLoadingConfig) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object inputPath_ = ""; + /** + *
+       * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
+       * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
+       * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
+       * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
+       * /var/flyte/inputs/y -> Y is a file in Binary format
+       * /var/flyte/inputs/z/... -> Note Z itself is a directory
+       * More information about the protocol - refer to docs #TODO reference docs here
+       * 
+ * + * string input_path = 1; + */ + public java.lang.String getInputPath() { + java.lang.Object ref = inputPath_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + inputPath_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
+       * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
+       * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
+       * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
+       * /var/flyte/inputs/y -> Y is a file in Binary format
+       * /var/flyte/inputs/z/... -> Note Z itself is a directory
+       * More information about the protocol - refer to docs #TODO reference docs here
+       * 
+ * + * string input_path = 1; + */ + public com.google.protobuf.ByteString + getInputPathBytes() { + java.lang.Object ref = inputPath_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + inputPath_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
+       * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
+       * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
+       * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
+       * /var/flyte/inputs/y -> Y is a file in Binary format
+       * /var/flyte/inputs/z/... -> Note Z itself is a directory
+       * More information about the protocol - refer to docs #TODO reference docs here
+       * 
+ * + * string input_path = 1; + */ + public Builder setInputPath( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + inputPath_ = value; + onChanged(); + return this; + } + /** + *
+       * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
+       * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
+       * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
+       * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
+       * /var/flyte/inputs/y -> Y is a file in Binary format
+       * /var/flyte/inputs/z/... -> Note Z itself is a directory
+       * More information about the protocol - refer to docs #TODO reference docs here
+       * 
+ * + * string input_path = 1; + */ + public Builder clearInputPath() { + + inputPath_ = getDefaultInstance().getInputPath(); + onChanged(); + return this; + } + /** + *
+       * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
+       * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
+       * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
+       * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
+       * /var/flyte/inputs/y -> Y is a file in Binary format
+       * /var/flyte/inputs/z/... -> Note Z itself is a directory
+       * More information about the protocol - refer to docs #TODO reference docs here
+       * 
+ * + * string input_path = 1; + */ + public Builder setInputPathBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + inputPath_ = value; + onChanged(); + return this; + } + + private java.lang.Object outputPath_ = ""; + /** + *
+       * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
+       * 
+ * + * string output_path = 2; + */ + public java.lang.String getOutputPath() { + java.lang.Object ref = outputPath_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + outputPath_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
+       * 
+ * + * string output_path = 2; + */ + public com.google.protobuf.ByteString + getOutputPathBytes() { + java.lang.Object ref = outputPath_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + outputPath_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
+       * 
+ * + * string output_path = 2; + */ + public Builder setOutputPath( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + outputPath_ = value; + onChanged(); + return this; + } + /** + *
+       * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
+       * 
+ * + * string output_path = 2; + */ + public Builder clearOutputPath() { + + outputPath_ = getDefaultInstance().getOutputPath(); + onChanged(); + return this; + } + /** + *
+       * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
+       * 
+ * + * string output_path = 2; + */ + public Builder setOutputPathBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + outputPath_ = value; + onChanged(); + return this; + } + + private int format_ = 0; + /** + *
+       * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
+       * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
+       * 
+ * + * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + */ + public int getFormatValue() { + return format_; + } + /** + *
+       * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
+       * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
+       * 
+ * + * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + */ + public Builder setFormatValue(int value) { + format_ = value; + onChanged(); + return this; + } + /** + *
+       * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
+       * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
+       * 
+ * + * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + */ + public flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat getFormat() { + @SuppressWarnings("deprecation") + flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat result = flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat.valueOf(format_); + return result == null ? flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat.UNRECOGNIZED : result; + } + /** + *
+       * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
+       * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
+       * 
+ * + * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + */ + public Builder setFormat(flyteidl.core.Tasks.DataLoadingConfig.MetadataFormat value) { + if (value == null) { + throw new NullPointerException(); + } + + format_ = value.getNumber(); + onChanged(); + return this; + } + /** + *
+       * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
+       * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
+       * 
+ * + * .flyteidl.core.DataLoadingConfig.MetadataFormat format = 3; + */ + public Builder clearFormat() { + + format_ = 0; + onChanged(); + return this; + } + + private boolean enabled_ ; + /** + *
+       * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
+       * 
+ * + * bool enabled = 4; + */ + public boolean getEnabled() { + return enabled_; + } + /** + *
+       * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
+       * 
+ * + * bool enabled = 4; + */ + public Builder setEnabled(boolean value) { + + enabled_ = value; + onChanged(); + return this; + } + /** + *
+       * Flag enables DataLoading Config. If this is not set, data loading will not be used! 
+       * 
+ * + * bool enabled = 4; + */ + public Builder clearEnabled() { + + enabled_ = false; + 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.DataLoadingConfig) + } + + // @@protoc_insertion_point(class_scope:flyteidl.core.DataLoadingConfig) + private static final flyteidl.core.Tasks.DataLoadingConfig DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new flyteidl.core.Tasks.DataLoadingConfig(); + } + + public static flyteidl.core.Tasks.DataLoadingConfig getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DataLoadingConfig parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new DataLoadingConfig(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.DataLoadingConfig 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_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_DataLoadingConfig_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_DataLoadingConfig_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\036google/protobuf/duratio" + + "n.proto\032\034google/protobuf/struct.proto\"\232\002" + + "\n\tResources\0228\n\010requests\030\001 \003(\0132&.flyteidl" + + ".core.Resources.ResourceEntry\0226\n\006limits\030" + + "\002 \003(\0132&.flyteidl.core.Resources.Resource" + + "Entry\032S\n\rResourceEntry\0223\n\004name\030\001 \001(\0162%.f" + + "lyteidl.core.Resources.ResourceName\022\r\n\005v" + + "alue\030\002 \001(\t\"F\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\"\225\001\n\017RuntimeMetadata\0228\n\004type\030\001 \001(\0162*.f" + + "lyteidl.core.RuntimeMetadata.RuntimeType" + + "\022\017\n\007version\030\002 \001(\t\022\016\n\006flavor\030\003 \001(\t\"\'\n\013Run" + + "timeType\022\t\n\005OTHER\020\000\022\r\n\tFLYTE_SDK\020\001\"\235\002\n\014T" + + "askMetadata\022\024\n\014discoverable\030\001 \001(\010\022/\n\007run" + + "time\030\002 \001(\0132\036.flyteidl.core.RuntimeMetada" + + "ta\022*\n\007timeout\030\004 \001(\0132\031.google.protobuf.Du" + + "ration\022-\n\007retries\030\005 \001(\0132\034.flyteidl.core." + + "RetryStrategy\022\031\n\021discovery_version\030\006 \001(\t" + + "\022 \n\030deprecated_error_message\030\007 \001(\t\022\027\n\rin" + + "terruptible\030\010 \001(\010H\000B\025\n\023interruptible_val" + + "ue\"\206\002\n\014TaskTemplate\022%\n\002id\030\001 \001(\0132\031.flytei" + + "dl.core.Identifier\022\014\n\004type\030\002 \001(\t\022-\n\010meta" + + "data\030\003 \001(\0132\033.flyteidl.core.TaskMetadata\022" + + "0\n\tinterface\030\004 \001(\0132\035.flyteidl.core.Typed" + + "Interface\022\'\n\006custom\030\005 \001(\0132\027.google.proto" + + "buf.Struct\022-\n\tcontainer\030\006 \001(\0132\030.flyteidl" + + ".core.ContainerH\000B\010\n\006target\"\'\n\rContainer" + + "Port\022\026\n\016container_port\030\001 \001(\r\"\241\002\n\tContain" + + "er\022\r\n\005image\030\001 \001(\t\022\017\n\007command\030\002 \003(\t\022\014\n\004ar" + "gs\030\003 \003(\t\022+\n\tresources\030\004 \001(\0132\030.flyteidl.c" + "ore.Resources\022(\n\003env\030\005 \003(\0132\033.flyteidl.co" + "re.KeyValuePair\022+\n\006config\030\006 \003(\0132\033.flytei" + "dl.core.KeyValuePair\022+\n\005ports\030\007 \003(\0132\034.fl" + - "yteidl.core.ContainerPortB2Z0github.com/" + - "lyft/flyteidl/gen/pb-go/flyteidl/coreb\006p" + - "roto3" + "yteidl.core.ContainerPort\0225\n\013data_config" + + "\030\t \001(\0132 .flyteidl.core.DataLoadingConfig" + + "\"\277\001\n\021DataLoadingConfig\022\022\n\ninput_path\030\001 \001" + + "(\t\022\023\n\013output_path\030\002 \001(\t\022?\n\006format\030\003 \001(\0162" + + "/.flyteidl.core.DataLoadingConfig.Metada" + + "taFormat\022\017\n\007enabled\030\004 \001(\010\"/\n\016MetadataFor" + + "mat\022\010\n\004JSON\020\000\022\010\n\004YAML\020\001\022\t\n\005PROTO\020\002B2Z0gi" + + "thub.com/lyft/flyteidl/gen/pb-go/flyteid" + + "l/coreb\006proto3" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { @@ -10517,7 +12076,13 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_core_Container_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_core_Container_descriptor, - new java.lang.String[] { "Image", "Command", "Args", "Resources", "Env", "Config", "Ports", }); + new java.lang.String[] { "Image", "Command", "Args", "Resources", "Env", "Config", "Ports", "DataConfig", }); + internal_static_flyteidl_core_DataLoadingConfig_descriptor = + getDescriptor().getMessageTypes().get(6); + internal_static_flyteidl_core_DataLoadingConfig_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_flyteidl_core_DataLoadingConfig_descriptor, + new java.lang.String[] { "InputPath", "OutputPath", "Format", "Enabled", }); flyteidl.core.IdentifierOuterClass.getDescriptor(); flyteidl.core.Interface.getDescriptor(); flyteidl.core.Literals.getDescriptor(); diff --git a/gen/pb-java/flyteidl/plugins/RawContainer.java b/gen/pb-java/flyteidl/plugins/RawContainer.java deleted file mode 100644 index c8e4a6ee4..000000000 --- a/gen/pb-java/flyteidl/plugins/RawContainer.java +++ /dev/null @@ -1,1157 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: flyteidl/plugins/raw_container.proto - -package flyteidl.plugins; - -public final class RawContainer { - private RawContainer() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistryLite registry) { - } - - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions( - (com.google.protobuf.ExtensionRegistryLite) registry); - } - public interface CoPilotOrBuilder extends - // @@protoc_insertion_point(interface_extends:flyteidl.plugins.CoPilot) - com.google.protobuf.MessageOrBuilder { - - /** - *
-     * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
-     * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
-     * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
-     * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
-     * /var/flyte/inputs/y -> Y is a file in Binary format
-     * /var/flyte/inputs/z/... -> Note Z itself is a directory
-     * More information about the protocol - refer to docs #TODO reference docs here
-     * 
- * - * string input_path = 1; - */ - java.lang.String getInputPath(); - /** - *
-     * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
-     * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
-     * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
-     * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
-     * /var/flyte/inputs/y -> Y is a file in Binary format
-     * /var/flyte/inputs/z/... -> Note Z itself is a directory
-     * More information about the protocol - refer to docs #TODO reference docs here
-     * 
- * - * string input_path = 1; - */ - com.google.protobuf.ByteString - getInputPathBytes(); - - /** - *
-     * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
-     * 
- * - * string output_path = 2; - */ - java.lang.String getOutputPath(); - /** - *
-     * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
-     * 
- * - * string output_path = 2; - */ - com.google.protobuf.ByteString - getOutputPathBytes(); - - /** - *
-     * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
-     * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
-     * 
- * - * .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - */ - int getFormatValue(); - /** - *
-     * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
-     * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
-     * 
- * - * .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - */ - flyteidl.plugins.RawContainer.CoPilot.MetadataFormat getFormat(); - } - /** - *
-   * This configuration allows executing raw containers in Flyte using the Flyte CoPilot system.
-   * Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path
-   * Any outputs generated by the user container - within output_path are automatically uploaded.
-   * We are starting this as a plugin, but after the container within Pod ordering stabilizes, we can move this
-   * into the default task definition.
-   * 
- * - * Protobuf type {@code flyteidl.plugins.CoPilot} - */ - public static final class CoPilot extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:flyteidl.plugins.CoPilot) - CoPilotOrBuilder { - private static final long serialVersionUID = 0L; - // Use CoPilot.newBuilder() to construct. - private CoPilot(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private CoPilot() { - inputPath_ = ""; - outputPath_ = ""; - format_ = 0; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private CoPilot( - 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(); - - inputPath_ = s; - break; - } - case 18: { - java.lang.String s = input.readStringRequireUtf8(); - - outputPath_ = s; - break; - } - case 24: { - int rawValue = input.readEnum(); - - format_ = 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.plugins.RawContainer.internal_static_flyteidl_plugins_CoPilot_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return flyteidl.plugins.RawContainer.internal_static_flyteidl_plugins_CoPilot_fieldAccessorTable - .ensureFieldAccessorsInitialized( - flyteidl.plugins.RawContainer.CoPilot.class, flyteidl.plugins.RawContainer.CoPilot.Builder.class); - } - - /** - *
-     * MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. 
-     * If the user has access to the protocol buffer definitions, it is recommended to use the PROTO format.
-     * JSON and YAML do not need any protobuf definitions to read it
-     * All remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem)
-     * 
- * - * Protobuf enum {@code flyteidl.plugins.CoPilot.MetadataFormat} - */ - public enum MetadataFormat - implements com.google.protobuf.ProtocolMessageEnum { - /** - *
-       * JSON / YAML are serialized represnetation of a map[string]primitive. primitive -> int, string, bool, double/float, bytes
-       * 
- * - * JSON = 0; - */ - JSON(0), - /** - * YAML = 1; - */ - YAML(1), - /** - *
-       * Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core
-       * 
- * - * PROTO = 2; - */ - PROTO(2), - UNRECOGNIZED(-1), - ; - - /** - *
-       * JSON / YAML are serialized represnetation of a map[string]primitive. primitive -> int, string, bool, double/float, bytes
-       * 
- * - * JSON = 0; - */ - public static final int JSON_VALUE = 0; - /** - * YAML = 1; - */ - public static final int YAML_VALUE = 1; - /** - *
-       * Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core
-       * 
- * - * PROTO = 2; - */ - public static final int PROTO_VALUE = 2; - - - 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 MetadataFormat valueOf(int value) { - return forNumber(value); - } - - public static MetadataFormat forNumber(int value) { - switch (value) { - case 0: return JSON; - case 1: return YAML; - case 2: return PROTO; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - MetadataFormat> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public MetadataFormat findValueByNumber(int number) { - return MetadataFormat.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.plugins.RawContainer.CoPilot.getDescriptor().getEnumTypes().get(0); - } - - private static final MetadataFormat[] VALUES = values(); - - public static MetadataFormat 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 MetadataFormat(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:flyteidl.plugins.CoPilot.MetadataFormat) - } - - public static final int INPUT_PATH_FIELD_NUMBER = 1; - private volatile java.lang.Object inputPath_; - /** - *
-     * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
-     * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
-     * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
-     * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
-     * /var/flyte/inputs/y -> Y is a file in Binary format
-     * /var/flyte/inputs/z/... -> Note Z itself is a directory
-     * More information about the protocol - refer to docs #TODO reference docs here
-     * 
- * - * string input_path = 1; - */ - public java.lang.String getInputPath() { - java.lang.Object ref = inputPath_; - 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(); - inputPath_ = s; - return s; - } - } - /** - *
-     * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
-     * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
-     * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
-     * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
-     * /var/flyte/inputs/y -> Y is a file in Binary format
-     * /var/flyte/inputs/z/... -> Note Z itself is a directory
-     * More information about the protocol - refer to docs #TODO reference docs here
-     * 
- * - * string input_path = 1; - */ - public com.google.protobuf.ByteString - getInputPathBytes() { - java.lang.Object ref = inputPath_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - inputPath_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int OUTPUT_PATH_FIELD_NUMBER = 2; - private volatile java.lang.Object outputPath_; - /** - *
-     * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
-     * 
- * - * string output_path = 2; - */ - public java.lang.String getOutputPath() { - java.lang.Object ref = outputPath_; - 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(); - outputPath_ = s; - return s; - } - } - /** - *
-     * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
-     * 
- * - * string output_path = 2; - */ - public com.google.protobuf.ByteString - getOutputPathBytes() { - java.lang.Object ref = outputPath_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - outputPath_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int FORMAT_FIELD_NUMBER = 3; - private int format_; - /** - *
-     * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
-     * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
-     * 
- * - * .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - */ - public int getFormatValue() { - return format_; - } - /** - *
-     * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
-     * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
-     * 
- * - * .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - */ - public flyteidl.plugins.RawContainer.CoPilot.MetadataFormat getFormat() { - @SuppressWarnings("deprecation") - flyteidl.plugins.RawContainer.CoPilot.MetadataFormat result = flyteidl.plugins.RawContainer.CoPilot.MetadataFormat.valueOf(format_); - return result == null ? flyteidl.plugins.RawContainer.CoPilot.MetadataFormat.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 (!getInputPathBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, inputPath_); - } - if (!getOutputPathBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, outputPath_); - } - if (format_ != flyteidl.plugins.RawContainer.CoPilot.MetadataFormat.JSON.getNumber()) { - output.writeEnum(3, format_); - } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!getInputPathBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, inputPath_); - } - if (!getOutputPathBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, outputPath_); - } - if (format_ != flyteidl.plugins.RawContainer.CoPilot.MetadataFormat.JSON.getNumber()) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(3, format_); - } - 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.plugins.RawContainer.CoPilot)) { - return super.equals(obj); - } - flyteidl.plugins.RawContainer.CoPilot other = (flyteidl.plugins.RawContainer.CoPilot) obj; - - if (!getInputPath() - .equals(other.getInputPath())) return false; - if (!getOutputPath() - .equals(other.getOutputPath())) return false; - if (format_ != other.format_) 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) + INPUT_PATH_FIELD_NUMBER; - hash = (53 * hash) + getInputPath().hashCode(); - hash = (37 * hash) + OUTPUT_PATH_FIELD_NUMBER; - hash = (53 * hash) + getOutputPath().hashCode(); - hash = (37 * hash) + FORMAT_FIELD_NUMBER; - hash = (53 * hash) + format_; - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static flyteidl.plugins.RawContainer.CoPilot parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static flyteidl.plugins.RawContainer.CoPilot parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static flyteidl.plugins.RawContainer.CoPilot parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static flyteidl.plugins.RawContainer.CoPilot parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static flyteidl.plugins.RawContainer.CoPilot parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static flyteidl.plugins.RawContainer.CoPilot parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static flyteidl.plugins.RawContainer.CoPilot parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static flyteidl.plugins.RawContainer.CoPilot 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.plugins.RawContainer.CoPilot parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static flyteidl.plugins.RawContainer.CoPilot 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.plugins.RawContainer.CoPilot parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static flyteidl.plugins.RawContainer.CoPilot 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.plugins.RawContainer.CoPilot 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; - } - /** - *
-     * This configuration allows executing raw containers in Flyte using the Flyte CoPilot system.
-     * Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path
-     * Any outputs generated by the user container - within output_path are automatically uploaded.
-     * We are starting this as a plugin, but after the container within Pod ordering stabilizes, we can move this
-     * into the default task definition.
-     * 
- * - * Protobuf type {@code flyteidl.plugins.CoPilot} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:flyteidl.plugins.CoPilot) - flyteidl.plugins.RawContainer.CoPilotOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return flyteidl.plugins.RawContainer.internal_static_flyteidl_plugins_CoPilot_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return flyteidl.plugins.RawContainer.internal_static_flyteidl_plugins_CoPilot_fieldAccessorTable - .ensureFieldAccessorsInitialized( - flyteidl.plugins.RawContainer.CoPilot.class, flyteidl.plugins.RawContainer.CoPilot.Builder.class); - } - - // Construct using flyteidl.plugins.RawContainer.CoPilot.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(); - inputPath_ = ""; - - outputPath_ = ""; - - format_ = 0; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return flyteidl.plugins.RawContainer.internal_static_flyteidl_plugins_CoPilot_descriptor; - } - - @java.lang.Override - public flyteidl.plugins.RawContainer.CoPilot getDefaultInstanceForType() { - return flyteidl.plugins.RawContainer.CoPilot.getDefaultInstance(); - } - - @java.lang.Override - public flyteidl.plugins.RawContainer.CoPilot build() { - flyteidl.plugins.RawContainer.CoPilot result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public flyteidl.plugins.RawContainer.CoPilot buildPartial() { - flyteidl.plugins.RawContainer.CoPilot result = new flyteidl.plugins.RawContainer.CoPilot(this); - result.inputPath_ = inputPath_; - result.outputPath_ = outputPath_; - result.format_ = format_; - 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.plugins.RawContainer.CoPilot) { - return mergeFrom((flyteidl.plugins.RawContainer.CoPilot)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(flyteidl.plugins.RawContainer.CoPilot other) { - if (other == flyteidl.plugins.RawContainer.CoPilot.getDefaultInstance()) return this; - if (!other.getInputPath().isEmpty()) { - inputPath_ = other.inputPath_; - onChanged(); - } - if (!other.getOutputPath().isEmpty()) { - outputPath_ = other.outputPath_; - onChanged(); - } - if (other.format_ != 0) { - setFormatValue(other.getFormatValue()); - } - 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.plugins.RawContainer.CoPilot parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (flyteidl.plugins.RawContainer.CoPilot) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private java.lang.Object inputPath_ = ""; - /** - *
-       * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
-       * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
-       * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
-       * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
-       * /var/flyte/inputs/y -> Y is a file in Binary format
-       * /var/flyte/inputs/z/... -> Note Z itself is a directory
-       * More information about the protocol - refer to docs #TODO reference docs here
-       * 
- * - * string input_path = 1; - */ - public java.lang.String getInputPath() { - java.lang.Object ref = inputPath_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - inputPath_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - *
-       * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
-       * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
-       * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
-       * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
-       * /var/flyte/inputs/y -> Y is a file in Binary format
-       * /var/flyte/inputs/z/... -> Note Z itself is a directory
-       * More information about the protocol - refer to docs #TODO reference docs here
-       * 
- * - * string input_path = 1; - */ - public com.google.protobuf.ByteString - getInputPathBytes() { - java.lang.Object ref = inputPath_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - inputPath_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - *
-       * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
-       * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
-       * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
-       * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
-       * /var/flyte/inputs/y -> Y is a file in Binary format
-       * /var/flyte/inputs/z/... -> Note Z itself is a directory
-       * More information about the protocol - refer to docs #TODO reference docs here
-       * 
- * - * string input_path = 1; - */ - public Builder setInputPath( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - inputPath_ = value; - onChanged(); - return this; - } - /** - *
-       * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
-       * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
-       * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
-       * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
-       * /var/flyte/inputs/y -> Y is a file in Binary format
-       * /var/flyte/inputs/z/... -> Note Z itself is a directory
-       * More information about the protocol - refer to docs #TODO reference docs here
-       * 
- * - * string input_path = 1; - */ - public Builder clearInputPath() { - - inputPath_ = getDefaultInstance().getInputPath(); - onChanged(); - return this; - } - /** - *
-       * File system path (start at root). This folder will contain all the inputs exploded to a separate file. 
-       * Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like
-       * /var/flyte/inputs/inputs.<metadata format dependent -> .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations 
-       * /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format
-       * /var/flyte/inputs/y -> Y is a file in Binary format
-       * /var/flyte/inputs/z/... -> Note Z itself is a directory
-       * More information about the protocol - refer to docs #TODO reference docs here
-       * 
- * - * string input_path = 1; - */ - public Builder setInputPathBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - inputPath_ = value; - onChanged(); - return this; - } - - private java.lang.Object outputPath_ = ""; - /** - *
-       * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
-       * 
- * - * string output_path = 2; - */ - public java.lang.String getOutputPath() { - java.lang.Object ref = outputPath_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - outputPath_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - *
-       * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
-       * 
- * - * string output_path = 2; - */ - public com.google.protobuf.ByteString - getOutputPathBytes() { - java.lang.Object ref = outputPath_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - outputPath_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - *
-       * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
-       * 
- * - * string output_path = 2; - */ - public Builder setOutputPath( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - outputPath_ = value; - onChanged(); - return this; - } - /** - *
-       * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
-       * 
- * - * string output_path = 2; - */ - public Builder clearOutputPath() { - - outputPath_ = getDefaultInstance().getOutputPath(); - onChanged(); - return this; - } - /** - *
-       * File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file
-       * 
- * - * string output_path = 2; - */ - public Builder setOutputPathBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - outputPath_ = value; - onChanged(); - return this; - } - - private int format_ = 0; - /** - *
-       * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
-       * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
-       * 
- * - * .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - */ - public int getFormatValue() { - return format_; - } - /** - *
-       * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
-       * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
-       * 
- * - * .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - */ - public Builder setFormatValue(int value) { - format_ = value; - onChanged(); - return this; - } - /** - *
-       * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
-       * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
-       * 
- * - * .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - */ - public flyteidl.plugins.RawContainer.CoPilot.MetadataFormat getFormat() { - @SuppressWarnings("deprecation") - flyteidl.plugins.RawContainer.CoPilot.MetadataFormat result = flyteidl.plugins.RawContainer.CoPilot.MetadataFormat.valueOf(format_); - return result == null ? flyteidl.plugins.RawContainer.CoPilot.MetadataFormat.UNRECOGNIZED : result; - } - /** - *
-       * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
-       * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
-       * 
- * - * .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - */ - public Builder setFormat(flyteidl.plugins.RawContainer.CoPilot.MetadataFormat value) { - if (value == null) { - throw new NullPointerException(); - } - - format_ = value.getNumber(); - onChanged(); - return this; - } - /** - *
-       * In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values.
-       * This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding
-       * 
- * - * .flyteidl.plugins.CoPilot.MetadataFormat format = 3; - */ - public Builder clearFormat() { - - format_ = 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.plugins.CoPilot) - } - - // @@protoc_insertion_point(class_scope:flyteidl.plugins.CoPilot) - private static final flyteidl.plugins.RawContainer.CoPilot DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new flyteidl.plugins.RawContainer.CoPilot(); - } - - public static flyteidl.plugins.RawContainer.CoPilot getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public CoPilot parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new CoPilot(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.plugins.RawContainer.CoPilot getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_flyteidl_plugins_CoPilot_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_flyteidl_plugins_CoPilot_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$flyteidl/plugins/raw_container.proto\022\020" + - "flyteidl.plugins\"\235\001\n\007CoPilot\022\022\n\ninput_pa" + - "th\030\001 \001(\t\022\023\n\013output_path\030\002 \001(\t\0228\n\006format\030" + - "\003 \001(\0162(.flyteidl.plugins.CoPilot.Metadat" + - "aFormat\"/\n\016MetadataFormat\022\010\n\004JSON\020\000\022\010\n\004Y" + - "AML\020\001\022\t\n\005PROTO\020\002B5Z3github.com/lyft/flyt" + - "eidl/gen/pb-go/flyteidl/pluginsb\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[] { - }, assigner); - internal_static_flyteidl_plugins_CoPilot_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_flyteidl_plugins_CoPilot_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_flyteidl_plugins_CoPilot_descriptor, - new java.lang.String[] { "InputPath", "OutputPath", "Format", }); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/gen/pb-js/flyteidl.d.ts b/gen/pb-js/flyteidl.d.ts index 797c146b5..ee17aa196 100644 --- a/gen/pb-js/flyteidl.d.ts +++ b/gen/pb-js/flyteidl.d.ts @@ -3664,6 +3664,9 @@ export namespace flyteidl { /** Container ports */ ports?: (flyteidl.core.IContainerPort[]|null); + + /** Container dataConfig */ + dataConfig?: (flyteidl.core.IDataLoadingConfig|null); } /** Represents a Container. */ @@ -3696,6 +3699,9 @@ export namespace flyteidl { /** Container ports. */ public ports: flyteidl.core.IContainerPort[]; + /** Container dataConfig. */ + public dataConfig?: (flyteidl.core.IDataLoadingConfig|null); + /** * Creates a new Container instance using the specified properties. * @param [properties] Properties to set @@ -3729,6 +3735,86 @@ export namespace flyteidl { public static verify(message: { [k: string]: any }): (string|null); } + /** Properties of a DataLoadingConfig. */ + interface IDataLoadingConfig { + + /** DataLoadingConfig inputPath */ + inputPath?: (string|null); + + /** DataLoadingConfig outputPath */ + outputPath?: (string|null); + + /** DataLoadingConfig format */ + format?: (flyteidl.core.DataLoadingConfig.MetadataFormat|null); + + /** DataLoadingConfig enabled */ + enabled?: (boolean|null); + } + + /** Represents a DataLoadingConfig. */ + class DataLoadingConfig implements IDataLoadingConfig { + + /** + * Constructs a new DataLoadingConfig. + * @param [properties] Properties to set + */ + constructor(properties?: flyteidl.core.IDataLoadingConfig); + + /** DataLoadingConfig inputPath. */ + public inputPath: string; + + /** DataLoadingConfig outputPath. */ + public outputPath: string; + + /** DataLoadingConfig format. */ + public format: flyteidl.core.DataLoadingConfig.MetadataFormat; + + /** DataLoadingConfig enabled. */ + public enabled: boolean; + + /** + * Creates a new DataLoadingConfig instance using the specified properties. + * @param [properties] Properties to set + * @returns DataLoadingConfig instance + */ + public static create(properties?: flyteidl.core.IDataLoadingConfig): flyteidl.core.DataLoadingConfig; + + /** + * Encodes the specified DataLoadingConfig message. Does not implicitly {@link flyteidl.core.DataLoadingConfig.verify|verify} messages. + * @param message DataLoadingConfig message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: flyteidl.core.IDataLoadingConfig, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a DataLoadingConfig message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns DataLoadingConfig + * @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.DataLoadingConfig; + + /** + * Verifies a DataLoadingConfig 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 DataLoadingConfig { + + /** MetadataFormat enum. */ + enum MetadataFormat { + JSON = 0, + YAML = 1, + PROTO = 2 + } + } + /** Properties of a DynamicJobSpec. */ interface IDynamicJobSpec { diff --git a/gen/pb-js/flyteidl.js b/gen/pb-js/flyteidl.js index c11e24ed8..bbdf6e813 100644 --- a/gen/pb-js/flyteidl.js +++ b/gen/pb-js/flyteidl.js @@ -8810,6 +8810,7 @@ export const flyteidl = $root.flyteidl = (() => { * @property {Array.|null} [env] Container env * @property {Array.|null} [config] Container config * @property {Array.|null} [ports] Container ports + * @property {flyteidl.core.IDataLoadingConfig|null} [dataConfig] Container dataConfig */ /** @@ -8888,6 +8889,14 @@ export const flyteidl = $root.flyteidl = (() => { */ Container.prototype.ports = $util.emptyArray; + /** + * Container dataConfig. + * @member {flyteidl.core.IDataLoadingConfig|null|undefined} dataConfig + * @memberof flyteidl.core.Container + * @instance + */ + Container.prototype.dataConfig = null; + /** * Creates a new Container instance using the specified properties. * @function create @@ -8931,6 +8940,8 @@ export const flyteidl = $root.flyteidl = (() => { if (message.ports != null && message.ports.length) for (let i = 0; i < message.ports.length; ++i) $root.flyteidl.core.ContainerPort.encode(message.ports[i], writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim(); + if (message.dataConfig != null && message.hasOwnProperty("dataConfig")) + $root.flyteidl.core.DataLoadingConfig.encode(message.dataConfig, writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim(); return writer; }; @@ -8983,6 +8994,9 @@ export const flyteidl = $root.flyteidl = (() => { message.ports = []; message.ports.push($root.flyteidl.core.ContainerPort.decode(reader, reader.uint32())); break; + case 9: + message.dataConfig = $root.flyteidl.core.DataLoadingConfig.decode(reader, reader.uint32()); + break; default: reader.skipType(tag & 7); break; @@ -9051,12 +9065,200 @@ export const flyteidl = $root.flyteidl = (() => { return "ports." + error; } } + if (message.dataConfig != null && message.hasOwnProperty("dataConfig")) { + let error = $root.flyteidl.core.DataLoadingConfig.verify(message.dataConfig); + if (error) + return "dataConfig." + error; + } return null; }; return Container; })(); + core.DataLoadingConfig = (function() { + + /** + * Properties of a DataLoadingConfig. + * @memberof flyteidl.core + * @interface IDataLoadingConfig + * @property {string|null} [inputPath] DataLoadingConfig inputPath + * @property {string|null} [outputPath] DataLoadingConfig outputPath + * @property {flyteidl.core.DataLoadingConfig.MetadataFormat|null} [format] DataLoadingConfig format + * @property {boolean|null} [enabled] DataLoadingConfig enabled + */ + + /** + * Constructs a new DataLoadingConfig. + * @memberof flyteidl.core + * @classdesc Represents a DataLoadingConfig. + * @implements IDataLoadingConfig + * @constructor + * @param {flyteidl.core.IDataLoadingConfig=} [properties] Properties to set + */ + function DataLoadingConfig(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]]; + } + + /** + * DataLoadingConfig inputPath. + * @member {string} inputPath + * @memberof flyteidl.core.DataLoadingConfig + * @instance + */ + DataLoadingConfig.prototype.inputPath = ""; + + /** + * DataLoadingConfig outputPath. + * @member {string} outputPath + * @memberof flyteidl.core.DataLoadingConfig + * @instance + */ + DataLoadingConfig.prototype.outputPath = ""; + + /** + * DataLoadingConfig format. + * @member {flyteidl.core.DataLoadingConfig.MetadataFormat} format + * @memberof flyteidl.core.DataLoadingConfig + * @instance + */ + DataLoadingConfig.prototype.format = 0; + + /** + * DataLoadingConfig enabled. + * @member {boolean} enabled + * @memberof flyteidl.core.DataLoadingConfig + * @instance + */ + DataLoadingConfig.prototype.enabled = false; + + /** + * Creates a new DataLoadingConfig instance using the specified properties. + * @function create + * @memberof flyteidl.core.DataLoadingConfig + * @static + * @param {flyteidl.core.IDataLoadingConfig=} [properties] Properties to set + * @returns {flyteidl.core.DataLoadingConfig} DataLoadingConfig instance + */ + DataLoadingConfig.create = function create(properties) { + return new DataLoadingConfig(properties); + }; + + /** + * Encodes the specified DataLoadingConfig message. Does not implicitly {@link flyteidl.core.DataLoadingConfig.verify|verify} messages. + * @function encode + * @memberof flyteidl.core.DataLoadingConfig + * @static + * @param {flyteidl.core.IDataLoadingConfig} message DataLoadingConfig message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + DataLoadingConfig.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.inputPath != null && message.hasOwnProperty("inputPath")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.inputPath); + if (message.outputPath != null && message.hasOwnProperty("outputPath")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.outputPath); + if (message.format != null && message.hasOwnProperty("format")) + writer.uint32(/* id 3, wireType 0 =*/24).int32(message.format); + if (message.enabled != null && message.hasOwnProperty("enabled")) + writer.uint32(/* id 4, wireType 0 =*/32).bool(message.enabled); + return writer; + }; + + /** + * Decodes a DataLoadingConfig message from the specified reader or buffer. + * @function decode + * @memberof flyteidl.core.DataLoadingConfig + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {flyteidl.core.DataLoadingConfig} DataLoadingConfig + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + DataLoadingConfig.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.DataLoadingConfig(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.inputPath = reader.string(); + break; + case 2: + message.outputPath = reader.string(); + break; + case 3: + message.format = reader.int32(); + break; + case 4: + message.enabled = reader.bool(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Verifies a DataLoadingConfig message. + * @function verify + * @memberof flyteidl.core.DataLoadingConfig + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + DataLoadingConfig.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.inputPath != null && message.hasOwnProperty("inputPath")) + if (!$util.isString(message.inputPath)) + return "inputPath: string expected"; + if (message.outputPath != null && message.hasOwnProperty("outputPath")) + if (!$util.isString(message.outputPath)) + return "outputPath: string expected"; + if (message.format != null && message.hasOwnProperty("format")) + switch (message.format) { + default: + return "format: enum value expected"; + case 0: + case 1: + case 2: + break; + } + if (message.enabled != null && message.hasOwnProperty("enabled")) + if (typeof message.enabled !== "boolean") + return "enabled: boolean expected"; + return null; + }; + + /** + * MetadataFormat enum. + * @name flyteidl.core.DataLoadingConfig.MetadataFormat + * @enum {string} + * @property {number} JSON=0 JSON value + * @property {number} YAML=1 YAML value + * @property {number} PROTO=2 PROTO value + */ + DataLoadingConfig.MetadataFormat = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "JSON"] = 0; + values[valuesById[1] = "YAML"] = 1; + values[valuesById[2] = "PROTO"] = 2; + return values; + })(); + + return DataLoadingConfig; + })(); + core.DynamicJobSpec = (function() { /** diff --git a/gen/pb-protodoc/flyteidl/core/tasks.proto.rst b/gen/pb-protodoc/flyteidl/core/tasks.proto.rst index c7f025943..851453256 100644 --- a/gen/pb-protodoc/flyteidl/core/tasks.proto.rst +++ b/gen/pb-protodoc/flyteidl/core/tasks.proto.rst @@ -334,7 +334,8 @@ flyteidl.core.Container "resources": "{...}", "env": [], "config": [], - "ports": [] + "ports": [], + "data_config": "{...}" } .. _api_field_flyteidl.core.Container.image: @@ -381,6 +382,101 @@ config ports (:ref:`flyteidl.core.ContainerPort `) Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but not supported on AWS Batch) + Only K8s +.. _api_field_flyteidl.core.Container.data_config: +data_config + (:ref:`flyteidl.core.DataLoadingConfig `) BETA: Optional configuration for DataLoading. If not specified, then default values are used. + This makes it possible to to run a completely portable container, that uses inputs and outputs + only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment. + If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories + are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation + to understand the default paths. + Only K8s + + + + +.. _api_msg_flyteidl.core.DataLoadingConfig: + +flyteidl.core.DataLoadingConfig +------------------------------- + +`[flyteidl.core.DataLoadingConfig proto] `_ + +This configuration allows executing raw containers in Flyte using the Flyte CoPilot system. +Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path +Any outputs generated by the user container - within output_path are automatically uploaded. + +.. code-block:: json + + { + "input_path": "...", + "output_path": "...", + "format": "...", + "enabled": "..." + } + +.. _api_field_flyteidl.core.DataLoadingConfig.input_path: + +input_path + (`string `_) File system path (start at root). This folder will contain all the inputs exploded to a separate file. + Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like + /var/flyte/inputs/inputs. .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations + /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format + /var/flyte/inputs/y -> Y is a file in Binary format + /var/flyte/inputs/z/... -> Note Z itself is a directory + More information about the protocol - refer to docs #TODO reference docs here + + +.. _api_field_flyteidl.core.DataLoadingConfig.output_path: + +output_path + (`string `_) File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file + + +.. _api_field_flyteidl.core.DataLoadingConfig.format: + +format + (:ref:`flyteidl.core.DataLoadingConfig.MetadataFormat `) In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values. + This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding + + +.. _api_field_flyteidl.core.DataLoadingConfig.enabled: + +enabled + (`bool `_) Flag enables DataLoading Config. If this is not set, data loading will not be used! + + + +.. _api_enum_flyteidl.core.DataLoadingConfig.MetadataFormat: + +Enum flyteidl.core.DataLoadingConfig.MetadataFormat +--------------------------------------------------- + +`[flyteidl.core.DataLoadingConfig.MetadataFormat proto] `_ + +MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. +If the user has access to the protocol buffer definitions, it is recommended to use the PROTO format. +JSON and YAML do not need any protobuf definitions to read it +All remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem) + +.. _api_enum_value_flyteidl.core.DataLoadingConfig.MetadataFormat.JSON: + +JSON + *(DEFAULT)* ⁣JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html + + +.. _api_enum_value_flyteidl.core.DataLoadingConfig.MetadataFormat.YAML: + +YAML + ⁣ + +.. _api_enum_value_flyteidl.core.DataLoadingConfig.MetadataFormat.PROTO: + +PROTO + ⁣Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core + + diff --git a/gen/pb-protodoc/flyteidl/plugins/index.rst b/gen/pb-protodoc/flyteidl/plugins/index.rst index 359f3123f..c2943c6d2 100644 --- a/gen/pb-protodoc/flyteidl/plugins/index.rst +++ b/gen/pb-protodoc/flyteidl/plugins/index.rst @@ -13,7 +13,6 @@ Plugins available in the Flyte system. array_job.proto presto.proto qubole.proto - raw_container.proto sidecar.proto spark.proto waitable.proto diff --git a/gen/pb-protodoc/flyteidl/plugins/raw_container.proto.rst b/gen/pb-protodoc/flyteidl/plugins/raw_container.proto.rst deleted file mode 100644 index a5702c11b..000000000 --- a/gen/pb-protodoc/flyteidl/plugins/raw_container.proto.rst +++ /dev/null @@ -1,81 +0,0 @@ -.. _api_file_flyteidl/plugins/raw_container.proto: - -raw_container.proto -==================================== - -.. _api_msg_flyteidl.plugins.CoPilot: - -flyteidl.plugins.CoPilot ------------------------- - -`[flyteidl.plugins.CoPilot proto] `_ - -This configuration allows executing raw containers in Flyte using the Flyte CoPilot system. -Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path -Any outputs generated by the user container - within output_path are automatically uploaded. -We are starting this as a plugin, but after the container within Pod ordering stabilizes, we can move this -into the default task definition. - -.. code-block:: json - - { - "input_path": "...", - "output_path": "...", - "format": "..." - } - -.. _api_field_flyteidl.plugins.CoPilot.input_path: - -input_path - (`string `_) File system path (start at root). This folder will contain all the inputs exploded to a separate file. - Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like - /var/flyte/inputs/inputs. .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations - /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format - /var/flyte/inputs/y -> Y is a file in Binary format - /var/flyte/inputs/z/... -> Note Z itself is a directory - More information about the protocol - refer to docs #TODO reference docs here - - -.. _api_field_flyteidl.plugins.CoPilot.output_path: - -output_path - (`string `_) File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file - - -.. _api_field_flyteidl.plugins.CoPilot.format: - -format - (:ref:`flyteidl.plugins.CoPilot.MetadataFormat `) In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values. - This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding - - - -.. _api_enum_flyteidl.plugins.CoPilot.MetadataFormat: - -Enum flyteidl.plugins.CoPilot.MetadataFormat --------------------------------------------- - -`[flyteidl.plugins.CoPilot.MetadataFormat proto] `_ - -MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. -If the user has access to the protocol buffer definitions, it is recommended to use the PROTO format. -JSON and YAML do not need any protobuf definitions to read it -All remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem) - -.. _api_enum_value_flyteidl.plugins.CoPilot.MetadataFormat.JSON: - -JSON - *(DEFAULT)* ⁣JSON / YAML are serialized represnetation of a map[string]primitive. primitive -> int, string, bool, double/float, bytes - - -.. _api_enum_value_flyteidl.plugins.CoPilot.MetadataFormat.YAML: - -YAML - ⁣ - -.. _api_enum_value_flyteidl.plugins.CoPilot.MetadataFormat.PROTO: - -PROTO - ⁣Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core - - diff --git a/gen/pb_python/flyteidl/core/tasks_pb2.py b/gen/pb_python/flyteidl/core/tasks_pb2.py index 8a6e0d4ca..b0b33f5b6 100644 --- a/gen/pb_python/flyteidl/core/tasks_pb2.py +++ b/gen/pb_python/flyteidl/core/tasks_pb2.py @@ -25,7 +25,7 @@ package='flyteidl.core', syntax='proto3', serialized_options=_b('Z0github.com/lyft/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\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x9a\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\"F\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\"\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\"\x86\x02\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\x42\x08\n\x06target\"\'\n\rContainerPort\x12\x16\n\x0e\x63ontainer_port\x18\x01 \x01(\r\"\xea\x01\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.KeyValuePair\x12+\n\x05ports\x18\x07 \x03(\x0b\x32\x1c.flyteidl.core.ContainerPortB2Z0github.com/lyft/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\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x9a\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\"F\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\"\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\"\x86\x02\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\x42\x08\n\x06target\"\'\n\rContainerPort\x12\x16\n\x0e\x63ontainer_port\x18\x01 \x01(\r\"\xa1\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.KeyValuePair\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\"\xbf\x01\n\x11\x44\x61taLoadingConfig\x12\x12\n\ninput_path\x18\x01 \x01(\t\x12\x13\n\x0boutput_path\x18\x02 \x01(\t\x12?\n\x06\x66ormat\x18\x03 \x01(\x0e\x32/.flyteidl.core.DataLoadingConfig.MetadataFormat\x12\x0f\n\x07\x65nabled\x18\x04 \x01(\x08\"/\n\x0eMetadataFormat\x12\x08\n\x04JSON\x10\x00\x12\x08\n\x04YAML\x10\x01\x12\t\n\x05PROTO\x10\x02\x42\x32Z0github.com/lyft/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,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,google_dot_protobuf_dot_struct__pb2.DESCRIPTOR,]) @@ -87,6 +87,32 @@ ) _sym_db.RegisterEnumDescriptor(_RUNTIMEMETADATA_RUNTIMETYPE) +_DATALOADINGCONFIG_METADATAFORMAT = _descriptor.EnumDescriptor( + name='MetadataFormat', + full_name='flyteidl.core.DataLoadingConfig.MetadataFormat', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='JSON', index=0, number=0, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='YAML', index=1, number=1, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='PROTO', index=2, number=2, + serialized_options=None, + type=None), + ], + containing_type=None, + serialized_options=None, + serialized_start=1667, + serialized_end=1714, +) +_sym_db.RegisterEnumDescriptor(_DATALOADINGCONFIG_METADATAFORMAT) + _RESOURCES_RESOURCEENTRY = _descriptor.Descriptor( name='ResourceEntry', @@ -442,6 +468,13 @@ message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='data_config', full_name='flyteidl.core.Container.data_config', index=7, + number=9, 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), ], extensions=[ ], @@ -455,7 +488,60 @@ oneofs=[ ], serialized_start=1231, - serialized_end=1465, + serialized_end=1520, +) + + +_DATALOADINGCONFIG = _descriptor.Descriptor( + name='DataLoadingConfig', + full_name='flyteidl.core.DataLoadingConfig', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='input_path', full_name='flyteidl.core.DataLoadingConfig.input_path', 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='output_path', full_name='flyteidl.core.DataLoadingConfig.output_path', index=1, + number=2, 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='format', full_name='flyteidl.core.DataLoadingConfig.format', index=2, + number=3, 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), + _descriptor.FieldDescriptor( + name='enabled', full_name='flyteidl.core.DataLoadingConfig.enabled', index=3, + number=4, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + 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=[ + _DATALOADINGCONFIG_METADATAFORMAT, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1523, + serialized_end=1714, ) _RESOURCES_RESOURCEENTRY.fields_by_name['name'].enum_type = _RESOURCES_RESOURCENAME @@ -483,12 +569,16 @@ _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 _CONTAINER.fields_by_name['ports'].message_type = _CONTAINERPORT +_CONTAINER.fields_by_name['data_config'].message_type = _DATALOADINGCONFIG +_DATALOADINGCONFIG.fields_by_name['format'].enum_type = _DATALOADINGCONFIG_METADATAFORMAT +_DATALOADINGCONFIG_METADATAFORMAT.containing_type = _DATALOADINGCONFIG DESCRIPTOR.message_types_by_name['Resources'] = _RESOURCES DESCRIPTOR.message_types_by_name['RuntimeMetadata'] = _RUNTIMEMETADATA DESCRIPTOR.message_types_by_name['TaskMetadata'] = _TASKMETADATA DESCRIPTOR.message_types_by_name['TaskTemplate'] = _TASKTEMPLATE DESCRIPTOR.message_types_by_name['ContainerPort'] = _CONTAINERPORT DESCRIPTOR.message_types_by_name['Container'] = _CONTAINER +DESCRIPTOR.message_types_by_name['DataLoadingConfig'] = _DATALOADINGCONFIG _sym_db.RegisterFileDescriptor(DESCRIPTOR) Resources = _reflection.GeneratedProtocolMessageType('Resources', (_message.Message,), dict( @@ -541,6 +631,13 @@ )) _sym_db.RegisterMessage(Container) +DataLoadingConfig = _reflection.GeneratedProtocolMessageType('DataLoadingConfig', (_message.Message,), dict( + DESCRIPTOR = _DATALOADINGCONFIG, + __module__ = 'flyteidl.core.tasks_pb2' + # @@protoc_insertion_point(class_scope:flyteidl.core.DataLoadingConfig) + )) +_sym_db.RegisterMessage(DataLoadingConfig) + DESCRIPTOR._options = None # @@protoc_insertion_point(module_scope) diff --git a/gen/pb_python/flyteidl/plugins/raw_container_pb2.py b/gen/pb_python/flyteidl/plugins/raw_container_pb2.py deleted file mode 100644 index 2aa8cb949..000000000 --- a/gen/pb_python/flyteidl/plugins/raw_container_pb2.py +++ /dev/null @@ -1,114 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: flyteidl/plugins/raw_container.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='flyteidl/plugins/raw_container.proto', - package='flyteidl.plugins', - syntax='proto3', - serialized_options=_b('Z3github.com/lyft/flyteidl/gen/pb-go/flyteidl/plugins'), - serialized_pb=_b('\n$flyteidl/plugins/raw_container.proto\x12\x10\x66lyteidl.plugins\"\x9d\x01\n\x07\x43oPilot\x12\x12\n\ninput_path\x18\x01 \x01(\t\x12\x13\n\x0boutput_path\x18\x02 \x01(\t\x12\x38\n\x06\x66ormat\x18\x03 \x01(\x0e\x32(.flyteidl.plugins.CoPilot.MetadataFormat\"/\n\x0eMetadataFormat\x12\x08\n\x04JSON\x10\x00\x12\x08\n\x04YAML\x10\x01\x12\t\n\x05PROTO\x10\x02\x42\x35Z3github.com/lyft/flyteidl/gen/pb-go/flyteidl/pluginsb\x06proto3') -) - - - -_COPILOT_METADATAFORMAT = _descriptor.EnumDescriptor( - name='MetadataFormat', - full_name='flyteidl.plugins.CoPilot.MetadataFormat', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='JSON', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='YAML', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='PROTO', index=2, number=2, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=169, - serialized_end=216, -) -_sym_db.RegisterEnumDescriptor(_COPILOT_METADATAFORMAT) - - -_COPILOT = _descriptor.Descriptor( - name='CoPilot', - full_name='flyteidl.plugins.CoPilot', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='input_path', full_name='flyteidl.plugins.CoPilot.input_path', 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='output_path', full_name='flyteidl.plugins.CoPilot.output_path', index=1, - number=2, 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='format', full_name='flyteidl.plugins.CoPilot.format', index=2, - number=3, 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=[ - _COPILOT_METADATAFORMAT, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=59, - serialized_end=216, -) - -_COPILOT.fields_by_name['format'].enum_type = _COPILOT_METADATAFORMAT -_COPILOT_METADATAFORMAT.containing_type = _COPILOT -DESCRIPTOR.message_types_by_name['CoPilot'] = _COPILOT -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -CoPilot = _reflection.GeneratedProtocolMessageType('CoPilot', (_message.Message,), dict( - DESCRIPTOR = _COPILOT, - __module__ = 'flyteidl.plugins.raw_container_pb2' - # @@protoc_insertion_point(class_scope:flyteidl.plugins.CoPilot) - )) -_sym_db.RegisterMessage(CoPilot) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/gen/pb_python/flyteidl/plugins/raw_container_pb2_grpc.py b/gen/pb_python/flyteidl/plugins/raw_container_pb2_grpc.py deleted file mode 100644 index a89435267..000000000 --- a/gen/pb_python/flyteidl/plugins/raw_container_pb2_grpc.py +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - diff --git a/gen/pb_python/flyteidl/service/flyteadmin/README.md b/gen/pb_python/flyteidl/service/flyteadmin/README.md index d9771eef4..1feaeabae 100644 --- a/gen/pb_python/flyteidl/service/flyteadmin/README.md +++ b/gen/pb_python/flyteidl/service/flyteadmin/README.md @@ -239,6 +239,7 @@ Class | Method | HTTP request | Description - [CoreConnectionSet](docs/CoreConnectionSet.md) - [CoreContainer](docs/CoreContainer.md) - [CoreContainerPort](docs/CoreContainerPort.md) + - [CoreDataLoadingConfig](docs/CoreDataLoadingConfig.md) - [CoreError](docs/CoreError.md) - [CoreExecutionError](docs/CoreExecutionError.md) - [CoreIdentifier](docs/CoreIdentifier.md) @@ -281,6 +282,7 @@ Class | Method | HTTP request | Description - [CoreWorkflowMetadataDefaults](docs/CoreWorkflowMetadataDefaults.md) - [CoreWorkflowNode](docs/CoreWorkflowNode.md) - [CoreWorkflowTemplate](docs/CoreWorkflowTemplate.md) + - [DataLoadingConfigMetadataFormat](docs/DataLoadingConfigMetadataFormat.md) - [EventNodeExecutionEvent](docs/EventNodeExecutionEvent.md) - [EventParentTaskExecutionMetadata](docs/EventParentTaskExecutionMetadata.md) - [EventTaskExecutionEvent](docs/EventTaskExecutionEvent.md) diff --git a/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py b/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py index 33b76b8d8..fb4446bb2 100644 --- a/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py +++ b/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py @@ -142,6 +142,7 @@ from flyteadmin.models.core_connection_set import CoreConnectionSet from flyteadmin.models.core_container import CoreContainer from flyteadmin.models.core_container_port import CoreContainerPort +from flyteadmin.models.core_data_loading_config import CoreDataLoadingConfig from flyteadmin.models.core_error import CoreError from flyteadmin.models.core_execution_error import CoreExecutionError from flyteadmin.models.core_identifier import CoreIdentifier @@ -184,6 +185,7 @@ from flyteadmin.models.core_workflow_metadata_defaults import CoreWorkflowMetadataDefaults from flyteadmin.models.core_workflow_node import CoreWorkflowNode from flyteadmin.models.core_workflow_template import CoreWorkflowTemplate +from flyteadmin.models.data_loading_config_metadata_format import DataLoadingConfigMetadataFormat from flyteadmin.models.event_node_execution_event import EventNodeExecutionEvent from flyteadmin.models.event_parent_task_execution_metadata import EventParentTaskExecutionMetadata from flyteadmin.models.event_task_execution_event import EventTaskExecutionEvent diff --git a/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py b/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py index aaf87967b..8d110e355 100644 --- a/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py +++ b/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py @@ -135,6 +135,7 @@ from flyteadmin.models.core_connection_set import CoreConnectionSet from flyteadmin.models.core_container import CoreContainer from flyteadmin.models.core_container_port import CoreContainerPort +from flyteadmin.models.core_data_loading_config import CoreDataLoadingConfig from flyteadmin.models.core_error import CoreError from flyteadmin.models.core_execution_error import CoreExecutionError from flyteadmin.models.core_identifier import CoreIdentifier @@ -177,6 +178,7 @@ from flyteadmin.models.core_workflow_metadata_defaults import CoreWorkflowMetadataDefaults from flyteadmin.models.core_workflow_node import CoreWorkflowNode from flyteadmin.models.core_workflow_template import CoreWorkflowTemplate +from flyteadmin.models.data_loading_config_metadata_format import DataLoadingConfigMetadataFormat from flyteadmin.models.event_node_execution_event import EventNodeExecutionEvent from flyteadmin.models.event_parent_task_execution_metadata import EventParentTaskExecutionMetadata from flyteadmin.models.event_task_execution_event import EventTaskExecutionEvent diff --git a/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_container.py b/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_container.py index 089f8204a..327e8bf53 100644 --- a/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_container.py +++ b/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_container.py @@ -17,6 +17,7 @@ import six from flyteadmin.models.core_container_port import CoreContainerPort # noqa: F401,E501 +from flyteadmin.models.core_data_loading_config import CoreDataLoadingConfig # noqa: F401,E501 from flyteadmin.models.core_key_value_pair import CoreKeyValuePair # noqa: F401,E501 from flyteadmin.models.core_resources import CoreResources # noqa: F401,E501 @@ -41,7 +42,8 @@ class CoreContainer(object): 'resources': 'CoreResources', 'env': 'list[CoreKeyValuePair]', 'config': 'list[CoreKeyValuePair]', - 'ports': 'list[CoreContainerPort]' + 'ports': 'list[CoreContainerPort]', + 'data_config': 'CoreDataLoadingConfig' } attribute_map = { @@ -51,10 +53,11 @@ class CoreContainer(object): 'resources': 'resources', 'env': 'env', 'config': 'config', - 'ports': 'ports' + 'ports': 'ports', + 'data_config': 'data_config' } - def __init__(self, image=None, command=None, args=None, resources=None, env=None, config=None, ports=None): # noqa: E501 + def __init__(self, image=None, command=None, args=None, resources=None, env=None, config=None, ports=None, data_config=None): # noqa: E501 """CoreContainer - a model defined in Swagger""" # noqa: E501 self._image = None @@ -64,6 +67,7 @@ def __init__(self, image=None, command=None, args=None, resources=None, env=None self._env = None self._config = None self._ports = None + self._data_config = None self.discriminator = None if image is not None: @@ -80,6 +84,8 @@ def __init__(self, image=None, command=None, args=None, resources=None, env=None self.config = config if ports is not None: self.ports = ports + if data_config is not None: + self.data_config = data_config @property def image(self): @@ -238,6 +244,27 @@ def ports(self, ports): self._ports = ports + @property + def data_config(self): + """Gets the data_config of this CoreContainer. # noqa: E501 + + + :return: The data_config of this CoreContainer. # noqa: E501 + :rtype: CoreDataLoadingConfig + """ + return self._data_config + + @data_config.setter + def data_config(self, data_config): + """Sets the data_config of this CoreContainer. + + + :param data_config: The data_config of this CoreContainer. # noqa: E501 + :type: CoreDataLoadingConfig + """ + + self._data_config = data_config + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_data_loading_config.py b/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_data_loading_config.py new file mode 100644 index 000000000..344ca5a76 --- /dev/null +++ b/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_data_loading_config.py @@ -0,0 +1,195 @@ +# 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.data_loading_config_metadata_format import DataLoadingConfigMetadataFormat # noqa: F401,E501 + + +class CoreDataLoadingConfig(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 = { + 'input_path': 'str', + 'output_path': 'str', + 'format': 'DataLoadingConfigMetadataFormat', + 'enabled': 'bool' + } + + attribute_map = { + 'input_path': 'input_path', + 'output_path': 'output_path', + 'format': 'format', + 'enabled': 'enabled' + } + + def __init__(self, input_path=None, output_path=None, format=None, enabled=None): # noqa: E501 + """CoreDataLoadingConfig - a model defined in Swagger""" # noqa: E501 + + self._input_path = None + self._output_path = None + self._format = None + self._enabled = None + self.discriminator = None + + if input_path is not None: + self.input_path = input_path + if output_path is not None: + self.output_path = output_path + if format is not None: + self.format = format + if enabled is not None: + self.enabled = enabled + + @property + def input_path(self): + """Gets the input_path of this CoreDataLoadingConfig. # noqa: E501 + + + :return: The input_path of this CoreDataLoadingConfig. # noqa: E501 + :rtype: str + """ + return self._input_path + + @input_path.setter + def input_path(self, input_path): + """Sets the input_path of this CoreDataLoadingConfig. + + + :param input_path: The input_path of this CoreDataLoadingConfig. # noqa: E501 + :type: str + """ + + self._input_path = input_path + + @property + def output_path(self): + """Gets the output_path of this CoreDataLoadingConfig. # noqa: E501 + + + :return: The output_path of this CoreDataLoadingConfig. # noqa: E501 + :rtype: str + """ + return self._output_path + + @output_path.setter + def output_path(self, output_path): + """Sets the output_path of this CoreDataLoadingConfig. + + + :param output_path: The output_path of this CoreDataLoadingConfig. # noqa: E501 + :type: str + """ + + self._output_path = output_path + + @property + def format(self): + """Gets the format of this CoreDataLoadingConfig. # noqa: E501 + + + :return: The format of this CoreDataLoadingConfig. # noqa: E501 + :rtype: DataLoadingConfigMetadataFormat + """ + return self._format + + @format.setter + def format(self, format): + """Sets the format of this CoreDataLoadingConfig. + + + :param format: The format of this CoreDataLoadingConfig. # noqa: E501 + :type: DataLoadingConfigMetadataFormat + """ + + self._format = format + + @property + def enabled(self): + """Gets the enabled of this CoreDataLoadingConfig. # noqa: E501 + + + :return: The enabled of this CoreDataLoadingConfig. # noqa: E501 + :rtype: bool + """ + return self._enabled + + @enabled.setter + def enabled(self, enabled): + """Sets the enabled of this CoreDataLoadingConfig. + + + :param enabled: The enabled of this CoreDataLoadingConfig. # noqa: E501 + :type: bool + """ + + self._enabled = enabled + + 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(CoreDataLoadingConfig, 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, CoreDataLoadingConfig): + 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/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/data_loading_config_metadata_format.py b/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/data_loading_config_metadata_format.py new file mode 100644 index 000000000..e0a481296 --- /dev/null +++ b/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/data_loading_config_metadata_format.py @@ -0,0 +1,94 @@ +# 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 DataLoadingConfigMetadataFormat(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + + """ + allowed enum values + """ + JSON = "JSON" + YAML = "YAML" + PROTO = "PROTO" + + """ + 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 + """DataLoadingConfigMetadataFormat - 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(DataLoadingConfigMetadataFormat, 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, DataLoadingConfigMetadataFormat): + 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/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_data_loading_config.py b/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_data_loading_config.py new file mode 100644 index 000000000..3e66fb838 --- /dev/null +++ b/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_data_loading_config.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_data_loading_config import CoreDataLoadingConfig # noqa: E501 +from flyteadmin.rest import ApiException + + +class TestCoreDataLoadingConfig(unittest.TestCase): + """CoreDataLoadingConfig unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testCoreDataLoadingConfig(self): + """Test CoreDataLoadingConfig""" + # FIXME: construct object with mandatory attributes with example values + # model = flyteadmin.models.core_data_loading_config.CoreDataLoadingConfig() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/gen/pb_python/flyteidl/service/flyteadmin/test/test_data_loading_config_metadata_format.py b/gen/pb_python/flyteidl/service/flyteadmin/test/test_data_loading_config_metadata_format.py new file mode 100644 index 000000000..a8f8f6466 --- /dev/null +++ b/gen/pb_python/flyteidl/service/flyteadmin/test/test_data_loading_config_metadata_format.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.data_loading_config_metadata_format import DataLoadingConfigMetadataFormat # noqa: E501 +from flyteadmin.rest import ApiException + + +class TestDataLoadingConfigMetadataFormat(unittest.TestCase): + """DataLoadingConfigMetadataFormat unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testDataLoadingConfigMetadataFormat(self): + """Test DataLoadingConfigMetadataFormat""" + # FIXME: construct object with mandatory attributes with example values + # model = flyteadmin.models.data_loading_config_metadata_format.DataLoadingConfigMetadataFormat() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/package.json b/package.json index dd443b393..e2320997d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lyft/flyteidl", - "version": "0.17.30", + "version": "0.17.31", "description": "Compiled protocol buffers and gRPC service clients/servers for Flyte IDLs", "repository": { "type": "git", diff --git a/protos/flyteidl/core/tasks.proto b/protos/flyteidl/core/tasks.proto index cfe883e9b..ac6cedd76 100644 --- a/protos/flyteidl/core/tasks.proto +++ b/protos/flyteidl/core/tasks.proto @@ -153,5 +153,47 @@ message Container { // Ports to open in the container. This feature is not supported by all execution engines. (e.g. supported on K8s but // not supported on AWS Batch) + // Only K8s repeated ContainerPort ports = 7; + + // BETA: Optional configuration for DataLoading. If not specified, then default values are used. + // This makes it possible to to run a completely portable container, that uses inputs and outputs + // only from the local file-system and without having any reference to flyteidl. This is supported only on K8s at the moment. + // If data loading is enabled, then data will be mounted in accompanying directories specified in the DataLoadingConfig. If the directories + // are not specified, inputs will be mounted onto and outputs will be uploaded from a pre-determined file-system path. Refer to the documentation + // to understand the default paths. + // Only K8s + DataLoadingConfig data_config = 9; +} + +// This configuration allows executing raw containers in Flyte using the Flyte CoPilot system. +// Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path +// Any outputs generated by the user container - within output_path are automatically uploaded. +message DataLoadingConfig { + // MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. + // If the user has access to the protocol buffer definitions, it is recommended to use the PROTO format. + // JSON and YAML do not need any protobuf definitions to read it + // All remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem) + enum MetadataFormat { + // JSON / YAML for the metadata (which contains inlined primitive values). The representation is inline with the standard json specification as specified - https://www.json.org/json-en.html + JSON = 0; + YAML = 1; + // Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core + PROTO = 2; + } + // File system path (start at root). This folder will contain all the inputs exploded to a separate file. + // Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like + // /var/flyte/inputs/inputs. .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations + // /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format + // /var/flyte/inputs/y -> Y is a file in Binary format + // /var/flyte/inputs/z/... -> Note Z itself is a directory + // More information about the protocol - refer to docs #TODO reference docs here + string input_path = 1; + // File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file + string output_path = 2; + // In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values. + // This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding + MetadataFormat format = 3; + // Flag enables DataLoading Config. If this is not set, data loading will not be used! + bool enabled = 4; } diff --git a/protos/flyteidl/plugins/raw_container.proto b/protos/flyteidl/plugins/raw_container.proto deleted file mode 100644 index 094a912f5..000000000 --- a/protos/flyteidl/plugins/raw_container.proto +++ /dev/null @@ -1,37 +0,0 @@ -syntax = "proto3"; - -package flyteidl.plugins; - -option go_package = "github.com/lyft/flyteidl/gen/pb-go/flyteidl/plugins"; - -// This configuration allows executing raw containers in Flyte using the Flyte CoPilot system. -// Flyte CoPilot, eliminates the needs of flytekit or sdk inside the container. Any inputs required by the users container are side-loaded in the input_path -// Any outputs generated by the user container - within output_path are automatically uploaded. -// We are starting this as a plugin, but after the container within Pod ordering stabilizes, we can move this -// into the default task definition. -message CoPilot { - // MetadataFormat decides the encoding format in which the input metadata should be made available to the containers. - // If the user has access to the protocol buffer definitions, it is recommended to use the PROTO format. - // JSON and YAML do not need any protobuf definitions to read it - // All remote references in core.LiteralMap are replaced with local filesystem references (the data is downloaded to local filesystem) - enum MetadataFormat { - // JSON / YAML are serialized represnetation of a map[string]primitive. primitive -> int, string, bool, double/float, bytes - JSON = 0; - YAML = 1; - // Proto is a serialized binary of `core.LiteralMap` defined in flyteidl/core - PROTO = 2; - } - // File system path (start at root). This folder will contain all the inputs exploded to a separate file. - // Example, if the input interface needs (x: int, y: blob, z: multipart_blob) and the input path is "/var/flyte/inputs", then the file system will look like - // /var/flyte/inputs/inputs. .pb .json .yaml> -> Format as defined previously. The Blob and Multipart blob will reference local filesystem instead of remote locations - // /var/flyte/inputs/x -> X is a file that contains the value of x (integer) in string format - // /var/flyte/inputs/y -> Y is a file in Binary format - // /var/flyte/inputs/z/... -> Note Z itself is a directory - // More information about the protocol - refer to docs #TODO reference docs here - string input_path = 1; - // File system path (start at root). This folder should contain all the outputs for the task as individual files and/or an error text file - string output_path = 2; - // In the inputs folder, there will be an additional summary/metadata file that contains references to all files or inlined primitive values. - // This format decides the actual encoding for the data. Refer to the encoding to understand the specifics of the contents and the encoding - MetadataFormat format = 3; -} diff --git a/setup.py b/setup.py index a0212e7af..003795722 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -__version__ = '0.17.30' +__version__ = '0.17.31' setup( name='flyteidl',