diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..747307182752d061d33d29583902faf86601d625 --- /dev/null +++ b/Makefile @@ -0,0 +1,131 @@ +-include config.mk + +ifeq (,$(ATS)) + $(error ATS shall be defined) +endif + +ifeq (,$(TOPDIR)) + TOPDIR := . +endif + +ifeq (,$(TTCN3_DIR)) + $(error TTCN3_DIR shall be defined in config.mk) +endif +first: all + +define IncludeModule +undefine sources +undefine modules +undefine includes +include $(1)/module.mk +$$(foreach S, $$(sources), $$(eval all_sources += $(1)/$$(S))) +$$(foreach I, $$(includes), $$(eval all_includes += $(1)/$$(I))) +$$(foreach M, $$(modules), $$(eval $$(call IncludeModule, $$(if $$(filter /%, $$(M)), $$(M), $(1)/$$(M))))) +endef + +all_includes := $(TTCN3_DIR)/include $(TTCN3_DIR)/src $(TOPDIR)/ccsrc/Framework +defines += TITAN_RUNTIME_2 _NO_SOFTLINKS_ $(ATS) AS_USE_SSL +libs += $(TTCN3_DIR)/lib/libttcn3-rt2-parallel.a -lstdc++fs + +ifeq (Windows_NT,$(OS)) +# Silence linker warnings. +LDFLAGS += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc +defines += WIN32 +libs += $(patsubst %, -L%/lib, $(OPENSSL_DIR)) +all_includes += $(addsuffix /include, $(OPENSSL_DIR)) +libs += $(WPCAP_DLL_PATH) +else +defines += LINUX +libs += -lpcap -lrt -lpthread +endif + +libs += -lssl -lcrypto -lxml2 + +$(eval $(call IncludeModule, $(TOPDIR)/ttcn/$(ATS))) + +outdir := $(TOPDIR)/build/$(ATS) +bindir := $(TOPDIR)/bin + +sources := $(sort $(all_sources)) +includes := $(outdir) $(outdir)/.. $(all_includes) $(NPCAP_INCLUDE) + +ifeq (Windows_NT,$(OS)) + EXE=.exe +endif + +ttcn_sources := $(filter %.ttcn , $(sources)) +ttcn3_sources := $(filter %.ttcn3, $(sources)) + +tt_sources := $(ttcn_sources) $(ttcn3_sources) +cc_sources := $(filter %.cc, $(sources)) + +gen_ttcn_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn, %.cc, $(ttcn_sources)))) +gen_ttcn_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn, %.hh, $(ttcn_sources)))) +gen_ttcn3_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.cc, $(ttcn3_sources)))) +gen_ttcn3_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.hh, $(ttcn3_sources)))) + +gen_sources := $(gen_ttcn_sources) $(gen_ttcn3_sources) +gen_headers := $(gen_ttcn_headers) $(gen_ttcn3_headers) + +gen_objects := $(patsubst %.cc, %.o, $(gen_sources)) +cc_objects := $(patsubst %.cc, $(outdir)/%.o, $(cc_sources)) + +.PHONY: all FORCE echo + +all: $(bindir) $(outdir) $(bindir)/$(ATS)$(EXE) + +echo_sources: + @echo -e "$(addsuffix \n,$(all_sources))" + +echo: echo_sources + @echo -e "sources:\n $(addsuffix \n, $(sources))" + @echo -e "gen_sources:\n $(addsuffix \n, $(gen_sources))" + @echo -e "gen_objects:\n $(addsuffix \n, $(gen_objects))" + @echo -e "cc_objects:\n $(addsuffix \n, $(cc_objects))" + @echo -e "includes:\n $(addsuffix \n, $(includes))" + @echo -e "defines: $(addsuffix \n, $(defines))" + +clean: + rm -f $(outdir)/$(ATS)$(EXE) $(gen_objects) $(gen_sources) $(gen_headers) $(cc_objects) $(outdir)/.generate + +regen: force_regen $(outdir)/.generate +force_regen: + rm -f $(outdir)/.generate + +t3q: all + @echo -e "Code checking in progress..." + @java -Xmx3g -Xss512m -jar $(T3Q_PATH)/t3q.jar --config $(T3Q_PATH)/$(T3Q_CONFIG) $(tt_sources) > $(outdir)/t3q.out 2>&1 ; cd - + @echo -e "Code checking in done..." + @echo -e "Output file is located here: $(outdir)/t3q.out" + +t3d: all + @echo -e "TTCN-3 doc generation in progress..." + @java -Xmx3g -Xss512m -jar $(T3D_PATH)/t3d.jar --config $(T3D_PATH)/$(T3D_CONFIG) $(tt_sources) > $(outdir)/t3d.out 2>&1 ; cd - + @echo -e "TTCN-3 doc generation done..." + @echo -e "Output file is located here: $(outdir)/t3d.out" + +$(outdir) $(bindir): + mkdir -p $@ + +$(bindir)/$(ATS)$(EXE): $(gen_objects) $(cc_objects) + g++ -g -O0 -o $@ $(LDFLAGS) $(gen_objects) $(cc_objects) $(libs) + +$(gen_objects) :%.o :%.cc + g++ -g -O0 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< + +$(cc_objects) : $(outdir)/%.o : %.cc + mkdir -p $(dir $@) + g++ -g -O0 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< + +#$(gen_sources): +# $(TTCN3_DIR)/bin/compiler -n -e -L -R -U none -o $(outdir) $(tt_sources) + +$(gen_sources): $(outdir)/.generate + +$(outdir)/.generate: Makefile $(tt_sources) + $(TTCN3_DIR)/bin/compiler -b -d -e -f -g -l -L -M -n -O -r -R -U none -x -X -o $(outdir) $(tt_sources) + touch $@ + +$(foreach S, $(ttcn_sources), $(eval $(outdir)/$(notdir $(patsubst %.ttcn, %.cc, $(S))): $(S))) +$(foreach S, $(ttcn3_sources), $(eval $(outdir)/$(notdir $(patsubst %.ttcn3, %.cc, $(S))): $(S))) + diff --git a/ccsrc/EncDec/LibHttp/module.mk b/ccsrc/EncDec/LibHttp/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..5de93980b39cdb82d84984019f51ba86407b5d86 --- /dev/null +++ b/ccsrc/EncDec/LibHttp/module.mk @@ -0,0 +1 @@ +sources := LibItsHttp_Encdec.cc diff --git a/ccsrc/EncDec/LibMec/LocationAPI/module.mk b/ccsrc/EncDec/LibMec/LocationAPI/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..14744c978512fea0ea026ca530b0982cb68aadc9 --- /dev/null +++ b/ccsrc/EncDec/LibMec/LocationAPI/module.mk @@ -0,0 +1 @@ +sources := LibMec_EncDec.cc diff --git a/ccsrc/EncDec/LibMec/module.mk b/ccsrc/EncDec/LibMec/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..bf401bf104158417d63084f53710429258129f77 --- /dev/null +++ b/ccsrc/EncDec/LibMec/module.mk @@ -0,0 +1 @@ +sources := LocationAPI diff --git a/ccsrc/Framework/include/params.hh b/ccsrc/Framework/include/params.hh index 5ae257b4807a3c83b344566510de9405d4c615d8..e30b97b1e3ee041247d603dba68e42ec2b429e77 100644 --- a/ccsrc/Framework/include/params.hh +++ b/ccsrc/Framework/include/params.hh @@ -11,6 +11,7 @@ #pragma once #include +#include #include /*! @@ -29,11 +30,54 @@ public: //! \publicsection static const std::string& mac_dst; //! Destination MAC address parameter name static const std::string& mac_bc; //! Broadcast MAC address parameter name static const std::string& eth_type; //! Ethernet type parameter name + static const std::string& beaconing; //! Beaconing mode parameter name + static const std::string& timestamp; //! Packet reception timestamp + static const std::string& station_type; + static const std::string& country; + static const std::string& type_of_address; + static const std::string& ssp; //! SSP parameter name + static const std::string& its_aid; //! ITS-AID parameter name + static const std::string& gn_payload; //! GeoNetworking Payload parameter name + static const std::string& gn_next_header; //! GeoNetworking NextHeader parameter name + static const std::string& gn_header_type; //! GeoNetworking HeaderType parameter name + static const std::string& gn_header_sub_type; //! GeoNetworking HeaderSubType parameter name + static const std::string& gn_lifetime; //! GeoNetworking Lifetime parameter name + static const std::string& gn_traffic_class; //! GeoNetworking Traffic class parameter name + static const std::string& btp_type; //! BTP Type parameter name + static const std::string& btp_payload; //! BTP Payload parameter name + static const std::string& btp_destination_port; //! BTP DestinationPort parameter name + static const std::string& btp_info; //! BTP Info parameter name + static const std::string& nic; //! Network Interface Card parameter name + static const std::string& ll_address; //! Test system GeoNetworking LL-Address parameter name static const std::string& latitude; //! Test system Latitude parameter name static const std::string& longitude; //! Test system Longitude parameter name + static const std::string& expiry; //! Test system GeoNetworking Lifetime parameter name (in ms) + + static const std::string& station_id; //! To indicate to the peer ITS_Container::stationID + static const std::string& device_mode; //! To indicate to the lower layer to act as a standalone device + static const std::string& secured_mode; //! To indicate to the lower layer to apply signature on message exchanges as defined in IEEE 1609.2 & ETSI TS 102 965 + static const std::string& encrypted_mode; //! To indicate to the lower layer to apply encryption on message exchanges as defined in IEEE 1609.2 & ETSI TS 102 965 + static const std::string& enable_security_checks;//! To indicates if security check failures shall be treated as error or warning + static const std::string& sec_db_path; //! Path to the folder containing certificates + static const std::string& certificate; //! The certificate identifier the Test System shall use. E.g. CERT_TS_A + static const std::string& peer_certificate; //! The peer certificate identifier the Test System shall use for encryption. E.g. CERT_TS_A + static const std::string& hash; //! The digest algorithm the Test System shall use, authorised values are SHA-256 or SHA-384. Default: SHA-256 + static const std::string& signature; //! The signature algorithm the Test System shall use, authorised values are NISTP-256, BP-256 and BP-384. Default: NISTP-256 + static const std::string& cypher; //! The encryption algorithm the Test System shall use, authorised values are NISTP-256 and BP-256. Default: NISTP-256 + static const std::string& distanceA; //! Test system GeoNetworking DistanceA parameter name + static const std::string& distanceB; //! Test system GeoNetworking DistanceB parameter name + static const std::string& angle; //! Test system GeoNetworking Angle parameter name + + static const std::string& payload_type; //! Tyoe of payload, value is the ITS Conatainer message identifier or omitted in case of unknown payload + + static const std::string& next_header; //! Upper layer settings + static const std::string& header_type; //! Upper layer settings + static const std::string& header_sub_type; //! Upper layer settings + static const std::string& interface_id; //! Commsignia antenna selector + static const std::string& server; //! HTTP server address (e.g. www.etsi.org) static const std::string& port; //! HTTP server port. Default: 80 static const std::string& use_ssl; //! Set to 1 to use SSL to communicate with the HTTP server. Default: false @@ -45,10 +89,6 @@ public: //! \publicsection static const std::string& host; //! HTTP Host value. Default: 127.0.0.1 static const std::string& content_type; //! HTTP Content-type value. Default: application/text - static const std::string& sip_url; - static const std::string& sip_version; - static const std::string& payload; //! UpperLayer Payload parameter name - static const std::string& codecs; //! List of codecs to use for HTTP application layers /*! diff --git a/ccsrc/Framework/module.mk b/ccsrc/Framework/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..b4ca0cee9292d804863078784f7ac461406cc9c2 --- /dev/null +++ b/ccsrc/Framework/module.mk @@ -0,0 +1,6 @@ +sources := src/base_time.cc \ + src/codec_stack_builder.cc \ + src/converter.cc \ + src/layer_factory.cc \ + src/params.cc +includes += ./include diff --git a/ccsrc/Framework/src/params.cc b/ccsrc/Framework/src/params.cc index 688ca98788556bec75edee4c3c2773a01bed1d38..8b82e9e9846c5f682b6f29658ab277847cd4174b 100644 --- a/ccsrc/Framework/src/params.cc +++ b/ccsrc/Framework/src/params.cc @@ -22,12 +22,53 @@ const std::string& params::mac_src = std::string("mac_src"); const std::string& params::mac_dst = std::string("mac_dst"); const std::string& params::mac_bc = std::string("mac_bc"); const std::string& params::eth_type = std::string("eth_type"); - +const std::string& params::beaconing = std::string("beaconing"); +const std::string& params::timestamp = std::string("timestamp"); +const std::string& params::station_type = std::string("station_type"); +const std::string& params::country = std::string("country"); +const std::string& params::type_of_address = std::string("type_of_address"); +const std::string& params::its_aid = std::string("its_aid"); +const std::string& params::ssp = std::string("ssp"); +const std::string& params::gn_payload = std::string("gn_payload"); +const std::string& params::gn_next_header = std::string("gnNextHeader"); +const std::string& params::gn_header_type = std::string("gnHeaderType"); +const std::string& params::gn_header_sub_type = std::string("gnHeaderSubtype"); +const std::string& params::gn_lifetime = std::string("gnLifetime"); +const std::string& params::gn_traffic_class = std::string("gnTrafficClass"); +const std::string& params::btp_type = std::string("btp_type"); +const std::string& params::btp_payload = std::string("btp_payload"); +const std::string& params::btp_destination_port = std::string("dst_port"); +const std::string& params::btp_info = std::string("btp_info"); const std::string& params::nic = std::string("nic"); const std::string& params::latitude = std::string("latitude"); const std::string& params::longitude = std::string("longitude"); +const std::string& params::ll_address = std::string("ll_address"); +const std::string& params::expiry = std::string("expiry"); + +const std::string& params::station_id = std::string("station_id"); + const std::string& params::device_mode = std::string("device_mode"); +const std::string& params::secured_mode = std::string("secured_mode"); +const std::string& params::encrypted_mode = std::string("encrypted_mode"); +const std::string& params::enable_security_checks = std::string("enable_security_checks"); +const std::string& params::certificate = std::string("certificate"); +const std::string& params::peer_certificate = std::string("peer_certificate"); +const std::string& params::sec_db_path = std::string("sec_db_path"); +const std::string& params::hash = std::string("hash"); +const std::string& params::signature = std::string("signature"); +const std::string& params::cypher = std::string("cypher"); +const std::string& params::distanceA = std::string("distanceA"); +const std::string& params::distanceB = std::string("distanceB"); +const std::string& params::angle = std::string("angle"); + +const std::string& params::payload_type = std::string("payload_type"); + +const std::string& params::next_header = std::string("next_header"); +const std::string& params::header_type = std::string("header_type"); +const std::string& params::header_sub_type = std::string("header_sub_type"); + +const std::string& params::interface_id = std::string("interface_id"); const std::string& params::server = std::string("server"); const std::string& params::port = std::string("port"); @@ -40,9 +81,9 @@ const std::string& params::uri = std::string("uri"); const std::string& params::host = std::string("host"); const std::string& params::content_type = std::string("content_type"); -const std::string& params::sip_url = std::string("sip_url"); -const std::string& params::sip_version = std::string("sip_version"); -const std::string& params::payload = std::string("payload"); +//const std::string& params::sip_url = std::string("sip_url"); +//const std::string& params::sip_version = std::string("sip_version"); +//const std::string& params::payload = std::string("payload"); const std::string& params::codecs = std::string("codecs"); diff --git a/ccsrc/Ports/LibHttp/module.mk b/ccsrc/Ports/LibHttp/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..0fba8bd2e9442497d91fa111d95c889d4d57e139 --- /dev/null +++ b/ccsrc/Ports/LibHttp/module.mk @@ -0,0 +1,3 @@ +sources := HttpPort.cc +includes := . + diff --git a/ccsrc/Protocols/ETH/module.mk b/ccsrc/Protocols/ETH/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..e81733a3181d060340ef98168c6c0ff6f2d77755 --- /dev/null +++ b/ccsrc/Protocols/ETH/module.mk @@ -0,0 +1,3 @@ +sources := ethernet_layer.cc +includes := . + diff --git a/ccsrc/Protocols/Http/http_codec.cc b/ccsrc/Protocols/Http/http_codec.cc index c2c36271bb7572ee2e222e9c73b5aeb5bbede912..1d997fe9565efa4aed62b6db7b5ba418226af8e8 100644 --- a/ccsrc/Protocols/Http/http_codec.cc +++ b/ccsrc/Protocols/Http/http_codec.cc @@ -563,7 +563,7 @@ int http_codec::decode_body(TTCN_Buffer& decoding_buffer, LibItsHttp__MessageBod os += OCTETSTRING(len, counter + static_cast(body)); loggers::get_instance().log_msg("http_codec::decode_body: os=", os); counter += len; - loggers::get_instance().log("http_codec::decode_body: Chunked: %02x %02x %02x", body[counter].get_octet(), body[counter + 1].get_octet(), body[counter + 2].get_octet()); + //loggers::get_instance().log("http_codec::decode_body: Chunked: %02x %02x %02x", body[counter].get_octet(), body[counter + 1].get_octet(), body[counter + 2].get_octet()); loggers::get_instance().log("http_codec::decode_body: Chunked (2): prev = %d, counter=%d / %d", prev, counter, body.lengthof()); while (counter < body.lengthof() && ((body[counter].get_octet() == '\r') || (body[counter].get_octet() == '\n'))) { // Skip additional \n counter += 1; diff --git a/ccsrc/Protocols/Http/module.mk b/ccsrc/Protocols/Http/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..12304eb0fb337dcd2ae01a6ec3c4c0b0de9483e9 --- /dev/null +++ b/ccsrc/Protocols/Http/module.mk @@ -0,0 +1,3 @@ +sources := http_codec.cc http_layer.cc +includes := . + diff --git a/ccsrc/Protocols/Json/json_codec.cc b/ccsrc/Protocols/Json/json_codec.cc index 6c57224136dcb85fff625c1a08521a0f0b52e887..c3ef42be000663bc03af438a86a1e86d27811244 100644 --- a/ccsrc/Protocols/Json/json_codec.cc +++ b/ccsrc/Protocols/Json/json_codec.cc @@ -64,6 +64,26 @@ int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, O const AppEnablementAPI__TypesAndValues::TrafficRule& traffic_rule = msg.trafficRule(); traffic_rule.encode(AppEnablementAPI__TypesAndValues::TrafficRule_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_bwInfo)) { + const TrafficManagementAPI__TypesAndValues::BwInfo& bw_info = msg.bwInfo(); + bw_info.encode(TrafficManagementAPI__TypesAndValues::BwInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_mtsSessionInfo)) { + const TrafficManagementAPI__TypesAndValues::MtsSessionInfo& mts_session_info = msg.mtsSessionInfo(); + mts_session_info.encode(TrafficManagementAPI__TypesAndValues::MtsSessionInfo_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_predictedQos)) { + const V2XInformationServiceAPI__TypesAndValues::PredictedQos& predicted_qos = msg.predictedQos(); + predicted_qos.encode(V2XInformationServiceAPI__TypesAndValues::PredictedQos_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_assocStaSubscription)) { + const WlanInformationAPI__TypesAndValues::AssocStaSubscription& assoc_sta_subscription = msg.assocStaSubscription(); + assoc_sta_subscription.encode(WlanInformationAPI__TypesAndValues::AssocStaSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; + } else if (msg.ischosen(LibItsHttp__JsonMessageBodyTypes::JsonBody::ALT_staDataRateSubscription)) { + const WlanInformationAPI__TypesAndValues::StaDataRateSubscription& sta_data_rate_subscription = msg.staDataRateSubscription(); + sta_data_rate_subscription.encode(WlanInformationAPI__TypesAndValues::StaDataRateSubscription_descr_, encoding_buffer, TTCN_EncDec::CT_JSON); + data = /*char2oct(CHARSTRING("{\"TrafficRule\": ")) + */OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data())/* + char2oct(CHARSTRING("}"))*/; } else { loggers::get_instance().error("json_codec::encode: Not supported"); } @@ -105,8 +125,8 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy loggers::get_instance().log("json_codec::decode: decoding_buffer='%c' / '%s'", str[0], str.c_str()); TTCN_Buffer decoding_buffer(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - if (it->second.find("\"userList\"") != std::string::npos) { // Be careful to the order - // TODO To be refined, find("\"userList\"") is not optimal + if (it->second.find("\"userList\"") != std::string::npos) { // Be careful to the order + // TODO To be refined, find("\"userList\"") is not optimal int idx_begin = it->second.find(":"); int idx_end = it->second.rfind("}") - 1; // Remove the last '}' str = it->second.substr(idx_begin + 1, idx_end - idx_begin); @@ -115,7 +135,7 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy user_list.decode(LocationAPI__TypesAndValues::UserList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.userList() = user_list; } else if (it->second.find("\"accessPointList\"") != std::string::npos) { // Be careful to the order - // TODO To be refined, find("\"accessPointList\"") is not optimal + // TODO To be refined, find("\"accessPointList\"") is not optimal LocationAPI__TypesAndValues::AccessPointList access_point_list; access_point_list.decode(LocationAPI__TypesAndValues::AccessPointList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.accessPointList() = access_point_list; @@ -208,7 +228,7 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy AppEnablementAPI__TypesAndValues::SubscriptionLinkList sub_link_list; sub_link_list.decode(AppEnablementAPI__TypesAndValues::SubscriptionLinkList_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.subscriptionLinkList__app__ens() = sub_link_list; - } else if (it->second.find("\"subscriptionType\"") != std::string::npos) { + } else if ((it->second.find("\"subscriptionType\"") != std::string::npos) && (it->second.find("\"filteringCriteria\"") != std::string::npos)) { AppEnablementAPI__TypesAndValues::SerAvailabilityNotificationSubscription ser_av; ser_av.decode(AppEnablementAPI__TypesAndValues::SerAvailabilityNotificationSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.serAvailabilityNotificationSubscription() = ser_av; @@ -221,123 +241,123 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy current_time.decode(AppEnablementAPI__TypesAndValues::CurrentTime_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.currentTime() = current_time; } else if (it->second.find("\"CellChangeSubscription\"") != std::string::npos) { -// // Replace "type": "1" by type": "EU_IPV4_ADDRESS", "type": "2"... -// // TODO Create a method instead of copy/past -// //loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); -// std::size_t it_start = str.find("\"type\""); -// loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); -// if (it_start != std::string::npos) { -// std::size_t it_stop = str.find(",", it_start); -// //loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); -// //loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); -// std::size_t it = str.find("1", it_start, 1); -// //loggers::get_instance().log("json_codec::decode: it=%d", it); -// if ((it != std::string::npos) && (it < it_stop)) { -// str = str.substr(0, it) + "UE_IPV4_ADDRESS" + str.substr(it + 1); -// } else { -// it = str.find("2", it_start, 1); -// //loggers::get_instance().log("json_codec::decode: it=%d", it); -// if ((it != std::string::npos) && (it < it_stop)) { -// str = str.substr(0, it) + "UE_IPV6_ADDRESS" + str.substr(it + 1); -// } else { -// it = str.find("3", it_start, 1); -// //loggers::get_instance().log("json_codec::decode: it=%d", it); -// if ((it != std::string::npos) && (it < it_stop)) { -// str = str.substr(0, it) + "NATED_IP_ADDRESS" + str.substr(it + 1); -// } else { -// it = str.find("4", it_start, 1); -// //loggers::get_instance().log("json_codec::decode: it=%d", it); -// if ((it != std::string::npos) && (it < it_stop)) { -// str = str.substr(0, it) + "GTP_TEID" + str.substr(it + 1); -// } -// } -// } -// } -// } -// //loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); -// decoding_buffer.clear(); -// decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + // // Replace "type": "1" by type": "EU_IPV4_ADDRESS", "type": "2"... + // // TODO Create a method instead of copy/past + // //loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); + // std::size_t it_start = str.find("\"type\""); + // loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); + // if (it_start != std::string::npos) { + // std::size_t it_stop = str.find(",", it_start); + // //loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); + // //loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); + // std::size_t it = str.find("1", it_start, 1); + // //loggers::get_instance().log("json_codec::decode: it=%d", it); + // if ((it != std::string::npos) && (it < it_stop)) { + // str = str.substr(0, it) + "UE_IPV4_ADDRESS" + str.substr(it + 1); + // } else { + // it = str.find("2", it_start, 1); + // //loggers::get_instance().log("json_codec::decode: it=%d", it); + // if ((it != std::string::npos) && (it < it_stop)) { + // str = str.substr(0, it) + "UE_IPV6_ADDRESS" + str.substr(it + 1); + // } else { + // it = str.find("3", it_start, 1); + // //loggers::get_instance().log("json_codec::decode: it=%d", it); + // if ((it != std::string::npos) && (it < it_stop)) { + // str = str.substr(0, it) + "NATED_IP_ADDRESS" + str.substr(it + 1); + // } else { + // it = str.find("4", it_start, 1); + // //loggers::get_instance().log("json_codec::decode: it=%d", it); + // if ((it != std::string::npos) && (it < it_stop)) { + // str = str.substr(0, it) + "GTP_TEID" + str.substr(it + 1); + // } + // } + // } + // } + // } + // //loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); + // decoding_buffer.clear(); + // decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); RnisAPI__TypesAndValues::CellChangeSubscription cell_change_subscription; cell_change_subscription.decode(RnisAPI__TypesAndValues::CellChangeSubscription_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.cellChangeSubscription() = cell_change_subscription; //TODO Continue with other ChangeSubscription } else if (it->second.find("\"RabInfo\"") != std::string::npos) { -// // Replace "type": "1" by type": "EU_IPV4_ADDRESS", "type": "2"... -// // TODO Create a method instead of copy/past -// // loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); -// std::size_t it_start = str.find("\"type\""); -// loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); -// if (it_start != std::string::npos) { -// std::size_t it_stop = str.find(",", it_start); -// //loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); -// //loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); -// std::size_t it = str.find("1", it_start, 1); -// //loggers::get_instance().log("json_codec::decode: it=%d", it); -// if ((it != std::string::npos) && (it < it_stop)) { -// str = str.substr(0, it) + "UE_IPV4_ADDRESS" + str.substr(it + 1); -// } else { -// it = str.find("2", it_start, 1); -// //loggers::get_instance().log("json_codec::decode: it=%d", it); -// if ((it != std::string::npos) && (it < it_stop)) { -// str = str.substr(0, it) + "UE_IPV6_ADDRESS" + str.substr(it + 1); -// } else { -// it = str.find("3", it_start, 1); -// //loggers::get_instance().log("json_codec::decode: it=%d", it); -// if ((it != std::string::npos) && (it < it_stop)) { -// str = str.substr(0, it) + "NATED_IP_ADDRESS" + str.substr(it + 1); -// } else { -// it = str.find("4", it_start, 1); -// //loggers::get_instance().log("json_codec::decode: it=%d", it); -// if ((it != std::string::npos) && (it < it_stop)) { -// str = str.substr(0, it) + "GTP_TEID" + str.substr(it + 1); -// } -// } -// } -// } -// } -// //loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); -// decoding_buffer.clear(); -// decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + // // Replace "type": "1" by type": "EU_IPV4_ADDRESS", "type": "2"... + // // TODO Create a method instead of copy/past + // // loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); + // std::size_t it_start = str.find("\"type\""); + // loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); + // if (it_start != std::string::npos) { + // std::size_t it_stop = str.find(",", it_start); + // //loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); + // //loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); + // std::size_t it = str.find("1", it_start, 1); + // //loggers::get_instance().log("json_codec::decode: it=%d", it); + // if ((it != std::string::npos) && (it < it_stop)) { + // str = str.substr(0, it) + "UE_IPV4_ADDRESS" + str.substr(it + 1); + // } else { + // it = str.find("2", it_start, 1); + // //loggers::get_instance().log("json_codec::decode: it=%d", it); + // if ((it != std::string::npos) && (it < it_stop)) { + // str = str.substr(0, it) + "UE_IPV6_ADDRESS" + str.substr(it + 1); + // } else { + // it = str.find("3", it_start, 1); + // //loggers::get_instance().log("json_codec::decode: it=%d", it); + // if ((it != std::string::npos) && (it < it_stop)) { + // str = str.substr(0, it) + "NATED_IP_ADDRESS" + str.substr(it + 1); + // } else { + // it = str.find("4", it_start, 1); + // //loggers::get_instance().log("json_codec::decode: it=%d", it); + // if ((it != std::string::npos) && (it < it_stop)) { + // str = str.substr(0, it) + "GTP_TEID" + str.substr(it + 1); + // } + // } + // } + // } + // } + // //loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); + // decoding_buffer.clear(); + // decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); RnisAPI__TypesAndValues::RabInfo rab_info; rab_info.decode(RnisAPI__TypesAndValues::RabInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.rabInfo() = rab_info; } else if (it->second.find("\"S1BearerInfo\"") != std::string::npos) { -// // Replace "type": "1" by type": "EU_IPV4_ADDRESS", "type": "2"... -// // TODO Create a method instead of copy/past -// // loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); -// std::size_t it_start = str.find("\"type\""); -// loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); -// if (it_start != std::string::npos) { -// std::size_t it_stop = str.find(",", it_start); -// //loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); -// //loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); -// std::size_t it = str.find("1", it_start, 1); -// //loggers::get_instance().log("json_codec::decode: it=%d", it); -// if ((it != std::string::npos) && (it < it_stop)) { -// str = str.substr(0, it) + "UE_IPV4_ADDRESS" + str.substr(it + 1); -// } else { -// it = str.find("2", it_start, 1); -// //loggers::get_instance().log("json_codec::decode: it=%d", it); -// if ((it != std::string::npos) && (it < it_stop)) { -// str = str.substr(0, it) + "UE_IPV6_ADDRESS" + str.substr(it + 1); -// } else { -// it = str.find("3", it_start, 1); -// //loggers::get_instance().log("json_codec::decode: it=%d", it); -// if ((it != std::string::npos) && (it < it_stop)) { -// str = str.substr(0, it) + "NATED_IP_ADDRESS" + str.substr(it + 1); -// } else { -// it = str.find("4", it_start, 1); -// //loggers::get_instance().log("json_codec::decode: it=%d", it); -// if ((it != std::string::npos) && (it < it_stop)) { -// str = str.substr(0, it) + "GTP_TEID" + str.substr(it + 1); -// } -// } -// } -// } -// } -// //loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); -// decoding_buffer.clear(); -// decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + // // Replace "type": "1" by type": "EU_IPV4_ADDRESS", "type": "2"... + // // TODO Create a method instead of copy/past + // // loggers::get_instance().log("json_codec::decode: Before, str=%s", str.c_str()); + // std::size_t it_start = str.find("\"type\""); + // loggers::get_instance().log("json_codec::decode: id_start=%d", it_start); + // if (it_start != std::string::npos) { + // std::size_t it_stop = str.find(",", it_start); + // //loggers::get_instance().log("json_codec::decode: id_stop=%d", it_stop); + // //loggers::get_instance().log("json_codec::decode: segment=%s", str.substr(it_start, it_stop - it_start).c_str()); + // std::size_t it = str.find("1", it_start, 1); + // //loggers::get_instance().log("json_codec::decode: it=%d", it); + // if ((it != std::string::npos) && (it < it_stop)) { + // str = str.substr(0, it) + "UE_IPV4_ADDRESS" + str.substr(it + 1); + // } else { + // it = str.find("2", it_start, 1); + // //loggers::get_instance().log("json_codec::decode: it=%d", it); + // if ((it != std::string::npos) && (it < it_stop)) { + // str = str.substr(0, it) + "UE_IPV6_ADDRESS" + str.substr(it + 1); + // } else { + // it = str.find("3", it_start, 1); + // //loggers::get_instance().log("json_codec::decode: it=%d", it); + // if ((it != std::string::npos) && (it < it_stop)) { + // str = str.substr(0, it) + "NATED_IP_ADDRESS" + str.substr(it + 1); + // } else { + // it = str.find("4", it_start, 1); + // //loggers::get_instance().log("json_codec::decode: it=%d", it); + // if ((it != std::string::npos) && (it < it_stop)) { + // str = str.substr(0, it) + "GTP_TEID" + str.substr(it + 1); + // } + // } + // } + // } + // } + // //loggers::get_instance().log("json_codec::decode: After, str=%s", str.c_str()); + // decoding_buffer.clear(); + // decoding_buffer.put_os(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); RnisAPI__TypesAndValues::S1BearerInfo s1_nearer_info; s1_nearer_info.decode(RnisAPI__TypesAndValues::S1BearerInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.s1BearerInfo() = s1_nearer_info; @@ -365,25 +385,127 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy UEAppInterfaceAPI__TypesAndValues::AppInfo appInfo; appInfo.decode(UEAppInterfaceAPI__TypesAndValues::AppInfo_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); msg.appInfo() = appInfo; - } else if (it->second.find("\"bwInfo\"") != std::string::npos) { - BwManagementAPI__TypesAndValues::BwInfo bw_info; - + } else if ((it->second.find("\"bwInfo\"") != std::string::npos) || (it->second.find("\"fixedBWPriority\"") != std::string::npos)) { // Need to change some enumerated string not supported by TTCN-3 language - if (str.find("not defined in the present document") != std::string::npos) { - str = regex_replace(str, regex("not defined in the present document"), "not_defined_in_the_present_document"); - } - if (str.find("00 = Downlink (towards the UE)") != std::string::npos) { - str = regex_replace(str, regex("00 = Downlink \\(towards the UE\\)"), "Downlink"); - } else if (str.find("01 = Uplink (towards the application/session)") != std::string::npos) { - str = regex_replace(str, regex("01 = Uplink \\(towards the application\\/session\\)"), "Uplink"); - } else if (str.find("10 = Symmetrical") != std::string::npos) { - str = regex_replace(str, regex("10 = Symmetrical"), "Symmetrical"); + while (true) { + if (str.find("\"00\"") != std::string::npos) { + str = regex_replace(str, regex("\"00\""), "\"Downlink\""); + } else if (str.find("\"01\"") != std::string::npos) { + str = regex_replace(str, regex("\"01\""), "\"Uplink\""); + } else if (str.find("\"10\"") != std::string::npos) { + str = regex_replace(str, regex("\"10\""), "\"Symmetrical\""); + } else { + loggers::get_instance().log("json_codec::decode: BwInfo in break"); + break; + } + } // End of 'while' loop + loggers::get_instance().log("json_codec::decode: BwInfo after converting enum: %s", str.c_str()); + if (it->second[0] == '[') { // BwInfoList + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + TrafficManagementAPI__TypesAndValues::BwInfoList bw_info_list; + bw_info_list.decode(TrafficManagementAPI__TypesAndValues::BwInfoList_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.bwInfoList() = bw_info_list; + } else { // BwInfo + TrafficManagementAPI__TypesAndValues::BwInfo bw_info; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + bw_info.decode(TrafficManagementAPI__TypesAndValues::BwInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.bwInfo() = bw_info; } - //loggers::get_instance().log("json_codec::decode: ##########; %s", str.c_str()); + } else if ((it->second.find("\"mtsCapabilityInfo\"") != std::string::npos) || (it->second.find("\"mtsAccessInfo\"") != std::string::npos)) { + TrafficManagementAPI__TypesAndValues::MtsCapabilityInfo mts_cap_info; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + mts_cap_info.decode(TrafficManagementAPI__TypesAndValues::MtsCapabilityInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.mtsCapabilityInfo() = mts_cap_info; + } else if ((it->second.find("\"mtsSessionInfo\"") != std::string::npos) || (it->second.find("\"mtsMode\"") != std::string::npos)) { + TrafficManagementAPI__TypesAndValues::MtsSessionInfo mts_session_info; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + mts_session_info.decode(TrafficManagementAPI__TypesAndValues::MtsSessionInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.mtsSessionInfo() = mts_session_info; + } else if ((it->second.find("\"uuUnicastProvisioningInfo\"") != std::string::npos) || (it->second.find("\"proInfoUuUnicast\"") != std::string::npos)) { + V2XInformationServiceAPI__TypesAndValues::UuUnicastProvisioningInfo uu_unicast_provisioning_info; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + uu_unicast_provisioning_info.decode(V2XInformationServiceAPI__TypesAndValues::UuUnicastProvisioningInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.uuUnicastProvisioningInfo() = uu_unicast_provisioning_info; + } else if ((it->second.find("\"uuMbmsProvisioningInfo\"") != std::string::npos) || (it->second.find("\"proInfoUuMbms\"") != std::string::npos)) { + V2XInformationServiceAPI__TypesAndValues::UuMbmsProvisioningInfo uu_mbms_provisioning_info; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + uu_mbms_provisioning_info.decode(V2XInformationServiceAPI__TypesAndValues::UuMbmsProvisioningInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.uuMbmsProvisioningInfo() = uu_mbms_provisioning_info; + } else if ((it->second.find("\"pc5ProvisioningInfo\"") != std::string::npos) || (it->second.find("\"proInfoPc5\"") != std::string::npos)) { + V2XInformationServiceAPI__TypesAndValues::Pc5ProvisioningInfo pc5_provisioning_info; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + pc5_provisioning_info.decode(V2XInformationServiceAPI__TypesAndValues::Pc5ProvisioningInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.pc5ProvisioningInfo() = pc5_provisioning_info; + } else if ((it->second.find("\"predictedQos\"") != std::string::npos) || (it->second.find("\"locationGranularity\"") != std::string::npos)) { + V2XInformationServiceAPI__TypesAndValues::PredictedQos predicted_qos; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + predicted_qos.decode(V2XInformationServiceAPI__TypesAndValues::PredictedQos_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.predictedQos() = predicted_qos; + } else if (it->second.find("\"ProvChgUuUniSubscription\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniSubscription prov_chg_uu_uni_subscription; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + prov_chg_uu_uni_subscription.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.provChgUuUniSubscription() = prov_chg_uu_uni_subscription; + } else if (it->second.find("\"ProvChgUuMbmsSubscription\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription prov_chg_uu_mbms_subscription; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + prov_chg_uu_mbms_subscription.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.provChgUuMbmsSubscription() = prov_chg_uu_mbms_subscription; + } else if (it->second.find("\"ProvChgPc5Subscription\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Subscription prov_chg_pc5_subscription; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + prov_chg_pc5_subscription.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Subscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.provChgPc5Subscription() = prov_chg_pc5_subscription; + + + } else if (it->second.find("\"ProvChgUuUniNotification\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniNotification prov_chg_uu_uni_notification; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + prov_chg_uu_uni_notification.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuUniNotification_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.provChgUuUniNotification() = prov_chg_uu_uni_notification; + } else if (it->second.find("\"ProvChgUuMbmsNotification\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsNotification prov_chg_uu_mbms_notification; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + prov_chg_uu_mbms_notification.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgUuMbmsNotification_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.provChgUuMbmsNotification() = prov_chg_uu_mbms_notification; + } else if (it->second.find("\"provChgPc5Notification\"") != std::string::npos) { + V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Notification prov_chg_pc5_notification; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + prov_chg_pc5_notification.decode(V2XInformationServiceAPI__TypesAndValues::ProvChgPc5Notification_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.provChgPc5Notification() = prov_chg_pc5_notification; + + + + } else if (it->second.find("\"AssocStaSubscription\"") != std::string::npos) { + WlanInformationAPI__TypesAndValues::AssocStaSubscription assoc_sta_subscription; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + assoc_sta_subscription.decode(WlanInformationAPI__TypesAndValues::AssocStaSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.assocStaSubscription() = assoc_sta_subscription; + } else if (it->second.find("\"StaDataRateSubscription\"") != std::string::npos) { + WlanInformationAPI__TypesAndValues::StaDataRateSubscription sta_data_rate_subscription; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + sta_data_rate_subscription.decode(WlanInformationAPI__TypesAndValues::StaDataRateSubscription_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.staDataRateSubscription() = sta_data_rate_subscription; + } else if ((it->second.find("\"apInfo\"") != std::string::npos) || (it->second.find("\"apId\"") != std::string::npos)) { + WlanInformationAPI__TypesAndValues::ApInfoList ap_info_list; + TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); + ap_info_list.decode(WlanInformationAPI__TypesAndValues::ApInfoList_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.apInfoList() = ap_info_list; + } else if ((it->second.find("\"staInfo\"") != std::string::npos) || (it->second.find("\"rssi\"") != std::string::npos)) { + WlanInformationAPI__TypesAndValues::StaInfoList sta_info_list; TTCN_Buffer decoding_buffer_(OCTETSTRING(str.length(), (const unsigned char*)str.c_str())); - bw_info.decode(BwManagementAPI__TypesAndValues::BwInfo_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); - msg.bwInfo() = bw_info; + sta_info_list.decode(WlanInformationAPI__TypesAndValues::StaInfoList_descr_, decoding_buffer_, TTCN_EncDec::CT_JSON); + msg.staInfoList() = sta_info_list; + + + + + + + + + } else if (it->second.find("\"detail\"") != std::string::npos) { LibMec__TypesAndValues::ProblemDetails problem_details; problem_details.decode(LibMec__TypesAndValues::ProblemDetails_descr_, decoding_buffer, TTCN_EncDec::CT_JSON); diff --git a/ccsrc/Protocols/Json/module.mk b/ccsrc/Protocols/Json/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..d5376a47206e3eef78c4cfec11f9708d3bbac2f1 --- /dev/null +++ b/ccsrc/Protocols/Json/module.mk @@ -0,0 +1,3 @@ +sources := json_codec.cc +includes := . + diff --git a/ccsrc/Protocols/Pcap/module.mk b/ccsrc/Protocols/Pcap/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..0f6495fd1f97d7dc021967cfb0ba521696060c50 --- /dev/null +++ b/ccsrc/Protocols/Pcap/module.mk @@ -0,0 +1,3 @@ +sources := pcap_cygwin_layer.cc pcap_layer.cc pcap_linux_layer.cc pcap_offline_layer.cc +includes := . + diff --git a/ccsrc/Protocols/Pcap/pcap_cygwin_layer.cc b/ccsrc/Protocols/Pcap/pcap_cygwin_layer.cc index 5371cb15f2e55d0904587ce30f0eaa5d1de5f245..2e3cc7a26ddd957e62c4e9f21167166814fca79f 100644 --- a/ccsrc/Protocols/Pcap/pcap_cygwin_layer.cc +++ b/ccsrc/Protocols/Pcap/pcap_cygwin_layer.cc @@ -76,7 +76,7 @@ pcap_layer::pcap_layer(const std::string& p_type, const std::string& param) : loggers::get_instance().log("pcap_layer::pcap_layer: Device %s Network address: %d", nic.c_str(), net); // Open the device - _device = pcap_open_live(nic.c_str(), 65536, 1, 200, error_buffer); + _device = pcap_open_live(nic.c_str(), 65536/*64*1024*/, 1, 100, error_buffer); if (_device == NULL) { loggers::get_instance().error("pcap_layer::pcap_layer: Failed to open device %s", nic.c_str()); return; @@ -192,7 +192,7 @@ void* pcap_layer::thread() { const u_char *pkt_data; unsigned char pkt_count = 0; - loggers::get_instance().log(">>> pcap_layer::run"); +// loggers::get_instance().log(">>> pcap_layer::run"); _running = TRUE; @@ -206,7 +206,7 @@ void* pcap_layer::thread() { continue; } if(result < 0){ - loggers::get_instance().log("<<< pcap_layer::run: error %s", pcap_geterr(_device)); +// loggers::get_instance().log("<<< pcap_layer::run: error %s", pcap_geterr(_device)); break; } @@ -219,17 +219,17 @@ void* pcap_layer::thread() { std::time_t t = pkt_header->ts.tv_sec; std::tm * pt = std::localtime( &t ); t = std::strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", pt); - std::sprintf(buf+t, ".%06ld", pkt_header->ts.tv_usec); - _o_params["timestamp"] = std::string(buf); + std::sprintf(buf+t, "%ld", pkt_header->ts.tv_sec * 1000 + static_cast(pkt_header->ts.tv_usec / 1000)); // Use milliseconds + _o_params[params::timestamp] = std::string(buf); } #else - _o_params["timestamp"] = std::to_string(pkt_header->ts.tv_usec); + _o_params[params::timestamp] = std::to_string(pkt_header->ts.tv_sec * 1000 + static_cast(pkt_header->ts.tv_usec / 1000)); // Use milliseconds #endif _o_data = OCTETSTRING(pkt_header->len, pkt_data); write(_fd[1], &pkt_count, 1);pkt_count++; } _running = FALSE; - loggers::get_instance().log("<<< pcap_layer::run"); +// loggers::get_instance().log("<<< pcap_layer::run"); return NULL; } diff --git a/ccsrc/Protocols/Pcap/pcap_layer.cc b/ccsrc/Protocols/Pcap/pcap_layer.cc index 7b2f71d55181c70ab94adbc4d62818317b303c3e..92fd09977c15008e6cb2163c7aaa8f18eecd2334 100644 --- a/ccsrc/Protocols/Pcap/pcap_layer.cc +++ b/ccsrc/Protocols/Pcap/pcap_layer.cc @@ -244,10 +244,10 @@ void pcap_layer::Handle_Fd_Event_Readable(int fd) { int result = pcap_next_ex(_device, (struct pcap_pkthdr**)&pkt_header, &pkt_data); if (result == 1) { // Succeed if (pkt_header->caplen > 14) { // Reject too small packet - //loggers::get_instance().log("pcap_layer::Handle_Fd_Event_Readable: %.6d - %d", pkt_header->ts.tv_usec, pkt_header->len); + //loggers::get_instance().log("pcap_layer::Handle_Fd_Event_Readable: %ld - % ld - %d", pkt_header->ts.tv_sec, pkt_header->ts.tv_usec, pkt_header->len); // Fill parameters from PCAP layer params params; - params.insert(std::pair(std::string("timestamp"), std::to_string(pkt_header->ts.tv_usec))); + params.insert(std::pair(params::timestamp, std::to_string(pkt_header->ts.tv_sec * 1000 + static_cast(pkt_header->ts.tv_usec / 1000)))); // Use milliseconds // Process the packet at this layer OCTETSTRING os(pkt_header->caplen, pkt_data); //loggers::get_instance().log_to_hexa("pcap_layer::Handle_Fd_Event_Readable: ", os); diff --git a/ccsrc/Protocols/Pcap/pcap_linux_layer.cc b/ccsrc/Protocols/Pcap/pcap_linux_layer.cc index 07312dfa53690bd98c18c67afddd50e2d21feb5b..3190ce650b35b97a4126fe50b39394d3b8c02bb1 100644 --- a/ccsrc/Protocols/Pcap/pcap_linux_layer.cc +++ b/ccsrc/Protocols/Pcap/pcap_linux_layer.cc @@ -59,12 +59,12 @@ pcap_layer::pcap_layer(const std::string& p_type, const std::string& param) bpf_u_int32 net, mask; // ip address and subnet mask if (pcap_lookupnet(nic.c_str(), &net, &mask, error_buffer) != 0) { loggers::get_instance().error("pcap_layer::pcap_layer: Failed to fetch newtork address for device %s", nic.c_str()); - }else{ + } else { loggers::get_instance().log("pcap_layer::pcap_layer: Device %s Network address: %d", nic.c_str(), net); } } - // Open the device - _device = pcap_open_live(nic.c_str(), 65536, 1, 100, error_buffer); // TODO Replace hard coded values by pcap_layer:: + // Open the device in promiscuous mode + _device = pcap_open_live(nic.c_str(), 65536/*64*1024*/, 1, 100, error_buffer); // TODO Replace hard coded values by pcap_layer:: if (_device == NULL) { loggers::get_instance().error("pcap_layer::pcap_layer: Failed to open device %s", nic.c_str()); return; @@ -73,7 +73,7 @@ pcap_layer::pcap_layer(const std::string& p_type, const std::string& param) if (pcap_setnonblock(_device, 1, error_buffer) != 0) { loggers::get_instance().error("pcap_layer::pcap_layer: Failed to set blocking mode: %s", error_buffer); } - // Retrieve the device file handler + // Retrieve the device file handler _pcap_h = pcap_get_selectable_fd(_device); if (_pcap_h == -1) { loggers::get_instance().error("pcap_layer::pcap_layer: Failed to get device handler"); @@ -85,14 +85,14 @@ pcap_layer::pcap_layer(const std::string& p_type, const std::string& param) it = _params.find(params::mac_src); if (it != _params.end()) { // Use online capture mac_src = it->second; - } else{ - // detect MAC address of NIC + } else { + // Detect MAC address of NIC struct ifreq ifr; memset(&ifr, 0, sizeof(ifr)); nic.copy(ifr.ifr_name, sizeof(ifr.ifr_name)); if (ioctl(_pcap_h, SIOCGIFHWADDR, &ifr) == -1) { loggers::get_instance().error("pcap_layer::pcap_layer: Failed to get device MAC address"); - }else{ + } else { char buf[13]; *_bin2hex(buf, sizeof(buf), ifr.ifr_hwaddr.sa_data, 6) = 0; mac_src = buf; @@ -178,10 +178,10 @@ void pcap_layer::Handle_Fd_Event_Readable(int fd) { int result = pcap_next_ex(_device, &pkt_header, &pkt_data); if (result == 1) { // Succeed if (pkt_header->caplen > 14) { // Reject too small packet - //loggers::get_instance().log("pcap_layer::Handle_Fd_Event_Readable: %.6d - %d", pkt_header->ts.tv_usec, pkt_header->len); + loggers::get_instance().log("pcap_layer::Handle_Fd_Event_Readable: %ld - %ld - %ld - %d", pkt_header->ts.tv_sec, pkt_header->ts.tv_usec, pkt_header->ts.tv_sec * 1000 + static_cast(pkt_header->ts.tv_usec / 1000), pkt_header->len); // Fill parameters from PCAP layer params params; - params.insert(std::pair(std::string("timestamp"), std::to_string(pkt_header->ts.tv_usec))); + params.insert(std::pair(params::timestamp, std::to_string(pkt_header->ts.tv_sec * 1000 + static_cast(pkt_header->ts.tv_usec / 1000)))); // Use milliseconds // Process the packet at this layer OCTETSTRING os(pkt_header->caplen, pkt_data); //loggers::get_instance().log_to_hexa("pcap_layer::Handle_Fd_Event_Readable: ", os); diff --git a/ccsrc/Protocols/Pcap/pcap_offline_layer.cc b/ccsrc/Protocols/Pcap/pcap_offline_layer.cc index 0f61bed296b9c6cccaa3a4b40b65c6d54965645a..e57a4b691ebd93f959d862bd86c59a2d964ef339 100644 --- a/ccsrc/Protocols/Pcap/pcap_offline_layer.cc +++ b/ccsrc/Protocols/Pcap/pcap_offline_layer.cc @@ -139,7 +139,7 @@ void* pcap_offline_layer::thread() { const u_char *pkt_data; unsigned char pkt_count = 0; - loggers::get_instance().log(">>> pcap_offline_layer::run"); +// loggers::get_instance().log(">>> pcap_offline_layer::run"); memset(&lh, 0, sizeof(lh)); @@ -197,7 +197,7 @@ void* pcap_offline_layer::thread() { write(_fd[1], &pkt_count, 1);pkt_count++; } - loggers::get_instance().log("<<< pcap_offline_layer::run"); +// loggers::get_instance().log("<<< pcap_offline_layer::run"); return NULL; } diff --git a/ccsrc/Protocols/Tcp/module.mk b/ccsrc/Protocols/Tcp/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..8231756939bc94c0fb844d5ed91486bf2602483c --- /dev/null +++ b/ccsrc/Protocols/Tcp/module.mk @@ -0,0 +1,3 @@ +sources := tcp_layer.cc +includes := . + diff --git a/ccsrc/Protocols/Tcp/tcp_layer.cc b/ccsrc/Protocols/Tcp/tcp_layer.cc index d1df2d72d8369c261f0356adb5804c8c6f54e6d0..56b117b302af2c1b80391ab87c1ff012f800651e 100644 --- a/ccsrc/Protocols/Tcp/tcp_layer.cc +++ b/ccsrc/Protocols/Tcp/tcp_layer.cc @@ -6,8 +6,6 @@ #include "tcp_layer_factory.hh" -#include "converter.hh" - #include "loggers.hh" tcp_layer::tcp_layer(const std::string & p_type, const std::string & param) : layer(p_type), SSL_Socket(), PORT(p_type.c_str()), _params(), _client_id{-1}, _time_key("tcp_layer::Handle_Fd_Event_Readable"), _reconnect_on_send{false} { @@ -23,10 +21,16 @@ tcp_layer::tcp_layer(const std::string & p_type, const std::string & param) : la } else if (it->second.compare("1") == 0) { set_socket_debugging(true); } + it = _params.find(std::string("tcp_fragmented")); + if (it == _params.cend()) { + _params.insert(std::pair(std::string("tcp_fragmented"), "0")); + } bool server_mode = false; it = _params.find(params::server_mode); if (it != _params.cend()) { - server_mode = (1 == converter::get_instance().string_to_int(it->second)); + server_mode = (1 == std::stoi(it->second)); + } else { + _params.insert(std::pair(std::string("server_mode"), "0")); } it = _params.find(params::server); if (it == _params.cend()) { @@ -35,13 +39,15 @@ tcp_layer::tcp_layer(const std::string & p_type, const std::string & param) : la if (!parameter_set(params::server.c_str(), _params[params::server].c_str())) { loggers::get_instance().warning("tcp_layer::set_parameter: Unprocessed parameter: %s", params::server.c_str()); } - set_ssl_use_ssl(false); + bool ssl_mode = false; it = _params.find(params::use_ssl); if (it == _params.cend()) { _params.insert(std::pair(std::string("use_ssl"), "0")); } else if (it->second.compare("1") == 0) { - set_ssl_use_ssl(true); + _params.insert(std::pair(std::string("use_ssl"), "1")); + ssl_mode = true; } + set_ssl_use_ssl(ssl_mode); it = _params.find(params::port); if (it == _params.cend()) { if (_params[params::use_ssl].compare("0") == 0) { // Use standard HTTP port @@ -50,7 +56,7 @@ tcp_layer::tcp_layer(const std::string & p_type, const std::string & param) : la _params.insert(std::pair(std::string("port"), "443")); } } - if (!parameter_set(params::port.c_str(), _params[params::port].c_str())) { + if (!parameter_set(remote_port_name(), _params[params::port].c_str())) { loggers::get_instance().warning("tcp_layer::set_parameter: Unprocessed parameter: %s", params::port.c_str()); } it = _params.find(params::local_port); @@ -61,26 +67,35 @@ tcp_layer::tcp_layer(const std::string & p_type, const std::string & param) : la _params.insert(std::pair(std::string("local_port"), "443")); } } - if (!parameter_set(params::local_port.c_str(), _params[params::local_port].c_str())) { + if (!parameter_set(local_port_name(), _params[params::local_port].c_str())) { loggers::get_instance().warning("tcp_layer::set_parameter: Unprocessed parameter: %s", params::local_port.c_str()); } - + parameter_set(use_connection_ASPs_name(), (!server_mode) ? "yes" : "no"); parameter_set(server_backlog_name(), "1024"); loggers::get_instance().log("tcp_layer::tcp_layer: server_mode=%x", server_mode); set_server_mode(server_mode); if (server_mode) { parameter_set("serverPort", _params[params::local_port].c_str()); + if (ssl_mode) { // Add certificate bundle + parameter_set(ssl_verifycertificate_name(), "no"); + parameter_set(ssl_private_key_file_name(), "../certificates/out/privates/486c4cb43fcbcdb5f564824ad201cffb405f3d3659fc1facd5f5cb21d4ea64e0_server_rsa.key.pem"); + parameter_set(ssl_certificate_file_name(), "../certificates/out/certs/486c4cb43fcbcdb5f564824ad201cffb405f3d3659fc1facd5f5cb21d4ea64e0_server_rsa.cert.pem"); + parameter_set(ssl_trustedCAlist_file_name(), "../certificates/out/certs/486c4cb43fcbcdb5f564824ad201cffb405f3d3659fc1facd5f5cb21d4ea64e0_server_rsa.cert.pem"); // FIXME Use a parameter + } } set_ttcn_buffer_usercontrol(false); set_handle_half_close(true); map_user(); - if (!_reconnect_on_send && !server_mode) { - open_client_connection(_params[params::server].c_str(), _params[params::port].c_str(), NULL, NULL); + parameter_set(client_TCP_reconnect_name(), "yes"); + + if (!server_mode) { + loggers::get_instance().log("tcp_layer::tcp_layer: Establish connection: %s/%s", _params[params::server].c_str(), _params[params::port].c_str()); + open_client_connection(_params[params::server].c_str(), _params[params::port].c_str(), NULL, NULL); } -} + } tcp_layer::~tcp_layer() { loggers::get_instance().log(">>> tcp_layer::~tcp_layer: %d", _client_id); @@ -109,7 +124,14 @@ void tcp_layer::send_data(OCTETSTRING& data, params& params) { loggers::get_instance().log_msg(">>> tcp_layer::send_data: ", data); loggers::get_instance().log("tcp_layer::send_data: SSL mode: %x", get_ssl_use_ssl()); + loggers::get_instance().log("tcp_layer::send_data: server_mode: %s", _params[params::server_mode].c_str()); + loggers::get_instance().log("tcp_layer::send_data: peer_list_get_nr_of_peers: %d", peer_list_get_nr_of_peers()); + if ((_params[params::server_mode].compare("0") == 0) && (peer_list_get_nr_of_peers() == 0)) { + // Reconnect (e.g. HTTP connection lost + loggers::get_instance().log("tcp_layer::send_data: Re-establish connection: %s/%s", _params[params::server].c_str(), _params[params::port].c_str()); + open_client_connection(_params[params::server].c_str(), _params[params::port].c_str(), NULL, NULL); + } send_outgoing(static_cast(data), data.lengthof(), _client_id); } diff --git a/ccsrc/externals/module.mk b/ccsrc/externals/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..3ad6730f55497ee9c6c2a2e50949b93c960623e9 --- /dev/null +++ b/ccsrc/externals/module.mk @@ -0,0 +1,2 @@ +sources := LibMec_ExternalFunctions.cc + diff --git a/ccsrc/Framework/src/loggers.cc b/ccsrc/loggers/loggers.cc similarity index 100% rename from ccsrc/Framework/src/loggers.cc rename to ccsrc/loggers/loggers.cc diff --git a/ccsrc/Framework/include/loggers.hh b/ccsrc/loggers/loggers.hh similarity index 100% rename from ccsrc/Framework/include/loggers.hh rename to ccsrc/loggers/loggers.hh diff --git a/ccsrc/loggers/module.mk b/ccsrc/loggers/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..c735f82e1383ff9c6f5adb160aad284a11784f6d --- /dev/null +++ b/ccsrc/loggers/module.mk @@ -0,0 +1,3 @@ +sources := loggers.cc +includes := . + diff --git a/config.mk b/config.mk new file mode 100644 index 0000000000000000000000000000000000000000..66a73807f16c416aa16a09be412990b667df3f65 --- /dev/null +++ b/config.mk @@ -0,0 +1,7 @@ +#TTCN3_DIR := /cygdrive/c/Tools/Titan +#WPCAP_DLL_PATH := /cygdrive/c/windows/system32/npcap/wpcap.dll +#NPCAP_INCLUDE := /cygdrive/c/PROGRA~1/Npcap/sdk/include +T3Q_PATH=./tools/t3q-v2.0.0b30 +T3Q_CONFIG=t3q.cfg +T3D_PATH=./tools/t3d-v2.0.0b30 +T3D_CONFIG=t3d.cfg diff --git a/docker/Dockerfile b/docker/Dockerfile index c01968118dc78e6ca73288e684e74b03c519bbd1..e18828995ddb3b2b3e5f0250543477ea410631a7 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,12 +1,12 @@ FROM stfubuntu:18.04 -MAINTAINER ETSI STF569 +MAINTAINER ETSI TTF T012 -LABEL description="STF569_Mec Docker Image" +LABEL description="TTF_T012_Mec Docker Image" ENV TERM=linux \ HOME=/home/etsi \ - HOSTNAME=docker-titan-STF569 + HOSTNAME=docker-titan-TTF_T012 COPY home /home/etsi diff --git a/docker/Dockerfile.stfubuntu b/docker/Dockerfile.stfubuntu index 74ca510d02b01c64d3c171c7fa97c4abdb4b3d88..991110f6ffdf5910899493d7df5517df1902bbb4 100644 --- a/docker/Dockerfile.stfubuntu +++ b/docker/Dockerfile.stfubuntu @@ -13,7 +13,7 @@ RUN echo "docker-STF-dev" > /etc/hostname \ && DEBIAN_FRONTEND=noninteractive apt-get install software-properties-common -y \ && DEBIAN_FRONTEND=noninteractive add-apt-repository ppa:linuxuprising/java -y \ && DEBIAN_FRONTEND=noninteractive apt-get update \ - && ( echo "oracle-java14-installer shared/accepted-oracle-license-v1-2 boolean true" | debconf-set-selections -v ) \ + && ( echo "oracle-java15-installer shared/accepted-oracle-license-v1-2 boolean true" | debconf-set-selections -v ) \ && DEBIAN_FRONTEND=noninteractive apt-get --allow-unauthenticated install -y \ autoconf \ bison \ @@ -32,9 +32,12 @@ RUN echo "docker-STF-dev" > /etc/hostname \ gnutls-bin \ graphviz \ iputils-ping \ + libedit2 \ + libedit-dev \ libffi-dev \ libglib2.0-dev \ libgcrypt-dev \ + libjsoncpp-dev \ libncurses5-dev \ libpcap-dev \ libqt5svg5-dev \ @@ -48,8 +51,8 @@ RUN echo "docker-STF-dev" > /etc/hostname \ lsof \ net-tools \ ntp \ - oracle-java14-installer \ - oracle-java14-set-default \ + oracle-java15-installer \ + oracle-java15-set-default \ openssh-server \ pkg-config \ python3-dev \ diff --git a/docker/README.md b/docker/README.md index 9277651dc0e0e94e976e120c031183904abd5f05..ad267e201d1dcf133dc53e80959dfaa4e285eae5 100644 --- a/docker/README.md +++ b/docker/README.md @@ -52,7 +52,7 @@ inet6:localhost Execute ```run.cmd``` or launch a command line window and run the command -```docker run -it --net=host -e DISPLAY=192.168.99.1:0 stf569_mec:latest``` +```docker run -it --net=host -e DISPLAY=192.168.99.1:0 ttf_t012_mec:latest``` NOTE: Modify the IP address in the command for the address of 'VirtualBox Hot-Only Network'. @@ -62,7 +62,7 @@ Execute ```run.sh``` or launch a command line window and run the command ```sh docker run -it --net=host -e DISPLAY=$DISPLAY \ --v /tmp/.X11-unix:/tmp/.X11-unix stf569_mec:latest +-v /tmp/.X11-unix:/tmp/.X11-unix ttf_t012_mec:latest ``` ### Import eclipse project @@ -76,14 +76,14 @@ docker run -it --net=host -e DISPLAY=$DISPLAY \ - eclipse not found: check the PATH environment variable. It shall contain $HOME/bin path. Otherwise add it: ```export PATH=$HOME/bin:$PATH``` -2. Run "File -> Import" and import the ```~/dev/STF569_Mec/STF569.tpd``` file. +2. Run "File -> Import" and import the ```~/dev/TTF_T012_Mec/TTF_T012_Mec.tpd``` file. This can take a time, be patient. **Do not run build in eclipse**, we don't have enough time. ### Build the project -```cd ~/Workspace/STF569/bin``` +```cd ~/Workspace/TTF_T012_Mec/bin``` ```make``` diff --git a/docker/build.sh b/docker/build.sh index 5b699e6b511fb69f0628e7b1ab134fe144977b9d..84135a0190f86366e84bb76706ef697b6f6bab81 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -10,10 +10,10 @@ if [ -z `docker images -q stfubuntu` ]; then docker build --no-cache --tag stfubuntu:18.04 -f Dockerfile.stfubuntu --force-rm . || exit 1 fi -docker build --no-cache --tag stf569_mec --force-rm . || ( echo "Docker build failed: $?"; exit 1 ) +docker build --no-cache --tag ttf_t012_mec --force-rm . || ( echo "Docker build failed: $?"; exit 1 ) docker images -docker inspect stf569_mec:latest || ( echo "Docker inspect failed: $?"; exit 1 ) +docker inspect ttf_t012_mec:latest || ( echo "Docker inspect failed: $?"; exit 1 ) # That's all Floks exit 0 diff --git a/docker/home/etc/init.d/40-stf569.sh b/docker/home/etc/init.d/40-stf569.sh deleted file mode 100755 index 49412d204149e1c39a906d32557e256d2ea54c69..0000000000000000000000000000000000000000 --- a/docker/home/etc/init.d/40-stf569.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -#set -e -set -vx - -echo -e "*****************************\n* Checkout STF569 sources\n*****************************\n" -mkdir -p ${HOME}/dev && cd ${HOME}/dev || exit 1 - -git clone --recurse-submodules -b devel --single-branch https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git STF569_Mec -cd /home/etsi/dev/STF569_Mec/ttcn -git clone https://forge.etsi.org/gitlab/LIBS/LibCommon.git ./LibCommon -git clone -bTTF0002 https://forge.etsi.org/gitlab/LIBS/LibIts ./LibIts -cd /home/etsi/dev/STF569_Mec/ttcn/LibIts -git checkout TTF0002 -rm -fr asn1 t3q xsd -cd ttcn && rm -fr BTP CAM Common DENM GeoNetworking Ipv6OverGeoNetworking IVIM MapemSpatem Pki Security SremSsem -echo -e "*****************************\n* Set up environment\n*****************************\n" -cd /home/etsi/dev/STF569_Mec/scripts -ln -sf /home/etsi/dev/STF569_Mec/scripts/devenv.bash.ubuntu /home/etsi/devenv.bash -. /home/etsi/devenv.bash -set -echo -e "*****************************\n* Build Mec test suite\n*****************************\n" -cd /home/etsi/dev/STF569_Mec/scripts -./update_mec_project.bash -cd /home/etsi/dev/etsi_mec/src/AtsMec/objs -../bin/mec_generate_makefile.bash - -echo -e "*****************************\n* Init Eclipse Workspace\n*****************************\n" -mkdir -p ${HOME}/dev/Workspace/STF569/bin/ -cd ${HOME}/dev/Workspace/STF569 - diff --git a/docker/home/etc/init.d/40-ttf_t012.sh b/docker/home/etc/init.d/40-ttf_t012.sh new file mode 100755 index 0000000000000000000000000000000000000000..03a44b17eb412d0b0fa0b12ebfd42379a54aa1c4 --- /dev/null +++ b/docker/home/etc/init.d/40-ttf_t012.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +#set -e +set -vx + +echo -e "*****************************\n* Checkout TTF T012 sources\n*****************************\n" +mkdir -p ${HOME}/dev && cd ${HOME}/dev || exit 1 + +git clone --recurse-submodules -b ttf_t012 --single-branch https://forge.etsi.org/rep/mec/gs032p3-ttcn-test-suite.git TTF_T012_Mec +cd /home/etsi/dev/TTF_T012_Mec/ttcn +git clone https://forge.etsi.org/gitlab/LIBS/LibCommon.git ./LibCommon +git clone -bTTF0002 https://forge.etsi.org/gitlab/LIBS/LibIts ./LibIts +cd /home/etsi/dev/TTF_T012_Mec/ttcn/LibIts +rm -fr asn1 t3q xsd +cd ttcn && rm -fr BTP CAM Common DENM GeoNetworking Ipv6OverGeoNetworking IVIM MapemSpatem Pki Security SremSsem Rtcmem + +echo -e "*****************************\n* Set up environment\n*****************************\n" +cd /home/etsi/dev/TTF_T012_Mec/scripts +ln -sf /home/etsi/dev/TTF_T012_Mec/scripts/devenv.bash.ubuntu /home/etsi/devenv.bash +. /home/etsi/devenv.bash +echo -e "*****************************\n* Apply patched \n*****************************\n" +cd /home/etsi/dev/TTF_T012_Mec +cp ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ +cp ./ttcn/patch_lib_common_titan/*.ttcn ./ttcn/LibCommon/ttcn +cp ./ttcn/patch_lib_http/*.ttcn ./ttcn/LibIts/ttcn/Http/ +cp ./ttcn/patch_lib_its/module.mk ./ttcn/LibIts/ + +echo -e "*****************************\n* Build Mec test suite\n*****************************\n" +export ATS=AtsMec +make + +echo -e "*****************************\n* Init Eclipse Workspace\n*****************************\n" + diff --git a/docker/home/etc/titan_repos.txt b/docker/home/etc/titan_repos.txt index 6b213961a725c04dc4cde2d6f34f1704a579a967..8842f4e0283928a94ebbbd37aff6b25fe27c2279 100644 --- a/docker/home/etc/titan_repos.txt +++ b/docker/home/etc/titan_repos.txt @@ -1,56 +1,56 @@ -https://github.com/eclipse/titan.core.git -https://github.com/eclipse/titan.TestPorts.Common_Components.Abstract_Socket.git -https://github.com/eclipse/titan.TestPorts.HTTPmsg.git -https://github.com/eclipse/titan.TestPorts.LANL2asp.git -https://github.com/eclipse/titan.TestPorts.PCAPasp.git -https://github.com/eclipse/titan.TestPorts.PIPEasp.git -https://github.com/eclipse/titan.TestPorts.SCTPasp.git -https://github.com/eclipse/titan.TestPorts.SIPmsg.git -https://github.com/eclipse/titan.TestPorts.SQLasp.git -https://github.com/eclipse/titan.TestPorts.TCPasp.git -https://github.com/eclipse/titan.TestPorts.TELNETasp.git -https://github.com/eclipse/titan.TestPorts.UDPasp.git -https://github.com/eclipse/titan.ProtocolModules.COMMON.git -https://github.com/eclipse/titan.ProtocolModules.DHCP.git -https://github.com/eclipse/titan.ProtocolModules.DHCPv6.git -https://github.com/eclipse/titan.ProtocolModules.DIAMETER_ProtocolModule_Generator.git -https://github.com/eclipse/titan.ProtocolModules.DNS.git -https://github.com/eclipse/titan.ProtocolModules.ICMP.git -https://github.com/eclipse/titan.ProtocolModules.ICMPv6.git -https://github.com/eclipse/titan.ProtocolModules.IP.git -https://github.com/eclipse/titan.ProtocolModules.RTP.git -https://github.com/eclipse/titan.ProtocolModules.RTSP.git -https://github.com/eclipse/titan.ProtocolModules.SMPP.git -https://github.com/eclipse/titan.ProtocolModules.SMTP.git -https://github.com/eclipse/titan.ProtocolModules.SNMP.git -https://github.com/eclipse/titan.ProtocolModules.TCP.git -https://github.com/eclipse/titan.ProtocolModules.UDP.git -https://github.com/eclipse/titan.ProtocolModules.XMPP.git -https://github.com/eclipse/titan.misc.git -https://github.com/eclipse/titan.TestPorts.LDAPasp_RFC4511.git -https://github.com/eclipse/titan.TestPorts.LDAPmsg.git -https://github.com/eclipse/titan.TestPorts.Common_Components.Socket-API.git -https://github.com/eclipse/titan.TestPorts.SSHCLIENTasp.git -https://github.com/eclipse/titan.TestPorts.STDINOUTmsg.git -https://github.com/eclipse/titan.TestPorts.SUNRPCasp.git -https://github.com/eclipse/titan.TestPorts.UNIX_DOMAIN_SOCKETasp.git -https://github.com/eclipse/titan.TestPorts.IPL4asp.git -https://github.com/eclipse/titan.ProtocolModules.FrameRelay.git -https://github.com/eclipse/titan.ProtocolModules.H248_v2.git -https://github.com/eclipse/titan.ProtocolModules.IMAP_4rev1.git -https://github.com/eclipse/titan.ProtocolModules.ICAP.git -https://github.com/eclipse/titan.ProtocolModules.IKEv2.git -https://github.com/eclipse/titan.ProtocolModules.IPsec.git -https://github.com/eclipse/titan.ProtocolModules.IUA.git -https://github.com/eclipse/titan.ProtocolModules.JSON_v07_2006.git -https://github.com/eclipse/titan.ProtocolModules.L2TP.git -https://github.com/eclipse/titan.ProtocolModules.M3UA.git -https://github.com/eclipse/titan.ProtocolModules.MIME.git -https://github.com/eclipse/titan.ProtocolModules.MSRP.git -https://github.com/eclipse/titan.ProtocolModules.PPP.git -https://github.com/eclipse/titan.ProtocolModules.ProtoBuff.git -https://github.com/eclipse/titan.ProtocolModules.RADIUS_ProtocolModule_Generator.git -https://github.com/eclipse/titan.ProtocolModules.SRTP.git -https://github.com/eclipse/titan.ProtocolModules.WebSocket.git -https://github.com/eclipse/titan.ProtocolModules.HTTP2.0.git -https://github.com/eclipse/titan.Libraries.TCCUsefulFunctions.git +https://gitlab.eclipse.org/eclipse/titan/titan.core.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.Common_Components.Abstract_Socket.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.HTTPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LANL2asp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.PCAPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.PIPEasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SCTPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SIPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SQLasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.TCPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.TELNETasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.UDPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.COMMON.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DHCP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DHCPv6.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DIAMETER_ProtocolModule_Generator.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DNS.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICMP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICMPv6.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RTSP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SMPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SMTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SNMP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.TCP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.UDP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.XMPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.misc.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LDAPasp_RFC4511.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LDAPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.Common_Components.Socket-API.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SSHCLIENTasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.STDINOUTmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SUNRPCasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.UNIX_DOMAIN_SOCKETasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.IPL4asp.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.FrameRelay.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.H248_v2.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IMAP_4rev1.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICAP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IKEv2.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IPsec.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IUA.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.JSON_v07_2006.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.L2TP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.M3UA.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MIME.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MSRP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.PPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ProtoBuff.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RADIUS_ProtocolModule_Generator.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SRTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.WebSocket.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.HTTP2.0.git +https://gitlab.eclipse.org/eclipse/titan/titan.Libraries.TCCUsefulFunctions.git diff --git a/docker/run.sh b/docker/run.sh index 8ec734bacd0b78ada8faa1e76e96a2ea31f7ac60..7d1687813e581fe2b7c27c5bb2c8127cccafda42 100755 --- a/docker/run.sh +++ b/docker/run.sh @@ -5,7 +5,7 @@ #set -e set -vx -docker run --interactive --tty --rm --publish 2222:22 --env DISPLAY=$DISPLAY --volume /tmp/.X11-unix:/tmp/.X11-unix --cap-add=NET_RAW --cap-add=NET_ADMIN stf569_mec:latest +docker run --interactive --tty --rm --publish 2222:22 --env DISPLAY=$DISPLAY --volume /tmp/.X11-unix:/tmp/.X11-unix --cap-add=NET_RAW --cap-add=NET_ADMIN ttf_t012_mec:latest # That's all Floks exit 0 diff --git a/etc/AtsMec/AtsMec_Mockoon.cf_ b/etc/AtsMec/AtsMec_Mockoon.cf_ new file mode 100644 index 0000000000000000000000000000000000000000..c3e644e00a3f3617e7bb91ad334975a47b7394cc --- /dev/null +++ b/etc/AtsMec/AtsMec_Mockoon.cf_ @@ -0,0 +1,440 @@ +[MODULE_PARAMETERS] +# This section shall contain the values of all parameters that are defined in your TTCN-3 modules. + +# IUT roles + +LibCommon_Time.PX_TAC := 30.0 +#LibCommon_Time.PX_TWAIT := 30.0 +LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; +LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; + +LibItsHttp_Pics.PICS_HEADER_HOST := "try-mec.etsi.org" #"192.168.1.39" + +LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" + +LibMec_Pics.PICS_ROOT_API := "/sbxcyccf53" # Need to sign in on https://try-mec.etsi.org/, section 'Try-it from your MEC application' + +# LibMec_Pixits +LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/queries/zones" +LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/queries/users" +LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v2/subscriptions" +LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v2/queries" +LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v2/applications" +LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v2/applications" +LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v2/transports" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v2/timing/timing_caps" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v2/timing/current_time" + +LibMec_Pics.PICS_MEC_PLAT := true + +# Mec-011 AppEnblementAPI +AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "appInst01" +AppEnablementAPI_Pixits.PX_SERVICE_NAME := "serName" +AppEnablementAPI_Pixits.PX_SERVICE_ID := "serInst01" +AppEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "1.0.0" +AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "1.0.0" +AppEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE +AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" +AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "route2home" +AppEnablementAPI_Pixits.PX_DOMAIN_NAME := "etsi.org" +AppEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" +AppEnablementAPI_Pixits.PX_TTL := 8 +AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" + +# Mec-012 RnisAPI +RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change" +RnisAPI_Pixits.PX_SUBSCRIPTION_TYPE := CELL_CHANGE +RnisAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" +RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "192.0.0.2" +RnisAPI_Pixits.PX_CELL_ID := "0x4040404" +RnisAPI_Pixits.PX_C_ID := "0xFFFFFFFF" +RnisAPI_Pixits.PX_APP_INS_ID := "01" +RnisAPI_Pixits.PX_APP_ID := "19" +RnisAPI_Pixits.PX_E_RAB_ID := 0 +RnisAPI_Pixits.PX_QCI := 0 + +# Mec-013 LocationAPI +LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true +LocationAPI_Pixits.PX_ZONE_ID := "zone02" +LocationAPI_Pixits.PX_ACCESS_POINT_ID := "4g-macro-cell-4" +LocationAPI_Pixits.PX_USER := "10.10.0.1" +LocationAPI_Pixits.PX_CLIENT_ID := "0123" +LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "subscription0123" + +UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false + +# Mec-015 TrafficManagementAPI +TrafficManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := true + +# Mec-028 WLAN Information API +LibMec_Pixits.PX_ME_WLAN_QUERIES_URI := "/wai/v2/queries" +LibMec_Pixits.PX_ME_WLAN_URI := "/wai/v2" + +#WlanInformationAPI_Pixits.PX_WLAN_FILTER_FIELD := "ap/macId" # ApInfo filter +WlanInformationAPI_Pixits.PX_WLAN_FILTER_FIELD := "staId/macId" # StatInfo filter +WlanInformationAPI_Pixits.PX_WLAN_FILTER_VALUE := "\"005C06060606\"" +WlanInformationAPI_Pixits.PX_ASSOC_STA_SUBSCRIPTION_CALLBACK := "https://yanngarcia.ddns.net/wai/v2/notif" + +# Mec-030 V2X Information Service API + +[LOGGING] +# In this section you can specify the name of the log file and the classes of events +# you want to log into the file or display on console (standard error). + +LogFile := "../logs/AtsMec/%e.%h-%r.%s" +FileMask := LOG_ALL | USER | DEBUG | MATCHING +ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING +#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT +#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT +LogSourceInfo := Stack +LogEntityName:= Yes +LogEventTypes:= Yes +#TimeStampFormat := DateTime + +[TESTPORT_PARAMETERS] +# In this section you can specify parameters that are passed to Test Ports. +#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=192.168.1.39,port=30030,use_ssl=0)" +system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=try-mec.etsi.org,port=443,use_ssl=1)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=443,use_ssl=1)" + +[DEFINE] +# In this section you can create macro definitions, +# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE]. + +[INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[ORDERED_INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[EXTERNAL_COMMANDS] +# This section can define external commands (shell scripts) to be executed by the ETS +# whenever a control part or test case is started or terminated. + +#BeginTestCase := "" +#EndTestCase := "" +#BeginControlPart := "" +#EndControlPart := "" + +[EXECUTE] +# In this section you can specify what parts of your test suite you want to execute. +#AtsMec_TestControl.control + +# ETSI GS MEC 011 +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK + +# ETSI GS MEC 012 +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_011_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_012_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_011_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_012_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_016_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_017_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_018_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_019_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_016_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_016_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_017_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_017_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_018_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_018_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_019_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_019_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_001_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_002_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_003_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_004_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_005_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_006_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_007_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_MEC012_SRV_RNIS_008_OK + +# ETSI GS MEC 013 +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCLOOK_001_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_002_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UELOCSUB_002_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UETRACKSUB_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UETRACKSUB_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UETRACKSUB_002_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UETRACKSUB_002_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFLOOK_001_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFSUB_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFSUB_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFSUB_002_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_MEC013_SRV_UEINFSUB_002_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTLOOK_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_002_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_MEC013_SRV_UEDISTSUB_002_NF + +#AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_001_OK +#AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_001_BR +#AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_001_NF +#AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_002_OK +#AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_002_BR +#AtsMec_UEidentityAPI_TestCases.TC_MEC_MEC014_SRV_UETAG_002_PF + +# ETSI GS MEC 015 +# Check that the IUT responds with the list of configured bandwidth allocations when queried by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_001_OK +# Check that the IUT responds with a configured bandwidth allocation when queried by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_002_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_002_BR +# Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_002_NF +# Check that the IUT responds with a registration and initialisation approval for the requested bandwidth requirements sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_003_OK_01 +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_003_OK_02 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_003_BR_01 +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_003_BR_02 +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_003_BR_03 +# Check that the IUT responds with the configured bandwidth allocation when queried by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_004_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_004_NF +# Check that the IUT updates the requested bandwidth requirements when commanded by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_005_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_005_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_005_NF +# Check that the IUT when provided with just the changes (deltas) updates the requested bandwidth requirements when commanded by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_006_OK +#Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_006_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_006_NF +# Check that the IUT unregisters from the Bandwidth Management Service when commanded by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_007_OK +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_TM_007_NF +# Check that the IUT responds with the Multi-access Traffic Steering information when queried by a MEC Application +#AtsMec_MultiAccessSteeringInfoAPI_TestCases.TC_MEC_MEC015_SRV_MTS_001_OK +# Check that the IUT responds with the list of configured Multi-access Traffic Steering when queried by a MEC Application +#AtsMec_MultiAccessSteeringInfoAPI_TestCases.TC_MEC_MEC015_SRV_MTS_002_OK +#Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_MTS_002_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_MTS_002_NF +# Check that the IUT responds with a configured Multi-access Traffic Steering when queried by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_MTS_003_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_MTS_003_BR +# Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application +#AtsMec_TrafficManagementAPI_TestCases.TC_MEC_MEC015_SRV_MTS_003_NF + +# ETSI GS MEC 016 + +# ETSI GS MEC 028 +# Check that the IUT responds with the list of WLAN Access Point +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_001_OK +# Check that the IUT responds with the list of WLAN Access Point filtered by the macId provided as query parameter +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_002_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_002_BR +# Check that the IUT responds with the list of Station Point +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_003_OK +# Check that the IUT responds with the list of Station Point filtered by the macId provided as query parameter +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_004_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_004_BR +# Check that the IUT responds with the requested list of subscription +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_005_OK +# Check that the IUT responds with the requested list of subscription +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_006_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_006_BR +# Check that the IUT responds with an error when a request with not existing parameters is sent +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_006_NF +# Check that the IUT responds with a Notification Subscription +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_007_OK +# Check that the IUT responds with an error when an invalid Subscription request is sent +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_007_BR +# Check that the IUT responds with an error when a request with not existing parameters is sent +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_007_NF +# Check that the IUT responds with the list of Subscription +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_008_OK +# Check that the IUT responds with an error when a request for existing subscription with incorrect parameters is sent +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_008_NF +# Check that the IUT responds with a Notification Subscription when it is modified +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_009_OK +# Check that the IUT responds with an error when an invalid field is set in the subscription modification reques +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_009_BR +# Check that the IUT responds with 204 when an existing subscription is correctly deleted +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_010_OK +# Check that the IUT responds with an error when an not existing subscription cannot be deleted +#AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_010_NF +# Check that the IUT sends a notification about WLAN event notification if the MEC service has an associated subscription and the event is generated +AtsMec_WlanInformationAPI_TestCases.TC_MEC_MEC028_SRV_WAI_011_OK + +# ETSI GS MEC 030 +# Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_001_OK_01 +# Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_001_OK_02 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_001_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_001_NF +# Check that the IUT responds with a configured provisioning information over Uu MBMS when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_OK_01 +# Check that the IUT responds with a configured provisioning information over Uu MBMS when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_OK_02 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_002_NF +# Check that the IUT responds with a configured provisioning information over PC5 when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_003_OK_01 +# Check that the IUT responds with a configured provisioning information over PC5 when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_003_OK_02 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_003_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_003_NF +# Check that the IUT sends a request about QoS information for a vehicular UE when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_004_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_004_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_004_NF +# Check that the IUT processes properly a request to publish a V2X message +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_005_OK +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_005_BR +# Check that the IUT responds with the requested list of subscription when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_006_OK_01 +# Check that the IUT responds with the requested list of subscription when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_006_OK_02 +# Check that the IUT responds with the requested list of subscription when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_006_OK_03 +# Check that the IUT responds with the requested list of subscription when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_006_OK_04 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_006_BR +# Check that the IUT responds with the requested to create a subscription +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_01 +# Check that the IUT responds with the requested to create a subscription +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_02 +# Check that the IUT responds with the requested to create a subscription +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_03 +# Check that the IUT responds with the requested to create a subscription +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_OK_04 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_007_BR +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_01 +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_02 +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application#AtsMec_V2XInformationServiceAPI_TestCases.TC_#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_03 +# Check that the IUT responds with the requested of subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_OK_04 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_008_NF +# Check that the IUT responds with the request of updating subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_01 +# Check that the IUT responds with the request of updating subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_02 +# Check that the IUT responds with the request of updating subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_03 +# Check that the IUT responds with the request of updating subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_OK_04 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_BR +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_009_NF +# Check that the IUT responds with the request of removing subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_01 +# Check that the IUT responds with the request of removing subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_02 +# Check that the IUT responds with the request of removing subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_03 +# Check that the IUT responds with the request of removing subscription information when queried by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_OK_04 +# Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application +#AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC030_SRV_V2X_010_NF +# Check that the IUT sends a notification about WLAN event notification if the MEC service has an associated subscription and the event is generated +AtsMec_V2XInformationServiceAPI_TestCases.TC_MEC_MEC028_SRV_WAI_011_OK + +[GROUPS] +# In this section you can specify groups of hosts. These groups can be used inside the +# [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts. + +[COMPONENTS] +# This section consists of rules restricting the location of created PTCs. + +[MAIN_CONTROLLER] +# The options herein control the behavior of MC. +KillTimer := 10.0 +LocalAddress := 127.0.0.1 +TCPPort := 12000 +NumHCs := 1 diff --git a/etc/AtsMec/AtsMec_Sandbox.cf_ b/etc/AtsMec/AtsMec_Sandbox.cf_ new file mode 100644 index 0000000000000000000000000000000000000000..a8f94d47c827dcecff7d4b46a3f9008d8883556b --- /dev/null +++ b/etc/AtsMec/AtsMec_Sandbox.cf_ @@ -0,0 +1,239 @@ +[MODULE_PARAMETERS] +# This section shall contain the values of all parameters that are defined in your TTCN-3 modules. + +# IUT roles + +LibCommon_Time.PX_TAC := 30.0 +#LibCommon_Time.PX_TWAIT := 30.0 +LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; +LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; + +LibItsHttp_Pics.PICS_HEADER_HOST := "try-mec.etsi.org" + +LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" + +LibMec_Pics.PICS_ROOT_API := "sbxog70p4h" # Need to sign in on https://try-mec.etsi.org/, section 'Try-it from your MEC application' + +# LibMec_Pixits +LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/queries/zones" +LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/queries/users" +LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v2/subscriptions" +LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v2/queries" +LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v2/applications" +LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v2/applications" +LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v2/transports" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v2/timing/timing_caps" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v2/timing/current_time" + +# Mec-011 AppEnblementAPI +AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "appInst01" +AppEnablementAPI_Pixits.PX_SERVICE_NAME := "serName" +AppEnablementAPI_Pixits.PX_SERVICE_ID := "serInst01" +AppEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "1.0.0" +AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "1.0.0" +AppEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE +AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" +AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "route2home" +AppEnablementAPI_Pixits.PX_DOMAIN_NAME := "etsi.org" +AppEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" +AppEnablementAPI_Pixits.PX_TTL := 8 +AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" + +# Mec-012 RnisAPI +RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change" +RnisAPI_Pixits.PX_SUBSCRIPTION_TYPE := CELL_CHANGE +RnisAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" +RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "192.0.0.2" +RnisAPI_Pixits.PX_CELL_ID := "0x4040404" +RnisAPI_Pixits.PX_C_ID := "0xFFFFFFFF" +RnisAPI_Pixits.PX_APP_INS_ID := "01" +RnisAPI_Pixits.PX_APP_ID := "19" +RnisAPI_Pixits.PX_E_RAB_ID := 0 +RnisAPI_Pixits.PX_QCI := 0 + +# Mec-013 LocationAPI +LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true +LocationAPI_Pixits.PX_ZONE_ID := "zone02" +LocationAPI_Pixits.PX_ACCESS_POINT_ID := "4g-macro-cell-4" +LocationAPI_Pixits.PX_USER := "10.10.0.1" +LocationAPI_Pixits.PX_CLIENT_ID := "0123" +LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "subscription0123" + +UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false + +BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false + +[LOGGING] +# In this section you can specify the name of the log file and the classes of events +# you want to log into the file or display on console (standard error). + +LogFile := "../logs/AtsMec/%e.%h-%r.%s" +FileMask := LOG_ALL | USER | DEBUG | MATCHING +ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING +#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT +#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT +LogSourceInfo := Stack +LogEntityName:= Yes +LogEventTypes:= Yes +#TimeStampFormat := DateTime + +[TESTPORT_PARAMETERS] +# In this section you can specify parameters that are passed to Test Ports. +system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=try-mec.etsi.org,port=443,use_ssl=1)" +#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=try-mec.etsi.org,port=443,use_ssl=1)" +#system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8081,use_ssl=1)" + +[DEFINE] +# In this section you can create macro definitions, +# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE]. + +[INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[ORDERED_INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[EXTERNAL_COMMANDS] +# This section can define external commands (shell scripts) to be executed by the ETS +# whenever a control part or test case is started or terminated. + +#BeginTestCase := "" +#EndTestCase := "" +#BeginControlPart := "" +#EndControlPart := "" + +[EXECUTE] +# In this section you can specify what parts of your test suite you want to execute. +#AtsMec_TestControl.control +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_NF +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_OK +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_BR +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF + +# ETSI GS MEC 013 +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_NF + +# ETSI GS MEC 012 +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_001_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_002_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_003_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_004_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_005_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_006_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK + +# ETSI GS MEC 011 +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK + +[GROUPS] +# In this section you can specify groups of hosts. These groups can be used inside the +# [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts. + +[COMPONENTS] +# This section consists of rules restricting the location of created PTCs. + +[MAIN_CONTROLLER] +# The options herein control the behavior of MC. +KillTimer := 10.0 +LocalAddress := 127.0.0.1 +TCPPort := 12000 +NumHCs := 1 diff --git a/etc/AtsMec/AtsMec_Simu.cf_ b/etc/AtsMec/AtsMec_Simu.cf_ new file mode 100644 index 0000000000000000000000000000000000000000..1c4783ec1db92bbcab341ea1c13d8f3e524b25a5 --- /dev/null +++ b/etc/AtsMec/AtsMec_Simu.cf_ @@ -0,0 +1,239 @@ +[MODULE_PARAMETERS] +# This section shall contain the values of all parameters that are defined in your TTCN-3 modules. + +# IUT roles + +LibCommon_Time.PX_TAC := 30.0 +#LibCommon_Time.PX_TWAIT := 30.0 +LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; +LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; + +LibItsHttp_Pics.PICS_HEADER_HOST := "127.0.0.1" + +LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" + +LibMec_Pics.PICS_ROOT_API := "" # Need to sign in on https://try-mec.etsi.org/, section 'Try-it from your MEC application' + +# LibMec_Pixits +LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/queries/zones" +LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/queries/users" +LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v2/subscriptions" +LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v2/queries" +LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v2/applications" +LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v2/applications" +LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v2/transports" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v2/timing/timing_caps" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v2/timing/current_time" + +# Mec-011 AppEnblementAPI +AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "appInst01" +AppEnablementAPI_Pixits.PX_SERVICE_NAME := "serName" +AppEnablementAPI_Pixits.PX_SERVICE_ID := "serInst01" +AppEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "1.0.0" +AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "1.0.0" +AppEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE +AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" +AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "route2home" +AppEnablementAPI_Pixits.PX_DOMAIN_NAME := "etsi.org" +AppEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" +AppEnablementAPI_Pixits.PX_TTL := 8 +AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" + +# Mec-012 RnisAPI +RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change" +RnisAPI_Pixits.PX_SUBSCRIPTION_TYPE := CELL_CHANGE +RnisAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" +RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "192.0.0.2" +RnisAPI_Pixits.PX_CELL_ID := "0x4040404" +RnisAPI_Pixits.PX_C_ID := "0xFFFFFFFF" +RnisAPI_Pixits.PX_APP_INS_ID := "01" +RnisAPI_Pixits.PX_APP_ID := "19" +RnisAPI_Pixits.PX_E_RAB_ID := 0 +RnisAPI_Pixits.PX_QCI := 0 + +# Mec-013 LocationAPI +LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true +LocationAPI_Pixits.PX_ZONE_ID := "zone02" +LocationAPI_Pixits.PX_ACCESS_POINT_ID := "4g-macro-cell-4" +LocationAPI_Pixits.PX_USER := "10.10.0.1" +LocationAPI_Pixits.PX_CLIENT_ID := "0123" +LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "subscription0123" + +UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false + +BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false + +[LOGGING] +# In this section you can specify the name of the log file and the classes of events +# you want to log into the file or display on console (standard error). + +LogFile := "../logs/AtsMec/%e.%h-%r.%s" +FileMask := LOG_ALL | USER | DEBUG | MATCHING +ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING +#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT +#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT +LogSourceInfo := Stack +LogEntityName:= Yes +LogEventTypes:= Yes +#TimeStampFormat := DateTime + +[TESTPORT_PARAMETERS] +# In this section you can specify parameters that are passed to Test Ports. +#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=try-mec.etsi.org,port=443,use_ssl=1)" +system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=127.0.0.1,port=8081,use_ssl=0)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8082,use_ssl=1)" + +[DEFINE] +# In this section you can create macro definitions, +# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE]. + +[INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[ORDERED_INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[EXTERNAL_COMMANDS] +# This section can define external commands (shell scripts) to be executed by the ETS +# whenever a control part or test case is started or terminated. + +#BeginTestCase := "" +#EndTestCase := "" +#BeginControlPart := "" +#EndControlPart := "" + +[EXECUTE] +# In this section you can specify what parts of your test suite you want to execute. +#AtsMec_TestControl.control +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_NF +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_OK +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_BR +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF + +# ETSI GS MEC 013 +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_NF + +# ETSI GS MEC 012 +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_001_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_002_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_003_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_004_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_005_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_006_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK + +# ETSI GS MEC 011 +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK + +[GROUPS] +# In this section you can specify groups of hosts. These groups can be used inside the +# [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts. + +[COMPONENTS] +# This section consists of rules restricting the location of created PTCs. + +[MAIN_CONTROLLER] +# The options herein control the behavior of MC. +KillTimer := 10.0 +LocalAddress := 127.0.0.1 +TCPPort := 12000 +NumHCs := 1 diff --git a/etc/AtsMec/AtsMec_Zte.cf_ b/etc/AtsMec/AtsMec_Zte.cf_ new file mode 100644 index 0000000000000000000000000000000000000000..34b4aa47800c93be0de58fbf265972cb31b34b74 --- /dev/null +++ b/etc/AtsMec/AtsMec_Zte.cf_ @@ -0,0 +1,243 @@ +[MODULE_PARAMETERS] +# This section shall contain the values of all parameters that are defined in your TTCN-3 modules. + +# IUT roles + +LibCommon_Time.PX_TAC := 30.0 +#LibCommon_Time.PX_TWAIT := 30.0 +LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; +LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; + +LibItsHttp_Pics.PICS_HEADER_HOST := "172.22.16.202" + +LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" + +LibMec_Pics.PICS_ROOT_API := "zte" +LibMec_Pics.PICS_RNIS_NOTIFICATIONS := false + +# LibMex_Pixits +LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/zones" +LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/users" +LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v1/subscriptions" +LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v1/queries" +LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v1/applications" +LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v1/applications" +LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v1/transports" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v1/timing/timing_caps" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v1/timing/current_time" + +# Mec-011 AppEnblementAPI +AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "12345678901234567890" +AppEnablementAPI_Pixits.PX_SERVICE_NAME := "testservice23" +AppEnablementAPI_Pixits.PX_SERVICE_ID := "testservice23" +AppEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "1.0.0" +AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "1.0.0" +AppEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE +AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" +AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "dnsrule1" +AppEnablementAPI_Pixits.PX_DOMAIN_NAME := "etsi.org" +AppEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" +AppEnablementAPI_Pixits.PX_TTL := 8 +AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" + +# Mec-012 RnisAPI +RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change" +RnisAPI_Pixits.PX_SUBSCRIPTION_TYPE := CELL_CHANGE +RnisAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" +RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "192.0.0.2" +RnisAPI_Pixits.PX_CELL_ID := "0x0800000A" +RnisAPI_Pixits.PX_C_ID := "0xFFFFFFFF" +RnisAPI_Pixits.PX_APP_INS_ID := "01" +RnisAPI_Pixits.PX_APP_ID := "19" +RnisAPI_Pixits.PX_E_RAB_ID := 0 +RnisAPI_Pixits.PX_QCI := 0 + +# Mec-013 LocationAPI +LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true +LocationAPI_Pixits.PX_ZONE_ID := "zone1" +LocationAPI_Pixits.PX_USER := "ue1" +LocationAPI_Pixits.PX_CLIENT_ID := "0123" +LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "subscription0123" + +UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false + +BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false + +[LOGGING] +# In this section you can specify the name of the log file and the classes of events +# you want to log into the file or display on console (standard error). + +LogFile := "../logs/%e.%h-%r.%s" +FileMask := LOG_ALL | USER | DEBUG | MATCHING +ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING +#FileMask := LOG_ALL | USER | DEBUG | MATCHING +#ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING +LogSourceInfo := Stack +LogEntityName:= Yes +LogEventTypes:= Yes +#TimeStampFormat := DateTime + +[TESTPORT_PARAMETERS] +# In this section you can specify parameters that are passed to Test Ports. +#MEC-011 +system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.22.16.202,port=30104,use_ssl=0)" +# MEC-013 +#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.22.16.202,port=30101,use_ssl=0)" +#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.28.4.253,port=30007,use_ssl=0)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8081,use_ssl=0)" + +[DEFINE] +# In this section you can create macro definitions, +# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE]. + +[INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[ORDERED_INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[EXTERNAL_COMMANDS] +# This section can define external commands (shell scripts) to be executed by the ETS +# whenever a control part or test case is started or terminated. + +#BeginTestCase := "" +#EndTestCase := "" +#BeginControlPart := "" +#EndControlPart := "" + +[EXECUTE] +# In this section you can specify what parts of your test suite you want to execute. +#AtsMec_TestControl.control +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_NF +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_OK +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_BR +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF + +# ETSI GS MEC 013 +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK +#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_NF + +# ETSI GS MEC 012 +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_NF + +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_001_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_002_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_003_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_004_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_005_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_006_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK + +# ETSI GS MEC 011 +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_NF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_NF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_PF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_NF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_BR +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_NF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_NF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_001_OK +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_NF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_PF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_BR +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_NF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_NF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_BR +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_NF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_NF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_001_OK +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_002_OK +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_PF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK + +[GROUPS] +# In this section you can specify groups of hosts. These groups can be used inside the +# [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts. + +[COMPONENTS] +# This section consists of rules restricting the location of created PTCs. + +[MAIN_CONTROLLER] +# The options herein control the behavior of MC. +KillTimer := 10.0 +LocalAddress := 127.0.0.1 +TCPPort := 12000 +NumHCs := 1 diff --git a/etc/AtsMec/AtsMec.cfg b/etc/AtsMec/AtsMec_Zte_MEC011.cf_ similarity index 59% rename from etc/AtsMec/AtsMec.cfg rename to etc/AtsMec/AtsMec_Zte_MEC011.cf_ index 29d44bc7600d64ddabf8050782193ffd8593e795..602717fb8abcc6301dc028bd8518583544d1f30f 100644 --- a/etc/AtsMec/AtsMec.cfg +++ b/etc/AtsMec/AtsMec_Zte_MEC011.cf_ @@ -8,34 +8,38 @@ LibCommon_Time.PX_TAC := 30.0 LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; -LibItsHttp_Pics.PICS_HEADER_HOST := "172.22.1.6" +LibItsHttp_Pics.PICS_HEADER_HOST := "172.22.16.202" LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true #LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" -LibMec_Pics.PICS_ROOT_API := "etsi-013" -LibMec_Pics.PICS_ROOT_API := "etsi-013" +LibMec_Pics.PICS_ROOT_API := "zte" +LibMec_Pics.PICS_RNIS_NOTIFICATIONS := false # LibMex_Pixits -LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v1/zones" -LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v1/users" +LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/zones" +LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/users" LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v1/subscriptions" LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v1/queries" LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v1/applications" +LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v1/applications" +LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v1/transports" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v1/timing/timing_caps" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v1/timing/current_time" # Mec-011 AppEnblementAPI -AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "appInst01" -AppEnablementAPI_Pixits.PX_SERVICE_NAME := "serName" -AppEnablementAPI_Pixits.PX_SERVICE_ID := "serInst01" +AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "12345678901234567890" +AppEnablementAPI_Pixits.PX_SERVICE_NAME := "testservice23" +AppEnablementAPI_Pixits.PX_SERVICE_ID := "testservice23" AppEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "1.0.0" -AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "1.0.0" +AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "2.0.0" AppEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE -AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" -AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "route2home" +AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "12345678901234567890-1" +AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "dnsrule1" AppEnablementAPI_Pixits.PX_DOMAIN_NAME := "etsi.org" AppEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" -AppEnablementAPI_Pixits.PX_TTL := 0 +AppEnablementAPI_Pixits.PX_TTL := 8 AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" # Mec-012 RnisAPI @@ -66,12 +70,10 @@ BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false # you want to log into the file or display on console (standard error). LogFile := "../logs/%e.%h-%r.%s" -#FileMask := LOG_ALL | USER | DEBUG | MATCHING -#ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING FileMask := LOG_ALL | USER | DEBUG | MATCHING -FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING -ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT +#FileMask := LOG_ALL | USER | DEBUG | MATCHING +#ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING LogSourceInfo := Stack LogEntityName:= Yes LogEventTypes:= Yes @@ -79,11 +81,12 @@ LogEventTypes:= Yes [TESTPORT_PARAMETERS] # In this section you can specify parameters that are passed to Test Ports. -system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.22.1.6,port=31007,use_ssl=0)" -system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.22.1.6,port=31007,use_ssl=0)" +#MEC-011 +system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.22.16.202,port=30104,use_ssl=0)" +# MEC-013 +#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.22.16.202,port=30101,use_ssl=0)" #system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.28.4.253,port=30007,use_ssl=0)" system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8081,use_ssl=0)" -system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8081,use_ssl=0)" [DEFINE] # In this section you can create macro definitions, @@ -109,123 +112,121 @@ system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server [EXECUTE] # In this section you can specify what parts of your test suite you want to execute. #AtsMec_TestControl.control -#AtsMec_TestControl.control -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_NF #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_NF #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_OK -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_OK -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_BR #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_BR #AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF -#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF # ETSI GS MEC 013 -AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF - #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF - #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF - -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF - -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK #AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF -#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF - -#AtsMec_RadioNodeLocationAPI_TestCases.TP_MEC_SRV_RLOCLOOK_001_OK -#AtsMec_RadioNodeLocationAPI_TestCases.TP_MEC_SRV_RLOCLOOK_001_OK - -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_BR +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_OK +#AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_NF + +# ETSI GS MEC 012 #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_NF #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_NF #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_NF #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_NF #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_NF #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_NF #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_BR -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_NF #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_NF #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_001_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_001_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_002_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_002_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_003_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_003_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_004_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_004_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_005_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_005_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_006_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_006_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK -#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK #AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK +# ETSI GS MEC 011 +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_PF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_NF +AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_002_OK #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK -#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF #AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK [GROUPS] # In this section you can specify groups of hosts. These groups can be used inside the diff --git a/etc/AtsMec/AtsMec_Zte_MEC013.cf_ b/etc/AtsMec/AtsMec_Zte_MEC013.cf_ new file mode 100644 index 0000000000000000000000000000000000000000..9831094baa079976d5c18257982618dcc18645d1 --- /dev/null +++ b/etc/AtsMec/AtsMec_Zte_MEC013.cf_ @@ -0,0 +1,239 @@ +[MODULE_PARAMETERS] +# This section shall contain the values of all parameters that are defined in your TTCN-3 modules. + +# IUT roles + +LibCommon_Time.PX_TAC := 30.0 +#LibCommon_Time.PX_TWAIT := 30.0 +LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0; +LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0; + +LibItsHttp_Pics.PICS_HEADER_HOST := "172.22.16.202" + +LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json" +LibItsHttp_Pics.PICS_USE_TOKEN_HEADER := true +#LibItsHttp_Pics.PICS_TOKEN_HEADER := "Basic WrongToken" + +LibMec_Pics.PICS_ROOT_API := "zte" +LibMec_Pics.PICS_RNIS_NOTIFICATIONS := false + +# LibMex_Pixits +LibMec_Pixits.PX_ME_APP_Q_ZONE_ID_URI := "/location/v2/zones" +LibMec_Pixits.PX_ME_APP_Q_USERS_LIST_URI := "/location/v2/users" +LibMec_Pixits.PX_RNIS_SUBSCRITIONS_URI := "/rni/v1/subscriptions" +LibMec_Pixits.PX_RNIS_QUERIES_URI := "/rni/v1/queries" +LibMec_Pixits.PX_MEC_SVC_MGMT_APPS_URI := "/mec_service_mgmt/v1/applications" +LibMec_Pixits.PX_ME_APP_SUPPORT_URI := "/mec_app_support/v1/applications" +LibMec_Pixits.PX_SVC_MGMT_TRANS_URI := "/mec_service_mgmt/v1/transports" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CAPS_URI := "/mec_app_support/v1/timing/timing_caps" +LibMec_Pixits.PX_ME_APP_SUPPORT_TIMING_CURRENT_URI := "/mec_app_support/v1/timing/current_time" + +# Mec-011 AppEnblementAPI +AppEnablementAPI_Pixits.PX_APP_INSTANCE_ID := "appInst01" +AppEnablementAPI_Pixits.PX_SERVICE_NAME := "serName" +AppEnablementAPI_Pixits.PX_SERVICE_ID := "serInst01" +AppEnablementAPI_Pixits.PX_SERVICE_INFO_VERSION := "1.0.0" +AppEnablementAPI_Pixits.PX_NEW_SERVICE_INFO_VERSION := "1.0.0" +AppEnablementAPI_Pixits.PX_SERVICE_INFO_STATE := ACTIVE +AppEnablementAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" +AppEnablementAPI_Pixits.PX_DNS_RULE_ID := "route2home" +AppEnablementAPI_Pixits.PX_DOMAIN_NAME := "etsi.org" +AppEnablementAPI_Pixits.PX_IP_ADDRESS := "10.10.0.2" +AppEnablementAPI_Pixits.PX_TTL := 8 +AppEnablementAPI_Pixits.PX_TRAFFIC_RULE_ID := "trafficRuleId01" + +# Mec-012 RnisAPI +RnisAPI_Pixits.PX_SUBSCRIPTION_HREF_VALUE := "cell_change" +RnisAPI_Pixits.PX_SUBSCRIPTION_TYPE := CELL_CHANGE +RnisAPI_Pixits.PX_SUBSCRIPTION_ID := "7777" +RnisAPI_Pixits.PX_ASSOCIATE_ID_VALUE := "192.0.0.2" +RnisAPI_Pixits.PX_CELL_ID := "0x0800000A" +RnisAPI_Pixits.PX_C_ID := "0xFFFFFFFF" +RnisAPI_Pixits.PX_APP_INS_ID := "01" +RnisAPI_Pixits.PX_APP_ID := "19" +RnisAPI_Pixits.PX_E_RAB_ID := 0 +RnisAPI_Pixits.PX_QCI := 0 + +# Mec-013 LocationAPI +LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := true +LocationAPI_Pixits.PX_ZONE_ID := "zone01" +LocationAPI_Pixits.PX_USER := "acr:10.0.0.3" +LocationAPI_Pixits.PX_CLIENT_ID := "0123" +LocationAPI_Pixits.PX_SUBSCRIPTION_ID := "0123" + +UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED := false + +BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false + +[LOGGING] +# In this section you can specify the name of the log file and the classes of events +# you want to log into the file or display on console (standard error). + +LogFile := "../logs/%e.%h-%r.%s" +#FileMask := LOG_ALL | USER | DEBUG | MATCHING +#ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING +FileMask := LOG_ALL | USER | DEBUG | MATCHING +ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING +LogSourceInfo := Stack +LogEntityName:= Yes +LogEventTypes:= Yes +#TimeStampFormat := DateTime + +[TESTPORT_PARAMETERS] +# In this section you can specify parameters that are passed to Test Ports. +system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.22.16.202,port=30101,use_ssl=0)" +#system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.28.4.253,port=30007,use_ssl=0)" +system.httpPort_notif.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server_mode=1,local_port=8081,use_ssl=0)" + +[DEFINE] +# In this section you can create macro definitions, +# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE]. + +[INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[ORDERED_INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[EXTERNAL_COMMANDS] +# This section can define external commands (shell scripts) to be executed by the ETS +# whenever a control part or test case is started or terminated. + +#BeginTestCase := "" +#EndTestCase := "" +#BeginControlPart := "" +#EndControlPart := "" + +[EXECUTE] +# In this section you can specify what parts of your test suite you want to execute. +#AtsMec_TestControl.control +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_OK +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_BR +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_NF +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_OK +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_BR +#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF + +# ETSI GS MEC 013 +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_OK +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_BR +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCLOOK_001_NF +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_OK +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_001_BR +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_OK +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UELOCSUB_002_NF +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_OK +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_001_BR +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_OK +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UETRACKSUB_002_NF +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_OK +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_BR +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFLOOK_001_NF +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_OK +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_001_BR +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK +AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF +AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_OK +AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_RLOCLOOK_001_NF +AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_OK +AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_001_BR +AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_OK +AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEAREASUB_002_NF +AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_OK +AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTLOOK_001_BR +AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_OK +AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_001_BR +AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_OK +AtsMec_RadioNodeLocationAPI_TestCases.TC_MEC_SRV_UEDISTSUB_002_NF + +# ETSI GS MEC 012 +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_017_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_018_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_BR +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_019_NF +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_001_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_002_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_003_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_004_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_005_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_006_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_007_OK +#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_008_OK + +# ETSI GS MEC 011 +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_001_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSAQ_004_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_APPSUB_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_DNS_003_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_001_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SAQ_002_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_002_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_SRVSUB_004_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TIME_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_OK +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_BR +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_NF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_003_PF +#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK + +[GROUPS] +# In this section you can specify groups of hosts. These groups can be used inside the +# [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts. + +[COMPONENTS] +# This section consists of rules restricting the location of created PTCs. + +[MAIN_CONTROLLER] +# The options herein control the behavior of MC. +KillTimer := 10.0 +LocalAddress := 127.0.0.1 +TCPPort := 12000 +NumHCs := 1 diff --git a/etc/TestCodec/TestCodec.cfg b/etc/TestCodec/TestCodec.cfg deleted file mode 100644 index a5c8765286753433c6113c9509e63168230f811d..0000000000000000000000000000000000000000 --- a/etc/TestCodec/TestCodec.cfg +++ /dev/null @@ -1,71 +0,0 @@ -[MODULE_PARAMETERS] -# This section shall contain the values of all parameters that are defined in your TTCN-3 modules. - -#LibItsHttp_Pics.PICS_HEADER_HOST := "httpbin.org" -LibItsHttp_Pics.PICS_HEADER_HOST := "ptsv2.com" -#LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/held+xml;charset=utf-8"; - -LibCommon_Time.PX_TAC := 30.0 - -[LOGGING] -# In this section you can specify the name of the log file and the classes of events -# you want to log into the file or display on console (standard error). - -LogFile := "../logs/%e.%h-%r.%s" -FileMask := LOG_ALL | USER | DEBUG | MATCHING | DEBUG_ENCDEC -ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING | DEBUG_ENCDEC -#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP -#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP -LogSourceInfo := Stack -LogEntityName:= Yes -LogEventTypes:= Yes -#TimeStampFormat := DateTime - -[TESTPORT_PARAMETERS] -# In this section you can specify parameters that are passed to Test Ports. -#system.httpPort.params := "HTTP(codecs=held:held_codec;html:html_codec;json:json_codec)/TCP(debug=1,server=ptsv2.com,port=80,use_ssl=0)" -# For manual testing, use this command: openssl s_client -connect nghttp2.org:443 -msg -#system.httpPort.params := "HTTP(codecs=held:held_codec;html:html_codec;json:json_codec)/TCP(debug=1,server=nghttp2.org,port=443,use_ssl=1)" - -#system.SIPP.params := "SIP/UDP_PCAP(dst_ip=192.168.1.250,dst_port=5060,src_ip=192.168.1.253,src_port=5060)/ETH(mac_src=080027d2b658,mac_dst=90fd61e61902,eth_type=0800)/PCAP(mac_src=080027d2b658,nic=eth1,filter=and udp port 12345)" - -[DEFINE] -# In this section you can create macro definitions, -# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE]. - -[INCLUDE] -# To use configuration settings given in other configuration files, -# the configuration files just need to be listed in this section, with their full or relative pathnames. - -[ORDERED_INCLUDE] -# To use configuration settings given in other configuration files, -# the configuration files just need to be listed in this section, with their full or relative pathnames. - -[EXTERNAL_COMMANDS] -# This section can define external commands (shell scripts) to be executed by the ETS -# whenever a control part or test case is started or terminated. - -#BeginTestCase := "" -#EndTestCase := "" -#BeginControlPart := "" -#EndControlPart := "" - -[EXECUTE] -# In this section you can specify what parts of your test suite you want to execute. -TestCodec_External.tc_encode_LocationInfo -TestCodec_External.tc_encode_UserInfo -TestCodec_External.tc_encode_UeIdentityTags - -[GROUPS] -# In this section you can specify groups of hosts. These groups can be used inside the -# [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts. - -[COMPONENTS] -# This section consists of rules restricting the location of created PTCs. - -[MAIN_CONTROLLER] -# The options herein control the behavior of MC. -KillTimer := 10.0 -LocalAddress := 127.0.0.1 -TCPPort := 12000 -NumHCs := 1 diff --git a/scripts/f.bash b/scripts/f.bash new file mode 100755 index 0000000000000000000000000000000000000000..9e2bb399203a9b59c6085597f70effb5d49e2be6 --- /dev/null +++ b/scripts/f.bash @@ -0,0 +1,19 @@ +#!/bin/bash +#set -vx + +if [ "$1" == "" ] +then + echo "Search In Files usage: f.bash " + echo " : With default = ttcn" + echo " e.g.: f.bash module ttcn" + exit 0 +fi + +EXT=ttcn +if [ "$2" != "" ] +then + EXT=$2 +fi +find .. -type f -name "*.$EXT" -exec grep -nH $1 {} \; + +exit $? diff --git a/scripts/mec_generate_makefile.bash b/scripts/mec_generate_makefile.bash deleted file mode 100644 index ec9c3ca4a69b446197f7b09dbf2c69fac694e547..0000000000000000000000000000000000000000 --- a/scripts/mec_generate_makefile.bash +++ /dev/null @@ -1,216 +0,0 @@ -#!/bin/bash -#set -e -set -vx - -function f_exit { - cd ${CURPWD} - - unset TTCN_FILES - unset CC_FILES - unset CFG_FILES - unset EXECUTABLE - echo $1 - exit $2 -} - -function f_usage { - echo "build.bash: This script import from External Disk the " - echo "Optional arguments:" - echo " prof: Generate a makefile including profiling options (e.g. ./build.bash prof)" - exit 0 -} - -clear - -if [ "$1" == "help" ] -then - f_usage -fi - -ATS_NAME=Mec - -#CURPWD=`pwd` -if [ ! "${PWD##*/}" == "objs" ] -then - cd ../objs - if [ ! $? == 0 ] - then - echo "Please move to PROJECT/obj directory" - exit 1 - fi -fi -# Remove everything -rm -fr ../objs/*.hh -rm -fr ../objs/*.cc -rm -fr ../objs/*.log -rm -fr ../objs/*.o -rm -fr ../objs/Makefile - -# Remove useless files -find .. -type f -name "*~" -exec rm {} \; -find .. -type f -name "*.bak" -exec rm {} \; -find .. -type f -name "*.log" -exec rm {} \; - -# Build JSON files if any and put them in objs directory -REFERENCES="LibCommon LibHttp LibMec LibMec/LocationAPI LibMec/UEidentityAPI LibMec/RnisAPI LibMec/BwManagementAPI LibMec/Ams LibMec/AppEna LibMec/AppLCM LibMec/Grant LibMec/FixedAccessInformationAPI LibMec/MeoPkgm LibMec/MepmPkgm LibMec/UEAppInterfaceAPI LibMec/UEidentityAPI" -for i in ${REFERENCES} -do - # TTCN code - for j in `find ${PATH_DEV_MEC}/src/$i/ttcn -type f -name "*.ttcn"`; - do - ln -sf $j ../ttcn/`basename $j` - done - # Include source code - files=`find ${PATH_DEV_MEC}/src/$i/include -type f` - if [ "${files}" != " " ] - then - for j in ${files}; - do - ln -sf $j ../include/`basename $j` - done - fi - # CC source code - files=`find ${PATH_DEV_MEC}/src/$i/src -type f` - if [ "${files}" != " " ] - then - for j in ${files}; - do - ln -sf $j ../src/`basename $j` - done - fi -done - -# Generate the list of the TTCN-3 files -TTCN_FILES=`find .. -name '*.ttcn*'` - -# Start ATS generation - Step 1 -if [ "${OSTYPE}" == "cygwin" ] -then - rm ../bin/*.exe ../lib/*.dll - compiler.exe -b -e -f -g -l -L -M -n -O -t -r -R -U none -X ${TTCN_FILES} 2>&1 3>&1 | tee build.log - if [ "$?" == "1" ] - then - f_exit "Failed to compile ATS" 4 - fi -else - compiler -b -e -f -g -l -L -M -n -O -t -r -R -U none -X ${TTCN_FILES} 2>&1 3>&1 | tee build.log - if [ "$?" == "1" ] - then - f_exit "Failed to generate ATS source code" 6 - fi -fi - -# Sart ATS generation - Step 2 -# Create working variables -CC_FILES=`find ../src -name '*.c*'` -FWK_FILES=`find ${PATH_DEV_MEC}/framework/ -name '*.c*'` -CFG_FILES=`find ../etc -name '*.cfg'` - -# Sart ATS generation - Step 3 -if [ "${OSTYPE}" == "cygwin" ] -then - ttcn3_makefilegen.exe -d -f -g -m -M -R -U none -e Ats${ATS_NAME} ${TTCN_FILES} ${CC_FILES} ${FWK_FILES} ${CFG_FILES} | tee --append build.log - if [ "$?" == "1" ] - then - f_exit "Failed to compile ATS" 5 - fi -else - ttcn3_makefilegen -d -f -g -m -M -R -U none -e Ats${ATS_NAME} ${TTCN_FILES} ${CC_FILES} ${FWK_FILES} ${CFG_FILES} | tee --append build.log - if [ "$?" == "1" ] - then - f_exit "Failed to generate ATS source code" 7 - fi -fi - -# Remove port skeletons to use src/ -for i in `ls ../include/*.hh` -do - if [ -f ./`basename $i` ] - then - rm ./`basename $i` - fi -done -for i in `ls ../src/*.cc` -do - if [ -f ./`basename $i` ] - then - rm ./`basename $i` - fi -done - -# Check if Makefile was generated -if [ ! -f ./Makefile ] -then - f_exit "Failed to generate ATS source code" 8 -fi - -# Patch ATS generated files -#./bin/patch.bash 2>&1 3>&1 | tee --append build.log -# Add compiler/linker options -# -DASN_DISABLE_OER_SUPPORT is required for CAMCodec and DENMCodec -if [ "$1" == "prof" ] -then - if [ "${OSTYPE}" == "cygwin" ] - then - CXXFLAGS_DEBUG_MODE='s/-Wall/-pg -Wall -std=c++11 -fPIC -D_XOPEN_SOURCE=700 -DAS_USE_SSL -DENABLE_TRACE -pthreads -fstack-check -fstack-protector -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer/g' - else - CXXFLAGS_DEBUG_MODE='s/-Wall/-pg -Wall -std=c++11 -fPIC -DAS_USE_SSL -DENABLE_TRACE -pthreads -fstack-check -fstack-protector -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer/g' - fi - LDFLAGS_DEBUG_MODE='s/LDFLAGS = /LDFLAGS = -pg -pthread -fPIC -fstack-check -fstack-protector -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer/g' -else - if [ "${OSTYPE}" == "cygwin" ] - then - CXXFLAGS_DEBUG_MODE='s/-Wall/-ggdb -O0 -Wall -std=c++11 -fPIC -DAS_USE_SSL -DENABLE_TRACE -D_XOPEN_SOURCE=700 -pthread -fstack-check -fstack-protector -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer/g' - else - CXXFLAGS_DEBUG_MODE='s/-Wall/-ggdb -O0 -Wall -std=c++11 -fPIC -DAS_USE_SSL -DENABLE_TRACE -pthread -fstack-check -fstack-protector -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer/g' - fi - LDFLAGS_DEBUG_MODE='s/LDFLAGS = /LDFLAGS = -g -pthread -fPIC -fstack-check -fstack-protector -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer/g' -fi -ADD_INCLUDE='/CPPFLAGS = /a\\CPPFLAGS += -I/usr/local/share -I$(PATH_DEV_MEC)/include -I$(PATH_DEV_MEC)/framework/include -I../include -I../../LibMec/Common/include -I../../LibMec/include -I$(HOME_FRAMEWORKS)/osip/include -I$(HOME_INC) -I.' -ADD_LIBRARIES='s/LINUX_LIBS = -lxml2/LINUX_LIBS = -lrt -lxml2 -lpcap -lstdc++fs -lssl -L\$\(HOME_FRAMEWORKS\)\/osip\/src\/osipparser2\/\.libs -losipparser2/g' -sed --in-place "${CXXFLAGS_DEBUG_MODE}" ./Makefile -sed --in-place "${LDFLAGS_DEBUG_MODE}" ./Makefile -sed --in-place "${ADD_INCLUDE}" ./Makefile -sed --in-place "${ADD_LIBRARIES}" ./Makefile -# Update COMPILER_FLAGS -COMPILER_FLAGS='s/COMPILER_FLAGS = /COMPILER_FLAGS = -e -O /g' -sed --in-place "${COMPILER_FLAGS}" ./Makefile -# Update clean clause -CLEAN_LINE='s/$(RM) $(EXECUTABLE)/$(RM) ..\/bin\/$(EXECUTABLE) ..\/src\/*.o/g' -sed --in-place "${CLEAN_LINE}" ./Makefile -# Move binary file command -EXECUTABLE=MyExample -MV_CMD='s/all: $(TARGET) ;/all: $(TARGET) ; @if [ -f ..\/objs\/$(EXECUTABLE) ]; then mv ..\/objs\/$(EXECUTABLE) ..\/bin; fi ;/g' -sed --in-place "${MV_CMD}" ./Makefile -# Add run command -ADD_HOST='/PLATFORM = /aHOST=127.0.0.1' -ADD_PORT='/PLATFORM = /aPORT=12000' -sed --in-place "${ADD_PORT}" ./Makefile -sed --in-place "${ADD_HOST}" ./Makefile -ADD_RUN_LINE_1='$arun: all' -ADD_RUN_LINE_2='$a\\t@$(PWD)/../bin/$(EXECUTABLE) $(HOST) $(PORT)' -sed --in-place "${ADD_RUN_LINE_1}" ./Makefile -sed --in-place "${ADD_RUN_LINE_2}" ./Makefile -ADD_RUN_LINE_1='$arun_d: all' -ADD_RUN_LINE_2='$a\\t@gdb --args $(PWD)/../bin/$(EXECUTABLE) $(HOST) $(PORT)' -sed --in-place "${ADD_RUN_LINE_1}" ./Makefile -sed --in-place "${ADD_RUN_LINE_2}" ./Makefile -ADD_RUN_LINE_1='$arun_v: all' -ADD_RUN_LINE_2='$a\\t@valgrind -v --tool=memcheck --leak-check=yes --show-reachable=yes --track-fds=yes --run-cxx-freeres=yes $(PWD)/../bin/$(EXECUTABLE) $(HOST) $(PORT)' -sed --in-place "${ADD_RUN_LINE_1}" ./Makefile -sed --in-place "${ADD_RUN_LINE_2}" ./Makefile -# Add gendoc entry -ADD_RUN_LINE_1='$agendoc: ../docs/o2.cfg' -ADD_RUN_LINE_2='$a\\tdoxygen ../docs/o2.cfg' -sed --in-place "${ADD_RUN_LINE_1}" ./Makefile -sed --in-place "${ADD_RUN_LINE_2}" ./Makefile - -# Build all -make all 2>&1 3>&1 | tee --append build.log -if [ "$?" == "1" ] -then - f_exit "Failed to generate ATS source code" 9 -fi -export LD_LIBRARY_PATH=~/frameworks/osip/src/osipparser2/.libs:$LD_LIBRARY_PATH -../bin/Ats${ATS_NAME} -v -f_exit "Build done successfully" 0 diff --git a/scripts/merge_mec_project.bash b/scripts/merge_mec_project.bash deleted file mode 100755 index 12fb86bd01e01a81084eeb22716678e424e21f07..0000000000000000000000000000000000000000 --- a/scripts/merge_mec_project.bash +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/bash - -# Debug mode -#set -e -#set -vx - -# Usage: sudo ./merge_mec_project.bash -# TODO Use git clone in temporary directory - -OLDPWD=`pwd` - -# Storing path -VAGRANT_DIR=~/tmp -if [ ! -d ${VAGRANT_DIR} ] -then - exit -1 -else - VAGRANT_DIR=${VAGRANT_DIR}/to_be_merged - if [ -d ${VAGRANT_DIR} ] - then - rm -f ${VAGRANT_DIR}/* - else - mkdir ${VAGRANT_DIR} - fi -fi -chmod 775 ${VAGRANT_DIR} - -# Execution path -RUN_PATH="${0%/*}" -PATH_DEV_MEC=`pwd`/../../etsi_mec -SRC_MEC_PATH=~/dev/STF569_Mec - -# Update ETSI Framework files -echo 'Merging ETSI Framework files' -FWK_SRC_PATH=${SRC_MEC_PATH}/ccsrc -FWK_DST_PATH=${PATH_DEV_MEC}/framework -FWK_DIR_LIST_HH=`find ${FWK_SRC_PATH}/Protocols/ -name "*.h*" -type f` -for i in ${FWK_DIR_LIST_HH} -do - BN=`basename $i` - s1=`sha256sum -b $i | cut -d' ' -f1` - s2=`sha256sum -b ${FWK_DST_PATH}/include/${BN} | cut -d' ' -f1` - if [ "${s1}" != "${s2}" ] - then - cp ${FWK_DST_PATH}/include/${BN} ${VAGRANT_DIR} - if [ -f ${FWK_DST_PATH}/include/${BN}~ ] - then - rm ${FWK_DST_PATH}/include/${BN}~ - fi - fi -done -FWK_DIR_LIST_CC=`find ${FWK_SRC_PATH}/Protocols/ -name "*.c*" -type f` -for i in ${FWK_DIR_LIST_CC} -do - BN=`basename $i` - s1=`sha256sum -b $i | cut -d' ' -f1` - s2=`sha256sum -b ${FWK_DST_PATH}/src/${BN} | cut -d' ' -f1` - if [ "${s1}" != "${s2}" ] - then - cp ${FWK_DST_PATH}/src/${BN} ${VAGRANT_DIR} - if [ -f ${FWK_DST_PATH}/src/${BN}~ ] - then - rm ${FWK_DST_PATH}/src/${BN}~ - fi - fi -done -FWK_DIR_LIST_Y=`find ${FWK_SRC_PATH}/Protocols/ -name "*.y" -type f` -for i in ${FWK_DIR_LIST_Y} -do - BN=`basename $i` - s1=`sha256sum -b $i | cut -d' ' -f1` - s2=`sha256sum -b ${FWK_DST_PATH}/src/${BN} | cut -d' ' -f1` - if [ "${s1}" != "${s2}" ] - then - cp ${FWK_DST_PATH}/src/${BN} ${VAGRANT_DIR} - if [ -f ${FWK_DST_PATH}/src/${BN}~ ] - then - rm ${FWK_DST_PATH}/src/${BN}~ - fi - fi -done -FWK_DIR_LIST_L=`find ${FWK_SRC_PATH}/Protocols/ -name "*.l" -type f` -for i in ${FWK_DIR_LIST_L} -do - BN=`basename $i` - s1=`sha256sum -b $i | cut -d' ' -f1` - s2=`sha256sum -b ${FWK_DST_PATH}/src/${BN} | cut -d' ' -f1` - if [ "${s1}" != "${s2}" ] - then - cp ${FWK_DST_PATH}/src/${BN} ${VAGRANT_DIR} - if [ -f ${FWK_DST_PATH}/src/${BN}~ ] - then - rm ${FWK_DST_PATH}/src/${BN}~ - fi - fi -done -FWK_DIR_LIST_HH=`find ${FWK_SRC_PATH}/Framework/ -name "*.h*" -type f` -FWK_DIR_LIST_CC=`find ${FWK_SRC_PATH}/Framework/ -name "*.c*" -type f` -for i in ${FWK_DIR_LIST_HH} -do - BN=`basename $i` - s1=`sha256sum -b $i | cut -d' ' -f1` - s2=`sha256sum -b ${FWK_DST_PATH}/include/${BN} | cut -d' ' -f1` - if [ "${s1}" != "${s2}" ] - then - cp ${FWK_DST_PATH}/include/${BN} ${VAGRANT_DIR} - if [ -f ${FWK_DST_PATH}/include/${BN}~ ] - then - rm ${FWK_DST_PATH}/include/${BN}~ - fi - fi -done -for i in ${FWK_DIR_LIST_CC} -do - BN=`basename $i` - s1=`sha256sum -b $i | cut -d' ' -f1` - s2=`sha256sum -b ${FWK_DST_PATH}/src/${BN} | cut -d' ' -f1` - if [ "${s1}" != "${s2}" ] - then - cp ${FWK_DST_PATH}/src/${BN} ${VAGRANT_DIR} - if [ -f ${FWK_DST_PATH}/src/${BN}~ ] - then - rm ${FWK_DST_PATH}/src/${BN}~ - fi - fi -done -FWK_DIR_LIST_HH=`find ${FWK_SRC_PATH}/loggers/ -name "*.h*" -type f` -for i in ${FWK_DIR_LIST_HH} -do - BN=`basename $i` - s1=`sha256sum -b $i | cut -d' ' -f1` - s2=`sha256sum -b ${FWK_DST_PATH}/include/${BN} | cut -d' ' -f1` - if [ "${s1}" != "${s2}" ] - then - cp ${FWK_DST_PATH}/include/${BN} ${VAGRANT_DIR} - if [ -f ${FWK_DST_PATH}/include/${BN}~ ] - then - rm ${FWK_DST_PATH}/include/${BN}~ - fi - fi -done -FWK_DIR_LIST_CC=`find ${FWK_SRC_PATH}/loggers/ -name "*.c*" -type f` -for i in ${FWK_DIR_LIST_CC} -do - BN=`basename $i` - s1=`sha256sum -b $i | cut -d' ' -f1` - s2=`sha256sum -b ${FWK_DST_PATH}/src/${BN} | cut -d' ' -f1` - if [ "${s1}" != "${s2}" ] - then - cp ${FWK_DST_PATH}/src/${BN} ${VAGRANT_DIR} - if [ -f ${FWK_DST_PATH}/src/${BN}~ ] - then - rm ${FWK_DST_PATH}/src/${BN}~ - fi - fi -done -# Update ATS TTCN-3 files -echo 'Update TTCN-3 files' -TTCN_3_ORG_PATH=${SRC_MEC_PATH}/ttcn -TTCN_3_DST_PATH=${PATH_DEV_MEC}/src -TTCN_3_ATS_LIST='AtsMec LibMec LibMec/LocationAPI LibMec/UEidentityAPI LibMec/RnisAPI LibMec/BwManagementAPI LibHttp LibCommon' -for i in ${TTCN_3_ATS_LIST} -do - # TTCN-3 files - LIST_TTCN_FILES=`find ${TTCN_3_ORG_PATH}/$i -name "*.ttcn" -type f` - for j in ${LIST_TTCN_FILES} - do - BN=`basename $j` - s1=`sha256sum -b $j | cut -d' ' -f1` - s2=`sha256sum -b ${TTCN_3_DST_PATH}/$i/ttcn/${BN} | cut -d' ' -f1` - if [ "${s1}" != "${s2}" ] - then - cp ${TTCN_3_DST_PATH}/$i/ttcn/${BN} ${VAGRANT_DIR} - fi - done - # JSON files - LIST_TTCN_FILES=`find ${TTCN_3_ORG_PATH}/$i -name "*.json" -type f` - for j in ${LIST_TTCN_FILES} - do - BN=`basename $j` - s1=`sha256sum -b $j | cut -d' ' -f1` - s2=`sha256sum -b ${TTCN_3_DST_PATH}/$i/ttcn/${BN} | cut -d' ' -f1` - if [ "${s1}" != "${s2}" ] - then - cp ${TTCN_3_DST_PATH}/$i/json/${BN} ${VAGRANT_DIR} - fi - done - # Other files - if [ -f ${SRC_MEC_PATH}/docs/$i/o2.cfg ] - then - s1=`sha256sum -b ${PATH_DEV_MEC}/src/$i/docs/o2.cfg | cut -d' ' -f1` - s2=`sha256sum -b ${SRC_MEC_PATH}/docs/$i/o2.cfg | cut -d' ' -f1` - if [ "${s1}" != "${s2}" ] - then - mkdir -p ${VAGRANT_DIR}/docs/$i - cp ${PATH_DEV_MEC}/src/$i/docs/o2.cfg ${VAGRANT_DIR}/docs/$i - fi - fi - if [ -f ${SRC_MEC_PATH}/etc/$i/$i.cfg ] - then - s1=`sha256sum -b ${PATH_DEV_MEC}/src/$i/etc/$i.cfg | cut -d' ' -f1` - s2=`sha256sum -b ${SRC_MEC_PATH}/etc/$i/$i.cfg | cut -d' ' -f1` - if [ "${s1}" != "${s2}" ] - then - mkdir -p ${VAGRANT_DIR}/etc/$i - cp ${PATH_DEV_MEC}/src/$i/etc/%i.cfg ${VAGRANT_DIR}/etc/$i - fi - fi -done - -TTCN_3_LIB_LIST='AtsMec' -for i in ${TTCN_3_LIB_LIST} -do - LIST_TTCN_FILES=`find ${TTCN_3_ORG_PATH}/$i -name "*.ttcn" -type f` - for j in ${LIST_TTCN_FILES} - do - BN=`basename $j` - s1=`sha256sum -b $j | cut -d' ' -f1` - s2=`sha256sum -b ${TTCN_3_DST_PATH}/$i/ttcn/${BN} | cut -d' ' -f1` - if [ "${s1}" != "${s2}" ] - then - cp ${TTCN_3_DST_PATH}/$i/ttcn/${BN} ${VAGRANT_DIR} - rm ${TTCN_3_DST_PATH}/$i/ttcn/${BN}~ - fi - done -done - - -LIST_FILES=`find ${PATH_DEV_MEC} -name "*~" -type f` -for i in ${LIST_FILES} -do - BN=$i - BN=${BN:: -1} # Remove the last character - cp ${BN} ${VAGRANT_DIR} - rm $i -done - -chmod -R 664 ${VAGRANT_DIR}/*.* -exit 0 - diff --git a/scripts/run_all.bash b/scripts/run_all.bash index 9361d6004c8637869d2bb456a630b637d7313381..fd921d1d2e4f1fa52576d00074cbce890a9c8ad2 100755 --- a/scripts/run_all.bash +++ b/scripts/run_all.bash @@ -4,7 +4,11 @@ clear -export LD_LIBRARY_PATH=/home/${USER}/frameworks/osip/src/osipparser2/.libs:$LD_LIBRARY_PATH +if [ -z $ATS ] +then + echo "ATS shall be defined" + exit 1 +fi if ! [[ $1 =~ "^[0-9]+$" ]] then @@ -13,26 +17,29 @@ else COUNTER=1 fi +if [ $COUNTER == 0 ] +then + COUNTER=1 + cd .. && make && cd - +fi + CURPWD=`pwd` -if [ ! "${PWD##*/}" == "objs" ] +if [ ! "${PWD##*/}" == "scripts" ] then - cd ../objs + cd ../scripts if [ ! $? == 0 ] then - echo "Please move to PROJECT/obj directory" + echo "Please move to PROJECT/scripts directory" exit 1 fi fi -for i in `ls ../logs/merged.*.log` -do - rm -f $i -done +rm ../logs/$ATS/*.log for i in $(seq 1 1 $COUNTER) do - LD_LIBRARY_PATH=/home/${USER}/frameworks/osip/src/osipparser2/.libs:$LD_LIBRARY_PATH ../bin/run_mtc.bash & - LD_LIBRARY_PATH=/home/${USER}/frameworks/osip/src/osipparser2/.libs:$LD_LIBRARY_PATH ../bin/run_ptcs.bash $2 + ./run_mtc.bash & + ./run_ptcs.bash dup=$(ps -ef | grep "$0" | grep -v grep | wc -l) while [ ${dup} -eq 3 ] @@ -41,8 +48,8 @@ do dup=$(ps -ef | grep "$0" | grep -v grep | wc -l) done sleep 1 - - mv ../logs/merged.log ../logs/merged.`date +'%Y%m%d%S'`.log + + mv ../logs/$ATS/merged.log ../logs/$ATS/merged.`date +'%Y%m%d%S'`.log done exit 0 diff --git a/scripts/run_mtc.bash b/scripts/run_mtc.bash index a4932c24103634b54ee5343fbea8162d1e841680..0559a9eaa0bd77cbbbdbd85f61678d8367e14861 100755 --- a/scripts/run_mtc.bash +++ b/scripts/run_mtc.bash @@ -1,20 +1,27 @@ #!/bin/bash -#set -evx +#set -e +#set -vx clear +if [ -z $ATS ] +then + echo "ATS shall be defined" + exit 1 +fi + CURPWD=`pwd` -if [ ! "${PWD##*/}" == "objs" ] +if [ ! "${PWD##*/}" == "scripts" ] then - cd ../objs + cd ../scripts if [ ! $? == 0 ] then - echo "Please move to PROJECT/obj directory" + echo "Please move to PROJECT/scripts directory" exit 1 fi fi -TITAN_LOG_DIR=../logs +TITAN_LOG_DIR=../logs/$ATS if [ ! -d ${TITAN_LOG_DIR} ] then mkdir ${TITAN_LOG_DIR} @@ -22,33 +29,20 @@ else rm -f ${TITAN_LOG_DIR}/*.log fi -CFG_FILES=`find ../etc -name '*.cfg'` -#LOG_FILES=`find ${TITAN_LOG_DIR} -name '*.log'` -#mv ${LOG_FILES} ../logs - -#if [ "${OSTYPE}" == "cygwin" ] -#then -# # Remove dll -# rm ./*.dll -# ## Copy the new ones -# cp ~/lib/libhelper.dll . -# cp ~/lib/libconverter.dll . -# cp ~/lib/liblogger.dll . -# cp ~/lib/libttcn3_tri.dll . -# cp ~/lib/libcomm.dll . -#fi +CFG_FILES=`find ../etc/$ATS -name '*.cfg'` echo "> cmtc: to create the MTC server" echo "> smtc [module_name[[.control]|.testcase_name|.*]: when MyExample is connected, run the TCs in [EXECUTE] section" echo "> emtc: Terminate MTC." mctr ${CFG_FILES} +sudo chown -R `whoami` ${TITAN_LOG_DIR} LOG_FILES=`find ${TITAN_LOG_DIR} -name '*.log'` if [ "${TITAN_LOG_DIR}" != "" ] then ttcn3_logmerge -o ${TITAN_LOG_DIR}/merged.log ${LOG_FILES} ttcn3_logformat -o ${TITAN_LOG_DIR}/merged_formated.log ${TITAN_LOG_DIR}/merged.log - mv ${TITAN_LOG_DIR}/merged_formated.log ${TITAN_LOG_DIR}/merged.log + mv ${TITAN_LOG_DIR}/merged_formated.log ${TITAN_LOG_DIR}/merged.log echo "log files were merged into ${TITAN_LOG_DIR}/merged.log" fi diff --git a/scripts/run_mtc_simu.bash b/scripts/run_mtc_simu.bash deleted file mode 100755 index 17061877636d88653409f5cf4b1c7d8362e8949e..0000000000000000000000000000000000000000 --- a/scripts/run_mtc_simu.bash +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash -#set -evx - -clear - -CURPWD=`pwd` -if [ ! "${PWD##*/}" == "objs" ] -then - cd ../objs - if [ ! $? == 0 ] - then - echo "Please move to PROJECT/obj directory" - exit 1 - fi -fi - -TITAN_LOG_DIR=../logs/simu -if [ ! -d ${TITAN_LOG_DIR} ] -then - mkdir ${TITAN_LOG_DIR} -else - rm -f ${TITAN_LOG_DIR}/*.log -fi - -CFG_FILES=../etc/simu/AtsNg112.cfg -#LOG_FILES=`find ${TITAN_LOG_DIR} -name '*.log'` -#mv ${LOG_FILES} ../logs - -#if [ "${OSTYPE}" == "cygwin" ] -#then -# # Remove dll -# rm ./*.dll -# ## Copy the new ones -# cp ~/lib/libhelper.dll . -# cp ~/lib/libconverter.dll . -# cp ~/lib/liblogger.dll . -# cp ~/lib/libttcn3_tri.dll . -# cp ~/lib/libcomm.dll . -#fi - -echo "> cmtc: to create the MTC server" -echo "> smtc [module_name[[.control]|.testcase_name|.*]: when MyExample is connected, run the TCs in [EXECUTE] section" -echo "> emtc: Terminate MTC." -mctr ${CFG_FILES} - -LOG_FILES=`find ${TITAN_LOG_DIR} -name '*.log'` -if [ "${TITAN_LOG_DIR}" != "" ] -then - ttcn3_logmerge -o ${TITAN_LOG_DIR}/merged.log ${LOG_FILES} - ttcn3_logformat -o ${TITAN_LOG_DIR}/merged_formated.log ${TITAN_LOG_DIR}/merged.log - mv ${TITAN_LOG_DIR}/merged_formated.log ${TITAN_LOG_DIR}/merged.log - echo "log files were merged into ${TITAN_LOG_DIR}/merged.log" -fi - -cd ${CURPWD} diff --git a/scripts/run_ptcs.bash b/scripts/run_ptcs.bash index 869220b927916d4fb61ae17656659a0d9c1a8f6a..1c097d445d09ed82c6c8e934e7e57c03fe142474 100755 --- a/scripts/run_ptcs.bash +++ b/scripts/run_ptcs.bash @@ -4,13 +4,19 @@ clear +if [ -z $ATS ] +then + echo "ATS shall be defined" + exit 1 +fi + CURPWD=`pwd` -if [ ! "${PWD##*/}" == "objs" ] +if [ ! "${PWD##*/}" == "scripts" ] then - cd ../objs + cd ../scripts if [ ! $? == 0 ] then - echo "Please move to PROJECT/obj directory" + echo "Please move to PROJECT/scripts directory" exit 1 fi fi @@ -19,20 +25,12 @@ if [ -f ./core ] then rm -f ./core fi -if [ "$1" == "d" ] -then - make run_d -elif [ "$1" == "v" ] + +if [ "$ATS" == "AtsRSUsSimulator" ] then - make run_v + sudo LD_LIBRARY_PATH=$LD_LIBRARY_PATH ../bin/$ATS 127.0.0.1 12001 else - make run + sudo LD_LIBRARY_PATH=$LD_LIBRARY_PATH ../bin/$ATS 127.0.0.1 12000 fi -#if [ "${OSTYPE}" == "cygwin" ] -#then -# ../bin/SIPmsg.exe 127.0.0.1 12000 -#else -# ../bin/SIPmsg 127.0.0.1 12000 -#fi cd ${CURPWD} diff --git a/scripts/run_ptcs_simu.bash b/scripts/run_ptcs_simu.bash deleted file mode 100755 index 8026ab4491e58ea3af19eda25305257d02ea5a3d..0000000000000000000000000000000000000000 --- a/scripts/run_ptcs_simu.bash +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -#set -e -#set -vx - -clear - -CURPWD=`pwd` -if [ ! "${PWD##*/}" == "objs" ] -then - cd ../objs - if [ ! $? == 0 ] - then - echo "Please move to PROJECT/obj directory" - exit 1 - fi -fi - -@sudo LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(PWD)/../bin/$(EXECUTABLE) 127.0.0.1 12666 - -cd ${CURPWD} diff --git a/scripts/run_tshark.bash b/scripts/run_tshark.bash deleted file mode 100755 index 7b12fa40fc256be2ba529f2a5671d9a3b1870b62..0000000000000000000000000000000000000000 --- a/scripts/run_tshark.bash +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Debug mode -#set -vx -set -e - -~/frameworks/wireshark-build/run/tshark -ieth1 -V -f"ether proto 0x8947 or udp src port 12345 or udp dst port 12345" -Tfields -eframe.time -eeth.dst -eeth.src -eeth.type -edata diff --git a/scripts/testcodec_generate_makefile.bash b/scripts/testcodec_generate_makefile.bash deleted file mode 100755 index 37cd6b579699e08a79b43079e1fdc6cc9d8153ba..0000000000000000000000000000000000000000 --- a/scripts/testcodec_generate_makefile.bash +++ /dev/null @@ -1,215 +0,0 @@ -#!/bin/bash -#set -e -set -vx - -function f_exit { - cd ${CURPWD} - - unset TTCN_FILES - unset CC_FILES - unset CFG_FILES - unset EXECUTABLE - echo $1 - exit $2 -} - -function f_usage { - echo "build.bash: This script import from External Disk the " - echo "Optional arguments:" - echo " prof: Generate a makefile including profiling options (e.g. ./build.bash prof)" - exit 0 -} - -clear - -if [ "$1" == "help" ] -then - f_usage -fi - -ATS_NAME=TestCodec - -#CURPWD=`pwd` -if [ ! "${PWD##*/}" == "objs" ] -then - cd ../objs - if [ ! $? == 0 ] - then - echo "Please move to PROJECT/obj directory" - exit 1 - fi -fi -# Remove everything -rm -fr ../objs/*.hh -rm -fr ../objs/*.cc -rm -fr ../objs/*.log -rm -fr ../objs/*.o -rm -fr ../objs/Makefile - -# Remove useless files -find .. -type f -name "*~" -exec rm {} \; -find .. -type f -name "*.bak" -exec rm {} \; -find .. -type f -name "*.log" -exec rm {} \; - -REFERENCES="LibCommon LibHttp LibMec LibMec/LocationAPI LibMec/UEidentityAPI" -for i in ${REFERENCES} -do - # TTCN code - for j in `find ${PATH_DEV_MEC}/src/$i/ttcn -type f -name "*.ttcn"`; - do - ln -sf $j ../ttcn/`basename $j` - done - # Include source code - files=`find ${PATH_DEV_MEC}/src/$i/include -type f` - if [ "${files}" != " " ] - then - for j in ${files}; - do - ln -sf $j ../include/`basename $j` - done - fi - # CC source code - files=`find ${PATH_DEV_MEC}/src/$i/src -type f` - if [ "${files}" != " " ] - then - for j in ${files}; - do - ln -sf $j ../src/`basename $j` - done - fi -done - -# Generate the list of the TTCN-3 files -TTCN_FILES=`find .. -name '*.ttcn*'` - -# Start ATS generation - Step 1 -if [ "${OSTYPE}" == "cygwin" ] -then - rm ../bin/*.exe ../lib/*.dll - compiler.exe -b -e -f -g -l -L -M -n -O -t -r -R -U none -X ${TTCN_FILES} 2>&1 3>&1 | tee build.log - if [ "$?" == "1" ] - then - f_exit "Failed to compile ATS" 4 - fi -else - compiler -b -e -f -g -l -L -M -n -O -t -r -R -U none -X ${TTCN_FILES} 2>&1 3>&1 | tee build.log - if [ "$?" == "1" ] - then - f_exit "Failed to generate ATS source code" 6 - fi -fi - -# Sart ATS generation - Step 2 -# Create working variables -CC_FILES=`find ../src -name '*.c*'` -FWK_FILES=`find ${PATH_DEV_MEC}/framework/ -name '*.c*'` -CFG_FILES=`find ../etc -name '*.cfg'` - -# Sart ATS generation - Step 3 -if [ "${OSTYPE}" == "cygwin" ] -then - ttcn3_makefilegen.exe -d -f -g -m -M -R -U none -e Ats${ATS_NAME} ${TTCN_FILES} ${CC_FILES} ${FWK_FILES} ${CFG_FILES} | tee --append build.log - if [ "$?" == "1" ] - then - f_exit "Failed to compile ATS" 5 - fi -else - ttcn3_makefilegen -d -f -g -m -M -R -U none -e Ats${ATS_NAME} ${TTCN_FILES} ${CC_FILES} ${FWK_FILES} ${CFG_FILES} | tee --append build.log - if [ "$?" == "1" ] - then - f_exit "Failed to generate ATS source code" 7 - fi -fi - -# Remove port skeletons to use src/ -for i in `ls ../include/*.hh` -do - if [ -f ./`basename $i` ] - then - rm ./`basename $i` - fi -done -for i in `ls ../src/*.cc` -do - if [ -f ./`basename $i` ] - then - rm ./`basename $i` - fi -done - -# Check if Makefile was generated -if [ ! -f ./Makefile ] -then - f_exit "Failed to generate ATS source code" 8 -fi - -# Patch ATS generated files -#./bin/patch.bash 2>&1 3>&1 | tee --append build.log -# Add compiler/linker options -# -DASN_DISABLE_OER_SUPPORT is required for CAMCodec and DENMCodec -if [ "$1" == "prof" ] -then - if [ "${OSTYPE}" == "cygwin" ] - then - CXXFLAGS_DEBUG_MODE='s/-Wall/-pg -Wall -std=c++11 -fPIC -D_XOPEN_SOURCE=700 -DAS_USE_SSL -DENABLE_TRACE -pthreads -fstack-check -fstack-protector -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer/g' - else - CXXFLAGS_DEBUG_MODE='s/-Wall/-pg -Wall -std=c++11 -fPIC -DAS_USE_SSL -DENABLE_TRACE -pthreads -fstack-check -fstack-protector -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer/g' - fi - LDFLAGS_DEBUG_MODE='s/LDFLAGS = /LDFLAGS = -pg -pthread -fPIC -fstack-check -fstack-protector -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer/g' -else - if [ "${OSTYPE}" == "cygwin" ] - then - CXXFLAGS_DEBUG_MODE='s/-Wall/-ggdb -O0 -Wall -std=c++11 -fPIC -DAS_USE_SSL -DENABLE_TRACE -D_XOPEN_SOURCE=700 -pthread -fstack-check -fstack-protector -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer/g' - else - CXXFLAGS_DEBUG_MODE='s/-Wall/-ggdb -O0 -Wall -std=c++11 -fPIC -DAS_USE_SSL -DENABLE_TRACE -pthread -fstack-check -fstack-protector -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer/g' - fi - LDFLAGS_DEBUG_MODE='s/LDFLAGS = /LDFLAGS = -g -pthread -fPIC -fstack-check -fstack-protector -fsanitize=address -fno-omit-frame-pointer -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer/g' -fi -ADD_INCLUDE='/CPPFLAGS = /a\\CPPFLAGS += -I/usr/local/share -I$(PATH_DEV_MEC)/include -I$(PATH_DEV_MEC)/framework/include -I../include -I../../LibMec/Common/include -I../../LibMec/include -I$(HOME_FRAMEWORKS)/osip/include -I$(HOME_INC) -I.' -ADD_LIBRARIES='s/LINUX_LIBS = -lxml2/LINUX_LIBS = -lrt -lxml2 -lpcap -lstdc++fs -lssl -L\$\(HOME_FRAMEWORKS\)\/osip\/src\/osipparser2\/\.libs -losipparser2/g' -sed --in-place "${CXXFLAGS_DEBUG_MODE}" ./Makefile -sed --in-place "${LDFLAGS_DEBUG_MODE}" ./Makefile -sed --in-place "${ADD_INCLUDE}" ./Makefile -sed --in-place "${ADD_LIBRARIES}" ./Makefile -# Update COMPILER_FLAGS -COMPILER_FLAGS='s/COMPILER_FLAGS = /COMPILER_FLAGS = -e -O /g' -sed --in-place "${COMPILER_FLAGS}" ./Makefile -# Update clean clause -CLEAN_LINE='s/$(RM) $(EXECUTABLE)/$(RM) ..\/bin\/$(EXECUTABLE) ..\/src\/*.o/g' -sed --in-place "${CLEAN_LINE}" ./Makefile -# Move binary file command -EXECUTABLE=MyExample -MV_CMD='s/all: $(TARGET) ;/all: $(TARGET) ; @if [ -f ..\/objs\/$(EXECUTABLE) ]; then mv ..\/objs\/$(EXECUTABLE) ..\/bin; fi ;/g' -sed --in-place "${MV_CMD}" ./Makefile -# Add run command -ADD_HOST='/PLATFORM = /aHOST=127.0.0.1' -ADD_PORT='/PLATFORM = /aPORT=12000' -sed --in-place "${ADD_PORT}" ./Makefile -sed --in-place "${ADD_HOST}" ./Makefile -ADD_RUN_LINE_1='$arun: all' -ADD_RUN_LINE_2='$a\\t@sudo LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(PWD)/../bin/$(EXECUTABLE) $(HOST) $(PORT)' -sed --in-place "${ADD_RUN_LINE_1}" ./Makefile -sed --in-place "${ADD_RUN_LINE_2}" ./Makefile -ADD_RUN_LINE_1='$arun_d: all' -ADD_RUN_LINE_2='$a\\t@gdb --args $(PWD)/../bin/$(EXECUTABLE) $(HOST) $(PORT)' -sed --in-place "${ADD_RUN_LINE_1}" ./Makefile -sed --in-place "${ADD_RUN_LINE_2}" ./Makefile -ADD_RUN_LINE_1='$arun_v: all' -ADD_RUN_LINE_2='$a\\t@sudo LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) valgrind -v --tool=memcheck --leak-check=yes --show-reachable=yes --track-fds=yes --run-cxx-freeres=yes $(PWD)/../bin/$(EXECUTABLE) $(HOST) $(PORT)' -sed --in-place "${ADD_RUN_LINE_1}" ./Makefile -sed --in-place "${ADD_RUN_LINE_2}" ./Makefile -# Add gendoc entry -ADD_RUN_LINE_1='$agendoc: ../docs/o2.cfg' -ADD_RUN_LINE_2='$a\\tdoxygen ../docs/o2.cfg' -sed --in-place "${ADD_RUN_LINE_1}" ./Makefile -sed --in-place "${ADD_RUN_LINE_2}" ./Makefile - -# Build all -make all 2>&1 3>&1 | tee --append build.log -if [ "$?" == "1" ] -then - f_exit "Failed to generate ATS source code" 9 -fi -export LD_LIBRARY_PATH=~/frameworks/osip/src/osipparser2/.libs:$LD_LIBRARY_PATH -../bin/Ats${ATS_NAME} -v -f_exit "Build done successfully" 0 diff --git a/scripts/titan_repos.txt b/scripts/titan_repos.txt index fc8a2ef71281f48e22b55d6f66147b37bc008de7..8842f4e0283928a94ebbbd37aff6b25fe27c2279 100644 --- a/scripts/titan_repos.txt +++ b/scripts/titan_repos.txt @@ -1,42 +1,56 @@ -https://github.com/eclipse/titan.core.git -https://github.com/eclipse/titan.TestPorts.Common_Components.Abstract_Socket.git -https://github.com/eclipse/titan.TestPorts.HTTPmsg.git -https://github.com/eclipse/titan.TestPorts.PCAPasp.git -https://github.com/eclipse/titan.TestPorts.PIPEasp.git -https://github.com/eclipse/titan.TestPorts.SCTPasp.git -https://github.com/eclipse/titan.TestPorts.SIPmsg.git -https://github.com/eclipse/titan.TestPorts.TCPasp.git -https://github.com/eclipse/titan.TestPorts.TELNETasp.git -https://github.com/eclipse/titan.TestPorts.UDPasp.git -https://github.com/eclipse/titan.ProtocolModules.COMMON.git -https://github.com/eclipse/titan.ProtocolModules.DHCP.git -https://github.com/eclipse/titan.ProtocolModules.DHCPv6.git -https://github.com/eclipse/titan.ProtocolModules.DIAMETER_ProtocolModule_Generator.git -https://github.com/eclipse/titan.ProtocolModules.DNS.git -https://github.com/eclipse/titan.ProtocolModules.ICMP.git -https://github.com/eclipse/titan.ProtocolModules.ICMPv6.git -https://github.com/eclipse/titan.ProtocolModules.IP.git -https://github.com/eclipse/titan.ProtocolModules.TCP.git -https://github.com/eclipse/titan.ProtocolModules.UDP.git -https://github.com/eclipse/titan.EclipsePlug-ins.git -https://github.com/eclipse/titan.misc.git -https://github.com/eclipse/titan.TestPorts.Common_Components.Socket-API.git -https://github.com/eclipse/titan.TestPorts.SSHCLIENTasp.git -https://github.com/eclipse/titan.TestPorts.STDINOUTmsg.git -https://github.com/eclipse/titan.TestPorts.UNIX_DOMAIN_SOCKETasp.git -https://github.com/eclipse/titan.TestPorts.IPL4asp.git -https://github.com/eclipse/titan.ProtocolModules.IPsec.git -https://github.com/eclipse/titan.ProtocolModules.JSON_v07_2006.git -https://github.com/eclipse/titan.ProtocolModules.RADIUS_ProtocolModule_Generator.git -https://github.com/eclipse/titan.ProtocolModules.WebSocket.git -https://github.com/eclipse/titan.ProtocolModules.HTTP2.0.git -https://github.com/eclipse/titan.Libraries.TCCUsefulFunctions.git -https://git.eclipse.org/r/titan/titan.ApplicationLibraries.CoAP -https://git.eclipse.org/r/titan/titan.ApplicationLibraries.MQTT -https://git.eclipse.org/r/titan/titan.ProtocolModules.CoAP.git -https://git.eclipse.org/r/titan/titan.ProtocolModules.MQTT.git -https://git.eclipse.org/r/titan/titan.ProtocolModules.SCTP.git -https://git.eclipse.org/r/titan/titan.ProtocolModules.SDP.git -https://git.eclipse.org/r/titan/titan.ProtocolModules.TLS.git -https://git.eclipse.org/r/titan/titan.TestPorts.GPIO.git -https://git.eclipse.org/r/titan/titan.TestPorts.Serial.git +https://gitlab.eclipse.org/eclipse/titan/titan.core.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.Common_Components.Abstract_Socket.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.HTTPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LANL2asp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.PCAPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.PIPEasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SCTPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SIPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SQLasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.TCPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.TELNETasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.UDPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.COMMON.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DHCP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DHCPv6.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DIAMETER_ProtocolModule_Generator.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DNS.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICMP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICMPv6.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RTSP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SMPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SMTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SNMP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.TCP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.UDP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.XMPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.misc.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LDAPasp_RFC4511.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LDAPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.Common_Components.Socket-API.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SSHCLIENTasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.STDINOUTmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SUNRPCasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.UNIX_DOMAIN_SOCKETasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.IPL4asp.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.FrameRelay.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.H248_v2.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IMAP_4rev1.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICAP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IKEv2.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IPsec.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IUA.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.JSON_v07_2006.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.L2TP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.M3UA.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MIME.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MSRP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.PPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ProtoBuff.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RADIUS_ProtocolModule_Generator.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SRTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.WebSocket.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.HTTP2.0.git +https://gitlab.eclipse.org/eclipse/titan/titan.Libraries.TCCUsefulFunctions.git diff --git a/scripts/update_mec_project.bash b/scripts/update_mec_project.bash deleted file mode 100755 index 40ac10f3c2e6c166903d524a13a00ef19573a4ac..0000000000000000000000000000000000000000 --- a/scripts/update_mec_project.bash +++ /dev/null @@ -1,186 +0,0 @@ -#!/bin/bash - -# Debug mode -#set -e -set -vx - -# Usage: sudo ./update_mec_project.bash -# TODO Use git clone in temporary directory - -OLDPWD=`pwd` - -# Execution path -RUN_PATH="${0%/*}" - -if [ "${VALIDATION_DIR}" == "" ] -then - VALIDATION_DIR=${HOME} -fi - -CHOWN_USER_GROUP=${USER}:${USER} -SRC_MEC_PATH=${VALIDATION_DIR}/dev/STF569_Mec - -if [ "${PATH_DEV_MEC}" == "" ] -then - PATH_DEV_MEC=${HOME}/dev/etsi_mec -fi -echo ${PATH_DEV_MEC} - -if [ -d ${PATH_DEV_MEC} ] -then - if [ -f ${HOME}/tmp/mec.tar.bz2 ] - then - mv ${HOME}/tmp/mec.tar.bz2 ${VALIDATION_DIR}/tmp/mec.tar.`date +'%Y%m%d'`.bz2 - fi - find ${PATH_DEV_MEC} -name "*.o" -exec rm {} \; - tar jchvf ${HOME}/tmp/mec.tar.bz2 ${PATH_DEV_MEC} - rm -fr ${PATH_DEV_MEC} -fi - -# Check if target directory exist -if [ ! -d ${PATH_DEV_MEC} ] -then - mkdir -p ${PATH_DEV_MEC}/json ${PATH_DEV_MEC}/framework ${PATH_DEV_MEC}/include ${PATH_DEV_MEC}/bin ${PATH_DEV_MEC}/lib ${PATH_DEV_MEC}/objs ${PATH_DEV_MEC}/src ${PATH_DEV_MEC}/docs -fi - -# Update JSON files -echo 'Updating JSON files' -JSON_SRC_PATH=${SRC_MEC_PATH}/json -JSON_DST_PATH=${PATH_DEV_MEC}/json -cp ${JSON_SRC_PATH}/*.json ${JSON_DST_PATH} - -# Update ETSI Framework files -echo 'Updating ETSI Framework files' -FWK_SRC_PATH=${SRC_MEC_PATH}/ccsrc -FWK_DST_PATH=${PATH_DEV_MEC}/framework -mkdir -p ${FWK_DST_PATH}/src ${FWK_DST_PATH}/include -chmod -R 775 ${FWK_DST_PATH} -# Create link to TITAN Abstract_Socket -ln -sf $TOP/../titan.TestPorts.Common_Components.Abstract_Socket/src/Abstract_Socket.cc ${FWK_DST_PATH}/src/Abstract_Socket.cc -ln -sf $TOP/../titan.TestPorts.Common_Components.Abstract_Socket/src/Abstract_Socket.hh ${FWK_DST_PATH}/include/Abstract_Socket.hh -FWK_DIR_LIST_HH=`find ${FWK_SRC_PATH}/Protocols/ -name "*.h*" -type f` -FWK_DIR_LIST_THH=`find ${FWK_SRC_PATH}/Protocols/ -name "*.t.h*" -type f` -FWK_DIR_LIST_CC=`find ${FWK_SRC_PATH}/Protocols/ -name "*.c*" -type f` -FWK_DIR_LIST_L=`find ${FWK_SRC_PATH}/Protocols/ -name "*.l" -type f` -FWK_DIR_LIST_Y=`find ${FWK_SRC_PATH}/Protocols/ -name "*.y" -type f` -for i in ${FWK_DIR_LIST_HH} -do - cp $i ${FWK_DST_PATH}/include -done -for i in ${FWK_DIR_LIST_THH} -do - cp $i ${FWK_DST_PATH}/include -done -for i in ${FWK_DIR_LIST_CC} -do - cp $i ${FWK_DST_PATH}/src -done -if [ "${FWK_DIR_LIST_L}" != "" ] -then - for i in ${FWK_DIR_LIST_L} - do - cp $i ${FWK_DST_PATH}/src - done -fi -if [ "${FWK_DIR_LIST_Y}" != "" ] -then - for i in ${FWK_DIR_LIST_Y} - do - cp $i ${FWK_DST_PATH}/src - done -fi -FWK_DIR_LIST_HH=`find ${FWK_SRC_PATH}/Framework/ -name "*.h*" -type f` -FWK_DIR_LIST_CC=`find ${FWK_SRC_PATH}/Framework/ -name "*.c*" -type f` -for i in ${FWK_DIR_LIST_HH} -do - cp $i ${FWK_DST_PATH}/include -done -for i in ${FWK_DIR_LIST_CC} -do - cp $i ${FWK_DST_PATH}/src -done - -# Update ATS TTCN-3 files -echo 'Update TTCN-3 files' -TTCN_3_ORG_PATH=${SRC_MEC_PATH}/ttcn -TTCN_3_DST_PATH=${PATH_DEV_MEC}/src -CC_SRC_PATH=${SRC_MEC_PATH}/ccsrc -TTCN_3_ATS_LIST='AtsMec' -for i in ${TTCN_3_ATS_LIST} -do - if [ ! -d ${TTCN_3_DST_PATH}/$i ] - then - mkdir -p ${TTCN_3_DST_PATH}/$i/bin ${TTCN_3_DST_PATH}/$i/lib ${TTCN_3_DST_PATH}/$i/src ${TTCN_3_DST_PATH}/$i/include ${TTCN_3_DST_PATH}/$i/ttcn ${TTCN_3_DST_PATH}/$i/objs ${TTCN_3_DST_PATH}/$i/etc ${TTCN_3_DST_PATH}/$i/docs - chmod -R 775 ${TTCN_3_DST_PATH}/$i - fi - cp ${TTCN_3_ORG_PATH}/$i/*.ttcn ${TTCN_3_DST_PATH}/$i/ttcn - cp ${TTCN_3_ORG_PATH}/../etc/$i/*.cf* ${TTCN_3_DST_PATH}/$i/etc - if [ -d ${TTCN_3_ORG_PATH}/../etc_simu ] - then - mkdir -p ${TTCN_3_ORG_PATH}/../etc_simu - cp ${TTCN_3_ORG_PATH}/../etc_simu/$i/*.cfg ${TTCN_3_DST_PATH}/$i/etc_simu - fi - cp ${TTCN_3_ORG_PATH}/../docs/$i/o2.cfg ${TTCN_3_DST_PATH}/$i/docs -done - -# Update libraries & CC files -TTCN_3_LIB_LIST='LibMec LibMec/LocationAPI LibMec/UEidentityAPI LibMec/RnisAPI LibMec/BwManagementAPI LibMec/Ams LibMec/AppEna LibMec/AppLCM LibMec/Grant LibMec/FixedAccessInformationAPI LibMec/MeoPkgm LibMec/MepmPkgm LibMec/UEAppInterfaceAPI LibMec/UEidentityAPI LibHttp LibCommon' -for i in ${TTCN_3_LIB_LIST} -do - if [ ! -d ${TTCN_3_DST_PATH}/$i ] - then - mkdir -p ${TTCN_3_DST_PATH}/$i/docs ${TTCN_3_DST_PATH}/$i/src ${TTCN_3_DST_PATH}/$i/include ${TTCN_3_DST_PATH}/$i/ttcn ${TTCN_3_DST_PATH}/$i/json - fi - cp ${TTCN_3_ORG_PATH}/$i/*.ttcn ${TTCN_3_DST_PATH}/$i/ttcn - # Update files - if [ "$i" == "LibMec" ] - then - cp ${TTCN_3_ORG_PATH}/$i/ttcn/*.ttcn ${TTCN_3_DST_PATH}/$i/ttcn - cp ${TTCN_3_ORG_PATH}/$i/json/*.json ${TTCN_3_DST_PATH}/$i/json - cp ${CC_SRC_PATH}/externals/*_ExternalFunctions.cc ${TTCN_3_DST_PATH}/$i/src - elif [ "$i" == "LibHttp" ] - then - cp ${TTCN_3_ORG_PATH}/LibIts/ttcn/Http/*.ttcn ${TTCN_3_DST_PATH}/$i/ttcn - cp ${CC_SRC_PATH}/EncDec/$i/*_Encdec.cc ${TTCN_3_DST_PATH}/$i/src - cp ${CC_SRC_PATH}/Ports/$i/*.hh ${TTCN_3_DST_PATH}/$i/include - cp ${CC_SRC_PATH}/Ports/$i/*.cc ${TTCN_3_DST_PATH}/$i/src - cp ${CC_SRC_PATH}/include/$i/*.hh ${TTCN_3_DST_PATH}/$i/include - cp ${CC_SRC_PATH}/src/$i/*.cc ${TTCN_3_DST_PATH}/$i/src - # Patch due to svn/gitlab moving - cp ${SRC_MEC_PATH}/ttcn/patch_lib_http/*.ttcn ${TTCN_3_DST_PATH}/$i/ttcn - elif [ "$i" == "LibCommon" ] - then - cp ${TTCN_3_ORG_PATH}/$i/ttcn/*.ttcn ${TTCN_3_DST_PATH}/$i/ttcn - # Patch TITAN due to TTCN-3 compiler issues - cp ${SRC_MEC_PATH}/ttcn/patch_lib_common_titan/*.ttcn ${TTCN_3_DST_PATH}/$i/ttcn - else - cp ${TTCN_3_ORG_PATH}/$i/ttcn/*.ttcn ${TTCN_3_DST_PATH}/$i/ttcn - cp ${TTCN_3_ORG_PATH}/$i/json/*.json ${TTCN_3_DST_PATH}/$i/json - fi -done -####################################################################################### -# Remove AtsMec_FixedAccessInformationAPI_TestCases, not supported yet -rm ${TTCN_3_DST_PATH}/AtsMec/ttcn/AtsMec_FixedAccessInfoAPI_TestCases.ttcn -####################################################################################### - -# Apply patches -PATH_PATCHES=`pwd` -if [ -d ${PATH_PATCHES} ] -then - # Update Mec - cp ${PATH_PATCHES}/mec_generate_makefile.bash ${PATH_DEV_MEC}/src/AtsMec/bin - cp ${PATH_PATCHES}/run_mtc.bash ${PATH_DEV_MEC}/src/AtsMec/bin - cp ${PATH_PATCHES}/run_ptcs.bash ${PATH_DEV_MEC}/src/AtsMec/bin - cp ${PATH_PATCHES}/run_all.bash ${PATH_DEV_MEC}/src/AtsMec/bin - cp ${PATH_PATCHES}/run_*_simu.bash ${PATH_DEV_MEC}/src/AtsMec/bin -fi - -# Set rights -find ${PATH_DEV_MEC} -type f -exec chmod 664 {} \; -find ${PATH_DEV_MEC} -name "*.bash" -type f -exec chmod 775 {} \; -find ${PATH_DEV_MEC} -type d -exec chmod 775 {} \; -chown -R ${CHOWN_USER_GROUP} ${PATH_DEV_MEC} - -cd ${OLDPWD} - -exit 0 diff --git a/simu/_Getch.py b/simu/_Getch.py new file mode 100644 index 0000000000000000000000000000000000000000..62426380a1a64c5b911022e71ddb79c43ba7b075 --- /dev/null +++ b/simu/_Getch.py @@ -0,0 +1,41 @@ + + +class _Getch: + """Gets a single character from standard input. Does not echo to the +screen.""" + def __init__(self): + try: + self.impl = _GetchWindows() + except ImportError: + self.impl = _GetchUnix() + + def __call__(self): return self.impl() + +class _GetchUnix: + def __init__(self): + import tty, sys + + def __call__(self): + import sys, tty, termios + fd = sys.stdin.fileno() + old_settings = termios.tcgetattr(fd) + try: + tty.setraw(sys.stdin.fileno()) + ch = sys.stdin.read(1) + finally: + termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) + return ch + +class _GetchWindows: + def __init__(self): + import msvcrt + + def __call__(self): + import msvcrt + while msvcrt.kbhit(): + msvcrt.getch() + ch = msvcrt.getch() + while ch in b'\x00\xe0': + msvcrt.getch() + ch = msvcrt.getch() + return ch.decode() diff --git a/simu/mec_database.py b/simu/mec_database.py index 465d3f18ddb3a3595c314111df4044659eab2dd1..75df61fce8b7699f9f26cb022b1d75f5508f64e3 100644 --- a/simu/mec_database.py +++ b/simu/mec_database.py @@ -1,11 +1,15 @@ # Simulate MEC devices using Pandas database +import os import pandas as pd from datetime import datetime, time class mec_database: - """ Private properties """ - __path__ = "/Users/yanng/Documents/workspace_titan/STF569_Mec/simu/data/" # To be updated according to the local settings + """ + TODO + """ + # Private properties + __path__ = '' # To be updated according to the local settings __subscribers__ = None __registered_list__ = None __zones__ = None @@ -21,17 +25,19 @@ class mec_database: def __init__(self): """ Default ctor: Open Pandas database. """ - self.__zones__ = pd.DataFrame(pd.read_csv(self.__path__ + 'zones.csv', index_col = 'zoneId')) - self.__subscribers__ = pd.DataFrame(pd.read_csv(self.__path__ + 'subscribers.csv', index_col = 'address')) - self.__ue_information_list__ = pd.DataFrame(pd.read_csv(self.__path__ + 'ue_information_list.csv', index_col = ['appInst', 'ueTag'])) - self.__access_point_list__ = pd.DataFrame(pd.read_csv(self.__path__ + 'access_point_list.csv', index_col = 'accessPointId')) - self.__location_info__ = pd.DataFrame(pd.read_csv(self.__path__ + 'location_info.csv', index_col = 'accessPointId')) - self.__cells__ = pd.DataFrame(pd.read_csv(self.__path__ + 'cells.csv', encoding = 'utf-8', index_col = 'cellId')) - self.__associated__ = pd.DataFrame(pd.read_csv(self.__path__ + 'associated.csv', encoding = 'utf-8', index_col = 'cellId')) - self.__subscriptions__ = pd.DataFrame(pd.read_csv(self.__path__ + 'subscriptions.csv', encoding = 'utf-8', index_col = 'subscription_id')) - self.__transport_info__ = pd.DataFrame(pd.read_csv(self.__path__ + 'transport_info.csv', encoding = 'utf-8', index_col = 'transportId')) - self.__security__ = pd.DataFrame(pd.read_csv(self.__path__ + 'security.csv', encoding = 'utf-8', index_col = 'id')) - self.__traffic_rules__ = pd.DataFrame(pd.read_csv(self.__path__ + 'traffic_rules.csv', encoding = 'utf-8', index_col = 'trafficRuleId')) + self.__path__ = os.path.join(os.getcwd(), 'data') + print('==> self.__path__=', self.__path__) + self.__zones__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'zones.csv'), index_col = 'zoneId')) + self.__subscribers__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'subscribers.csv'), index_col = 'address')) + self.__ue_information_list__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'ue_information_list.csv'), index_col = ['appInst', 'ueTag'])) + self.__access_point_list__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'access_point_list.csv'), index_col = 'accessPointId')) + self.__location_info__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'location_info.csv'), index_col = 'accessPointId')) + self.__cells__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'cells.csv'), encoding = 'utf-8', index_col = 'cellId')) + self.__associated__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'associated.csv'), encoding = 'utf-8', index_col = 'cellId')) + self.__subscriptions__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'subscriptions.csv'), encoding = 'utf-8', index_col = 'subscription_id')) + self.__transport_info__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'transport_info.csv'), encoding = 'utf-8', index_col = 'transportId')) + self.__security__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'security.csv'), encoding = 'utf-8', index_col = 'id')) + self.__traffic_rules__ = pd.DataFrame(pd.read_csv(os.path.join(self.__path__, 'traffic_rules.csv'), encoding = 'utf-8', index_col = 'trafficRuleId')) # self.dump() # End of __init__ diff --git a/simu/mec_http_server.py b/simu/mec_http_server.py index 6c0ac180ad5e4b16dce89548c51ae215ff64fbaa..229dd28723722315b22887abe3b73a7cdeb3cbb1 100644 --- a/simu/mec_http_server.py +++ b/simu/mec_http_server.py @@ -462,7 +462,8 @@ class myHandler(http.server.BaseHTTPRequestHandler): content_type = 'application/json' if p_split[4].startswith('bw_allocations'): # E.g. bw_allocation?app_instance_id=InstApp01 s = p_split[4].split('?') - if s.__len__() == 1: # ue_identity_tag_info, POST + if s.__len__() == 1: # BW Allocation list requested + #resp = self.__db__.getBwAllocationList(self.path) # Register/Unregister operation body = None # Extract the body if any diff --git a/simu/mec_simulator.py b/simu/mec_simulator.py index 55a5b174bcfae02e9c9a34056749b979e1d14e82..a0306e91e1f3e08b6e20efb31ee133a3ce75b8c0 100644 --- a/simu/mec_simulator.py +++ b/simu/mec_simulator.py @@ -5,27 +5,18 @@ import socketserver import mec_http_server import threading import sys, os, time -import msvcrt +import _Getch as getc # MEC simulator IPv4 address -#ADDRESS_BINDING = '172.28.4.87' -#ADDRESS_BINDING = '192.168.1.21' -ADDRESS_BINDING = '192.168.56.1' -#ADDRESS_BINDING = '127.0.0.1' +ADDRESS_BINDING = '127.0.0.1' # MEC simulator IPv4 listening port PORT_NUMBER = 8081 -# TODO Add Linux support for detecting keyboard input from the terminal? -def getch(): - """ Capture keybord entry. """ - return msvcrt.getch() -# End of function getch - if __name__ == '__main__': + getch = getc._Getch() exit = False try: # Create a web server and define the handler to manage the incoming request -# server = socketserver.TCPServer((ADDRESS_BINDING, PORT_NUMBER), mec_http_server.myHandler) server = http.server.HTTPServer((ADDRESS_BINDING, PORT_NUMBER), mec_http_server.myHandler) server.wbufsize = -1 print ('Started httpserver on port ', PORT_NUMBER) @@ -35,9 +26,7 @@ if __name__ == '__main__': # Use keybord entries to trigBger notifications while exit == False: ch = getch() - if ch == b'\x03': - exit = True - elif ch == b'q': + if ch == 'q': exit = True else: print(">>> ch= ", ch) diff --git a/tools/t3q-v2.0.0b30/t3q.cfg b/tools/t3q-v2.0.0b30/t3q.cfg new file mode 100644 index 0000000000000000000000000000000000000000..6340b09dc7742c129dd4cf73a45d040365d6300b --- /dev/null +++ b/tools/t3q-v2.0.0b30/t3q.cfg @@ -0,0 +1,374 @@ + + + + TTF012Profile + v2.0.0b30 + + + (.*[/\\]Common[/\\](IMS_LibSip|IMS_XSD)[/\\].*[.]ttcn) + + true + 4 + true + true + true + + true + true + true + true + + + true + true + false + false + false + false + false + true + true + [\*]{3}\s([fta]_[a-zA-Z0-9]+?):\s(INFO|WARNING|ERROR|PASS|FAIL|INCONC|TIMEOUT):\s.*?[\*]{3} + false + false + true + true + 1 + false + true + true + true + true + true + + ConstDef + VarInstance + TimerInstance + PortInstance + + false + false + true + false + + true + true + true + true + true + true + true + true + + + + false + false + false + false + true + false + true + false + true + true + true + .*?LibCommon.* + (.*?LibCommon.*) + true + true + 200000 + true + true + + [A-Z].* + [A-Z].* + [A-Z].* + + + + + (cs|cas|cms|crs)_(508|108|[A-Z]).* + (cr|car|cmr)_(508|108|[A-Z]).* + (cds|cads|cdrs)_(508|108|[A-Z]).* + (cdr|cadr)_(508|108|[A-Z]).* + s_[a-z].* + [A-Z].* + [a-z].* + tsc_[A-Z].* + (tsc|const)_[A-Z].* + cx_[a-z].* + (f|fl)_[A-Z].* + fx_[A-Z].* + a_[A-Z].* + TC_.* + (v_[A-Z].*|[i-nI-N]) + vc_[A-Z].* + t_[A-Z].* + tc_[a-z].* + (pc|px)_.* + p_[A-Z].* + .* + + DOCUMENTATION + FORMATTED + + + + defaultProfile + v2.0.0b30 + (.*[/\\]Common[/\\](IMS_LibSip|IMS_XSD)[/\\].*[.]ttcn) + true + + false + true + true + true + + + true + true + false + false + false + false + false + false + true + true + [\*]{3}\s([fta]_[a-zA-Z0-9]+?):\s(INFO|WARNING|ERROR|PASS|FAIL|INCONC|TIMEOUT):\s.*?[\*]{3} + true + true + true + true + 0 + true + true + true + true + true + true + + VarInstance + ConstDef + TimerInstance + PortInstance + + true + true + true + true + + true + true + true + true + true + true + true + true + + enumerated + union + record of + record + set of + set + + false + true + 4 + true + false + true + true + true + true + true + true + true + true + true + true + .*?LibCommon.* + (.*?LibCommon.*) + false + true + 10000 + true + true + + [A-Z].* + [a-z].* + [A-Z].* + m_[a-z].* + mw_[a-z].* + md_[a-z].* + mdw_[a-z].* + cs_[a-z].* + cr_[a-z].* + dcs_[a-z].* + dcr_[a-z].* + s_[a-z].* + [a-z].* + [a-z].* + c_[a-z].* + cl_[a-z].* + cx_[a-z].* + f_[a-z].* + fx_[a-z].* + a_[a-z].* + TC_.* + v_[a-z].* + vc_[a-z].* + t_[a-z].* + tc_[a-z].* + [A-Z][A-Z_1-9]* + p_[a-z].* + e_[a-z].* + + FORMATTED + + + nothing + v2.0.0b30 + (.*[/\\]Common[/\\](IMS_LibSip|IMS_XSD)[/\\].*[.]ttcn) + true + + false + true + true + true + + + true + true + false + false + false + false + false + false + false + false + [\*]{3}\s([fta]_[a-zA-Z0-9]+?):\s(INFO|WARNING|ERROR|PASS|FAIL|INCONC|TIMEOUT):\s.*?[\*]{3} + false + false + false + false + 0 + false + false + true + false + false + false + + VarInstance + ConstDef + TimerInstance + PortInstance + + false + false + false + false + + false + false + false + true + false + false + false + true + + enumerated + union + record of + record + set of + set + + false + false + 4 + true + false + false + false + false + false + false + false + false + false + false + false + .*?LibCommon.* + (.*?LibCommon.*) + false + false + 10000 + true + false + + [A-Z].* + [a-z].* + [A-Z].* + m_[a-z].* + mw_[a-z].* + md_[a-z].* + mdw_[a-z].* + cs_[a-z].* + cr_[a-z].* + dcs_[a-z].* + dcr_[a-z].* + s_[a-z].* + [a-z].* + [a-z].* + c_[a-z].* + cl_[a-z].* + cx_[a-z].* + f_[a-z].* + fx_[a-z].* + a_[a-z].* + TC_.* + v_[a-z].* + vc_[a-z].* + t_[a-z].* + tc_[a-z].* + [A-Z][A-Z_1-9]* + p_[a-z].* + e_[a-z].* + + FORMATTED + + + all + \ No newline at end of file diff --git a/tools/t3q-v2.0.0b30/t3q.jar b/tools/t3q-v2.0.0b30/t3q.jar new file mode 100644 index 0000000000000000000000000000000000000000..b5d37682d0460fb4482bcf987598388349cdc222 Binary files /dev/null and b/tools/t3q-v2.0.0b30/t3q.jar differ diff --git a/ttcn/AtsMec/AtsMec_Ams_TestCases.ttcn b/ttcn/AtsMec/AtsMec_Ams_TestCases.ttcn index 904f01c2950da0f7c01509a5112233de7802193f..51e7b830d8bbfe5ebaddee3e3e53b073ac6ee1d5 100644 --- a/ttcn/AtsMec/AtsMec_Ams_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_Ams_TestCases.ttcn @@ -7,7 +7,7 @@ * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. -* @see ETSI GS MEC 003, Draft ETSI GS MEC 013 V2.0.3 (2018-10) +* @see ETSI GS MEC 003, Draft ETSI GS MEC 021 V2.1.1 */ module AtsMec_Ams_TestCases { @@ -38,9 +38,9 @@ /** * @desc Check that the AMS service returns information about the registered application mobility services when requested - * @see ETSI GS MEC 021 2.0.8, clause 8.3.3.1 + * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.1 */ - testcase TC_MEC_SRV_AMS_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -98,13 +98,13 @@ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_SRV_AMS_001_OK + } // End of testcase TC_MEC_MEC012_SRV_AMS_001_OK /** * @desc Check that the AMS service returns an error when receives a query about a registered application mobility service with wrong parameters - * @see ETSI GS MEC 021 2.0.8, clause 8.3.3.1 + * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.1 */ - testcase TC_MEC_SRV_AMS_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -152,14 +152,14 @@ } } // End of 'alt' statement - } // End of testcase TC_MEC_SRV_AMS_001_BR + } // End of testcase TC_MEC_MEC012_SRV_AMS_001_BR /** * @desc Check that the AMS service creates a new application mobility services when requested - * @see ETSI GS MEC 021 2.0.8, clause 8.3.3.4 + * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.4 */ - testcase TC_MEC_SRV_AMS_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_002_OK() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); @@ -231,13 +231,13 @@ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_SRV_AMS_002_OK + } // End of testcase TC_MEC_MEC012_SRV_AMS_002_OK /** * @desc Check that the AMS service sends an error when it receives a malformed request to create a new application mobility service - * @see ETSI GS MEC 021 2.0.8, clause 8.3.3.4 + * @see ETSI GS MEC 021 2.1.1, clause 8.3.3.4 */ - testcase TC_MEC_SRV_AMS_002_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_002_BR() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); @@ -299,7 +299,7 @@ } } // End of 'alt' statement - } // End of testcase TC_MEC_SRV_AMS_002_BR + } // End of testcase TC_MEC_MEC012_SRV_AMS_002_BR } // End of group appMobilityServices @@ -309,7 +309,7 @@ * @desc Check that the AMS service returns information about this individual application mobility service * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.1 */ - testcase TC_MEC_SRV_AMS_011_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_011_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -356,13 +356,13 @@ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_SRV_AMS_011_OK + } // End of testcase TC_MEC_MEC012_SRV_AMS_011_OK /** * @desc Check that the AMS service sends an error when receives a query about a not existing individual application mobility service * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.1 */ - testcase TC_MEC_SRV_AMS_011_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_011_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -404,7 +404,7 @@ } } // End of 'alt' statement - } // End of testcase TC_MEC_SRV_AMS_011_NF + } // End of testcase TC_MEC_MEC012_SRV_AMS_011_NF @@ -412,7 +412,7 @@ * @desc Check that the AMS service modifies the individual application mobility service when requested * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.2 */ - testcase TC_MEC_SRV_AMS_012_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_012_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -483,13 +483,13 @@ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_SRV_AMS_012_OK + } // End of testcase TC_MEC_MEC012_SRV_AMS_012_OK /** * @desc Check that the AMS service sends an error when receives a request to modify a not existing individual application mobility service * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.2 */ - testcase TC_MEC_SRV_AMS_012_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_012_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -543,13 +543,13 @@ } } // End of 'alt' statement - } // End of testcase TC_MEC_SRV_AMS_012_NF + } // End of testcase TC_MEC_MEC012_SRV_AMS_012_NF /** * @desc Check that the AMS service sends an error when receives a request to modify a individual application mobility service using bad parameters * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.2 */ - testcase TC_MEC_SRV_AMS_012_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_012_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -603,7 +603,7 @@ } } // End of 'alt' statement - } // End of testcase TC_MEC_SRV_AMS_012_BR + } // End of testcase TC_MEC_MEC012_SRV_AMS_012_BR /** @@ -611,7 +611,7 @@ * that represents the individual application mobility service * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.5 */ - testcase TC_MEC_SRV_AMS_013_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_013_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -653,14 +653,14 @@ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_SRV_AMS_013_OK + } // End of testcase TC_MEC_MEC012_SRV_AMS_013_OK /** * @desc Check that the AMS service sends an error when is requested to delete the resource * that represents the individual application mobility service * @see ETSI GS MEC 021 2.0.10, clause 8.4.3.5 */ - testcase TC_MEC_SRV_AMS_013_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_013_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -702,7 +702,7 @@ } } // End of 'alt' statement - } // End of testcase TC_MEC_SRV_AMS_013_NF + } // End of testcase TC_MEC_MEC012_SRV_AMS_013_NF } @@ -712,7 +712,7 @@ * @desc Check that the AMS service deregister an individual application mobility service on expiry of the timer associated with the service * @see ETSI GS MEC 021 2.0.10, clause 8.5.3.4 */ - testcase TC_MEC_SRV_AMS_014_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_014_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -771,13 +771,13 @@ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_SRV_AMS_014_OK + } // End of testcase TC_MEC_MEC012_SRV_AMS_014_OK /** * @desc Check that the AMS service send an error when is requested to deregister a not existent individual application mobility service * @see ETSI GS MEC 021 2.0.10, clause 8.5.3.4 */ - testcase TC_MEC_SRV_AMS_014_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_014_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -819,7 +819,7 @@ f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_SRV_AMS_012_OK + } // End of testcase TC_MEC_MEC012_SRV_AMS_012_OK } @@ -831,9 +831,9 @@ * Permitted SUBSCRIPTION_TYPE are: * - MobilityProcedureSubscription * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.0.8, clause 8.6.3.1 + * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.1 */ - testcase TC_MEC_SRV_AMS_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_003_OK() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); @@ -890,13 +890,13 @@ } } // End of 'alt' statement - } // END TC_MEC_SRV_AMS_003_OK + } // END TC_MEC_MEC012_SRV_AMS_003_OK /** * @desc Check that the AMS service sends an error when it receives a malformed query about the available subscriptions - * @see ETSI GS MEC 021 2.0.8, clause 8.6.3.1 + * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.1 */ - testcase TC_MEC_SRV_AMS_003_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_003_BR() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); @@ -948,16 +948,16 @@ } } // End of 'alt' statement - } // END of TC_MEC_SRV_AMS_003_BR + } // END of TC_MEC_MEC012_SRV_AMS_003_BR /** * @desc Check that the AMS service creates a notification subscriptions when requested. * Permitted SUBSCRIPTION_TYPE are: * - MobilityProcedureSubscription * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.0.8, clause 8.6.3.4 + * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.4 */ - testcase TC_MEC_SRV_AMS_004_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_004_OK() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); @@ -1024,16 +1024,16 @@ } } // End of 'alt' statement - } // End of TC_MEC_SRV_AMS_004_OK + } // End of TC_MEC_MEC012_SRV_AMS_004_OK /** * @desc Check that the AMS service sends an error when it receives a malformed request to create a notification subscription * Permitted SUBSCRIPTION_TYPE are: * - MobilityProcedureSubscription * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.0.8, clause 8.6.3.4 + * @see ETSI GS MEC 021 2.1.1, clause 8.6.3.4 */ - testcase TC_MEC_SRV_AMS_004_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_004_BR() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); @@ -1096,16 +1096,16 @@ } } // End of 'alt' statement - } // End of TC_MEC_SRV_AMS_004_BR + } // End of TC_MEC_MEC012_SRV_AMS_004_BR /** * @desc Check that the AMS service returns information about a given subscription when requested. * Permitted SUBSCRIPTION_TYPE are: * - MobilityProcedureSubscription * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.0.8, clause 8.7.3.1 + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.1 */ - testcase TC_MEC_SRV_AMS_005_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_005_OK() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); @@ -1155,13 +1155,13 @@ } } // End of 'alt' statement - } // End of TC_MEC_SRV_AMS_005_OK + } // End of TC_MEC_MEC012_SRV_AMS_005_OK /** * @desc Check that the AMS service returns an error when receives a query about a not existing subscription - * @see ETSI GS MEC 021 2.0.8, clause 8.7.3.1 + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.1 */ - testcase TC_MEC_SRV_AMS_005_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_005_NF() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); @@ -1213,13 +1213,13 @@ } } // End of 'alt' statement - } // End of TC_MEC_SRV_AMS_005_NF + } // End of TC_MEC_MEC012_SRV_AMS_005_NF /** * @desc Check that the AMS service deletes a given subscription when requested - * @see ETSI GS MEC 021 2.0.8, clause 8.7.3.5 + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.5 */ - testcase TC_MEC_SRV_AMS_006_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_006_OK() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); @@ -1264,13 +1264,13 @@ } } // End of 'alt' statement - } // End of TC_MEC_SRV_AMS_006_OK + } // End of TC_MEC_MEC012_SRV_AMS_006_OK /** * @desc Check that the AMS service sends an error when it receives a delete request for a not existing subscription - * @see ETSI GS MEC 021 2.0.8, clause 8.7.3.5 + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.5 */ - testcase TC_MEC_SRV_AMS_006_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_006_NF() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); @@ -1319,16 +1319,16 @@ } } // End of 'alt' statement - } // End of TC_MEC_SRV_AMS_006_NF + } // End of TC_MEC_MEC012_SRV_AMS_006_NF /** * @desc Check that the AMS service modifies a given subscription when requested. * Permitted SUBSCRIPTION_TYPE are: * - MobilityProcedureSubscription * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.0.8, clause 8.7.3.2 + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.2 */ - testcase TC_MEC_SRV_AMS_007_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_007_OK() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); @@ -1385,16 +1385,16 @@ } } // End of 'alt' statement - } // End of TC_MEC_SRV_AMS_007_OK + } // End of TC_MEC_MEC012_SRV_AMS_007_OK /** * @desc Check that the AMS service sends an error when it receives a malformed modify request for a given subscription. * Permitted SUBSCRIPTION_TYPE are: * - MobilityProcedureSubscription * - AdjacentAppInfoSubscription - * @see ETSI GS MEC 021 2.0.8, clause 8.7.3.2 + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.2 */ - testcase TC_MEC_SRV_AMS_007_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_007_BR() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); @@ -1452,13 +1452,13 @@ } } // End of 'alt' statement - } // End of TC_MEC_SRV_AMS_007_BR + } // End of TC_MEC_MEC012_SRV_AMS_007_BR /** * @desc Check that the AMS service sends an error when it receives a modify request for a not existing subscription - * @see ETSI GS MEC 021 2.0.8, clause 8.7.3.2 + * @see ETSI GS MEC 021 2.1.1, clause 8.7.3.2 */ - testcase TC_MEC_SRV_AMS_007_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_007_NF() runs on HttpComponent system HttpTestAdapter { var Headers v_headers; if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){ log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***"); @@ -1514,7 +1514,7 @@ } } // End of 'alt' statement - } // End of TC_MEC_SRV_AMS_007_NF + } // End of TC_MEC_MEC012_SRV_AMS_007_NF } // End of group appMobilityServicesSubscriptions @@ -1523,9 +1523,9 @@ /** * @desc Check that the AMS service sends an AMS notification about a mobility procedure if the AMS service has an associated subscription and the event is generated - * @see ETSI GS MEC 021 2.0.8, clause 7.4.2 + * @see ETSI GS MEC 021 2.1.1, clause 7.4.2 */ - testcase TC_MEC_SRV_AMS_008_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_008_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1585,13 +1585,13 @@ // Postamble f_cf_01_http_notif_down(); - } // End of TC_MEC_SRV_AMS_008_OK + } // End of TC_MEC_MEC012_SRV_AMS_008_OK /** * @desc Check that the AMS service sends an AMS notification about adjacent application instances if the AMS service has an associated subscription and the event is generated - * @see ETSI GS MEC 021 2.0.8, clause 7.4.3 + * @see ETSI GS MEC 021 2.1.1, clause 7.4.3 */ - testcase TC_MEC_SRV_AMS_009_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_009_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1656,9 +1656,9 @@ /** * @desc Check that the AMS service sends an AMS notification on subscription expiration if the AMS service has an associated subscription and the event is generated - * @see ETSI GS MEC 021 2.0.8, clause 7.4.4 + * @see ETSI GS MEC 021 2.1.1, clause 7.4.4 */ - testcase TC_MEC_SRV_AMS_010_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_AMS_010_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var UInt64 v_timestamp; diff --git a/ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn index d3585311b61ad7a00c4ed9928b038aa66042d448..a2874c18284ce6b0f11fa590bab54df923203a60 100644 --- a/ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_AppEnablementAPI_TestCases.ttcn @@ -7,7 +7,7 @@ * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. - * @see ETSI GS MEC 003, Draft ETSI GS MEC 011 V2.0.8 + * @see ETSI GS MEC 003, Draft ETSI GS MEC 011 V2.1.1 */ module AtsMec_AppEnablementAPI_TestCases { @@ -46,7 +46,7 @@ module AtsMec_AppEnablementAPI_TestCases { * @desc Check that the IUT responds with a list of available MEC services for a given application instance when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ - testcase TC_MEC_SRV_APPSAQ_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSAQ_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -96,13 +96,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSAQ_001_OK + } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ - testcase TC_MEC_SRV_APPSAQ_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSAQ_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -150,13 +150,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSAQ_001_BR + } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_001_BR /** * @desc Check that the IUT notifies the authorised relevant (subscribed) application instances when a new service for a given application instance is registered. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ - testcase TC_MEC_SRV_APPSAQ_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSAQ_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -189,7 +189,7 @@ module AtsMec_AppEnablementAPI_TestCases { -, -, -, -, -, //-, m_transport_info( "transportId1", - "TC_MEC_SRV_APPSAQ_002_OK", + "TC_MEC_MEC011_SRV_APPSAQ_002_OK", REST_HTTP, "HTTP", "2.0", @@ -249,13 +249,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSAQ_002_OK + } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_002_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ - testcase TC_MEC_SRV_APPSAQ_002_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSAQ_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var universal charstring v_service_name; @@ -315,13 +315,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSAQ_002_BR + } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_002_BR /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ - testcase TC_MEC_SRV_APPSAQ_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSAQ_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -376,13 +376,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSAQ_002_NF + } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_002_NF /** * @desc Check that the IUT responds with the information on a specific service for a given application instance when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ - testcase TC_MEC_SRV_APPSAQ_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSAQ_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -435,13 +435,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSAQ_003_OK + } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_003_OK /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ - testcase TC_MEC_SRV_APPSAQ_003_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSAQ_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -489,9 +489,9 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSAQ_003_NF + } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_003_NF - group f_TC_MEC_SRV_APPSAQ_004 { + group f_TC_MEC_MEC011_SRV_APPSAQ_004 { /** * @desc This function request the createion of a new service @@ -522,7 +522,7 @@ module AtsMec_AppEnablementAPI_TestCases { -, -, -, -, -, //-, m_transport_info( "transportId1", - "TC_MEC_SRV_APPSAQ_002_OK", + "TC_MEC_MEC011_SRV_APPSAQ_002_OK", REST_HTTP, "HTTP", "2.0", @@ -596,14 +596,14 @@ module AtsMec_AppEnablementAPI_TestCases { return v_result; } // End of function f_delete_service_info - } // End of group f_TC_MEC_SRV_APPSAQ_004 + } // End of group f_TC_MEC_MEC011_SRV_APPSAQ_004 /** * @desc Check that the IUT updates a service information for a given application instance when commanded by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ - testcase TC_MEC_SRV_APPSAQ_004_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSAQ_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var charstring_list v_etag; @@ -682,13 +682,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_delete_service(v_service_name); f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSAQ_004_OK + } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_004_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ - testcase TC_MEC_SRV_APPSAQ_004_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSAQ_004_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var charstring_list v_etag; @@ -760,13 +760,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_delete_service(v_service_name); f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSAQ_004_BR + } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_004_BR /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ - testcase TC_MEC_SRV_APPSAQ_004_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSAQ_004_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -823,13 +823,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSAQ_004_NF + } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_004_NF /** * @desc Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppServices.tplan2 */ - testcase TC_MEC_SRV_APPSAQ_004_PF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSAQ_004_PF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var charstring_list v_etag; @@ -903,7 +903,7 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_delete_service(v_service_name); f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSAQ_004_PF + } // End of testcase TC_MEC_MEC011_SRV_APPSAQ_004_PF } // End of group app_saq @@ -916,7 +916,7 @@ module AtsMec_AppEnablementAPI_TestCases { * @desc Check that the IUT responds with a list of subscriptions for notifications on services availability when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ - testcase TC_MEC_SRV_APPSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSUB_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -967,13 +967,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSUB_001_OK + } // End of testcase TC_MEC_MEC011_SRV_APPSUB_001_OK /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ - testcase TC_MEC_SRV_APPSUB_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSUB_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1021,13 +1021,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSUB_001_NF + } // End of testcase TC_MEC_MEC011_SRV_APPSUB_001_NF /** * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications on service availability events. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ - testcase TC_MEC_SRV_APPSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1046,7 +1046,7 @@ module AtsMec_AppEnablementAPI_TestCases { // Preamble f_init_default_headers_list(-, -, v_headers); - //TODO Create a subsciption (see TC_MEC_SRV_APPSUB_001_OK); + //TODO Create a subsciption (see TC_MEC_MEC011_SRV_APPSUB_001_OK); httpPort.send( m_http_request( m_http_request_post( @@ -1097,13 +1097,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSUB_002_OK + } // End of testcase TC_MEC_MEC011_SRV_APPSUB_002_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ - testcase TC_MEC_SRV_APPSUB_002_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSUB_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1163,13 +1163,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSUB_002_BR + } // End of testcase TC_MEC_MEC011_SRV_APPSUB_002_BR /** * @desc Check that the IUT responds with the information on a specific subscription when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ - testcase TC_MEC_SRV_APPSUB_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSUB_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1220,13 +1220,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSUB_003_OK + } // End of testcase TC_MEC_MEC011_SRV_APPSUB_003_OK /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ - testcase TC_MEC_SRV_APPSUB_003_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSUB_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1274,13 +1274,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSUB_003_NF + } // End of testcase TC_MEC_MEC011_SRV_APPSUB_003_NF /** * @desc Check that the IUT acknowledges the unsubscribe from service availability event notifications when commanded by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ - testcase TC_MEC_SRV_APPSUB_004_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSUB_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1328,13 +1328,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSUB_004_OK + } // End of testcase TC_MEC_MEC011_SRV_APPSUB_004_OK /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/APPSAQ/PlatAppSubscriptions.tplan2 */ - testcase TC_MEC_SRV_APPSUB_004_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_APPSUB_004_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1383,7 +1383,7 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSUB_004_NF + } // End of testcase TC_MEC_MEC011_SRV_APPSUB_004_NF } // End of group app_sub @@ -1398,7 +1398,7 @@ module AtsMec_AppEnablementAPI_TestCases { * @desc Check that the IUT responds with a list of active DNS rules when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ - testcase TC_MEC_SRV_DNS_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_DNS_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1448,13 +1448,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_DNS_001_OK + } // End of testcase TC_MEC_MEC011_SRV_DNS_001_OK /** * @desc Check that the IUT responds with the information on a specific DNS rule when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ - testcase TC_MEC_SRV_DNS_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_DNS_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1506,13 +1506,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_DNS_002_OK + } // End of testcase TC_MEC_MEC011_SRV_DNS_002_OK /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ - testcase TC_MEC_SRV_DNS_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_DNS_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1560,13 +1560,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_DNS_002_NF + } // End of testcase TC_MEC_MEC011_SRV_DNS_002_NF /** * @desc Check that the IUT updates a specific DNS rule when commanded by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ - testcase TC_MEC_SRV_DNS_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_DNS_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1626,13 +1626,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_DNS_003_OK + } // End of testcase TC_MEC_MEC011_SRV_DNS_003_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ - testcase TC_MEC_SRV_DNS_003_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_DNS_003_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1691,13 +1691,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_DNS_003_BR + } // End of testcase TC_MEC_MEC011_SRV_DNS_003_BR /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ - testcase TC_MEC_SRV_DNS_003_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_DNS_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1755,13 +1755,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_DNS_003_NF + } // End of testcase TC_MEC_MEC011_SRV_DNS_003_NF /** * @desc Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/DNS/PlatDnsRules.tplan2 */ - testcase TC_MEC_SRV_DNS_003_PF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_DNS_003_PF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1820,7 +1820,7 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_DNS_003_PF + } // End of testcase TC_MEC_MEC011_SRV_DNS_003_PF } // End of group app_dns @@ -1833,7 +1833,7 @@ module AtsMec_AppEnablementAPI_TestCases { * @desc Check that the IUT responds with a list of available MEC services when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SAQ/PlatServices.tplan2 */ - testcase TC_MEC_SRV_SAQ_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_SAQ_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1883,13 +1883,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_SAQ_001_OK + } // End of testcase TC_MEC_MEC011_SRV_SAQ_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SAQ/PlatServices.tplan2 */ - testcase TC_MEC_SRV_SAQ_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_SAQ_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1938,13 +1938,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_SAQ_001_BR + } // End of testcase TC_MEC_MEC011_SRV_SAQ_001_BR /** * @desc Check that the IUT responds with the information on a specific service when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SAQ/PlatServices.tplan2 */ - testcase TC_MEC_SRV_SAQ_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_SAQ_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1996,13 +1996,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_SAQ_002_OK + } // End of testcase TC_MEC_MEC011_SRV_SAQ_002_OK /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SAQ/PlatServices.tplan2 */ - testcase TC_MEC_SRV_SAQ_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_SAQ_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2050,7 +2050,7 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_SAQ_002_NF + } // End of testcase TC_MEC_MEC011_SRV_SAQ_002_NF } // End of group saq @@ -2063,7 +2063,7 @@ module AtsMec_AppEnablementAPI_TestCases { * @desc Check that the IUT responds with a list of subscriptions for notifications on services availability when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 */ - testcase TC_MEC_SRV_SRVSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_SRVSUB_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2113,13 +2113,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_SRVSUB_001_OK + } // End of testcase TC_MEC_MEC011_SRV_SRVSUB_001_OK /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 */ - testcase TC_MEC_SRV_SRVSUB_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_SRVSUB_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2167,13 +2167,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_SRVSUB_001_NF + } // End of testcase TC_MEC_MEC011_SRV_SRVSUB_001_NF /** * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications on service availability events * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 */ - testcase TC_MEC_SRV_SRVSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_SRVSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -2238,13 +2238,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSUB_002_OK + } // End of testcase TC_MEC_MEC011_SRV_APPSUB_002_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 */ - testcase TC_MEC_SRV_SRVSUB_002_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_SRVSUB_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2300,13 +2300,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSUB_002_BR + } // End of testcase TC_MEC_MEC011_SRV_APPSUB_002_BR /** * @desc Check that the IUT responds with the information on a specific subscription when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 */ - testcase TC_MEC_SRV_SRVSUB_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_SRVSUB_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2358,13 +2358,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_SRVSUB_003_OK + } // End of testcase TC_MEC_MEC011_SRV_SRVSUB_003_OK /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 */ - testcase TC_MEC_SRV_SRVSUB_003_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_SRVSUB_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2412,13 +2412,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_APPSUB_003_NF + } // End of testcase TC_MEC_MEC011_SRV_APPSUB_003_NF /** * @desc Check that the IUT acknowledges the unsubscribe from service availability event notifications when commanded by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 */ - testcase TC_MEC_SRV_SRVSUB_004_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_SRVSUB_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2466,13 +2466,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_SRVSUB_004_OK + } // End of testcase TC_MEC_MEC011_SRV_SRVSUB_004_OK /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/SRVSUB/PlatSrvSubscriptions.tplan2 */ - testcase TC_MEC_SRV_SRVSUB_004_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_SRVSUB_004_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2521,7 +2521,7 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_SRVSUB_004_NF + } // End of testcase TC_MEC_MEC011_SRV_SRVSUB_004_NF } // End of group srv_sub @@ -2534,7 +2534,7 @@ module AtsMec_AppEnablementAPI_TestCases { * @desc Check that the IUT responds with timing capabilities when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TIME/PlatTiming.tplan2 */ - testcase TC_MEC_SRV_TIME_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_TIME_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2585,13 +2585,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_TIME_001_OK + } // End of testcase TC_MEC_MEC011_SRV_TIME_001_OK /** * @desc Check that the IUT responds with current time when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TIME/PlatTiming.tplan2 */ - testcase TC_MEC_SRV_TIME_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_TIME_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var UInt64 v_current_time; @@ -2646,7 +2646,7 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_TIME_002_OK + } // End of testcase TC_MEC_MEC011_SRV_TIME_002_OK } // End of group timing @@ -2659,7 +2659,7 @@ module AtsMec_AppEnablementAPI_TestCases { * @desc Check that the IUT responds with a list of available traffic rules when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/PlatTrafficRules.tplan2 */ - testcase TC_MEC_SRV_TRAF_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_TRAF_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2709,13 +2709,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_TRAF_001_OK + } // End of testcase TC_MEC_MEC011_SRV_TRAF_001_OK /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/PlatTrafficRules.tplan2 */ - testcase TC_MEC_SRV_TRAF_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_TRAF_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2763,13 +2763,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_SRVSUB_001_NF + } // End of testcase TC_MEC_MEC011_SRV_SRVSUB_001_NF /** * @desc Check that the IUT responds with the information on a specific traffic rule when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/TrafficRules.tplan2 */ - testcase TC_MEC_SRV_TRAF_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_TRAF_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2821,13 +2821,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_TRAF_002_OK + } // End of testcase TC_MEC_MEC011_SRV_TRAF_002_OK /** * @desc Check that the IUT updates a specific traffic rule when commanded by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/TrafficRules.tplan2 */ - testcase TC_MEC_SRV_TRAF_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_TRAF_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2890,13 +2890,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_TRAF_003_OK + } // End of testcase TC_MEC_MEC011_SRV_TRAF_003_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/PlatTrafficRules.tplan2 */ - testcase TC_MEC_SRV_TRAF_003_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_TRAF_003_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -2954,13 +2954,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_TRAF_003_BR + } // End of testcase TC_MEC_MEC011_SRV_TRAF_003_BR /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/PlatTrafficRules.tplan2 */ - testcase TC_MEC_SRV_TRAF_003_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_TRAF_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -3018,13 +3018,13 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_TRAF_003_NF + } // End of testcase TC_MEC_MEC011_SRV_TRAF_003_NF /** * @desc Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRAF/PlatTrafficRules.tplan2 */ - testcase TC_MEC_SRV_TRAF_003_PF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_TRAF_003_PF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -3083,7 +3083,7 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_TRAF_003_PF + } // End of testcase TC_MEC_MEC011_SRV_TRAF_003_PF } // End of group traffic_rules @@ -3096,7 +3096,7 @@ module AtsMec_AppEnablementAPI_TestCases { * @desc Check that the IUT responds with a list of available transports when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/TRANS/PlatTransport.tplan2 */ - testcase TC_MEC_SRV_TRANS_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC011_SRV_TRANS_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -3146,7 +3146,7 @@ module AtsMec_AppEnablementAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_TRANS_001_OK + } // End of testcase TC_MEC_MEC011_SRV_TRANS_001_OK } // End of group transport_rules diff --git a/ttcn/AtsMec/AtsMec_AppLCM_TestCases.ttcn b/ttcn/AtsMec/AtsMec_AppLCM_TestCases.ttcn index 091d99176b7cf00a1054ca0609cf7fd023e9410b..da1718b79b7a876626dc8822e811ca17d7426287 100644 --- a/ttcn/AtsMec/AtsMec_AppLCM_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_AppLCM_TestCases.ttcn @@ -7,7 +7,7 @@ * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. -* @see ETSI GS MEC 003, Draft ETSI GS MEC 013 V2.0.3 (2018-10) +* @see ETSI GS MEC 003, Draft ETSI GS MEC 010-2 V2.1.1 */ module AtsMec_AppLCM_TestCases { @@ -39,7 +39,7 @@ module AtsMec_AppLCM_TestCases { * ETSI GS MEC 010-2 2.0.10, Table 6.2.2.3.2-1 //CreateAppInstanceRequest * ETSI GS MEC 010-2 2.0.10, Table 6.2.2.4.2-1 //AppInstanceInfo */ - testcase TC_MEC_MEX_LCM_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -96,7 +96,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_001_OK + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_001_OK @@ -106,7 +106,7 @@ module AtsMec_AppLCM_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.5.1.3.1 * ETSI GS MEC 010-2 2.0.10, Table 6.2.2.3.2-1 //CreateAppInstanceRequest */ - testcase TC_MEC_MEX_LCM_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -155,7 +155,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_001_BR + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_001_BR @@ -164,7 +164,7 @@ module AtsMec_AppLCM_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.5.1.3.2 * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //AppInstanceInfo */ - testcase TC_MEC_MEX_LCM_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -216,7 +216,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_002_OK + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_002_OK /** @@ -224,7 +224,7 @@ module AtsMec_AppLCM_TestCases { * @see: ETSI GS MEC 010-2 2.0.10, clause 7.5.2.3.2 * ETSI GS MEC 010-2 2.0.10, Table 6.2.2.4.2-1 */ - testcase TC_MEC_MEX_LCM_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -272,7 +272,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_003_OK + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_003_OK @@ -282,7 +282,7 @@ module AtsMec_AppLCM_TestCases { * @desc: Check that MEC API provider fails on retrieving an App Instance when requested using wrong appInstanceId * @see: ETSI GS MEC 010-2 2.0.10, clause 7.5.2.3.2 */ - testcase TC_MEC_MEX_LCM_003_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -324,14 +324,14 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_003_NF + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_003_NF /** * @desc: Check that MEC API provider service deletes an App Instance when requested * ETSI GS MEC 010-2 2.0.10, clause 7.5.2.3.4 */ - testcase TC_MEC_MEX_LCM_004_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -372,13 +372,13 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_004_OK + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_004_OK /** * @desc: Check that MEC API provider fails on deletion of an App Instance when requested using wrong appInstanceId * @see: ETSI GS MEC 010-2 2.0.10, clause 7.5.2.3.2 */ - testcase TC_MEC_MEX_LCM_004_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_004_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -420,7 +420,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_004_NF + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_004_NF /** @@ -428,7 +428,7 @@ module AtsMec_AppLCM_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.5.6.3.1 * ETSI GS MEC 010-2 2.0.10, table 6.2.2.7.2-1 //InstantiateAppRequest */ - testcase TC_MEC_MEX_LCM_005_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_005_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -482,7 +482,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_005_OK + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_OK /** @@ -491,7 +491,7 @@ module AtsMec_AppLCM_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.5.6.3.1 * ETSI GS MEC 010-2 2.0.10, table 6.2.2.7.2-1 //InstantiateAppRequest */ - testcase TC_MEC_MEX_LCM_005_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_005_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -540,7 +540,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_005_NF + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_NF /** @@ -548,7 +548,7 @@ module AtsMec_AppLCM_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.5.6.3.1 * ETSI GS MEC 010-2 2.0.10, table 6.2.2.7.2-1 //InstantiateAppRequest */ - testcase TC_MEC_MEX_LCM_005_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_005_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -597,7 +597,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_005_BR + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_005_BR /** @@ -605,7 +605,7 @@ module AtsMec_AppLCM_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.5.7.3.1 * ETSI GS MEC 010-2 2.0.10, table 6.2.2.9.2-1 //TerminateAppRequest */ - testcase TC_MEC_MEX_LCM_006_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_006_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -659,7 +659,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_006_OK + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_006_OK /** @@ -668,7 +668,7 @@ module AtsMec_AppLCM_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.5.7.3.1 * ETSI GS MEC 010-2 2.0.10, table 6.2.2.9.2-1 //TerminateAppRequest */ - testcase TC_MEC_MEX_LCM_006_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_006_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -717,7 +717,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_006_NF + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_006_NF /** @@ -725,7 +725,7 @@ module AtsMec_AppLCM_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.5.7.3.1 * ETSI GS MEC 010-2 2.0.10, table 6.2.2.9.2-1 //TerminateAppRequest */ - testcase TC_MEC_MEX_LCM_006_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_006_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -774,7 +774,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_006_BR + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_006_BR /** @@ -782,7 +782,7 @@ module AtsMec_AppLCM_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.5.8.3.1 * ETSI GS MEC 010-2 2.0.10, table 6.2.2.8.2-1 //OperateAppRequest */ - testcase TC_MEC_MEX_LCM_007_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_007_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -836,7 +836,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_007_OK + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_007_OK /** @@ -845,7 +845,7 @@ module AtsMec_AppLCM_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.5.8.3.1 * ETSI GS MEC 010-2 2.0.10, table 6.2.2.8.2-1 //OperateAppRequest */ - testcase TC_MEC_MEX_LCM_007_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_007_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -894,7 +894,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_007_NF + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_007_NF /** @@ -902,7 +902,7 @@ module AtsMec_AppLCM_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.5.8.3.1 * ETSI GS MEC 010-2 2.0.10, table 6.2.2.8.2-1 //OperateAppRequest */ - testcase TC_MEC_MEX_LCM_007_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_007_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -951,7 +951,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_007_BR + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_007_BR @@ -960,7 +960,7 @@ module AtsMec_AppLCM_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.5.9.3.2 * ETSI GS MEC 010-2 2.0.10, table 6.2.2.14.2-1" //AppLcmOpOcc */ - testcase TC_MEC_MEX_LCM_008_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_008_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1011,14 +1011,14 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_008_OK + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_008_OK /** * @desc: Check that MEC API provider service retrieves info about LCM Operation Occurrency on an App Instance when requested * ETSI GS MEC 010-2 2.0.10, clause 7.5.9.3.2 * ETSI GS MEC 010-2 2.0.10, table 6.2.2.14.2-1" //AppLcmOpOcc */ - testcase TC_MEC_MEX_LCM_009_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_009_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1066,14 +1066,14 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_009_OK + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_009_OK /** * @desc:Check that MEC API provider service sends an error when it receives a query for a not existing LCM Operation Occurrency * ETSI GS MEC 010-2 2.0.10, clause 7.5.9.3.2 * ETSI GS MEC 010-2 2.0.10, table 6.2.2.14.2-1" //AppLcmOpOcc */ - testcase TC_MEC_MEX_LCM_009_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_009_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1114,7 +1114,7 @@ module AtsMec_AppLCM_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_009_NF + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_009_NF @@ -1134,7 +1134,7 @@ group app_lcm_subscriptions { * ETSI GS MEC 010-2 2.0.10, table 6.2.2.13.2-1 //AppInstSubscriptionRequest * ETSI GS MEC 010-2 2.0.10, table 6.2.2.10.2-1 //AppInstSubscriptionInfo */ - testcase TC_MEC_MEX_LCM_010_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_010_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1193,7 +1193,7 @@ group app_lcm_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_010_OK + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_010_OK @@ -1203,7 +1203,7 @@ group app_lcm_subscriptions { * ETSI GS MEC 010-2 2.0.10, clause 7.5.3.3.1 * ETSI GS MEC 010-2 2.0.10, table 6.2.2.13.2-1 //AppInstSubscriptionRequest */ - testcase TC_MEC_MEX_LCM_010_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_010_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1255,7 +1255,7 @@ group app_lcm_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_010_BR + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_010_BR /** @@ -1266,7 +1266,7 @@ group app_lcm_subscriptions { * ETSI GS MEC 010-2 2.0.10, table 6.2.2.10.2-1 // AppInstSubscriptionInfo * ETSI GS MEC 010-2 2.0.10, table 6.2.2.16.2-1 // AppLcmOpOccSubscriptionInfo */ - testcase TC_MEC_MEX_LCM_011_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_011_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1321,7 +1321,7 @@ group app_lcm_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_011_OK + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_011_OK /** @@ -1330,7 +1330,7 @@ group app_lcm_subscriptions { * ETSI GS MEC 010-2 2.0.10, table 6.2.2.10.2-1 // AppInstSubscriptionInfo * ETSI GS MEC 010-2 2.0.10, table 6.2.2.16.2-1 // AppLcmOpOccSubscriptionInfo */ - testcase TC_MEC_MEX_LCM_012_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_012_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1381,14 +1381,14 @@ group app_lcm_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_012_OK + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_012_OK /** * @desc: Check that MEC API provider service sends an error when it receives a query for a not existing LCM Subscription * ETSI GS MEC 010-2 2.0.10, clause 7.5.4.3.2 */ - testcase TC_MEC_MEX_LCM_012_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_012_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1433,13 +1433,13 @@ group app_lcm_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_012_NF + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_012_NF /** * @desc: Check that MEC API provider service delete an existing LCM Subscription when requested * ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.4 */ - testcase TC_MEC_MEX_LCM_013_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_013_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1483,14 +1483,14 @@ group app_lcm_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_013_OK + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_013_OK /** * @desc: Check that MEC API provider service delete an existing LCM Subscription when requested * ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.4 */ - testcase TC_MEC_MEX_LCM_013_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_013_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1535,7 +1535,7 @@ group app_lcm_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEX_LCM_013_NF + } // End of testcase TC_MEC_MEC010p2_MEX_LCM_013_NF } // end of group app_lcm_subscriptions @@ -1549,7 +1549,7 @@ group app_lcm__notification { * ETSI GS MEC 010-2 2.0.10, table 6.2.2.18.2-1 // AppLcmOpOccNotification * ETSI GS MEC 010-2 2.0.10, table 6.2.2.12.2-1 // AppInstNotification */ - testcase TC_MEC_MEX_LCM_014_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEX_LCM_014_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; diff --git a/ttcn/AtsMec/AtsMec_BwManagementAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_BwManagementAPI_TestCases.ttcn deleted file mode 100644 index f99a22265d74e9f2ce15d760dca71bde721c64f3..0000000000000000000000000000000000000000 --- a/ttcn/AtsMec/AtsMec_BwManagementAPI_TestCases.ttcn +++ /dev/null @@ -1,100 +0,0 @@ -/** - * @author ETSI / STF569 - * @version $URL:$ - * $ID:$ - * @desc This module provides the MEC test cases. - * @copyright ETSI Copyright Notification - * No part may be reproduced except as authorized by written permission. - * The copyright and the foregoing restriction extend to reproduction in all media. - * All rights reserved. - * @see ETSI GS MEC 003, Draft ETSI GS MEC 016 V2.0.3 (2018-10) - */ -module AtsMec_BwManagementAPI_TestCases { - - // Libcommon - import from LibCommon_Time all; - import from LibCommon_VerdictControl all; - import from LibCommon_Sync all; - - // LibHttp - import from LibItsHttp_TypesAndValues all; - import from LibItsHttp_Functions all; - import from LibItsHttp_Templates all; - import from LibItsHttp_JsonTemplates all; - import from LibItsHttp_TestSystem all; - - // LibMec/BwManagementAPI - import from BwManagementAPI_TypesAndValues all; - import from BwManagementAPI_Templates all; - import from BwManagementAPI_Pics all; - import from BwManagementAPI_Pixits all; - - // LibMec - import from LibMec_Functions all; - import from LibMec_Pics all; - import from LibMec_Pixits all; - - group me_app_role { - - /** - * @desc Check that the IUT responds with the list of configured bandwidth allocations when queried by a MEC Application - * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/PlatBandwidthManager.tplan2 - * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml - */ - testcase TC_MEC_PLAT_MP1_BWA_BV_001() runs on HttpComponent system HttpTestAdapter { - // Local variables - var Headers v_headers; - var HttpMessage v_response; - - // Test control - if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { - log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); - setverdict(inconc); - stop; - } - - // Test component configuration - f_cf_01_http_up(); - - // Test adapter configuration - - // Preamble - f_init_default_headers_list(-, -, v_headers); - httpPort.send( - m_http_request( - m_http_request_get( - PX_ME_BWM_URI & "?app_instance_id=" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")), - v_headers - ) - ) - ); - f_selfOrClientSyncAndVerdict(c_prDone, e_success); - - // Test Body - tc_ac.start; - alt { - [] httpPort.receive( - mw_http_response( - mw_http_response_ok( - mw_http_message_body_json( - mw_body_json_bw_info( - mw_bw_info - ))))) -> value v_response { - tc_ac.stop; - - log("*** " & testcasename() & ": PASS: IUT successfully responds with a ZoneId ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_success); - } - [] tc_ac.timeout { - log("*** " & testcasename() & ": INCONC: Expected message not received ***"); - f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); - } - } // End of 'alt' statement - - // Postamble - f_cf_01_http_down(); - } // End of testcase TC_MEC_PLAT_MP1_BWA_BV_001 - - } // End of group me_app_role - -} // End of module AtsMec_BwManagementAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..4386301bc6b8116981c8290cef54c81b66d92951 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn @@ -0,0 +1,1081 @@ +/** + * @author ETSI / TTF T012 + * @version $URL:$ + * $ID:$ + * @desc This module provides the MEC test cases. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * @see ETSI GS MEC 002, Draft ETSI GS MEC 016 V2.2.1 (2020-04) + */ +module AtsMec_DeviceApplicationInterfaceAPI_TestCases { + + + // JSON + import from JSON all; + + // Libcommon + import from LibCommon_Time all; + import from LibCommon_VerdictControl all; + import from LibCommon_Sync all; + + // LibHttp + import from LibItsHttp_TypesAndValues all; + import from LibItsHttp_Functions all; + import from LibItsHttp_Templates all; + import from LibItsHttp_JsonTemplates all; + import from LibItsHttp_TestSystem all; + + // LibMec/DeviceApplicationInterface + import from DeviceApplicationInterfaceAPI_TypesAndValues all; + import from DeviceApplicationInterfaceAPI_Pics all; + import from DeviceApplicationInterfaceAPI_Pixits all; + import from DeviceApplicationInterfaceAPI_Templates all; + import from DeviceApplicationInterfaceAPI_Functions all; + + // LibMec + import from LibMec_Templates all; + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + + group me_app_role { + + /** + * @desc Check that the IUT responds with the list of user applications when requested by an UE Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeApplications.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPS_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_DEVICE_APP_LIST_URI, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_device_info_app_list + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of Application ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPS_001_OK + + /** + * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeApplications.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPS_001_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_DEVICE_APP_LIST_URI & "appName", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPS_001_NF + + /** + * @desc Check that the IUT responds with the list of user applications when requested by an UE Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeApplications.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPS_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_DEVICE_APP_LIST_URI & "?appName=" & PX_DEVICE_APP_NAME, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_device_info_app_list + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of Application ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPS_002_OK + + /** + * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeApplications.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPS_002_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_DEVICE_APP_LIST_URI & "appName", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPS_002_BR + + /** + * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeApplications.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPS_002_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_DEVICE_APP_LIST_URI & "appName", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPS_002_NF + + /** + * @desc Check that the IUT acknowledges the creation of the application context when requested by an UE Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeAppsContext.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPCTX_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_DEVICE_APP_CTX_URI, + v_headers, + m_http_message_body_json( + m_body_json_device_info_app_context( + m_device_app_context( + PX_ASSOCIATE_DEV_APPID, + m_app_context_info( + PX_APPD_ID, + PX_APP_NAME, + PX_APP_PROVIDER, + PX_APPD_VERSION + ), + PX_DEVICE_APP_CALLBACK + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_device_info_app_context( + mw_device_app_context( + -, + PX_ASSOCIATE_DEV_APPID, + mw_app_context_info, + PX_DEVICE_APP_CALLBACK + )))))) -> value v_response { + tc_ac.stop; + + // TODO Check presence of Location HTTP header + log("*** " & testcasename() & ": PASS: IUT successfully responds with an Application Context ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_application_context(v_response.response.body.json_body.appContext_device_info); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_001_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect URL is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeAppsContext.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPCTX_001_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_DEVICE_APP_CTX_URI & "Invalid", + v_headers, + m_http_message_body_json( + m_body_json_device_info_app_context( + m_device_app_context( + PX_ASSOCIATE_DEV_APPID, + m_app_context_info( + PX_APPD_ID, + PX_APP_NAME, + PX_APP_PROVIDER, + PX_APPD_VERSION + ), + PX_DEVICE_APP_CALLBACK + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an Application Contexta correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_001_BR + + /** + * @desc Check that the IUT responds with an error when a request with incorrect URL is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeAppsContext.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPCTX_001_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_DEVICE_APP_CTX_URI, + v_headers, + m_http_message_body_json( + m_body_json_device_info_app_context( + m_device_app_context( + PX_ASSOCIATE_DEV_APPID, + m_app_context_info( + PX_APPD_ID, + PX_UNKNOWN_APP_NAME, + PX_APP_PROVIDER, + PX_APPD_VERSION + ), + PX_DEVICE_APP_CALLBACK + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an Application Contexta correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_001_NF + + /** + * @desc Check that the IUT acknowledges the creation of the application context when requested by an UE Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeAppsContext.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPCTX_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppContext v_device_info_app_context; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_application_context(v_device_info_app_context); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_DEVICE_APP_CTX_URI & "/" & v_device_info_app_context.contextId, + v_headers, + m_http_message_body_json( + m_body_json_device_info_app_context( + m_device_app_context( + PX_ASSOCIATE_DEV_APPID, + m_app_context_info( + PX_APPD_ID, + PX_APP_NAME, + PX_APP_PROVIDER, + PX_APPD_VERSION + ), + PX_DEVICE_NEW_APP_CALLBACK + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) -> value v_response { + tc_ac.stop; + + // TODO Check presence of Location HTTP header + log("*** " & testcasename() & ": PASS: IUT successfully updates the Application Context ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_application_context(v_device_info_app_context); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_002_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeAppsContext.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPCTX_002_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppContext v_device_info_app_context; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_application_context(v_device_info_app_context); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_DEVICE_APP_CTX_URI & "/" & v_device_info_app_context.contextId, + v_headers, + m_http_message_body_json( + m_body_json_device_info_app_context( + m_device_app_context( + PX_INVALID_ASSOCIATE_DEV_APPID, + m_app_context_info( + PX_APPD_ID, + PX_APP_NAME, + PX_APP_PROVIDER, + PX_APPD_VERSION + ), + PX_DEVICE_NEW_APP_CALLBACK + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_002_BR + + /** + * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeAppsContext.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPCTX_002_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_DEVICE_APP_CTX_URI & "/" & PX_UNKNOWN_APP_CONTEXT_ID, + v_headers, + m_http_message_body_json( + m_body_json_device_info_app_context( + m_device_app_context( + PX_ASSOCIATE_DEV_APPID, + m_app_context_info( + PX_APPD_ID, + PX_APP_NAME, + PX_APP_PROVIDER, + PX_APPD_VERSION + ), + PX_DEVICE_NEW_APP_CALLBACK + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_002_NF + + /** + * @desc Check that the IUT deletes the application context when commanded by an UE Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeAppsContext.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPCTX_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var AppContext v_device_info_app_context; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_application_context(v_device_info_app_context); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_DEVICE_APP_CTX_URI & "/" & PX_UNKNOWN_APP_CONTEXT_ID, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_003_OK + + /** + * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeAppsContext.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPCTX_003_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_DEVICE_APP_CTX_URI & "/" & PX_UNKNOWN_APP_CONTEXT_ID, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_003_NF + + /** + * @desc Check that the IUT sends the locations available for instantiation of a specific user application when requested by an UE Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeApplicationsLocation.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPLOC_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_DEVICE_APP_LIST_URI, + v_headers, + m_http_message_body_json( + m_body_json_device_info_app_location_availability( + m_application_location_availability( + PX_ASSOCIATE_DEV_APPID, + m_application_location_availability_info( + PX_APPD_ID, + PX_APP_NAME, + PX_APP_PROVIDER, + PX_APPD_VERSION + ) + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + m_body_json_device_info_app_location_availability( + mw_application_location_availability( + PX_ASSOCIATE_DEV_APPID, + mw_application_location_availability_info + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of Application ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPLOC_001_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeApplicationsLocation.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPLOC_001_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_DEVICE_APP_LIST_URI & "_invalid", + v_headers, + m_http_message_body_json( + m_body_json_device_info_app_location_availability( + m_application_location_availability( + PX_ASSOCIATE_DEV_APPID, + m_application_location_availability_info( + PX_APPD_ID, + PX_APP_NAME, + PX_APP_PROVIDER, + PX_APPD_VERSION + ) + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of Application ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPLOC_001_BR + + /** + * @desc Check that the IUT responds with an error when a request with incorrect URL is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs016-dev-app-api/blob/master/UEAppInterfaceApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC016/MEO/UEAPPS/SysUeApplicationsLocation.tplan2 + */ + testcase TC_MEC_MEC016_MEO_UEAPPLOC_001_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_DEVICE_APP_LIST_URI, + v_headers, + m_http_message_body_json( + m_body_json_device_info_app_location_availability( + m_application_location_availability( + PX_ASSOCIATE_DEV_APPID, + m_application_location_availability_info( + PX_APPD_ID, + PX_APP_NAME, + PX_APP_PROVIDER, + PX_APPD_VERSION + ) + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of Application ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC016_MEO_UEAPPLOC_001_NF + + } // End of group me_app_role + +} // End of module AtsMec_DeviceApplicationInterfaceAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_FixedAccessInfoAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_FixedAccessInfoAPI_TestCases.ttcn index 6f60959f6db31b5536a50137a980b8d7c75405aa..6afbc465f40dac8165a3beb5e67f97131cddbaac 100644 --- a/ttcn/AtsMec/AtsMec_FixedAccessInfoAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_FixedAccessInfoAPI_TestCases.ttcn @@ -44,7 +44,7 @@ module AtsMec_FixedAccessInformationAPI_TestCases { /** * @desc Check that the IUT responds with the current status of the fixed access information when queried by a MEC Application */ - testcase TP_MEC_SRV_FAIS_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -96,12 +96,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_001_OK + } // End of testcase TP_MEC_MEC029_SRV_FAIS_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -150,12 +150,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_001_BR + } // End of testcase TP_MEC_MEC029_SRV_FAIS_001_BR /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -203,12 +203,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_001_NF + } // End of testcase TP_MEC_MEC029_SRV_FAIS_001_NF /** * @desc Check that the IUT responds with the current status of the device information when queried by a MEC Application */ - testcase TP_MEC_SRV_FAIS_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -260,12 +260,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_002_OK + } // End of testcase TP_MEC_MEC029_SRV_FAIS_002_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_002_BR() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -315,12 +315,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_002_BR + } // End of testcase TP_MEC_MEC029_SRV_FAIS_002_BR /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -368,12 +368,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_002_NF + } // End of testcase TP_MEC_MEC029_SRV_FAIS_002_NF /** * @desc CCheck that the IUT responds with the current status of the cable line information when queried by a MEC Application */ - testcase TP_MEC_SRV_FAIS_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -426,12 +426,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_003_OK + } // End of testcase TP_MEC_MEC029_SRV_FAIS_003_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_003_BR() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_003_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -481,12 +481,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_003_BR + } // End of testcase TP_MEC_MEC029_SRV_FAIS_003_BR /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_003_NF() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -535,12 +535,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_003_NF + } // End of testcase TP_MEC_MEC029_SRV_FAIS_003_NF /** * @desc Check that the IUT responds with the current status of the optical network information when queried by a MEC Application */ - testcase TP_MEC_SRV_FAIS_004_OK() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -594,12 +594,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_004_OK + } // End of testcase TP_MEC_MEC029_SRV_FAIS_004_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_004_BR() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_004_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -649,12 +649,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_004_BR + } // End of testcase TP_MEC_MEC029_SRV_FAIS_004_BR /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_004_NF() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_004_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -703,12 +703,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_004_NF + } // End of testcase TP_MEC_MEC029_SRV_FAIS_004_NF /** * @desc Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application */ - testcase TP_MEC_SRV_FAIS_005_OK() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_005_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -762,12 +762,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_005_OK + } // End of testcase TP_MEC_MEC029_SRV_FAIS_005_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_005_BR() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_005_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -817,12 +817,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_005_BR + } // End of testcase TP_MEC_MEC029_SRV_FAIS_005_BR /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_005_NF() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_005_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -877,7 +877,7 @@ module AtsMec_FixedAccessInformationAPI_TestCases { /** * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications on Optical Network Unit alarm events */ - testcase TP_MEC_SRV_FAIS_006_OK() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_006_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -952,12 +952,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_006_OK + } // End of testcase TP_MEC_MEC029_SRV_FAIS_006_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_006_BR() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_006_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1015,12 +1015,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_006_BR + } // End of testcase TP_MEC_MEC029_SRV_FAIS_006_BR /** * @desc Check that the IUT responds with the information on a given subscription when queried by a MEC Application */ - testcase TP_MEC_SRV_FAIS_007_OK() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_007_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1076,12 +1076,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_007_OK + } // End of testcase TP_MEC_MEC029_SRV_FAIS_007_OK /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_007_NF() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_007_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1131,12 +1131,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_007_NF + } // End of testcase TP_MEC_MEC029_SRV_FAIS_007_NF /** * @desc Check that the IUT updates an existing subscription when commanded by a MEC Application */ - testcase TP_MEC_SRV_FAIS_008_OK() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_008_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1199,12 +1199,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_008_OK + } // End of testcase TP_MEC_MEC029_SRV_FAIS_008_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_008_BR() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_008_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1264,12 +1264,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_008_BR + } // End of testcase TP_MEC_MEC029_SRV_FAIS_008_BR /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_008_NF() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_008_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1332,12 +1332,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_008_NF + } // End of testcase TP_MEC_MEC029_SRV_FAIS_008_NF /** * @desc Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition */ - testcase TP_MEC_SRV_FAIS_008_PF() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_008_PF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1400,12 +1400,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_008_PF + } // End of testcase TP_MEC_MEC029_SRV_FAIS_008_PF /** * @desc Check that the IUT acknowledges the cancellation of UE location change notifications when commanded by a MEC Application */ - testcase TP_MEC_SRV_FAIS_009_OK() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_009_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1455,12 +1455,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_009_OK + } // End of testcase TP_MEC_MEC029_SRV_FAIS_009_OK /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application */ - testcase TP_MEC_SRV_FAIS_009_NF() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_009_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1510,12 +1510,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_009_NF + } // End of testcase TP_MEC_MEC029_SRV_FAIS_009_NF /** * @desc Check that the IUT sends notification on expiry of Fixed Access Information event subscription to a MEC Application */ - testcase TP_MEC_SRV_FAIS_010_OK() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_010_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1594,12 +1594,12 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_010_OK + } // End of testcase TP_MEC_MEC029_SRV_FAIS_010_OK /** * @desc Check that the IUT acknowledges the subscription by a MEC Application to notifications on Optical Network Unit alarm events */ - testcase TP_MEC_SRV_FAIS_011_OK() runs on HttpComponent system HttpTestAdapter { + testcase TP_MEC_MEC029_SRV_FAIS_011_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1650,6 +1650,6 @@ module AtsMec_FixedAccessInformationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TP_MEC_SRV_FAIS_011_OK + } // End of testcase TP_MEC_MEC029_SRV_FAIS_011_OK } // End of module AtsMec_FixedAccessInfoAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_Grant_TestCases.ttcn b/ttcn/AtsMec/AtsMec_Grant_TestCases.ttcn index 9a6346b7fb1d1b232b96f5a3d8d347d84e0722c7..b176ea44872587b75799a487ae94ca2054817a2b 100644 --- a/ttcn/AtsMec/AtsMec_Grant_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_Grant_TestCases.ttcn @@ -7,7 +7,7 @@ * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. -* @see ETSI GS MEC 003, Draft ETSI GS MEC 013 V2.0.3 (2018-10) +* @see ETSI GS MEC 003, Draft ETSI GS MEC 010-2 V2.1.1 */ module AtsMec_Grant_TestCases { @@ -39,7 +39,7 @@ group grant { * ETSI GS MEC 010-2 2.0.10, Table 6.2.4.2.2-1, //GrantRequest * ETSI GS MEC 010-2 2.0.10, Table 6.2.4.4.2-1 //Grant */ - testcase TC_MEC_MEO_GRANT_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_GRANT_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -95,7 +95,7 @@ group grant { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_GRANT_001_OK + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_001_OK @@ -104,7 +104,7 @@ group grant { * ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.1, * ETSI GS MEC 010-2 2.0.10, Table 6.2.4.2.2-1, //GrantRequest */ - testcase TC_MEC_MEO_GRANT_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_GRANT_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -157,7 +157,7 @@ group grant { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_GRANT_001_BR + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_001_BR /** @@ -165,7 +165,7 @@ group grant { * ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.1, * ETSI GS MEC 010-2 2.0.10, Table 6.2.4.2.2-1, //GrantRequest */ - testcase TC_MEC_MEO_GRANT_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_GRANT_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -219,14 +219,14 @@ group grant { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_GRANT_002_OK + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_002_OK /** * @desc: Check that MEO sends the status of a grant request when a query on a granting ID is performed * ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.2, */ - testcase TC_MEC_MEO_GRANT_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_GRANT_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -271,14 +271,14 @@ group grant { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_GRANT_003_OK + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_003_OK /** * @desc: Check that MEO responds with an error when it receives a request for returning a grant referred with a wrong ID * ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.2 */ - testcase TC_MEC_MEO_GRANT_003_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_GRANT_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -331,7 +331,7 @@ group grant { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_GRANT_003_NF + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_003_NF /** @@ -339,7 +339,7 @@ group grant { * ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.2 * ETSI GS MEC 010-2 2.0.10, Table 6.2.4.4.2-1 //Grant */ - testcase TC_MEC_MEO_GRANT_004_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_GRANT_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -388,7 +388,7 @@ group grant { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_GRANT_004_OK + } // End of testcase TC_MEC_MEC010p2_MEO_GRANT_004_OK } diff --git a/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn index b68d530a27b0c8700e4db702a7667f2561f9cd48..dc949a6d804bfbf9a77033971e525cf9257eb592 100644 --- a/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_LocationAPI_TestCases.ttcn @@ -38,7 +38,7 @@ module AtsMec_LocationAPI_TestCases { * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UELOC/PlatUeLocationLookup.tplan2 * @see https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/UserInfo */ - testcase TC_MEC_SRV_UELOCLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -73,12 +73,16 @@ module AtsMec_LocationAPI_TestCases { mw_http_response( mw_http_response_ok( mw_http_message_body_json( - mw_body_json_user_info( - mw_user_info( - PX_USER, - PX_ACCESS_POINT_ID, - PX_ZONE_ID, - PX_RESOURCE_URL + mw_body_json_user_list( + mw_user_list( + ?/*{mw_user_info( + PX_USER, + PX_ACCESS_POINT_ID, + PX_ZONE_ID, + -, + PX_RESOURCE_URL + )}*/, + ? )))))) { tc_ac.stop; @@ -93,14 +97,14 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCLOOK_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UELOC/PlatUeLocationLookup.tplan2 * @see https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/UserInfo */ - testcase TC_MEC_SRV_UELOCLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -148,14 +152,14 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCLOOK_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_BR /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UELOC/PlatUeLocationLookup.tplan2 * @see https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/UserInfo */ - testcase TC_MEC_SRV_UELOCLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -203,7 +207,7 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCLOOK_001_NF + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_NF } // End of group ueLocationLookup @@ -213,7 +217,7 @@ module AtsMec_LocationAPI_TestCases { * @desc Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the location changes * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UELOCSUB/PlatUeLocationSubscription.tplan2 */ - testcase TC_MEC_SRV_UELOCSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -276,13 +280,13 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCSUB_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UELOCSUB/PlatUeLocationSubscription.tplan2 */ - testcase TC_MEC_SRV_UELOCSUB_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -339,13 +343,13 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCSUB_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR /** * @desc Check that the IUT acknowledges the cancellation of UE location change notifications when commanded by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UELOCSUB/PlatUeLocationSubscription.tplan2 */ - testcase TC_MEC_SRV_UELOCSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -393,13 +397,13 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCSUB_002_OK + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_002_OK /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UELOCSUB/PlatUeLocationSubscription.tplan2 */ - testcase TC_MEC_SRV_UELOCSUB_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -447,7 +451,7 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCSUB_002_NF + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_002_NF } // End of group ueLocSub @@ -457,7 +461,7 @@ module AtsMec_LocationAPI_TestCases { * @desc Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the UE changes location * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UETRACKSUB/PlatUeTrackingSubscription.tplan2 */ - testcase TC_MEC_SRV_UETRACKSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -511,13 +515,13 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETRACKSUB_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_OK /** * @desc Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the UE changes location * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UETRACKSUB/PlatUeTrackingSubscription.tplan2 */ - testcase TC_MEC_SRV_UETRACKSUB_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -574,13 +578,13 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETRACKSUB_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_BR /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UETRACKSUB/PlatUeTrackingSubscription.tplan2 */ - testcase TC_MEC_SRV_UETRACKSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UETRACKSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -628,13 +632,13 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETRACKSUB_002_OK + } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_002_OK /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UETRACKSUB/PlatUeTrackingSubscription.tplan2 */ - testcase TC_MEC_SRV_UETRACKSUB_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UETRACKSUB_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -682,7 +686,7 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETRACKSUB_002_NF + } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_002_NF } // End of group ueTrackSub @@ -692,7 +696,7 @@ module AtsMec_LocationAPI_TestCases { * @desc Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFLOOK/PlatUeInformationLookup.tplan2 */ - testcase TC_MEC_SRV_UEINFLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -743,13 +747,13 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFLOOK_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UEINFLOOK_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFLOOK/PlatUeInformationLookup.tplan2 */ - testcase TC_MEC_SRV_UEINFLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -797,13 +801,13 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFLOOK_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UEINFLOOK_001_BR /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFLOOK/PlatUeInformationLookup.tplan2 */ - testcase TC_MEC_SRV_UEINFLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -851,7 +855,7 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFLOOK_001_NF + } // End of testcase TC_MEC_MEC013_SRV_UEINFLOOK_001_NF } // End of group ueInfLook @@ -861,7 +865,7 @@ module AtsMec_LocationAPI_TestCases { * @desc Check that the IUT acknowledges the UE information change subscription request when commanded by a MEC Application and notifies it when the location changes * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFSUB/PlatUeInformationSubscription.tplan2 */ - testcase TC_MEC_SRV_UEINFSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFSUB_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -924,13 +928,13 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFSUB_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UEINFSUB_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFSUB/PlatUeInformationSubscription.tplan2 */ - testcase TC_MEC_SRV_UEINFSUB_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFSUB_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -987,13 +991,13 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFSUB_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UEINFSUB_001_BR /** * @desc Check that the IUT acknowledges the cancellation of UE information change notifications when commanded by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFSUB/PlatUeInformationSubscription.tplan2 */ - testcase TC_MEC_SRV_UEINFSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1050,13 +1054,13 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFSUB_002_OK + } // End of testcase TC_MEC_MEC013_SRV_UEINFSUB_002_OK /** * @desc Check that the IUT acknowledges the cancellation of UE information change notifications when commanded by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFSUB/PlatUeInformationSubscription.tplan2 */ - testcase TC_MEC_SRV_UEINFSUB_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFSUB_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1104,7 +1108,7 @@ module AtsMec_LocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFSUB_002_NF + } // End of testcase TC_MEC_MEC013_SRV_UEINFSUB_002_NF } // End of group ueInfSub diff --git a/ttcn/AtsMec/AtsMec_MeoPkgm_TestCases.ttcn b/ttcn/AtsMec/AtsMec_MeoPkgm_TestCases.ttcn index 032c63106f354670e0f92cfbd1d34667871fb4e3..b11dfa2c7745aaf901b2588a4499dd37ab4df57d 100644 --- a/ttcn/AtsMec/AtsMec_MeoPkgm_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_MeoPkgm_TestCases.ttcn @@ -7,7 +7,7 @@ * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. -* @see ETSI GS MEC 003, Draft ETSI GS MEC 013 V2.0.3 (2018-10) +* @see ETSI GS MEC 003, Draft ETSI GS MEC 010-2 V2.1.1 */ module AtsMec_PkgMgmt_mm1_TestCases { @@ -39,7 +39,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1, //OnboardedAppPkgInfo * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.2.2-1 //AppPkg */ - testcase TC_MEC_MEO_PKGM_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -105,7 +105,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_001_OK + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_001_OK @@ -114,7 +114,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.3.1.3.1 * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.2.2-1 //AppPkg */ - testcase TC_MEC_MEO_PKGM_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -168,7 +168,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_001_BR + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_001_BR /** @@ -176,7 +176,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.3.1.3.2 * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo */ - testcase TC_MEC_MEO_PKGM_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -235,7 +235,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_002_OK + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_002_OK /** @@ -243,7 +243,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.3.1.3.2 * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo */ - testcase TC_MEC_MEO_PKGM_002_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -302,7 +302,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_002_BR + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_002_BR @@ -311,7 +311,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.2 * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo */ - testcase TC_MEC_MEO_PKGM_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -368,7 +368,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_003_OK + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_003_OK /** @@ -376,7 +376,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.2 * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo */ - testcase TC_MEC_MEO_PKGM_003_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -422,14 +422,14 @@ module AtsMec_PkgMgmt_mm1_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_003_NF + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_003_NF /** * @desc: Check that MEO deletes an App Package when requested * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.4 */ - testcase TC_MEC_MEO_PKGM_004_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -472,7 +472,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_004_OK + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_004_OK /** @@ -480,7 +480,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.4 * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo */ - testcase TC_MEC_MEO_PKGM_004_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_004_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -526,7 +526,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_004_NF + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_004_NF /** @@ -536,7 +536,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { * - DELETION_PENDING, ABORT * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.3 */ - testcase TC_MEC_MEO_PKGM_005_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_005_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -577,14 +577,14 @@ module AtsMec_PkgMgmt_mm1_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_005_OK + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_005_OK /** * @desc: Check that MEO sends an error when it receives a malformed request to modify the operational state of an application package * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.3 */ - testcase TC_MEC_MEO_PKGM_005_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_005_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -628,14 +628,14 @@ module AtsMec_PkgMgmt_mm1_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_005_BR + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_005_BR /** * @desc: Check that MEO responds with an error when it receives a request for updating an App Package referred with a wrong ID * ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.3 */ - testcase TC_MEC_MEO_PKGM_005_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_005_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -678,14 +678,14 @@ module AtsMec_PkgMgmt_mm1_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_005_NF + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_005_NF /** * @desc: Check that MEO returns the Application Descriptor contained on a on-boarded Application Package when requested * ETSI GS MEC 010-2 2.0.10, clause 7.3.6.3.2 */ - testcase TC_MEC_MEO_PKGM_006_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_006_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -727,14 +727,14 @@ module AtsMec_PkgMgmt_mm1_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_006_OK + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_006_OK /** * @desc: Check that MEO responds with an error when it receives a request to retrieve an application descriptor referred with a wrong app package ID * ETSI GS MEC 010-2 2.0.10, clause 7.3.6.3.2 */ - testcase TC_MEC_MEO_PKGM_006_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_006_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -775,7 +775,7 @@ module AtsMec_PkgMgmt_mm1_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_006_NF + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_006_NF @@ -787,7 +787,7 @@ group pkg_mgmt_subscriptions { * @desc: Check that MEO service sends a Application Package Subscription when requested * ETSI GS MEC 010-2 2.0.10, clause 7.3.3.3.1 */ - testcase TC_MEC_MEO_PKGM_007_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_007_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -846,13 +846,13 @@ group pkg_mgmt_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_007_OK + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_007_OK /** * @desc: Check that MEO service sends an error when it receives a malformed request for creating a new subscription on AppPackages * ETSI GS MEC 010-2 2.0.10, clause 7.3.3.3.1 */ - testcase TC_MEC_MEO_PKGM_007_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_007_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -902,13 +902,13 @@ group pkg_mgmt_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_007_BR + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_007_BR /** * @desc: Check that MEO service returns the list of Application Package Subscriptions when requested * ETSI GS MEC 010-2 2.0.10, clause 7.3.3.3.2 */ - testcase TC_MEC_MEO_PKGM_008_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_008_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -963,14 +963,14 @@ group pkg_mgmt_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_008_OK + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_008_OK /** * @desc: Check that MEO service returns an Application Package Subscription when requested * ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.2 */ - testcase TC_MEC_MEO_PKGM_009_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_009_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1021,7 +1021,7 @@ group pkg_mgmt_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_009_OK + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_009_OK /** @@ -1029,7 +1029,7 @@ group pkg_mgmt_subscriptions { * for a subscription on AppPackages with a wrong identifier * ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.2 */ - testcase TC_MEC_MEO_PKGM_009_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_009_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1073,13 +1073,13 @@ group pkg_mgmt_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_009_NF + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_009_NF /** * @desc: Check that MEO service deletes an Application Package Subscription when requested * ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.4 */ - testcase TC_MEC_MEO_PKGM_010_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_010_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1123,7 +1123,7 @@ group pkg_mgmt_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_010_OK + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_010_OK /** @@ -1131,7 +1131,7 @@ group pkg_mgmt_subscriptions { * request for a subscription on AppPackages with a wrong identifier * ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.4 */ - testcase TC_MEC_MEO_PKGM_010_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_010_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1175,7 +1175,7 @@ group pkg_mgmt_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEO_PKGM_010_NF + } // End of testcase TC_MEC_MEC010p2_MEO_PKGM_010_NF } // end of group pkg_mgmt_subscriptions @@ -1186,7 +1186,7 @@ group pkg_management_notification { * if the MEO service has an associated subscription and the event is generated * @see ETSI GS MEC 010-2 2.0.10, clause 7.3.5.1 */ - testcase TC_MEC_MEO_PKGM_011_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEO_PKGM_011_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; diff --git a/ttcn/AtsMec/AtsMec_MepmPkgm_TestCases.ttcn b/ttcn/AtsMec/AtsMec_MepmPkgm_TestCases.ttcn index d2fa02967e87c723666e96d8354862470a322b54..2f6992631f43856f8fcdf9cfff20e129c4088b9f 100644 --- a/ttcn/AtsMec/AtsMec_MepmPkgm_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_MepmPkgm_TestCases.ttcn @@ -7,7 +7,7 @@ * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. -* @see ETSI GS MEC 003, Draft ETSI GS MEC 013 V2.0.3 (2018-10) +* @see ETSI GS MEC 003, Draft ETSI GS MEC 010-2 V2.1.1 */ module AtsMec_PkgMgmt_mm3_TestCases { @@ -95,7 +95,7 @@ module AtsMec_PkgMgmt_mm3_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEPM_PKGM_001_OK + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_001_OK @@ -104,7 +104,7 @@ module AtsMec_PkgMgmt_mm3_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.4.1.3.2 * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo */ - testcase TC_MEC_MEPM_PKGM_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -155,7 +155,7 @@ module AtsMec_PkgMgmt_mm3_TestCases { * ETSI GS MEC 010-2 2.0.10, clause 7.4.2.3.2 * ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 //OnboardedAppPkgInfo */ - testcase TC_MEC_MEPM_PKGM_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -205,7 +205,7 @@ module AtsMec_PkgMgmt_mm3_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEPM_PKGM_002_OK + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_002_OK /** @@ -213,7 +213,7 @@ module AtsMec_PkgMgmt_mm3_TestCases { * a request for returning a App Package referred with a wrong ID * @see: ETSI GS MEC 010-2 2.0.10, clause 7.4.2.3.2 */ - testcase TC_MEC_MEPM_PKGM_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -263,7 +263,7 @@ module AtsMec_PkgMgmt_mm3_TestCases { * @desc: Check that MEPM returns the Application Descriptor contained on a on-boarded Application Package when requested * ETSI GS MEC 010-2 2.0.10, clause 7.4.4.3.2 */ - testcase TC_MEC_MEPM_PKGM_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -305,7 +305,7 @@ module AtsMec_PkgMgmt_mm3_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEPM_PKGM_003_OK + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_003_OK /** @@ -313,7 +313,7 @@ module AtsMec_PkgMgmt_mm3_TestCases { * a request for returning a App Descriptor referred with a wrong App Package ID * @see: ETSI GS MEC 010-2 2.0.10, clause 7.4.4.3.2 */ - testcase TC_MEC_MEPM_PKGM_003_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -355,14 +355,14 @@ module AtsMec_PkgMgmt_mm3_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEPM_PKGM_003_NF + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_003_NF /** * @desc: Check that MEPM returns the content on a on-boarded Application Package when requested * ETSI GS MEC 010-2 2.0.10, clause 7.4.3.3.2 */ - testcase TC_MEC_MEPM_PKGM_004_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -404,14 +404,14 @@ module AtsMec_PkgMgmt_mm3_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEPM_PKGM_004_OK + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_004_OK /** * @desc: Check that MEPM responds with an error when it receives * a request for returning a App Descriptor referred with a wrong App Package ID * @see: ETSI GS MEC 010-2 2.0.10, clause 7.4.4.3.2 */ - testcase TC_MEC_MEPM_PKGM_004_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_004_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -453,7 +453,7 @@ module AtsMec_PkgMgmt_mm3_TestCases { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEPM_PKGM_004_NF + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_004_NF } // End of packageManagement @@ -463,7 +463,7 @@ group pkg_mgmt_subscriptions { * @desc: Check that MEPM service returns an application package subscription when requested * ETSI GS MEC 010-2 2.0.10, clause 7.4.5.3.1 */ - testcase TC_MEC_MEPM_PKGM_005_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_005_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -522,14 +522,14 @@ group pkg_mgmt_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEPM_PKGM_005_OK + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_005_OK /** * @desc: Check that MEPM service sends an error when it receives a * malformed request for creating a new subscription on AppPackages * ETSI GS MEC 010-2 2.0.10, clause 7.4.5.3.1 */ - testcase TC_MEC_MEPM_PKGM_005_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_005_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -579,13 +579,13 @@ group pkg_mgmt_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEPM_PKGM_005_BR + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_005_BR /** * @desc: Check that MEPM service returns the list of Application Package Subscriptions when requested * ETSI GS MEC 010-2 2.0.10, clause 7.4.5.3.2 */ - testcase TC_MEC_MEPM_PKGM_006_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_006_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -640,14 +640,14 @@ group pkg_mgmt_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEPM_PKGM_006_OK + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_006_OK /** * @desc: Check that MEPM service returns an Application Package Subscription when requested * ETSI GS MEC 010-2 2.0.10, clause 7.4.6.3.2 */ - testcase TC_MEC_MEPM_PKGM_007_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_007_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -698,7 +698,7 @@ group pkg_mgmt_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEPM_PKGM_007_OK + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_007_OK /** @@ -706,7 +706,7 @@ group pkg_mgmt_subscriptions { * for a subscription on AppPackages with a wrong identifier * ETSI GS MEC 010-2 2.0.10, clause 7.4.6.3.2 */ - testcase TC_MEC_MEPM_PKGM_007_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_007_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -750,13 +750,13 @@ group pkg_mgmt_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEPM_PKGM_007_NF + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_007_NF /** * @desc: Check that MEPM service deletes an Application Package Subscription when requested * ETSI GS MEC 010-2 2.0.10, clause 7.4.6.3.4 */ - testcase TC_MEC_MEPM_PKGM_008_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_008_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -800,7 +800,7 @@ group pkg_mgmt_subscriptions { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); } } // End of 'alt' statement - } // End of testcase TC_MEC_MEPM_PKGM_008_OK + } // End of testcase TC_MEC_MEC010p2_MEPM_PKGM_008_OK /** @@ -808,7 +808,7 @@ group pkg_mgmt_subscriptions { * for a subscription on AppPackages with a wrong identifier * ETSI GS MEC 010-2 2.0.10, clause 7.4.6.3.4 */ - testcase TC_MEC_MEPM_PKGM_008_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_008_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -863,7 +863,7 @@ group mepm_pkg_management_notification { * the MEPM service has an associated subscription and the event is generated * @see ETSI GS MEC 010-2 2.0.10, clause 7.4.7.3.1 */ - testcase TC_MEC_MEPM_PKGM_009_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC010p2_MEPM_PKGM_009_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; diff --git a/ttcn/AtsMec/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..25a462202f054d10508aa87890d2ec59ce1e62e4 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn @@ -0,0 +1,1021 @@ +/** + * @author ETSI / TTF T012 + * @version $URL:$ + * $ID:$ + * @desc This module provides the MEC test cases. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * @see ETSI GS MEC 015, Draft ETSI GS MEC 015 V2.1.1 (2020-06) + */ +module AtsMec_MultiAccessSteeringInfoAPI_TestCases { + + // JSON + import from JSON all; + + // Libcommon + import from LibCommon_Time all; + import from LibCommon_VerdictControl all; + import from LibCommon_Sync all; + + // LibHttp + import from LibItsHttp_TypesAndValues all; + import from LibItsHttp_Functions all; + import from LibItsHttp_Templates all; + import from LibItsHttp_JsonTemplates all; + import from LibItsHttp_TestSystem all; + + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_TypesAndValues all; + import from TrafficManagementAPI_Templates all; + import from TrafficManagementAPI_Functions all; + import from TrafficManagementAPI_Pics all; + import from TrafficManagementAPI_Pixits all; + + // LibMec + import from LibMec_Templates all; + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + + group me_app_role { + + /** + * @desc Check that the IUT responds with the Multi-access Traffic Steering information when queried by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PX_ME_MTS_INFO_URI, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_mts_capability_info( + mw_mts_capability_info + ))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of MtsCapabilityInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_001_OK + + /** + * @desc Check that the IUT responds with the list of configured Multi-access Traffic Steering when queried by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PX_ME_MTS_SESSIONS_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")), + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_mts_session_info_list + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an MtsSessionInfo list ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_002_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_002_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PX_ME_MTS_SESSIONS_URI & "/app_instance_id=" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")), // 'app_instance_id=' is a wrong parameter + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 400 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_002_BR + + /** + * @desc Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_002_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PX_ME_MTS_SESSIONS_URI & "/" & oct2char(unichar2oct(PX_UNKNOWN_APP_INSTANCE_ID, "UTF-8")), + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 404 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_002_NF + + /** + * @desc Check that the IUT responds with a registration and initialisation approval for the requested MTS session requirements sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PX_ME_MTS_SESSIONS_URI, + v_headers, + m_http_message_body_json( + m_body_json_mts_session_info( + m_mts_session_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type + m_qosd, // QoS + LowCost, // MtsMode + Downlink, // TrafficDirection + { + m_session_filter( + "10.10.10.10", + {"1010"} + ) + } // FlowFilter + + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_mts_session_info( + mw_mts_session_info( + PX_APP_INSTANCE_ID + )))))) -> value v_response { + tc_ac.stop; + + if (f_check_headers(valueof(v_response.response.header)) == false) { + log("*** " & testcasename() & ": FAIL: Header 'Location' was not present in the response headers ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_mts_session_id; + f_get_header(valueof(v_response.response.header), "Location", v_mts_session_id); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a MtsSessionInfo, MtsSessionInfoId: ", v_mts_session_id[0], " ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_003_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_003_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PX_ME_MTS_SESSIONS_URI, + v_headers, + m_http_message_body_json( + m_body_json_mts_session_info( + m_mts_session_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type + m_qosd, // QoS + LowCost, // MtsMode + Downlink, // TrafficDirection + { + m_session_filter( + "10.10.10.10", + {"10.10"} // Invalid port number + ) + } // FlowFilter + + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 400 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_003_BR + + /** + * @desc Check that the IUT responds with a configured Multi-access Traffic Steering when queried by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_mts_session_id; + var MtsSessionInfo v_mts_session_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_create_mts_session_info_resource(v_app_instance_id, v_mts_session_id, v_mts_session_info); + if (v_mts_session_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } else { + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + } + + // Test Body + httpPort.send( + m_http_request( + m_http_request_get( + PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, + v_headers + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_bw_info( + mw_bw_info( + PX_APP_INSTANCE_ID + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a BwInfo ***"); + f_delete_mts_session_info_resource(v_app_instance_id, v_mts_session_id); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_004_OK + + /** + * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_004_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_mts_session_id; + var MtsSessionInfo v_mts_session_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + httpPort.send( + m_http_request( + m_http_request_get( + PX_ME_MTS_SESSIONS_URI & "/Unknown_bw_allocation_id", + v_headers + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 404 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_004_NF + + /** + * @desc + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_mts_session_id; + var MtsSessionInfo v_mts_session_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_create_mts_session_info_resource(v_app_instance_id, v_mts_session_id, v_mts_session_info); + if (v_mts_session_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } else { + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + } + + // Test Body + httpPort.send( + m_http_request( + m_http_request_put( + PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, + v_headers, + m_http_message_body_json( + m_body_json_mts_session_info( + m_mts_session_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type + m_qosd_1, // QoS + LowCost, // MtsMode + Downlink, // TrafficDirection + { + m_session_filter( + "10.10.10.10", + {"1010"} + ) + } // FlowFilter + ) + ) + ) + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_mts_session_info( + mw_mts_session_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type + mw_qosd_1, // QoS + LowCost, // MtsMode + Downlink, // TrafficDirection + { + m_session_filter( + "10.10.10.10", + {"1010"} + ) + } // FlowFilter + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an updated MtsSessionInfo ***"); + f_delete_mts_session_info_resource(v_app_instance_id, v_mts_session_id); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_005_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_005_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_mts_session_id; + var MtsSessionInfo v_mts_session_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_create_mts_session_info_resource(v_app_instance_id, v_mts_session_id, v_mts_session_info); + if (v_mts_session_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } else { + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + } + + // Test Body + httpPort.send( + m_http_request( + m_http_request_put( + PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, + v_headers, + m_http_message_body_json( + m_body_json_mts_session_info( + m_mts_session_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type + m_qosd_1, // QoS + LowCost, // MtsMode + Downlink, // TrafficDirection + { + m_session_filter( + "10.10.10.10", + {"10.10"} // Invalid port + ) + } // FlowFilter + ) + ) + ) + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 400 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_delete_mts_session_info_resource(v_app_instance_id, v_mts_session_id); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_005_BR + + /** + * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_005_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("003")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + httpPort.send( + m_http_request( + m_http_request_put( + PX_ME_MTS_SESSIONS_URI & "/InvalidAllocationId", + v_headers, + m_http_message_body_json( + m_body_json_mts_session_info( + m_mts_session_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type + m_qosd_1, // QoS + LowCost, // MtsMode + Downlink, // TrafficDirection + { + m_session_filter( + "10.10.10.10", + {"1010"} + ) + } // FlowFilter + ) + ) + ) + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 404 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_005_NF + + /** + * @desc Check that the IUT deregisters a MTS session when commanded by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_006_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_mts_session_id; + var MtsSessionInfo v_mts_session_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_create_mts_session_info_resource(v_app_instance_id, v_mts_session_id, v_mts_session_info); + if (v_mts_session_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } else { + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + } + + // Test Body + httpPort.send( + m_http_request( + m_http_request_delete( + PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, + v_headers + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds to deletion ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_006_OK + + /** + * @desc Check that the IUT responds with an error when commanded by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_006_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_mts_session_id; + var MtsSessionInfo v_mts_session_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_create_mts_session_info_resource(v_app_instance_id, v_mts_session_id, v_mts_session_info); + if (v_mts_session_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } else { + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + } + + // Test Body + httpPort.send( + m_http_request( + m_http_request_delete( + PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, + v_headers + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds to deletion ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_006_BR + + /** + * @desc Check that the IUT deregisters a MTS session when commanded by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/MultiAccessTrafficSteering.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_MTS_006_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_mts_session_id; + var MtsSessionInfo v_mts_session_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_create_mts_session_info_resource(v_app_instance_id, v_mts_session_id, v_mts_session_info); + if (v_mts_session_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } else { + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + } + + // Test Body + httpPort.send( + m_http_request( + m_http_request_delete( + PX_ME_MTS_SESSIONS_URI & "/" & v_mts_session_id, + v_headers + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds to deletion ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_MTS_006_NF + + } // End of group me_app_role + +} // End of module AtsMec_MultiAccessSteeringInfoAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_RadioNodeLocationAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_RadioNodeLocationAPI_TestCases.ttcn index d829b548dc708f42901d505d8703a9b0ba9c58c7..510c37ab5e427445cc09c5d5cf6d7003d7318693 100644 --- a/ttcn/AtsMec/AtsMec_RadioNodeLocationAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_RadioNodeLocationAPI_TestCases.ttcn @@ -47,7 +47,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { * @desc Check that the IUT responds with the list of radio nodes currently associated with the MEC host and the location of each radio node when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/AccessPointList */ - testcase TC_MEC_SRV_RLOCLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_RLOCLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -100,12 +100,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RLOCLOOK_001_OK + } // End of testcase TC_MEC_MEC013_SRV_RLOCLOOK_001_OK /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application */ - testcase TC_MEC_SRV_RLOCLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_RLOCLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -153,7 +153,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RLOCLOOK_001_NF + } // End of testcase TC_MEC_MEC013_SRV_RLOCLOOK_001_NF } // End of group radioNodeLocationLookup @@ -167,7 +167,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { /** * @desc Check that the IUT acknowledges the UE area change subscription request when commanded by a MEC Application and notifies it when the UE enters the specified circle */ - testcase TC_MEC_SRV_UEAREASUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -241,12 +241,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEAREASUB_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UEAREASUB_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TC_MEC_SRV_UEAREASUB_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEAREASUB_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -303,12 +303,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEAREASUB_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UEAREASUB_001_BR /** * @desc Check that the IUT acknowledges the cancellation of UE area change notifications when commanded by a MEC Application */ - testcase TC_MEC_SRV_UEAREASUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEAREASUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -357,12 +357,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEAREASUB_002_OK + } // End of testcase TC_MEC_MEC013_SRV_UEAREASUB_002_OK /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application */ - testcase TC_MEC_SRV_UEAREASUB_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEAREASUB_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -410,7 +410,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEAREASUB_002_NF + } // End of testcase TC_MEC_MEC013_SRV_UEAREASUB_002_NF } // End of group ueAreaSubscribe @@ -422,7 +422,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { /** * @desc Check that the IUT responds with the distance to a UE when queried by a MEC Application */ - testcase TC_MEC_SRV_UEDISTLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -474,12 +474,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEDISTLOOK_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TC_MEC_SRV_UEDISTLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEDISTLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -528,7 +528,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEDISTLOOK_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UEDISTLOOK_001_BR } // End of group ueDistanceLookup @@ -540,7 +540,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { /** * @desc Check that the IUT acknowledges the UE distance subscription request when commanded by a MEC Application and notifies it when (all) the requested UE(s) is (are) within the specified distance */ - testcase TC_MEC_SRV_UEDISTSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -567,16 +567,14 @@ module AtsMec_RadioNodeLocationAPI_TestCases { m_http_message_body_json( m_body_json_distance_notification_subscription( m_distance_notification_subscription( - PX_CLIENT_ID, //clientCorrelator PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference - PX_UE_MONITORED_IP_ADDRESS, // monitoredAddress - PX_IP_ADDRESS // address - ) - ) - ) - ) - ) - ); + -, // checkImmediate + PX_CLIENT_ID, //clientCorrelator + -, // criteria + 10.0, // distance + -, + PX_UE_MONITORED_IP_ADDRESS // monitoredAddress + )))))); f_selfOrClientSyncAndVerdict(c_prDone, e_success); // Test Body @@ -588,10 +586,11 @@ module AtsMec_RadioNodeLocationAPI_TestCases { mw_http_message_body_json( mw_body_json_distance_notification_subscription( mw_distance_notification_subscription( - PX_CLIENT_ID, //clientCorrelator PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference - PX_UE_MONITORED_IP_ADDRESS, // monitoredAddress - PX_IP_ADDRESS // address + -, + PX_CLIENT_ID, //clientCorrelator + -, -, -, + PX_UE_MONITORED_IP_ADDRESS // monitoredAddress )))))) -> value v_response { // TODO how to send this when the UE enters the area? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? // @@ -620,12 +619,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEDISTSUB_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TC_MEC_SRV_UEDISTSUB_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -653,10 +652,14 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // TODO the TP uses a wrong field name to trigger an error response. Do we create a new data structure just for this or // change the test to use another trigger (e.g.: invalid IP address)? m_distance_notification_subscription( - PX_CLIENT_ID, //clientCorrelator PX_UE_DIST_SUB_CALLBACK_URI, // callbackReference + -, // checkImmediate + PX_CLIENT_ID, //clientCorrelator + -, // criteria + 10.0, // distance + -, // frequency PX_UE_MONITORED_IP_ADDRESS, // monitoredAddress - PX_IP_ADDRESS // address + { PX_IP_ADDRESS } // referenceAddress ) ) ) @@ -686,12 +689,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEDISTSUB_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UEDISTSUB_001_BR /** * @desc Check that the IUT acknowledges the cancellation of UE distance notifications when commanded by a MEC Application */ - testcase TC_MEC_SRV_UEDISTSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEDISTSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -740,12 +743,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEDISTSUB_002_OK + } // End of testcase TC_MEC_MEC013_SRV_UEDISTSUB_002_OK /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application */ - testcase TC_MEC_SRV_UEDISTSUB_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEDISTSUB_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -794,7 +797,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEDISTSUB_002_NF + } // End of testcase TC_MEC_MEC013_SRV_UEDISTSUB_002_NF } // End of group ueDistanceSubscribe @@ -806,7 +809,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { /** * @desc Check that the IUT responds with the information pertaining to one or more UEs in a particular location when queried by a MEC Application */ - testcase TC_MEC_SRV_UEINFOLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFOLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -858,12 +861,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFOLOOK_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UEINFOLOOK_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TC_MEC_SRV_UEINFOLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFOLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -912,12 +915,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFOLOOK_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UEINFOLOOK_001_BR /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application */ - testcase TC_MEC_SRV_UEINFOLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFOLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -966,7 +969,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFOLOOK_001_NF + } // End of testcase TC_MEC_MEC013_SRV_UEINFOLOOK_001_NF } // End of group ueInformationLookup @@ -978,7 +981,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { /** * @desc Check that the IUT acknowledges the UE information change subscription request when commanded by a MEC Application and notifies it when the location changes */ - testcase TC_MEC_SRV_UEINFOSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFOSUB_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1055,12 +1058,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFOSUB_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UEINFOSUB_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TC_MEC_SRV_UEINFOSUB_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFOSUB_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1118,12 +1121,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFOSUB_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UEINFOSUB_001_BR /** * @desc Check that the IUT acknowledges the cancellation of UE information change notifications when commanded by a MEC Application */ - testcase TC_MEC_SRV_UEINFOSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFOSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1172,12 +1175,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFOSUB_002_OK + } // End of testcase TC_MEC_MEC013_SRV_UEINFOSUB_002_OK /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application */ - testcase TC_MEC_SRV_UEINFOSUB_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UEINFOSUB_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1226,7 +1229,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UEINFOSUB_002_NF + } // End of testcase TC_MEC_MEC013_SRV_UEINFOSUB_002_NF } // End of group ueInformationSubscription @@ -1238,7 +1241,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { /** * @desc Check that the IUT responds with a list for the location of User Equipments when queried by a MEC Application */ - testcase TC_MEC_SRV_UELOCLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1291,12 +1294,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCLOOK_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TC_MEC_SRV_UELOCLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1345,12 +1348,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCLOOK_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_BR /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application */ - testcase TC_MEC_SRV_UELOCLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1399,7 +1402,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCLOOK_001_NF + } // End of testcase TC_MEC_MEC013_SRV_UELOCLOOK_001_NF } // End of group ueLocationLookup @@ -1411,7 +1414,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { /** * @desc Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the location changes */ - testcase TC_MEC_SRV_UELOCSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1488,12 +1491,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCSUB_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TC_MEC_SRV_UELOCSUB_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1553,12 +1556,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCSUB_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_001_BR /** * @desc Check that the IUT acknowledges the cancellation of UE location change notifications when commanded by a MEC Application */ - testcase TC_MEC_SRV_UELOCSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1607,12 +1610,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCSUB_002_OK + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_002_OK /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application */ - testcase TC_MEC_SRV_UELOCSUB_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UELOCSUB_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1661,7 +1664,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UELOCSUB_002_NF + } // End of testcase TC_MEC_MEC013_SRV_UELOCSUB_002_NF } // End of group ueLocationSubscription @@ -1673,7 +1676,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { /** * @desc Check that the IUT acknowledges the UE location change subscription request when commanded by a MEC Application and notifies it when the UE changes location */ - testcase TC_MEC_SRV_UETRACKSUB_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -1700,9 +1703,10 @@ module AtsMec_RadioNodeLocationAPI_TestCases { m_http_message_body_json( m_body_json_periodic_notification_subscription( m_periodic_notification_subscription( - PX_CLIENT_ID, //clientCorrelator + PX_IP_ADDRESS, // address PX_USERTRACK_SUB_CALLBACK_URI, // callbackReference - PX_IP_ADDRESS // address + -, -, + PX_CLIENT_ID //clientCorrelator ) ) ) @@ -1720,9 +1724,10 @@ module AtsMec_RadioNodeLocationAPI_TestCases { mw_http_message_body_json( mw_body_json_periodic_notification_subscription( mw_periodic_notification_subscription( - PX_CLIENT_ID, //clientCorrelator + PX_IP_ADDRESS, // address PX_USERTRACK_SUB_CALLBACK_URI, // callbackReference - PX_IP_ADDRESS // address + -, -, + PX_CLIENT_ID //clientCorrelator )))))) -> value v_response { // TODO how to send this when the UE enters the area? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? // // MEC 013, clause 7.3.8.3 @@ -1750,12 +1755,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETRACKSUB_001_OK + } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application */ - testcase TC_MEC_SRV_UETRACKSUB_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1814,12 +1819,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETRACKSUB_001_BR + } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_001_BR /** * @desc Check that the IUT acknowledges the cancellation of UE tracking notifications when commanded by a MEC Application */ - testcase TC_MEC_SRV_UETRACKSUB_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UETRACKSUB_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1867,12 +1872,12 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETRACKSUB_002_OK + } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_002_OK /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application */ - testcase TC_MEC_SRV_UETRACKSUB_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC013_SRV_UETRACKSUB_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1920,7 +1925,7 @@ module AtsMec_RadioNodeLocationAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETRACKSUB_002_NF + } // End of testcase TC_MEC_MEC013_SRV_UETRACKSUB_002_NF } // End of group ueTrackingSubscribe diff --git a/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn index a95e1ebd22bf404d93ba0d2f22a7df9bbbe77e0e..2a3aea828b4fcd6db55f07aa50edbfede4e714e4 100644 --- a/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_RnisAPI_TestCases.ttcn @@ -53,7 +53,7 @@ module AtsMec_RnisAPI_TestCases { * - NrMeasRepUeSubscription" * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 */ - testcase TC_MEC_SRV_RNIS_011_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_011_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -106,7 +106,7 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_011_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_011_OK /** * @desc Check that the RNIS service creates a new RNIS subscription. @@ -122,7 +122,7 @@ module AtsMec_RnisAPI_TestCases { * - NrMeasRepUeSubscription" * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 */ - testcase TC_MEC_SRV_RNIS_012_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_012_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -191,7 +191,7 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_012_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_012_OK } // End of group all_subscriptions @@ -201,7 +201,7 @@ module AtsMec_RnisAPI_TestCases { * @desc Check that the RNIS service responds with an error when it receives a request to get all RNIS subscriptions with a wrong subscription type * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BO_BI.tplan2 */ - testcase TC_MEC_SRV_RNIS_011_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_011_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -253,13 +253,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_011_BR + } // End of testcase TC_MEC_MEC012_SRV_RNIS_011_BR /** * @desc Check that the RNIS service responds with an error when it receives a request to create a new RNIS subscription with a wrong format * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2 */ - testcase TC_MEC_SRV_RNIS_012_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_012_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -327,7 +327,7 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_012_BR + } // End of testcase TC_MEC_MEC012_SRV_RNIS_012_BR } // End of group allSubscription_bo_bi @@ -337,7 +337,7 @@ module AtsMec_RnisAPI_TestCases { * @desc Check that the RNIS service returns the RAB information when requested. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BV.tplan2 */ - testcase TC_MEC_SRV_RNIS_016_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_016_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -396,13 +396,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_016_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_016_OK /** * @desc Check that the RNIS service returns the PLMN information when requested. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BV.tplan2 */ - testcase TC_MEC_SRV_RNIS_017_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_017_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -456,13 +456,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_017_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_017_OK /** * @desc Check that the RNIS service returns the S1 bearer information. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BV.tplan2 */ - testcase TC_MEC_SRV_RNIS_018_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_018_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -523,13 +523,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_018_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_018_OK /** * @desc Check that the RNIS service returns the L2 measurements information. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BV.tplan2 */ - testcase TC_MEC_SRV_RNIS_019_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_019_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -553,7 +553,7 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_019_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_019_OK } // End of group rnis_query @@ -563,7 +563,7 @@ module AtsMec_RnisAPI_TestCases { * @desc Check that the RNIS service returns an error when the RAB information is requested with a malformatted message. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_SRV_RNIS_016_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_016_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -615,13 +615,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_016_BR + } // End of testcase TC_MEC_MEC012_SRV_RNIS_016_BR /** * @desc Check that the RNIS service returns an error when the RAB information is requested with a malformatted message. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_SRV_RNIS_016_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_016_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -673,13 +673,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_016_NF + } // End of testcase TC_MEC_MEC012_SRV_RNIS_016_NF /** * @desc Check that the RNIS service returns an error when the PLMN information is requested with a malformatted message. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_SRV_RNIS_017_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_017_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -731,13 +731,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_017_BR + } // End of testcase TC_MEC_MEC012_SRV_RNIS_017_BR /** * @desc Check that the RNIS service returns an error when the PLMN information for a not existing element is requested. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_SRV_RNIS_017_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_017_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -789,13 +789,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_017_NF + } // End of testcase TC_MEC_MEC012_SRV_RNIS_017_NF /** * @desc Check that the RNIS service returns an error when the S1 bearer information is requested with a malformatted message. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_SRV_RNIS_018_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_018_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -847,13 +847,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_018_BR + } // End of testcase TC_MEC_MEC012_SRV_RNIS_018_BR /** * @desc Check that the RNIS service returns an error when the S1 bearer information for a not existing element is requested. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_SRV_RNIS_018_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_018_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -905,13 +905,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_018_NF + } // End of testcase TC_MEC_MEC012_SRV_RNIS_018_NF /** * @desc Check that the RNIS service returns an error when the L2 measurements information is requested with a malformatted message. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_SRV_RNIS_019_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_019_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -963,13 +963,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_019_BR + } // End of testcase TC_MEC_MEC012_SRV_RNIS_019_BR /** * @desc Check that the RNIS service returns an error when the L2 measurements information for a not existing element is requested. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2 */ - testcase TC_MEC_SRV_RNIS_019_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_019_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1021,7 +1021,7 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_RNIS_019_NF + } // End of testcase TC_MEC_MEC012_SRV_RNIS_019_NF } // End of group rnis_query_bi_bo @@ -1031,7 +1031,7 @@ module AtsMec_RnisAPI_TestCases { * @desc Check that the RNIS service sends an RNIS notification about cell change if the RNIS service has an associated subscription and the event is generated. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 */ - testcase TC_MEC_SRV_RNIS_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var integer v_result; @@ -1119,13 +1119,13 @@ module AtsMec_RnisAPI_TestCases { v_headers ); f_cf_01_http_notif_down(); - } // End of testcase TC_MEC_SRV_RNIS_001_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_001_OK /** * @desc Check that the RNIS service sends an RNIS notification about RAB establishment if the RNIS service has an associated subscription and the event is generated. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 */ - testcase TC_MEC_SRV_RNIS_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1181,13 +1181,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_notif_down(); - } // End of testcase TC_MEC_SRV_RNIS_002_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_002_OK /** * @desc Check that the RNIS service sends an RNIS notification about RAB modification if the RNIS service has an associated subscription and the event is generated. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 */ - testcase TC_MEC_SRV_RNIS_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1243,13 +1243,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_notif_down(); - } // End of testcase TC_MEC_SRV_RNIS_003_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_003_OK /** * @desc Check that the RNIS service sends an RNIS notification about RAB release if the RNIS service has an associated subscription and the event is generated. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 */ - testcase TC_MEC_SRV_RNIS_004_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_004_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1305,13 +1305,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_notif_down(); - } // End of testcase TC_MEC_SRV_RNIS_004_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_004_OK /** * @desc Check that the RNIS service sends an RNIS notification about UE measurement report if the RNIS service has an associated subscription and the event is generated. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 */ - testcase TC_MEC_SRV_RNIS_005_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_005_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1365,13 +1365,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_notif_down(); - } // End of testcase TC_MEC_SRV_RNIS_005_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_005_OK /** * @desc Check that the RNIS service sends an RNIS notification about UE timing advance if the RNIS service has an associated subscription and the event is generated. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 */ - testcase TC_MEC_SRV_RNIS_006_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_006_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1425,13 +1425,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_notif_down(); - } // End of testcase TC_MEC_SRV_RNIS_006_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_006_OK /** * @desc Check that the RNIS service sends an RNIS notification about UE carrier aggregation reconfiguration if the RNIS service has an associated subscription and the event is generated. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 */ - testcase TC_MEC_SRV_RNIS_007_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_007_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1485,13 +1485,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_notif_down(); - } // End of testcase TC_MEC_SRV_RNIS_007_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_007_OK /** * @desc Check that the RNIS service sends an RNIS notification about S1-U bearer if the RNIS service has an associated subscription and the event is generated. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 */ - testcase TC_MEC_SRV_RNIS_008_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_008_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1543,13 +1543,13 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_notif_down(); - } // End of testcase TC_MEC_SRV_RNIS_008_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_008_OK /** * @desc Check that the RNIS service sends an RNIS notification about 5G NR UE measurement report if the RNIS service has an associated subscription and the event is generated. * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisNotifications.tplan2 */ - testcase TC_MEC_SRV_RNIS_009_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC012_SRV_RNIS_009_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -1601,7 +1601,7 @@ module AtsMec_RnisAPI_TestCases { // Postamble f_cf_01_http_notif_down(); - } // End of testcase TC_MEC_SRV_RNIS_009_OK + } // End of testcase TC_MEC_MEC012_SRV_RNIS_009_OK } // End of group rnis_notifications diff --git a/ttcn/AtsMec/AtsMec_TestControl.ttcn b/ttcn/AtsMec/AtsMec_TestControl.ttcn index 8a27e89f3efeef62f5aa71972088190b18a12c8f..5d6fc075acf500d45a3def356c07c3d4aa7ddc1d 100644 --- a/ttcn/AtsMec/AtsMec_TestControl.ttcn +++ b/ttcn/AtsMec/AtsMec_TestControl.ttcn @@ -6,8 +6,8 @@ module AtsMec_TestControl { import from UEidentityAPI_Pics all; // LibMec/RnisAPI import from RnisAPI_Pics all; - // LibMec/BwManagementAPI - import from BwManagementAPI_Pics all; + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_Pics all; // LibMec/AppEnablementAPI import from AppEnablementAPI_Pics all; // LibMec/UEAppInterfaceAPI @@ -21,7 +21,7 @@ module AtsMec_TestControl { import from AtsMec_UEidentityAPI_TestCases all; // import from AtsMec_RadioNodeLocationAPI_TestCases all; import from AtsMec_RnisAPI_TestCases all; - import from AtsMec_BwManagementAPI_TestCases all; + import from AtsMec_TrafficManagementAPI_TestCases all; import from AtsMec_AppEnablementAPI_TestCases all; import from AtsMec_UEAppInterfaceAPI_TestCases all; @@ -29,36 +29,36 @@ module AtsMec_TestControl { if (PICS_MEC_PLAT and PICS_SERVICES) { if (PICS_UE_IDENTITY_API_SUPPORTED) { - execute(TC_MEC_SRV_UETAG_001_OK()); - execute(TC_MEC_SRV_UETAG_001_BR()); - execute(TC_MEC_SRV_UETAG_001_NF()); - execute(TC_MEC_SRV_UETAG_002_OK()); - execute(TC_MEC_SRV_UETAG_002_BR()); - execute(TC_MEC_SRV_UETAG_002_PF()); + execute(TC_MEC_MEC014_SRV_UETAG_001_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_001_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_001_NF()); + execute(TC_MEC_MEC014_SRV_UETAG_002_OK()); + execute(TC_MEC_MEC014_SRV_UETAG_002_BR()); + execute(TC_MEC_MEC014_SRV_UETAG_002_PF()); } if (PICS_LOCATION_API_SUPPORTED) { - execute(TC_MEC_SRV_UELOCLOOK_001_OK()); - execute(TC_MEC_SRV_UELOCLOOK_001_BR()); - execute(TC_MEC_SRV_UELOCLOOK_001_NF()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCLOOK_001_NF()); - execute(TC_MEC_SRV_UELOCSUB_001_OK()); - execute(TC_MEC_SRV_UELOCSUB_001_BR()); - execute(TC_MEC_SRV_UELOCSUB_002_OK()); - execute(TC_MEC_SRV_UELOCSUB_002_NF()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UELOCSUB_002_NF()); - execute(TC_MEC_SRV_UETRACKSUB_001_OK()); - execute(TC_MEC_SRV_UETRACKSUB_001_BR()); - execute(TC_MEC_SRV_UETRACKSUB_002_OK()); - execute(TC_MEC_SRV_UETRACKSUB_002_NF()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UETRACKSUB_002_NF()); - execute(TC_MEC_SRV_UEINFLOOK_001_OK()); - execute(TC_MEC_SRV_UEINFLOOK_001_BR()); - execute(TC_MEC_SRV_UEINFLOOK_001_NF()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFLOOK_001_NF()); - execute(TC_MEC_SRV_UEINFSUB_001_OK()); - execute(TC_MEC_SRV_UEINFSUB_001_BR()); - execute(TC_MEC_SRV_UEINFSUB_002_OK()); - execute(TC_MEC_SRV_UEINFSUB_002_NF()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_001_BR()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_OK()); + execute(TC_MEC_MEC013_SRV_UEINFSUB_002_NF()); // execute(TC_MEC_PLAT_RLOC_001_OK()); // execute(TC_MEC_PLAT_RLOC_001_NF()); @@ -73,50 +73,53 @@ module AtsMec_TestControl { } if (PICS_ENABLE_UE_APP_CTX) { - execute(TC_MEC_MEO_UEAPPCTX_001_OK()); - execute(TC_MEC_MEO_UEAPPCTX_001_BR()); - execute(TC_MEC_MEO_UEAPPCTX_002_OK()); - execute(TC_MEC_MEO_UEAPPCTX_002_BR()); - execute(TC_MEC_MEO_UEAPPCTX_002_NF()); - execute(TC_MEC_MEO_UEAPPCTX_003_OK()); - execute(TC_MEC_MEO_UEAPPCTX_003_NF()); - execute(TC_MEC_MEO_UEAPPS_001_OK()); - execute(TC_MEC_MEO_UEAPPS_001_BR()); - execute(TC_MEC_MEO_UEAPPS_001_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_002_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPCTX_003_NF()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_OK()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_BR()); + execute(TC_MEC_MEC016_MEO_UEAPPS_001_NF()); } } if (PICS_RNIS) { if (PICS_RNIS_ALL_SUBSCRIPTIONS) { - execute(TC_MEC_SRV_RNIS_011_OK()); - execute(TC_MEC_SRV_RNIS_012_OK()); - execute(TC_MEC_SRV_RNIS_011_BR()); - execute(TC_MEC_SRV_RNIS_012_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_011_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_012_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_011_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_012_BR()); } if (PICS_RNIS_QUERY) { - execute(TC_MEC_SRV_RNIS_016_OK()); - execute(TC_MEC_SRV_RNIS_016_BR()); - execute(TC_MEC_SRV_RNIS_016_NF()); - execute(TC_MEC_SRV_RNIS_017_OK()); - execute(TC_MEC_SRV_RNIS_017_BR()); - execute(TC_MEC_SRV_RNIS_017_NF()); - execute(TC_MEC_SRV_RNIS_018_OK()); - execute(TC_MEC_SRV_RNIS_018_BR()); - execute(TC_MEC_SRV_RNIS_018_NF()); - execute(TC_MEC_SRV_RNIS_019_OK()); - execute(TC_MEC_SRV_RNIS_019_BR()); - execute(TC_MEC_SRV_RNIS_019_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_016_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_016_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_016_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_017_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_017_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_017_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_018_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_018_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_018_NF()); + execute(TC_MEC_MEC012_SRV_RNIS_019_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_019_BR()); + execute(TC_MEC_MEC012_SRV_RNIS_019_NF()); } if (PICS_RNIS_NOTIFICATIONS) { - execute(TC_MEC_SRV_RNIS_001_OK()); - execute(TC_MEC_SRV_RNIS_002_OK()); - execute(TC_MEC_SRV_RNIS_003_OK()); - execute(TC_MEC_SRV_RNIS_004_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_001_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_002_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_003_OK()); + execute(TC_MEC_MEC012_SRV_RNIS_004_OK()); } } - if (PICS_BWMANAGEMENT_API_SUPPORTED) { - execute(TC_MEC_PLAT_MP1_BWA_BV_001()); + if (PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED) { + execute(TC_MEC_MEC015_SRV_TM_001_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_OK()); + execute(TC_MEC_MEC015_SRV_TM_002_BR()); + execute(TC_MEC_MEC015_SRV_TM_002_NF()); } } // End of 'control' statement diff --git a/ttcn/AtsMec/AtsMec_TrafficManagementAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_TrafficManagementAPI_TestCases.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..67bdef54bd5a011fa45a0fed458b2b794111a615 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_TrafficManagementAPI_TestCases.ttcn @@ -0,0 +1,1309 @@ +/** + * @author ETSI / STF569 + * @version $URL:$ + * $ID:$ + * @desc This module provides the MEC test cases. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * @see ETSI GS MEC 015, Draft ETSI GS MEC 015 V2.1.1 (2020-06) + */ +module AtsMec_TrafficManagementAPI_TestCases { + + // JSON + import from JSON all; + + // Libcommon + import from LibCommon_Time all; + import from LibCommon_VerdictControl all; + import from LibCommon_Sync all; + + // LibHttp + import from LibItsHttp_TypesAndValues all; + import from LibItsHttp_Functions all; + import from LibItsHttp_Templates all; + import from LibItsHttp_JsonTemplates all; + import from LibItsHttp_TestSystem all; + + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_TypesAndValues all; + import from TrafficManagementAPI_Templates all; + import from TrafficManagementAPI_Functions all; + import from TrafficManagementAPI_Pics all; + import from TrafficManagementAPI_Pixits all; + + // LibMec + import from LibMec_Templates all; + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + + group me_app_role { + + /** + * @desc Check that the IUT responds with the list of configured bandwidth allocations when queried by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PX_ME_BWM_URI, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_bw_info_list + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of BwInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_001_OK + + /** + * @desc Check that the IUT responds with a configured bandwidth allocation when queried by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PX_ME_BWM_URI & "/" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")), + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_bw_info( + mw_bw_info( + PX_APP_INSTANCE_ID + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a BwInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_002_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_002_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PX_ME_BWM_URI & "/app_instance_id=" & oct2char(unichar2oct(PX_APP_INSTANCE_ID, "UTF-8")), // 'app_instance_id=' is a wrong parameter + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 400 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_002_BR + + /** + * @desc Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_002_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PX_ME_BWM_URI & "/" & oct2char(unichar2oct(PX_UNKNOWN_APP_INSTANCE_ID, "UTF-8")), + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 404 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_002_NF + + /** + * @desc Check that the IUT responds with a registration and initialisation approval for the requested bandwidth requirements sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_003_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PX_ME_BWM_URI, + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + v_app_instance_id, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + "1024", // FixedAllocation + Downlink // AllocationDirection + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_bw_info( + mw_bw_info( + v_app_instance_id + )))))) -> value v_response { + tc_ac.stop; + + if (f_check_headers(valueof(v_response.response.header)) == false) { + log("*** " & testcasename() & ": FAIL: Header 'Location' was not present in the response headers ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_bw_allocation_id; + f_get_header(valueof(v_response.response.header), "Location", v_bw_allocation_id); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a BwInfo, BWAllocationID: ", v_bw_allocation_id[0], " ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_003_OK_01 + + /** + * @desc Check that the IUT responds with a registration and initialisation approval for the requested bandwidth requirements sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_003_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PX_ME_BWM_URI, + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + v_app_instance_id, + SESSION_SPECIFIC_BW_ALLOCATION, // Request type + "1024", // FixedAllocation + Downlink, // AllocationDirection + { m_session_filter("10.10.10.10", { "1010" }) } + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_bw_info( + mw_bw_info( + v_app_instance_id, + SESSION_SPECIFIC_BW_ALLOCATION, // Request type + "1024", // FixedAllocation + Downlink, // AllocationDirection + { mw_session_filter } + )))))) -> value v_response { + tc_ac.stop; + + if (f_check_headers(valueof(v_response.response.header)) == false) { + log("*** " & testcasename() & ": FAIL: Header 'Location' was not present in the response headers ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_error); + } else { + var charstring_list v_bw_allocation_id; + f_get_header(valueof(v_response.response.header), "Location", v_bw_allocation_id); + log("*** " & testcasename() & ": PASS: IUT successfully responds with a BwInfo, BWAllocationID: ", v_bw_allocation_id[0], " ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_003_OK_02 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_003_BR_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PX_ME_BWM_URI, + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + "Invalid", // FixedAllocation + Downlink // AllocationDirection + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 400 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_003_BR_01 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_003_BR_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PX_ME_BWM_URI, + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + "1024", // FixedAllocation + Downlink, // AllocationDirection + { m_session_filter("10.10.10.10", { "1010" }) } // MEC015 Clause 7.2.2 Type: BwInfo Table 7.2.2-1: Elements of BwInfo, sessionFilter shall be omit + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 400 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_003_BR_02 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_003_BR_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PX_ME_BWM_URI, + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + PX_APP_INSTANCE_ID, + SESSION_SPECIFIC_BW_ALLOCATION, // Request type + "1024", // FixedAllocation + Downlink // AllocationDirection + // MEC015 Clause 7.2.2 Type: BwInfo Table 7.2.2-1: Elements of BwInfo, sessionFilter shall be present + ) + ) + ) + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 400 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_003_BR_03 + + /** + * @desc Check that the IUT responds with the configured bandwidth allocation when queried by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_bw_allocation_id; + var BwInfo v_bw_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_create_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id, v_bw_info); + if (v_bw_allocation_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } else { + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + } + + // Test Body + httpPort.send( + m_http_request( + m_http_request_get( + PX_ME_BWM_URI & "/" & v_bw_allocation_id, + v_headers + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_bw_info( + mw_bw_info( + v_app_instance_id + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a BwInfo ***"); + f_delete_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_004_OK + + /** + * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_004_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_bw_allocation_id; + var BwInfo v_bw_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("001")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + httpPort.send( + m_http_request( + m_http_request_get( + PX_ME_BWM_URI & "/Unknown_bw_allocation_id", + v_headers + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 404 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_004_NF + + /** + * @desc Check that the IUT updates the requested bandwidth requirements when commanded by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_bw_allocation_id; + var BwInfo v_bw_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_create_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id, v_bw_info); + if (v_bw_allocation_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } else { + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + } + + // Test Body + httpPort.send( + m_http_request( + m_http_request_put( + PX_ME_BWM_URI & "/" & v_bw_allocation_id, + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + v_app_instance_id, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + "2048", // FixedAllocation + Downlink // AllocationDirection + ) + ) + ) + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_bw_info( + mw_bw_info( + v_app_instance_id, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + "2048", // FixedAllocation + Downlink // AllocationDirection + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an updated BwInfo ***"); + f_delete_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_005_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_005_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_bw_allocation_id; + var BwInfo v_bw_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("002")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_create_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id, v_bw_info); + if (v_bw_allocation_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } else { + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + } + + // Test Body + httpPort.send( + m_http_request( + m_http_request_put( + PX_ME_BWM_URI & "/" & v_bw_allocation_id, + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + v_app_instance_id, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + "Invalid", // FixedAllocation + Downlink // AllocationDirection + ) + ) + ) + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 400 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_delete_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_005_BR + + /** + * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_005_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("003")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + httpPort.send( + m_http_request( + m_http_request_put( + PX_ME_BWM_URI & "/InvalidAllocationId", + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + v_app_instance_id, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + "2048", // FixedAllocation + Downlink // AllocationDirection + ) + ) + ) + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 404 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_005_NF + + /** + * @desc Check that the IUT when provided with just the changes (deltas) updates the requested bandwidth requirements when commanded by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_006_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var charstring v_bw_allocation_id; + var BwInfo v_bw_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("004")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_create_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id, v_bw_info); + if (v_bw_allocation_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } else { + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + } + + // Test Body + httpPort.send( + m_http_request( + m_http_request_patch( + PX_ME_BWM_URI & "/" & v_bw_allocation_id, + v_headers, + m_http_message_body_json( + m_body_json_bw_info_deltas( + m_bw_info_deltas( + v_app_instance_id, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + -, + "5096" + ) + ) + ) + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_bw_info( + mw_bw_info( + v_app_instance_id, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + "5096", // FixedAllocation + Downlink // AllocationDirection + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a patched BwInfo ***"); + f_delete_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_006_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_006_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_bw_allocation_id; + var BwInfo v_bw_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("004")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_create_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id, v_bw_info); + if (v_bw_allocation_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } else { + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + } + + // Test Body + httpPort.send( + m_http_request( + m_http_request_patch( + PX_ME_BWM_URI & "/" & v_bw_allocation_id, + v_headers, + m_http_message_body_json( + m_body_json_bw_info_deltas( + m_bw_info_deltas( + v_app_instance_id, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + -, + "Invalid" + ) + ) + ) + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 400 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_delete_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_006_BR + + /** + * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_006_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_bw_allocation_id; + var BwInfo v_bw_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("004")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + httpPort.send( + m_http_request( + m_http_request_patch( + PX_ME_BWM_URI & "/" & v_bw_allocation_id, + v_headers, + m_http_message_body_json( + m_body_json_bw_info_deltas( + m_bw_info_deltas( + v_app_instance_id, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + -, + "5096" + ) + ) + ) + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found( + mw_http_message_body_json( + mw_body_json_problem_details( + mw_problem_details( + -, -, 404 + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_006_NF + + /** + * @desc Check that the IUT unregisters from the Bandwidth Management Service when commanded by a MEC Application + * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/Plat/Mp1/Bandwidth/TrafficManagement.tplan2 + * @see hhttps://forge.etsi.org/swagger/ui/?url=https://forge.etsi.org/gitlab/mec/gs015-bandwith-mgmt-api/raw/master/BwManagementApi.yaml + */ + testcase TC_MEC_MEC015_SRV_TM_007_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var charstring v_bw_allocation_id; + var BwInfo v_bw_info; + var JSON.String v_app_instance_id := PX_APP_INSTANCE_ID & oct2unichar(char2oct("005")); + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_BWMANAGEMENT_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_BWMANAGEMENT_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + f_create_bw_allocation_resource(v_app_instance_id, v_bw_allocation_id, v_bw_info); + if (v_bw_allocation_id == "") { + f_selfOrClientSyncAndVerdict(c_prDone, e_timeout); + } else { + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + } + + // Test Body + httpPort.send( + m_http_request( + m_http_request_delete( + PX_ME_BWM_URI & "/" & v_bw_allocation_id, + v_headers + ) + ) + ); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds to deletion ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC015_SRV_TM_007_OK + + } // End of group me_app_role + +} // End of module AtsMec_TrafficManagementAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_UEAppInterfaceAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_UEAppInterfaceAPI_TestCases.ttcn index 60acdd828e3703305a83f0d0890a031e421dac0f..3066da2aa2fecd0e9c865b77281b538e087325b2 100644 --- a/ttcn/AtsMec/AtsMec_UEAppInterfaceAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_UEAppInterfaceAPI_TestCases.ttcn @@ -38,7 +38,7 @@ module AtsMec_UEAppInterfaceAPI_TestCases { * @desc Check that the IUT acknowledges the creation of the application context when requested by an UE Application * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 */ - testcase TC_MEC_MEO_UEAPPCTX_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC016_MEO_UEAPPCTX_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -106,13 +106,13 @@ module AtsMec_UEAppInterfaceAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEO_UEAPPCTX_001_OK + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 */ - testcase TC_MEC_MEO_UEAPPCTX_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC016_MEO_UEAPPCTX_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -167,13 +167,13 @@ module AtsMec_UEAppInterfaceAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEO_UEAPPCTX_001_BR + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_001_BR /** * @desc Check that the IUT updates the application callback reference when commanded by an UE Application * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 */ - testcase TC_MEC_MEO_UEAPPCTX_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC016_MEO_UEAPPCTX_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -232,13 +232,13 @@ module AtsMec_UEAppInterfaceAPI_TestCases { // Postamble f_delete_ue_app_ctx(); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEO_UEAPPCTX_002_OK + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_002_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 */ - testcase TC_MEC_MEO_UEAPPCTX_002_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC016_MEO_UEAPPCTX_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -295,13 +295,13 @@ module AtsMec_UEAppInterfaceAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEO_UEAPPCTX_002_BR + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_002_BR /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 */ - testcase TC_MEC_MEO_UEAPPCTX_002_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC016_MEO_UEAPPCTX_002_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -358,13 +358,13 @@ module AtsMec_UEAppInterfaceAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEO_UEAPPCTX_002_NF + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_002_NF /** * @desc Check that the IUT deletes the application context when commanded by an UE Application * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 */ - testcase TC_MEC_MEO_UEAPPCTX_003_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC016_MEO_UEAPPCTX_003_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -411,13 +411,13 @@ module AtsMec_UEAppInterfaceAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEO_UEAPPCTX_003_OK + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_003_OK /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2 */ - testcase TC_MEC_MEO_UEAPPCTX_003_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC016_MEO_UEAPPCTX_003_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -464,7 +464,7 @@ module AtsMec_UEAppInterfaceAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEO_UEAPPCTX_003_NF + } // End of testcase TC_MEC_MEC016_MEO_UEAPPCTX_003_NF } // End of group ue_app_ctx @@ -474,7 +474,7 @@ module AtsMec_UEAppInterfaceAPI_TestCases { * @desc Check that the IUT responds with the list of user applications available when requested by an UE Application * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPS/SysUeApplications.tplan2 */ - testcase TC_MEC_MEO_UEAPPS_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC016_MEO_UEAPPS_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -526,13 +526,13 @@ module AtsMec_UEAppInterfaceAPI_TestCases { // Postamble f_create_ue_app_ctx(); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEO_UEAPPS_001_OK + } // End of testcase TC_MEC_MEC016_MEO_UEAPPS_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPS/SysUeApplications.tplan2 */ - testcase TC_MEC_MEO_UEAPPS_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC016_MEO_UEAPPS_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -581,13 +581,13 @@ module AtsMec_UEAppInterfaceAPI_TestCases { // Postamble f_create_ue_app_ctx(); f_cf_01_http_down(); - } // End of testcase TC_MEC_MEO_UEAPPS_001_BR + } // End of testcase TC_MEC_MEC016_MEO_UEAPPS_001_BR /** * @desc Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPS/SysUeApplications.tplan2 */ - testcase TC_MEC_MEO_UEAPPS_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC016_MEO_UEAPPS_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; var HttpMessage v_response; @@ -634,7 +634,7 @@ module AtsMec_UEAppInterfaceAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_MEO_UEAPPS_001_NF + } // End of testcase TC_MEC_MEC016_MEO_UEAPPS_001_NF } // End of group ue_apps diff --git a/ttcn/AtsMec/AtsMec_UEidentityAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_UEidentityAPI_TestCases.ttcn index de98752bd2daadbd0d90c348cb6ee92433d57cb1..5e8a7e842094f7d243ea93ee02ad53a4f42384d1 100644 --- a/ttcn/AtsMec/AtsMec_UEidentityAPI_TestCases.ttcn +++ b/ttcn/AtsMec/AtsMec_UEidentityAPI_TestCases.ttcn @@ -7,7 +7,7 @@ * No part may be reproduced except as authorized by written permission. * The copyright and the foregoing restriction extend to reproduction in all media. * All rights reserved. - * @see ETSI GS MEC 003, ETSI GS MEC 013 V2.1.1 + * @see ETSI GS MEC 003, ETSI GS MEC 014 V2.1.1 */ module AtsMec_UEidentityAPI_TestCases { @@ -39,7 +39,7 @@ module AtsMec_UEidentityAPI_TestCases { * @desc Check that the IUT responds with the information on a UE Identity tag when queried by a MEC Application * @see https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/UETAG/PlatUeIdentity.tplan2 */ - testcase TC_MEC_SRV_UETAG_001_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC014_SRV_UETAG_001_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -91,13 +91,13 @@ module AtsMec_UEidentityAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETAG_001_OK + } // End of testcase TC_MEC_MEC014_SRV_UETAG_001_OK /** * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UeIdentity/PlatUeIdentity.tplan2 */ - testcase TC_MEC_SRV_UETAG_001_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC014_SRV_UETAG_001_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -149,13 +149,13 @@ module AtsMec_UEidentityAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETAG_001_BR + } // End of testcase TC_MEC_MEC014_SRV_UETAG_001_BR /** * @desc Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UeIdentity/PlatUeIdentity.tplan2 */ - testcase TC_MEC_SRV_UETAG_001_NF() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC014_SRV_UETAG_001_NF() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -207,13 +207,13 @@ module AtsMec_UEidentityAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETAG_001_NF + } // End of testcase TC_MEC_MEC014_SRV_UETAG_001_NF /** * @desc Check that the IUT registers a tag (representing a UE) or a list of tags when commanded by a MEC Application * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UeIdentity/PlatUeIdentity.tplan2 */ - testcase TC_MEC_SRV_UETAG_002_OK() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC014_SRV_UETAG_002_OK() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -287,13 +287,13 @@ module AtsMec_UEidentityAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETAG_002_OK + } // End of testcase TC_MEC_MEC014_SRV_UETAG_002_OK /** * @desc Check that the IUT responds with an error when an unauthorised request is sent by a MEC Application * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UeIdentity/PlatUeIdentity.tplan2 */ - testcase TC_MEC_SRV_UETAG_002_BR() runs on HttpComponent system HttpTestAdapter { + testcase TC_MEC_MEC014_SRV_UETAG_002_BR() runs on HttpComponent system HttpTestAdapter { // Local variables var Headers v_headers; @@ -362,13 +362,13 @@ module AtsMec_UEidentityAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETAG_002_BR + } // End of testcase TC_MEC_MEC014_SRV_UETAG_002_BR /** * @desc Check that the IUT responds with ProblemDetails on information an invalid URI * @see https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UeIdentity/PlatUeIdentity.tplan2 */ - testcase TC_MEC_SRV_UETAG_002_PF() runs on HttpComponent system HttpTestAdapter { // FIXME Which IE protocol should be invalid? + testcase TC_MEC_MEC014_SRV_UETAG_002_PF() runs on HttpComponent system HttpTestAdapter { // FIXME Which IE protocol should be invalid? // Local variables var Headers v_headers; @@ -432,7 +432,7 @@ module AtsMec_UEidentityAPI_TestCases { // Postamble f_cf_01_http_down(); - } // End of testcase TC_MEC_SRV_UETAG_002_PF + } // End of testcase TC_MEC_MEC014_SRV_UETAG_002_PF // /** // * @desc Check that the IUT deregisters a tag (representing a UE) or a list of tags when commanded by a MEC Application diff --git a/ttcn/AtsMec/AtsMec_V2XInformationServiceAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_V2XInformationServiceAPI_TestCases.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..ce87389334fb27dd5cf45c68473418aa67a727e2 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_V2XInformationServiceAPI_TestCases.ttcn @@ -0,0 +1,2870 @@ +/** + * @author ETSI / TTF T012 + * @version $URL:$ + * $ID:$ + * @desc This module provides the MEC test cases. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * @see ETSI GS MEC 002, Draft ETSI GS MEC 030 V2.1.1 (2020-04) + */ +module AtsMec_V2XInformationServiceAPI_TestCases { + + // JSON + import from JSON all; + + // Libcommon + import from LibCommon_Time all; + import from LibCommon_VerdictControl all; + import from LibCommon_Sync all; + + // LibHttp + import from LibItsHttp_TypesAndValues all; + import from LibItsHttp_Functions all; + import from LibItsHttp_Templates all; + import from LibItsHttp_JsonTemplates all; + import from LibItsHttp_TestSystem all; + + // LibMec/V2XInformationServiceAPI + import from V2XInformationServiceAPI_TypesAndValues all; + import from V2XInformationServiceAPI_Pics all; + import from V2XInformationServiceAPI_Pixits all; + import from V2XInformationServiceAPI_Templates all; + import from V2XInformationServiceAPI_Functions all; + + // LibMec + import from LibMec_Templates all; + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + + group me_app_role { + + /** + * @desc Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_001_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=" & PX_V2X_ECGI, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_uu_unicast_provisioning_info( + mw_uu_unicast_provisioning_info + ))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuUnicastProvisioningInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_001_OK_01 + + /** + * @desc Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_001_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=" & PX_V2X_LATITUDE, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_uu_unicast_provisioning_info( + mw_uu_unicast_provisioning_info + ))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuUnicastProvisioningInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_001_OK_02 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_001_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/invalid_uu_unicast_provisioning_info?location_info=" & PX_V2X_LATITUDE, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_001_BR + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_001_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_unicast_provisioning_info?location_info=" & PX_V2X_UNKNOWN_ECGI, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_001_NF + + /** + * @desc Check that the IUT responds with a configured provisioning information over Uu mbms when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_002_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_mbms_provisioning_info?location_info=" & PX_V2X_ECGI, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_uu_mbms_provisioning_info( + mw_uu_mbms_provisioning_info + ))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuMbmsProvisioningInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_002_OK_01 + + /** + * @desc Check that the IUT responds with a configured provisioning information over Uu mbms when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_002_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_mbms_provisioning_info?location_info=" & PX_V2X_LATITUDE, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_uu_mbms_provisioning_info( + mw_uu_mbms_provisioning_info + ))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a UuMbmsProvisioningInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_002_OK_02 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_002_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/invalid_uu_mbms_provisioning_info?location_info=" & PX_V2X_LATITUDE, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_002_BR + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_002_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/uu_mbms_provisioning_info?location_info=" & PX_V2X_UNKNOWN_ECGI, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_002_NF + + /** + * @desc Check that the IUT responds with a configured provisioning information over PC5 when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_003_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/pc5_provisioning_info?location_info=" & PX_V2X_ECGI, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_pc5_provisioning_info( + mw_pc5_provisioning_info + ))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a Pc5ProvisioningInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_003_OK_01 + + /** + * @desc Check that the IUT responds with a configured provisioning information over PC5 when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_003_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/pc5_provisioning_info?location_info=" & PX_V2X_LATITUDE, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_pc5_provisioning_info( + mw_pc5_provisioning_info + ))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a Pc5ProvisioningInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_003_OK_02 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_003_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/invalid_pc5_provisioning_info?location_info=" & PX_V2X_LATITUDE, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_003_BR + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_003_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_QUERIES_URI & "/pc5_provisioning_info?location_info=" & PX_V2X_UNKNOWN_ECGI, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with correct error message ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_003_NF + + /** + * @desc Check that the IUT sends a request about QoS information for a vehicular UE when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/provide_predicted_qos", + v_headers, + m_http_message_body_json( + m_body_json_v2x_predicted_qos( + m_predicted_qos( + PX_LOC_GRANULARITY, + { + m_predicted_qos_routes( + { + m_route_info( + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.72, 10.41) + ), + -, + 128, + 128 + ), + m_route_info( + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.75, 10.5) + ), + -, + 128, + 128 + ) + } + ) + } + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_v2x_predicted_qos( + mw_predicted_qos( + PX_LOC_GRANULARITY + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a PredictedQos ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_004_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_004_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/provide_predicted_qos", + v_headers, + m_http_message_body_json( + m_body_json_v2x_predicted_qos( + m_predicted_qos( + PX_LOC_GRANULARITY & "InvalidSemantic", + { + m_predicted_qos_routes( + { + m_route_info( + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.72, 10.41) + ), + -, + 128, + 128 + ), + m_route_info( + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.75, 10.5) + ), + -, + 128, + 128 + ) + } + ) + } + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_004_BR + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_004_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/provide_predicted_qos", + v_headers, + m_http_message_body_json( + m_body_json_v2x_predicted_qos( + m_predicted_qos( + PX_LOC_GRANULARITY, + { + m_predicted_qos_routes( + { + m_route_info( + m_location_info( + m_ecgi( + PX_UNKNOWN_CELL_ID, + m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area(43.72, 10.41) + ), + -, + 128, + 128 + ), + m_route_info( + m_location_info( + m_ecgi( + PX_CELL_ID, + m_plmn(PX_UNKNOWN_MCC, PX_UNKNOWN_MNC) + ), + m_location_info_geo_area(43.75, 10.5) + ), + -, + 128, + 128 + ) + } + ) + } + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_004_NF + + /** + * @desc Check that the IUT processes properly a request to publish a V2X message + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/publish_v2x_message", + v_headers, + m_http_message_body_json( + m_body_json_v2x_message( + m_v2x_message + ))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with correct status ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_005_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_005_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/publish_v2x_message", + v_headers, + m_http_message_body_json( + m_body_json_v2x_message( + m_v2x_message( + -, + "UnknownEncodeFormat" + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_005_BR + + /** + * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_006_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_uu_uni", + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_v2x_subscription_link_list + )))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLinks ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_006_OK_01 + + /** + * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_006_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_uu_mbms", + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_v2x_subscription_link_list + )))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLinks ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_006_OK_02 + + /** + * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_006_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_pc5", + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_v2x_subscription_link_list + )))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLinks ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_006_OK_03 + + /** + * @desc Check that the IUT responds with the requested list of subscription when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_006_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/v2x_msg", + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_v2x_subscription_link_list + )))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLinks ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_006_OK_04 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_006_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/_prov_chg_uu_uni_", // Invalid subscription type + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of SubscriptionLink ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_006_BR + + /** + * @desc Check that the IUT responds with the requested to create a subscription + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_007_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_uu_uni", + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_subscription( + PX_PROV_UU_UNI_SUB_CALLBACK, + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_prov_chg_uu_uni_subscription( + mw_prov_chg_uu_uni_subscription( + PX_PROV_UU_UNI_SUB_CALLBACK, + -, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_007_OK_01 + + /** + * @desc Check that the IUT responds with the requested to create a subscription + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_007_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_uu_mbms", + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_mbms_subscription( + m_prov_chg_uu_mbms_subscription( + PX_PROV_UU_MBMS_SUB_CALLBACK, + m_prov_chg_uu_mbms_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_server_usd( + { PX_V2X_MBMS_SERVICE_ID }, + m_sdp_info( + PX_V2X_MC_SERVER, + PX_V2X_MC_PORT + ), + m_tmgi( + PX_V2X_SERVICE_AREA_ID, + PX_MCC, + PX_MNC + ))))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_prov_chg_uu_mbms_subscription( + mw_prov_chg_uu_mbms_subscription( + PX_PROV_UU_MBMS_SUB_CALLBACK, + -, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_007_OK_02 + + /** + * @desc Check that the IUT responds with the requested to create a subscription + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_007_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_pc5", + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_pc5_subscription( + m_prov_chg_pc5_subscription( + PX_PROV_PC5_SUB_CALLBACK, + m_filter_criteria( + PX_V2X_DST_LAYER_2_ID, + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + ))))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_prov_chg_pc5_subscription( + mw_prov_chg_pc5_subscription( + PX_PROV_PC5_SUB_CALLBACK, + -, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_007_OK_03 + + /** + * @desc Check that the IUT responds with the requested to create a subscription + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_007_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/V2xMsgSubscription", + v_headers, + m_http_message_body_json( + m_body_json_v2x_msg_subscription( + m_v2x_msg_subscription( + PX_PROV_V2X_SUB_CALLBACK, + m_v2x_msg_subscription_filter_criteria + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_v2x_msg_subscription( + mw_v2x_msg_subscription( + PX_PROV_V2X_SUB_CALLBACK, + -, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_007_OK_04 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_007_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_uu_uni", + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_subscription_invalid( + PX_PROV_UU_UNI_SUB_CALLBACK, + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_007_BR + + /** + * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_008_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_prov_chg_uu_uni_subscription( + mw_prov_chg_uu_uni_subscription( + PX_PROV_UU_UNI_SUB_CALLBACK, + -, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_008_OK_01 + + /** + * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_008_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgUuMbmsSubscription v_prov_chg_uu_mbms_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_mbms_subscription.links.self_, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_prov_chg_uu_mbms_subscription( + mw_prov_chg_uu_mbms_subscription( + PX_PROV_UU_MBMS_SUB_CALLBACK, + -, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_008_OK_02 + + /** + * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_008_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgPc5Subscription v_prov_chg_pc5_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_pc5_subscription(v_prov_chg_pc5_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_pc5_subscription.links.self_, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_prov_chg_pc5_subscription( + mw_prov_chg_pc5_subscription( + PX_PROV_PC5_SUB_CALLBACK, + -, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_prov_pc5_subscription(v_prov_chg_pc5_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_008_OK_03 + + /** + * @desc Check that the IUT responds with the requested of subscription information when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_008_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var V2xMsgSubscription v_v2x_msg_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_v2x_msg_subscription(v_v2x_msg_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_v2x_msg_subscription( + mw_v2x_msg_subscription( + PX_PROV_V2X_SUB_CALLBACK, + -, + ? + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_v2x_msg_subscription(v_v2x_msg_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_008_OK_04 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_008_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var V2xMsgSubscription v_v2x_msg_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_v2x_msg_subscription(v_v2x_msg_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_v2x_msg_subscription(v_v2x_msg_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_008_BR + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_008_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/invalid_links", + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_008_NF + + /** + * @desc Check that the IUT responds with the request of updating subscription information when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_009_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_subscription( + PX_PROV_UU_UNI_SUB_CALLBACK, + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.77, + 10.46 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )), + v_prov_chg_uu_uni_subscription.links + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_prov_chg_uu_uni_subscription( + mw_prov_chg_uu_uni_subscription( + PX_PROV_UU_UNI_SUB_CALLBACK, + -, + v_prov_chg_uu_uni_subscription.links + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_009_OK_01 + + /** + * @desc Check that the IUT responds with the request of updating subscription information when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_009_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgUuMbmsSubscription v_prov_chg_uu_mbms_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_mbms_subscription.links.self_, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_mbms_subscription( + m_prov_chg_uu_mbms_subscription( + PX_PROV_UU_MBMS_SUB_CALLBACK, + m_prov_chg_uu_mbms_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.77, + 10.46 + )), + m_v2x_server_usd( + { PX_V2X_MBMS_SERVICE_ID }, + m_sdp_info( + PX_V2X_MC_SERVER, + PX_V2X_MC_PORT + ), + m_tmgi( + PX_V2X_SERVICE_AREA_ID, + PX_MCC, + PX_MNC + ))), + v_prov_chg_uu_mbms_subscription.links +)))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_prov_chg_uu_mbms_subscription( + mw_prov_chg_uu_mbms_subscription( + PX_PROV_UU_MBMS_SUB_CALLBACK, + -, + v_prov_chg_uu_mbms_subscription.links + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_009_OK_02 + + /** + * @desc Check that the IUT responds with the request of updating subscription information when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_009_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgPc5Subscription v_prov_chg_pc5_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_pc5_subscription(v_prov_chg_pc5_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_pc5_subscription.links.self_, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_pc5_subscription( + m_prov_chg_pc5_subscription( + PX_PROV_PC5_SUB_CALLBACK, + m_filter_criteria( + PX_V2X_DST_LAYER_2_ID, + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.77, + 10.46 + ))), + v_prov_chg_pc5_subscription.links + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_prov_chg_pc5_subscription( + mw_prov_chg_pc5_subscription( + PX_PROV_PC5_SUB_CALLBACK, + -, + v_prov_chg_pc5_subscription.links + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_prov_pc5_subscription(v_prov_chg_pc5_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_009_OK_03 + + /** + * @desc Check that the IUT responds with the request of updating subscription information when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_009_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var V2xMsgSubscription v_v2x_msg_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_v2x_msg_subscription(v_v2x_msg_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_, + v_headers, + m_http_message_body_json( + m_body_json_v2x_msg_subscription( + m_v2x_msg_subscription( + PX_PROV_V2X_SUB_CALLBACK, + m_v2x_msg_subscription_filter_criteria, + v_v2x_msg_subscription.links + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_v2x_msg_subscription( + mw_v2x_msg_subscription( + PX_PROV_V2X_SUB_CALLBACK, + -, + v_v2x_msg_subscription.links + )))))) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_v2x_msg_subscription(v_v2x_msg_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_009_OK_04 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_009_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_, + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_subscription_invalid( + PX_PROV_UU_UNI_SUB_CALLBACK, + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )), + v_prov_chg_uu_uni_subscription.links + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_009_BR + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_009_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/invalid_links", + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_subscription_invalid( + PX_PROV_UU_UNI_SUB_CALLBACK, + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )), + v_prov_chg_uu_uni_subscription.links + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_delete_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_009_NF + + /** + * @desc Check that the IUT responds with the request of removing subscription information when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_010_OK_01() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_uni_subscription(v_prov_chg_uu_uni_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_uni_subscription.links.self_, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully removes subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_01 + + /** + * @desc Check that the IUT responds with the request of removing subscription information when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_010_OK_02() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgUuMbmsSubscription v_prov_chg_uu_mbms_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_uu_mbms_subscription(v_prov_chg_uu_mbms_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_uu_mbms_subscription.links.self_, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully removes subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_02 + + /** + * @desc Check that the IUT responds with the request of removing subscription information when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_010_OK_03() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var ProvChgPc5Subscription v_prov_chg_pc5_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_prov_pc5_subscription(v_prov_chg_pc5_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_prov_chg_pc5_subscription.links.self_, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully removes subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_03 + + /** + * @desc Check that the IUT responds with the request of removing subscription information when queried by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_010_OK_04() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + var V2xMsgSubscription v_v2x_msg_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_v2x_msg_subscription(v_v2x_msg_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & v_v2x_msg_subscription.links.self_, + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully registers subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_010_OK_04 + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC030/SRV/V2XInformationService.tplan2 + */ + testcase TC_MEC_MEC030_SRV_V2X_010_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var ProvChgUuUniSubscription v_prov_chg_uu_uni_subscription; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/invalid_links", + v_headers + ))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC030_SRV_V2X_010_NF + + } // End of group me_app_role + +} // End of module AtsMec_V2XInformationServiceAPI_TestCases diff --git a/ttcn/AtsMec/AtsMec_WlanInformationAPI_TestCases.ttcn b/ttcn/AtsMec/AtsMec_WlanInformationAPI_TestCases.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..dbc365bb96c033efeedb13869b8caec0346241b8 --- /dev/null +++ b/ttcn/AtsMec/AtsMec_WlanInformationAPI_TestCases.ttcn @@ -0,0 +1,1314 @@ +/** + * @author ETSI / TTF T012 + * @version $URL:$ + * $ID:$ + * @desc This module provides the MEC test cases. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * @see ETSI GS MEC 002, Draft ETSI GS MEC 028 V2.1.1 (2020-06) + */ +module AtsMec_WlanInformationAPI_TestCases { + + // JSON + import from JSON all; + + // Libcommon + import from LibCommon_Time all; + import from LibCommon_VerdictControl all; + import from LibCommon_Sync all; + + // LibHttp + import from LibItsHttp_TypesAndValues all; + import from LibItsHttp_Functions all; + import from LibItsHttp_Templates all; + import from LibItsHttp_JsonTemplates all; + import from LibItsHttp_TestSystem all; + + // LibMec/WlanInformationAPI + import from WlanInformationAPI_TypesAndValues all; + import from WlanInformationAPI_Pics all; + import from WlanInformationAPI_Pixits all; + import from WlanInformationAPI_Templates all; + import from WlanInformationAPI_Functions all; + + // LibMec + import from LibMec_Templates all; + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + + group me_app_role { + + /** + * @desc Check that the IUT responds with the list of WLAN Access Point + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_001_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/ap/ap_information", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_ap_info_list + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of ApInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_001_OK + + /** + * @desc Check that the IUT responds with the list of WLAN Access Point filtered by the macId provided as query parameter + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_002_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/ap/ap_information?filter=(eq," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_ap_info_list + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of ApInfo ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_002_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_002_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/apId/ap_information?filter=(eq," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", // Invalid requery + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_002_BR + + /** + * @desc Check that the IUT responds with the list of Station Point + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_003_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/sta/sta_information", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_sta_info_list + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a StaInfo list ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_003_OK + + /** + * @desc Check that the IUT responds with the list of Station Point filtered by the macId provided as query parameter + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_004_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/sta/sta_information?filter=(eq," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_sta_info_list + )))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a StaInfo list ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_004_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_004_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_QUERIES_URI & "/staId/sta_information?filter=(eq," & PX_WLAN_FILTER_FIELD & "," & PX_WLAN_FILTER_VALUE & ")", // Invalid requery + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_004_BR + + /** + * @desc Check that the IUT responds with the requested list of subscription + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_005_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var AssocStaSubscription v_assoc_sta_subscription; // FIXME Use an array of 3 elements to get a list + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_create_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_wlan_subscription_link_list( + mw_subscription_link_list + ))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_005_OK + + /** + * @desc Check that the IUT responds with the requested list of subscription + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_005_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var AssocStaSubscription v_assoc_sta_subscription; + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_create_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_005_BR + + /** + * @desc Check that the IUT responds with the requested list of subscription + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_006_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var AssocStaSubscription v_assoc_sta_subscription; + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_create_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions/assoc_sta", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_wlan_subscription_link_list( + mw_subscription_link_list( + -, + ? + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with a list of AssocStaSubscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_006_OK + + /** + * @desc Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_006_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var AssocStaSubscription v_assoc_sta_subscription; + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_create_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions/assoc_sta", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_006_BR + + /** + * @desc Check that the IUT responds with an error when a request with not existing parameters is sent + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_006_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions/assoc_sta", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_006_NF + + /** + * @desc Check that the IUT responds with the list of Station Point filtered by the macId provided as query parameter + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_007_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions", + v_headers, + m_http_message_body_json( + m_body_json_assoc_sta_subscription( + m_assoc_sta_subscription( + PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, + m_ap_identity( + PX_MAC_ID + ))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_assoc_sta_subscription( + mw_assoc_sta_subscription( + PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, + -, + ? + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds to the subscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_assoc_sta_subscription(v_response.response.body.json_body.assocStaSubscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_007_OK + + /** + * @desc Check that the IUT responds with an error when an invalid Subscription request is sent + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_007_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions", + v_headers, + m_http_message_body_json( + m_body_json_assoc_sta_subscription( + m_assoc_sta_subscription_invalid( + PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, + m_ap_identity( + PX_MAC_ID + ))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_007_BR + + /** + * @desc Check that the IUT responds with an error when a request with not existing parameters is sent + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_007_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var Headers v_headers; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions&filter=(eq,ap/macId,00:01:02:03:04:04)", + v_headers, + m_http_message_body_json( + m_body_json_assoc_sta_subscription( + m_assoc_sta_subscription( + PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, + m_ap_identity( + PX_MAC_ID + ))))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with the correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_007_NF + + /** + * @desc Check that the IUT responds with the list of Subscription + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_008_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var AssocStaSubscription v_assoc_sta_subscription; + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_create_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & v_assoc_sta_subscription.links.self_.href, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_assoc_sta_subscription( + mw_assoc_sta_subscription( + v_assoc_sta_subscription.callbackReference, + -, + v_assoc_sta_subscription.links + )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an AssocStaSubscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_008_OK + + /** + * @desc Check that the IUT responds with an error when a request for existing subscription with incorrect parameters is sent + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_008_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var AssocStaSubscription v_assoc_sta_subscription; + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_create_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_get( + PICS_ROOT_API & v_assoc_sta_subscription.links.self_.href & "_Invalid", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an AssocStaSubscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_008_NF + + /** + * @desc Check that the IUT responds with a Notification Subscription when it is modified + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_009_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var AssocStaSubscription v_assoc_sta_subscription; + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_assoc_sta_subscription(v_assoc_sta_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & v_assoc_sta_subscription.links.self_.href, + v_headers, + m_http_message_body_json( + m_body_json_assoc_sta_subscription( + m_assoc_sta_subscription( + v_assoc_sta_subscription.callbackReference, + m_ap_identity( + PX_MAC_ID + ), + v_assoc_sta_subscription.links + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json( + mw_body_json_assoc_sta_subscription( + mw_assoc_sta_subscription( + v_assoc_sta_subscription.callbackReference, + ?, + v_assoc_sta_subscription.links )))))) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds to the AssocStatSubscription update ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_assoc_sta_subscription(v_response.response.body.json_body.assocStaSubscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_009_OK + + /** + * @desc Check that the IUT responds with an error when an invalid field is set in the subscription modification request + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_009_BR() runs on HttpComponent system HttpTestAdapter { + // Local variables + var AssocStaSubscription v_assoc_sta_subscription; + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_create_assoc_sta_subscription(v_assoc_sta_subscription); + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_put( + PICS_ROOT_API & v_assoc_sta_subscription.links.self_.href, + v_headers, + m_http_message_body_json( + m_body_json_assoc_sta_subscription( + m_assoc_sta_subscription_invalid( + v_assoc_sta_subscription.callbackReference, + m_ap_identity( + PX_MAC_ID + ), + v_assoc_sta_subscription.links + )))))); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_400_bad_request + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds the correct error code ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_assoc_sta_subscription(v_response.response.body.json_body.assocStaSubscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_009_BR + + /** + * @desc Check that the IUT responds with 204 when an existing subscription is correctly deleted + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_010_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var AssocStaSubscription v_assoc_sta_subscription; + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_create_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & v_assoc_sta_subscription.links.self_.href, + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an AssocStaSubscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_010_OK + + /** + * @desc Check that the IUT responds with an error when an not existing subscription cannot be deleted + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_010_NF() runs on HttpComponent system HttpTestAdapter { + // Local variables + var AssocStaSubscription v_assoc_sta_subscription; + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_create_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_up(); + + // Test adapter configuration + + // Preamble + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & v_assoc_sta_subscription.links.self_.href & "_Invalid", + v_headers + ) + ) + ); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_404_not_found + )) -> value v_response { + tc_ac.stop; + + log("*** " & testcasename() & ": PASS: IUT successfully responds with an AssocStaSubscription ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_ac.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_010_NF + + /** + * @desc Check that the IUT sends a notification about WLAN event notification if the MEC service has an associated subscription and the event is generated + * @see https://forge.etsi.org/rep/mec/gs028-wai-api/blob/master/WlanInformationApi.json + * @see https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/v2.2.1-dev/Test%20Purposes/MEC028/SRV/WAI/ApInfo.tplan2 + */ + testcase TC_MEC_MEC028_SRV_WAI_011_OK() runs on HttpComponent system HttpTestAdapter { + // Local variables + var AssocStaSubscription v_assoc_sta_subscription; + var Headers v_headers; + var HttpMessage v_response; + + // Test control + if (not(PICS_MEC_PLAT) or not(PICS_WLAN_INFORMATION_API_SUPPORTED)) { + log("*** " & testcasename() & ": PICS_MEC_PLAT and PICS_WLAN_INFORMATION_API_SUPPORTED required for executing the TC ***"); + setverdict(inconc); + stop; + } + + // Test component configuration + f_cf_01_http_notif_up(); + + // Test adapter configuration + + // Preamble + f_create_assoc_sta_subscription(v_assoc_sta_subscription); + f_selfOrClientSyncAndVerdict(c_prDone, e_success); + + // Test Body + tc_wait.start; + alt { + [] httpPort_notif.receive( + mw_http_request( + mw_http_request_post( + -, + -, + mw_http_message_body_json( + mw_body_json_assoc_sta_subscription( + mw_assoc_sta_subscription( + PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, + -, + ? + )))))) -> value v_response { + tc_wait.stop; + + f_init_default_headers_list(-, -, v_headers); + httpPort_notif.send( + m_http_response( + m_http_response_ok_no_body( + v_headers + ))); + log("*** " & testcasename() & ": PASS: IUT successfully sends notification ***"); + f_selfOrClientSyncAndVerdict(c_tbDone, e_success); + } + [] tc_wait.timeout { + log("*** " & testcasename() & ": INCONC: Expected message not received ***"); + f_delete_assoc_sta_subscription(v_assoc_sta_subscription); + f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); + } + } // End of 'alt' statement + + // Postamble + f_delete_assoc_sta_subscription(v_assoc_sta_subscription); + f_cf_01_http_notif_down(); + } // End of testcase TC_MEC_MEC028_SRV_WAI_011_OK + + } // End of group me_app_role + +} // End of module AtsMec_WlanInformationAPI_TestCases diff --git a/ttcn/AtsMec/module.mk b/ttcn/AtsMec/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..59bbccb49a5a2a51964a9d14c59dc642bd595310 --- /dev/null +++ b/ttcn/AtsMec/module.mk @@ -0,0 +1,54 @@ +suite := AtsMEC + +sources := \ + AtsMec_Ams_TestCases.ttcn \ + AtsMec_AppEnablementAPI_TestCases.ttcn \ + AtsMec_AppLCM_TestCases.ttcn \ + AtsMec_TrafficManagementAPI_TestCases.ttcn \ + AtsMec_MultiAccessSteeringInfoAPI_TestCases.ttcn \ + AtsMec_Grant_TestCases.ttcn \ + AtsMec_LocationAPI_TestCases.ttcn \ + AtsMec_RadioNodeLocationAPI_TestCases.ttcn \ + AtsMec_RnisAPI_TestCases.ttcn \ + AtsMec_TestControl.ttcn \ + AtsMec_UEAppInterfaceAPI_TestCases.ttcn \ + AtsMec_UEidentityAPI_TestCases.ttcn \ + AtsMec_V2XInformationServiceAPI_TestCases.ttcn \ + AtsMec_DeviceApplicationInterfaceAPI_TestCases.ttcn \ + AtsMec_WlanInformationAPI_TestCases.ttcn \ +# AtsMec_MeoPkgm_TestCases.ttcn \ +# AtsMec_MepmPkgm_TestCases.ttcn \ +# AtsMec_FixedAccessInfoAPI_TestCases.ttcn \ + + +modules := ../LibCommon \ + ../LibIts \ + ../LibIts/ttcn/Http \ + ../LibMec \ + ../LibMec/Ams \ + ../LibMec/AppEna \ + ../LibMec/AppLCM \ + ../LibMec/TrafficManagementAPI \ + ../LibMec/Grant \ + ../LibMec/LocationAPI \ + ../LibMec/MeoPkgm \ + ../LibMec/MepmPkgm \ + ../LibMec/RnisAPI \ + ../LibMec/UEAppInterfaceAPI \ + ../LibMec/UEidentityAPI \ + ../LibMec/V2XInformationServiceAPI \ + ../LibMec/DeviceApplicationInterfaceAPI \ + ../LibMec/WlanInformationAPI \ + ../../ccsrc/Ports/LibHttp \ + ../../ccsrc/EncDec/LibHttp \ + ../../ccsrc/EncDec/LibMec \ + ../../ccsrc/Framework \ + ../../ccsrc/externals \ + ../../ccsrc/loggers \ + ../../ccsrc/Protocols/ETH \ + ../../ccsrc/Protocols/Http \ + ../../ccsrc/Protocols/Json \ + ../../ccsrc/Protocols/Pcap \ + ../../ccsrc/Protocols/Tcp \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ + diff --git a/ttcn/LibIts b/ttcn/LibIts index a305e3b07ed8b0955a28f25bd3fd0346f97562a8..913d130353cf716ab620edbafcb56d2213dc344d 160000 --- a/ttcn/LibIts +++ b/ttcn/LibIts @@ -1 +1 @@ -Subproject commit a305e3b07ed8b0955a28f25bd3fd0346f97562a8 +Subproject commit 913d130353cf716ab620edbafcb56d2213dc344d diff --git a/ttcn/LibMec/Ams/module.mk b/ttcn/LibMec/Ams/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..bce6cc104631075fe5d883c9140d2be52798ae85 --- /dev/null +++ b/ttcn/LibMec/Ams/module.mk @@ -0,0 +1,7 @@ +sources := \ + ttcn/Ams_Pics.ttcn \ + ttcn/Ams_Pixits.ttcn \ + ttcn/Ams_EncdecDeclarations.ttcn \ + ttcn/Ams_Templates.ttcn \ + ttcn/Ams_TypesAndValues.ttcn \ + diff --git a/ttcn/LibMec/Ams/ttcn/Ams_sEncdecDeclarations.ttcn b/ttcn/LibMec/Ams/ttcn/Ams_EncdecDeclarations.ttcn similarity index 95% rename from ttcn/LibMec/Ams/ttcn/Ams_sEncdecDeclarations.ttcn rename to ttcn/LibMec/Ams/ttcn/Ams_EncdecDeclarations.ttcn index 72d71c7d8e2da5e6afd3847509d33aece5d4365d..2a189e1beb32fc04781d52b6b7c3ab84fda704f8 100644 --- a/ttcn/LibMec/Ams/ttcn/Ams_sEncdecDeclarations.ttcn +++ b/ttcn/LibMec/Ams/ttcn/Ams_EncdecDeclarations.ttcn @@ -19,4 +19,4 @@ module Ams_EncdecDeclarations { with { extension "prototype (convert) decode(JSON)" }; -} // End of module LocationAPI_EncdecDeclarations +} // End of module Ams_EncdecDeclarations diff --git a/ttcn/LibMec/AppEna/module.mk b/ttcn/LibMec/AppEna/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..e5ba54e3a5e1b83846fe126da8fe499c7415227c --- /dev/null +++ b/ttcn/LibMec/AppEna/module.mk @@ -0,0 +1,6 @@ +sources := \ + ttcn/AppEnablementAPI_Pics.ttcn \ + ttcn/AppEnablementAPI_Pixits.ttcn \ + ttcn/AppEnablementAPI_Templates.ttcn \ + ttcn/AppEnablementAPI_TypesAndValues.ttcn + diff --git a/ttcn/LibMec/AppLCM/module.mk b/ttcn/LibMec/AppLCM/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..91b8c99f4570070ab75b78c18c9687996bfbd6ca --- /dev/null +++ b/ttcn/LibMec/AppLCM/module.mk @@ -0,0 +1,5 @@ +sources := \ + ttcn/AppLCM_Pics.ttcn \ + ttcn/AppLCM_Pixits.ttcn \ + ttcn/AppLCM_Templates.ttcn \ + ttcn/AppLCM_TypesAndValues.ttcn diff --git a/ttcn/LibMec/BwManagementAPI/json/BwManagementApi.json b/ttcn/LibMec/BwManagementAPI/json/BwManagementApi.json deleted file mode 100644 index 2390d6620e8552bec5cfe4b7b81ac3c7ca70278e..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/BwManagementAPI/json/BwManagementApi.json +++ /dev/null @@ -1,673 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "description": "The ETSI MEC ISG MEC015 Bandwidth Management API described using OpenAPI", - "version": "1.1.1", - "title": "BWM API", - "license": { - "name": "ETSI Forge copyright notice", - "url": "https://forge.etsi.org/etsi-forge-copyright-notice.txt" - } - }, - "externalDocs": { - "description": "ETSI MEC015 V1.1.1 Bandwidth Management API", - "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/015/01.01.01_60/gs_MEC015v010101p.pdf" - }, - "host": "127.0.0.1:8081", - "basePath": "/bwm/v1", - "schemes": [ - "http", - "https" - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "security": [ - { - "OauthSecurity": [ - "all" - ] - } - ], - "securityDefinitions": { - "OauthSecurity": { - "type": "oauth2", - "flow": "application", - "tokenUrl": "https://oauth.exampleAPI/token", - "scopes": { - "all": "Single oauth2 scope for API" - } - } - }, - "parameters": { - "Body.BwInfo": { - "name": "bwInfo", - "in": "body", - "description": "BwInfo with updated information is included as entity body of the request", - "required": true, - "schema": { - "$ref": "#/definitions/BwInfo" - } - }, - "Body.BwInfoDeltas": { - "name": "bwInfoDeltas", - "in": "body", - "description": "Description of the changes to instruct the server how to modify the resource representation. ", - "required": true, - "schema": { - "$ref": "#/definitions/BwInfoDeltas" - } - }, - "Path.AllocationId": { - "name": "allocationId", - "in": "path", - "description": "Represents a bandwidth allocation instance", - "required": true, - "type": "string" - }, - "Query.AppInstanceId": { - "name": "app_instance_id", - "in": "query", - "description": "A mobile edge application instance may use multiple app_instance_ids as an input parameter to query the bandwidth allocation of a list of mobile edge application instances. ", - "required": false, - "type": "array", - "items": { - "type": "string" - } - }, - "Query.AppName": { - "name": "app_name", - "in": "query", - "description": "A mobile edge application instance may use multiple ser_names as an input parameter to query the bandwidth allocation of a list of mobile edge application instances. ", - "required": false, - "type": "array", - "items": { - "type": "string" - } - }, - "Query.SessionId": { - "name": "session_id", - "in": "query", - "description": "A mobile edge application instance may use session_id as an input parameter to query the bandwidth allocation of a list of sessions. ", - "required": false, - "type": "array", - "items": { - "type": "string" - } - } - }, - "paths": { - "/bw_allocations": { - "get": { - "description": "This method retrieves information about a list of bandwidthAllocation resources", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Query.AppInstanceId" - }, - { - "$ref": "#/parameters/Query.AppName" - }, - { - "$ref": "#/parameters/Query.SessionId" - } - ], - "responses": { - "200": { - "description": "Upon success, a response body containing an array of the bandwidthAllocations is returned.", - "schema": { - "required": [ - "bwInfo" - ], - "properties": { - "bwInfo": { - "$ref": "#/definitions/BwInfo" - } - } - } - }, - "400": { - "description": "It is used to indicate that incorrect parameters were passed to the request. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "schema": { - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "The operation is not allowed given the current status of the resource. More information should be provided in the \"detail\" attribute of the \"ProblemDetails\" structure.", - "schema": { - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "It is used when a client provided a URI that cannot be mapped to a valid resource URI. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "schema": { - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "post": { - "description": "This method is used to create a bandwidthAllocation resource.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Body.BwInfo" - } - ], - "responses": { - "201": { - "description": "Upon success, the HTTP response shall include a \"Location\" HTTP header that contains the resource URI of the created resource.", - "schema": { - "required": [ - "bwInfo" - ], - "properties": { - "bwInfo": { - "$ref": "#/definitions/BwInfo" - } - } - } - }, - "400": { - "description": "It is used to indicate that incorrect parameters were passed to the request. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "schema": { - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "The operation is not allowed given the current status of the resource. More information should be provided in the \"detail\" attribute of the \"ProblemDetails\" structure.", - "schema": { - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "It is used when a client provided a URI that cannot be mapped to a valid resource URI. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "schema": { - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - } - }, - "/bw_allocations/{allocationId}": { - "get": { - "description": "This method retrieves information about a specific bandwidthAllocation resource. ", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.AllocationId" - } - ], - "responses": { - "200": { - "description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.", - "schema": { - "required": [ - "bwInfo" - ], - "properties": { - "bwInfo": { - "$ref": "#/definitions/BwInfo" - } - } - } - }, - "400": { - "description": "It is used to indicate that incorrect parameters were passed to the request. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "schema": { - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "The operation is not allowed given the current status of the resource. More information shall be provided in the \"detail\" attribute of the \"ProblemDetails\" structure. required:\n - ProblemDetails\nproperties:\n ProblemDetails:\n $ref: '#/definitions/ProblemDetails'" - }, - "404": { - "description": "It is used when a client provided a URI that cannot be mapped to a valid resource URI. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "schema": { - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "put": { - "description": "This method updates the information about a specific bandwidthAllocation resource. ", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.AllocationId" - }, - { - "$ref": "#/parameters/Body.BwInfo" - } - ], - "responses": { - "200": { - "description": "Upon success, a response body containing data type describing the updated BwInfo is returned.", - "schema": { - "required": [ - "bwInfo" - ], - "properties": { - "bwInfo": { - "$ref": "#/definitions/BwInfo" - } - } - } - }, - "400": { - "description": "It is used to indicate that incorrect parameters were passed to the request. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "schema": { - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "The operation is not allowed given the current status of the resource. More information shall be provided in the \"detail\" attribute of the \"ProblemDetails\" structure.", - "schema": { - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "It is used when a client provided a URI that cannot be mapped to a valid resource URI. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "schema": { - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "412": { - "description": "It is used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "schema": { - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "patch": { - "description": "This method updates the information about a specific bandwidthAllocation resource. ", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.AllocationId" - }, - { - "$ref": "#/parameters/Body.BwInfoDeltas" - } - ], - "responses": { - "200": { - "description": "Upon success, a response body containing data type describing the updated BwInfo is returned.", - "schema": { - "required": [ - "bwInfo" - ], - "properties": { - "bwInfo": { - "$ref": "#/definitions/BwInfo" - } - } - } - }, - "400": { - "description": "It is used to indicate that incorrect parameters were passed to the request. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "schema": { - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "403": { - "description": "The operation is not allowed given the current status of the resource. More information shall be provided in the \"detail\" attribute of the \"ProblemDetails\" structure.", - "schema": { - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "It is used when a client provided a URI that cannot be mapped to a valid resource URI. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "schema": { - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "412": { - "description": "It is used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "schema": { - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - }, - "delete": { - "description": "Remove a specific bandwidthAllocation resource. DELETE method is typically used in \"Unregister from Bandwidth Management Service\" procedure", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Path.AllocationId" - } - ], - "responses": { - "204": { - "description": "No Content" - }, - "403": { - "description": "The operation is not allowed given the current status of the resource. More information shall be provided in the \"detail\" attribute of the \"ProblemDetails\" structure.", - "schema": { - "required": [ - "ProblemDetails" - ], - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - }, - "404": { - "description": "It is used when a client provided a URI that cannot be mapped to a valid resource URI. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.", - "schema": { - "properties": { - "ProblemDetails": { - "$ref": "#/definitions/ProblemDetails" - } - } - } - } - } - } - } - }, - "definitions": { - "ProblemDetails": { - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/Problem.type" - }, - "title": { - "$ref": "#/definitions/Problem.title" - }, - "status": { - "$ref": "#/definitions/Problem.status" - }, - "detail": { - "$ref": "#/definitions/Problem.detail" - }, - "instance": { - "$ref": "#/definitions/Problem.instance" - } - } - }, - "Problem.type": { - "type": "string", - "format": "uri", - "description": "A URI reference according to IETF RFC 3986 that identifies the problem type" - }, - "Problem.title": { - "type": "string", - "description": "A short, human-readable summary of the problem type" - }, - "Problem.status": { - "type": "integer", - "format": "uint32", - "description": "The HTTP status code for this occurrence of the problem" - }, - "Problem.detail": { - "type": "string", - "description": "A human-readable explanation specific to this occurrence of the problem" - }, - "Problem.instance": { - "type": "string", - "format": "uri", - "description": "A URI reference that identifies the specific occurrence of the problem" - }, - "BwInfo": { - "description": "information of bandwidth resource", - "type": "object", - "required": [ - "appInsId", - "requestType", - "fixedAllocation", - "allocationDirection" - ], - "properties": { - "timeStamp": { - "$ref": "#/definitions/TimeStamp" - }, - "appInsId": { - "$ref": "#/definitions/AppInsId" - }, - "requestType": { - "$ref": "#/definitions/RequestType" - }, - "sessionFilter": { - "$ref": "#/definitions/SessionFilter" - }, - "fixedBWPriority": { - "$ref": "#/definitions/FixedBWPriority" - }, - "fixedAllocation": { - "$ref": "#/definitions/FixedAllocation" - }, - "allocationDirection": { - "$ref": "#/definitions/AllocationDirection" - } - } - }, - "BwInfoDeltas": { - "description": "Conform to JSON merge patch format and processing rules specified IETF RFC 7396 [8], this type represents the attributes whose value are allowed to be updated with HTTP PATCH method in content format JSON", - "type": "object", - "properties": { - "appInsId": { - "$ref": "#/definitions/AppInsId" - }, - "requestType": { - "$ref": "#/definitions/RequestType" - }, - "sessionFilter": { - "$ref": "#/definitions/SessionFilter" - }, - "fixedBWPriority": { - "$ref": "#/definitions/FixedBWPriority" - }, - "fixedAllocation": { - "$ref": "#/definitions/FixedAllocation" - }, - "allocationDirection": { - "$ref": "#/definitions/AllocationDirection" - } - } - }, - "TimeStamp": { - "type": "object", - "required": [ - "seconds", - "nanoSeconds" - ], - "properties": { - "seconds": { - "$ref": "#/definitions/Seconds" - }, - "nanoSeconds": { - "$ref": "#/definitions/NanoSeconds" - } - } - }, - "AppInsId": { - "description": "Application instance identifier", - "type": "string" - }, - "RequestType": { - "description": "Numeric value (0 - 255) corresponding to specific type of consumer", - "type": "string", - "enum": [ - "APPLICATION_SPECIFIC_BW_ALLOCATION", - "SESSION_SPECIFIC_BW_ALLOCATION" - ] - }, - "SessionFilter": { - "description": "Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected", - "type": "array", - "items": { - "type": "object", - "properties": { - "sourceIp": { - "$ref": "#/definitions/SourceIp" - }, - "sourcePort": { - "$ref": "#/definitions/SourcePort" - }, - "dstAddress": { - "$ref": "#/definitions/DstAddress" - }, - "dstPort": { - "$ref": "#/definitions/DstPort" - }, - "protocol": { - "$ref": "#/definitions/Protocol" - } - } - } - }, - "FixedBWPriority": { - "description": "Indicates the allocation priority when dealing with several applications or sessions in parallel. Values are not defined in the present document", - "type": "string", - "enum": [ - "not defined in the present document" - ] - }, - "FixedAllocation": { - "description": "Size of requested fixed BW allocation in [bps]", - "type": "string" - }, - "AllocationDirection": { - "description": "The direction of the requested BW allocation", - "type": "string", - "enum": [ - "00 = Downlink (towards the UE)", - "01 = Uplink (towards the application/session)", - "10 = Symmetrical" - ] - }, - "Seconds": { - "description": "The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", - "type": "integer", - "format": "uint32" - }, - "NanoSeconds": { - "description": "The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", - "type": "integer", - "format": "uint32" - }, - "SourceIp": { - "description": "Source address identity of session (including range)", - "type": "string" - }, - "SourcePort": { - "description": "Source port identity of session ", - "type": "array", - "items": { - "type": "string" - } - }, - "DstAddress": { - "description": "Destination address identity of session (including range)", - "type": "string" - }, - "DstPort": { - "description": "Destination port identity of session ", - "type": "array", - "items": { - "type": "string" - } - }, - "Protocol": { - "description": "Protocol number", - "type": "string" - } - } - } diff --git a/ttcn/LibMec/BwManagementAPI/ttcn/BwManagementAPI_Pics.ttcn b/ttcn/LibMec/BwManagementAPI/ttcn/BwManagementAPI_Pics.ttcn deleted file mode 100644 index 6bccd864dc0b34140bf0b8f71e294300df5d7775..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/BwManagementAPI/ttcn/BwManagementAPI_Pics.ttcn +++ /dev/null @@ -1,8 +0,0 @@ -module BwManagementAPI_Pics { - - /** - * @desc Does the IUT support BwManagementAPI? - */ - modulepar boolean PICS_BWMANAGEMENT_API_SUPPORTED := true; - -} // End of module BwManagementAPI_Pics diff --git a/ttcn/LibMec/BwManagementAPI/ttcn/BwManagementAPI_Templates.ttcn b/ttcn/LibMec/BwManagementAPI/ttcn/BwManagementAPI_Templates.ttcn deleted file mode 100644 index 2dfac4a26db8eaeb2aeccefd12800adfaf2f97e5..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/BwManagementAPI/ttcn/BwManagementAPI_Templates.ttcn +++ /dev/null @@ -1,77 +0,0 @@ -module BwManagementAPI_Templates { - - // JSON - import from JSON all; - - // LibCommon - import from LibCommon_BasicTypesAndValues all; - - // LibMec/BwManagementAPI - import from BwManagementAPI_TypesAndValues all; - import from BwManagementAPI_Pixits all; - - template (value) BwInfo m_bw_info( - in AppInsId p_appInsId := PX_APP_INSTANCE_ID, - in RequestType p_requestType, - in FixedBWPriority p_fixedBWPriority, - in FixedAllocation p_fixedAllocation, - in AllocationDirection p_allocationDirection - ) := { - timeStamp := omit, - appInsId := p_appInsId, - requestType := p_requestType, - sessionFilter := omit, - fixedBWPriority := p_fixedBWPriority, - fixedAllocation := p_fixedAllocation, - allocationDirection := p_allocationDirection - } // End of template m_bw_info - - template (present) BwInfo mw_bw_info( - template (present) AppInsId p_appInsId := ?, - template (present) RequestType p_requestType := ?, - template (present) FixedBWPriority p_fixedBWPriority := ?, - template (present) FixedAllocation p_fixedAllocation := ?, - template (present) AllocationDirection p_allocationDirection := ? - ) := { - timeStamp := *, - appInsId := p_appInsId, - requestType := p_requestType, - sessionFilter := *, - fixedBWPriority := p_fixedBWPriority, - fixedAllocation := p_fixedAllocation, - allocationDirection := p_allocationDirection - } // End of template mw_bw_info - - template (value) BwInfoDeltas m_bw_info_delta( - in AppInsId p_appInsId := PX_APP_INSTANCE_ID, - in RequestType p_requestType, - in template (value) SessionFilter p_sessionFilter, - in FixedBWPriority p_fixedBWPriority, - in FixedAllocation p_fixedAllocation, - in AllocationDirection p_allocationDirection - ) := { - appInsId := p_appInsId, - requestType := p_requestType, - sessionFilter := p_sessionFilter, - fixedBWPriority := p_fixedBWPriority, - fixedAllocation := p_fixedAllocation, - allocationDirection := p_allocationDirection - } // End of template m_bw_info_delta - - template (present) BwInfoDeltas mw_bw_info_delta( - template (present) AppInsId p_appInsId := ?, - template (present) RequestType p_requestType := ?, - template (present) SessionFilter p_sessionFilter := ?, - template (present) FixedBWPriority p_fixedBWPriority := ?, - template (present) FixedAllocation p_fixedAllocation := ?, - template (present) AllocationDirection p_allocationDirection := ? - ) := { - appInsId := p_appInsId, - requestType := p_requestType, - sessionFilter := p_sessionFilter, - fixedBWPriority := p_fixedBWPriority, - fixedAllocation := p_fixedAllocation, - allocationDirection := p_allocationDirection - } // End of template mw_bw_info_delta - -} // End of module BwManagementAPI_Templates diff --git a/ttcn/LibMec/BwManagementAPI/ttcn/BwManagementAPI_TypesAndValues.ttcn b/ttcn/LibMec/BwManagementAPI/ttcn/BwManagementAPI_TypesAndValues.ttcn deleted file mode 100644 index f3322e13f89f4d00bd7f648acca8fe556e2a6688..0000000000000000000000000000000000000000 --- a/ttcn/LibMec/BwManagementAPI/ttcn/BwManagementAPI_TypesAndValues.ttcn +++ /dev/null @@ -1,130 +0,0 @@ -module BwManagementAPI_TypesAndValues { - - // JSON - import from JSON all; - - // LibCommon - import from LibCommon_BasicTypesAndValues all; - - /** - * @desc Information of bandwidth resource - * @member - */ - type record BwInfo { - TimeStamp timeStamp optional, - AppInsId appInsId, - RequestType requestType, - SessionFilter sessionFilter optional, - FixedBWPriority fixedBWPriority, - FixedAllocation fixedAllocation, - AllocationDirection allocationDirection - } - - /** - * @desc Conform to JSON merge patch format and processing rules specified IETF RFC 7396 [8], this type represents the attributes whose value are allowed to be updated with HTTP PATCH method in content format JSON - * @member - */ - type record BwInfoDeltas { - AppInsId appInsId, - RequestType requestType, - SessionFilter sessionFilter optional, - FixedBWPriority fixedBWPriority, - FixedAllocation fixedAllocation, - AllocationDirection allocationDirection - } - - /** - * @desc - * @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - * @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type record TimeStamp { - Seconds seconds, - NanoSeconds nanoSeconds - } - - /** - * @desc Application instance identifier - */ - type JSON.String AppInsId; - - /** - * @desc Numeric value (0 - 255) corresponding to specific type of consumer - */ - type enumerated RequestType { - APPLICATION_SPECIFIC_BW_ALLOCATION, - SESSION_SPECIFIC_BW_ALLOCATION - } - - /** - * @desc Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected - */ - type record of SessionFilterItems SessionFilter; - type record SessionFilterItems { - SourceIp sourceIp, - SourcePort sourcePort, - DstAddress dstAddress, - DstPort dstPort, - Protocol protocol - } - - /** - * @desc Indicates the allocation priority when dealing with several applications or sessions in parallel. Values are not defined in the present document - */ - type enumerated FixedBWPriority { - not_defined_in_the_present_document - } - - /** - * @desc Size of requested fixed BW allocation in [bps] - */ - type JSON.String FixedAllocation; - - - /** - * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type UInt32 Seconds; - - /** - * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC - */ - type UInt32 NanoSeconds; - - /** - * @desc The direction of the requested BW allocation - */ - type enumerated AllocationDirection { - Downlink, - Uplink, - Symmetrical - } - - /** - * @desc Source address identity of session (including range) - */ - type JSON.String SourceIp; - - /** - * @desc Source port identity of session - */ - type record of JSON.String SourcePort; - - /** - * @desc Destination address identity of session (including range) - */ - type JSON.String DstAddress; - - /** - * @desc Destination port identity of session - */ - type record of JSON.String DstPort; - - /** - * @desc Protocol number - */ - type JSON.String Protocol; - -} with { - encode "JSON" -} // End of module BwManagementAPI_TypesAndValues diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/json/UEAppInterfaceApi.json b/ttcn/LibMec/DeviceApplicationInterfaceAPI/json/UEAppInterfaceApi.json new file mode 100644 index 0000000000000000000000000000000000000000..6075bbc3f94a82edc215c1c265a5c1fecd279b32 --- /dev/null +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/json/UEAppInterfaceApi.json @@ -0,0 +1,1051 @@ +{ + "openapi": "3.0.0", + "info": { + "contact": { + "url": "https://forge.etsi.org/rep/mec/gs016-dev-app-api" + }, + "title": "ETSI GS MEC 016 Device application interface", + "version": "2.2.1", + "description": "The ETSI MEC ISG Device application interface API described using OpenAPI.", + "license": { + "name": "BSD-3-Clause", + "url": "https://forge.etsi.org/legal-matters" + } + }, + "externalDocs": { + "description": "ETSI GS MEC016 V2.2.1 Device application interface", + "url": "https://www.etsi.org/deliver/etsi_gs/MEC/001_099/016/02.02.01_60/gs_MEC016v020201p.pdf" + }, + "servers": [ + { + "url": "https://localhost/dev_app/v1" + } + ], + "tags": [ + { + "name": "dev_app" + } + ], + "paths": { + "/app_list": { + "get": { + "tags": [ + "dev_app" + ], + "summary": "Get available application information.", + "description": "Used to query information about the available MEC applications.", + "operationId": "meAppListGET", + "parameters": [ + { + "$ref": "#/components/parameters/Query.appName" + }, + { + "$ref": "#/components/parameters/Query.appProvider" + }, + { + "$ref": "#/components/parameters/Query.appSoftVersion" + }, + { + "$ref": "#/components/parameters/Query.vendorId" + }, + { + "$ref": "#/components/parameters/Query.serviceCont" + } + ], + "responses": { + "200": { + "description": "The response body contains an array of the user applications available to the querying device application.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApplicationList" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/app_contexts": { + "post": { + "tags": [ + "dev_app" + ], + "summary": "Creation of a new application context.", + "description": "Used to create a new application context. Upon success, the response contains entity body describing the created application context.", + "operationId": "devAppContextsGET", + "requestBody": { + "description": "Entity body in the request contains the Application Context as requested by the device application.", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppContext" + } + } + } + }, + "parameters": [], + "responses": { + "201": { + "description": "The response body contains the Application Context as it was created by the MEC system, which includes the reference URI(s) of the associated user application instance(s). The URI of the resource created within the MEC system associated with the request, with its specific application context ID, shall be included in the 'Location' HTTP header of the response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppContext" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + }, + "callbacks": { + "notification": { + "{$request.body#/appContext.callbackReference}": { + "post": { + "summary": "Callback POST used to send a notification", + "description": "Notification with content based on subscription type", + "operationId": "notificationPOST", + "requestBody": { + "description": "Subscription notification", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InlineNotification" + }, + "example": { + "notificationType": "ApplicationContextDeleteNotification", + "contextId": "contextId123" + } + } + } + }, + "responses": { + "204": { + "$ref": "#/components/responses/204" + } + } + } + } + } + } + } + }, + "/app_contexts/{contextId}": { + "put": { + "tags": [ + "dev_app" + ], + "summary": "Updating the callbackReference and/or appLocation of an existing application context.", + "description": "Used to update the callback reference and/or application location constraints of an existing application context. Upon successful operation, the target resource is updated with the new application context information.", + "operationId": "devAppContextPUT", + "requestBody": { + "description": "Only the callbackReference and/or appLocation attribute values are allowed to be updated. Other attributes and their values shall remain untouched.", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppContext" + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Path.contextId" + } + ], + "responses": { + "204": { + "$ref": "#/components/responses/204" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + }, + "delete": { + "tags": [ + "dev_app" + ], + "summary": "Deletion of an existing application context.", + "description": "Used to delete the resource that represents the existing application context.", + "operationId": "devAppContextDELETE", + "parameters": [ + { + "$ref": "#/components/parameters/Path.contextId" + } + ], + "responses": { + "204": { + "$ref": "#/components/responses/204" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/obtain_app_loc_availability": { + "post": { + "tags": [ + "dev_app" + ], + "summary": "Obtain the location constraints for a new application context.", + "description": "Used to obtain the locations available for instantiation of a specific user application in the MEC system.", + "operationId": "appLocationAvailabilityPOST", + "requestBody": { + "description": "Entity body in the request contains the user application information for the MEC system to evaluate the locations available for instantiation of that application.", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApplicationLocationAvailability" + } + } + } + }, + "parameters": [], + "responses": { + "200": { + "description": "The response body contains the locations available for instantiation of the requested user application in the MEC system.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApplicationLocationAvailability" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + } + }, + "components": { + "responses": { + "204": { + "description": "Upon success, a response 204 No Content without any response body is returned." + }, + "400": { + "description": "Bad Request : used to indicate that incorrect parameters were passed to the request.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "401": { + "description": "Unauthorized : used when the client did not submit credentials.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "403": { + "description": "Forbidden : operation is not allowed given the current status of the resource.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "404": { + "description": "Not Found : used when a client provided a URI that cannot be mapped to a valid resource URI.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + }, + "parameters": { + "Query.appName": { + "name": "appName", + "in": "query", + "description": "Name to identify the MEC application.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "maxLength": 32 + } + } + }, + "Query.appProvider": { + "name": "appProvider", + "in": "query", + "description": "Provider of the MEC application.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "maxLength": 32 + } + } + }, + "Query.appSoftVersion": { + "name": "appSoftVersion", + "in": "query", + "description": "Software version of the MEC application.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "maxLength": 32 + } + } + }, + "Query.vendorId": { + "name": "vendorId", + "in": "query", + "description": "Vendor identifier", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "maxLength": 32 + } + } + }, + "Query.serviceCont": { + "name": "serviceCont", + "in": "query", + "description": "Required service continuity mode for this application. Permitted values: 0 = SERVICE_CONTINUITY_NOT_REQUIRED. 1 = SERVICE_CONTINUITY_REQUIRED.", + "required": false, + "schema": { + "type": "integer", + "enum": [ + 0, + 1 + ] + } + }, + "Path.contextId": { + "name": "contextId", + "in": "path", + "description": "Uniquely identifies the application context in the MEC system. It is assigned by the MEC system.", + "required": true, + "schema": { + "type": "string" + } + } + }, + "schemas": { + "AddressChangeNotification": { + "properties": { + "appInstanceId": { + "description": "Identifier of the user application instance.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "contextId": { + "description": "Uniquely identifies the application context in the MEC system.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "notificationType": { + "description": "Shall be set to \"AddressChangeNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "referenceURI": { + "description": "Address of the user application. Used as the reference URI for the application. Assigned by the MEC system.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "URI" + } + }, + "required": [ + "notificationType", + "contextId", + "appInstanceId", + "referenceURI" + ], + "type": "object", + "x-etsi-ref": "6.4.2" + }, + "AppContext": { + "properties": { + "appAutoInstantiation": { + "description": "Provides indication to the MEC system that instantiation of the requested application is desired should a requested appLocation become available that was not at the time of the request.", + "type": "boolean", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Boolean" + }, + "appInfo": { + "description": "", + "properties": { + "appDId": { + "description": "Identifier of this MEC application descriptor. This attribute shall be globally unique. It is equivalent to the appDId defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1]. It shall be present if the application is one in the ApplicationList.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "appDVersion": { + "description": "Identifies the version of the application descriptor. It is equivalent to the appDVersion defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appDescription": { + "description": "Human readable description of the MEC application. The length of the value shall not exceed 128 characters.", + "type": "string", + "maxLength": 128, + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "appName": { + "description": "Name of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appProvider": { + "description": "Provider of the MEC application.\nThe length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appSoftVersion": { + "description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "appPackageSource": { + "description": "URI of the application package.\nIncluded in the request if the application is not one in the ApplicationList. appPackageSource enables on-boarding of the application package into the MEC system. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + }, + "userAppInstanceInfo": { + "description": "List of user application instance information.", + "items": { + "type": "object", + "properties": { + "appInstanceId": { + "description": "Identifier of the user application instance. It shall only be included in the response.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "appLocation": { + "$ref": "#/components/schemas/LocationConstraints" + }, + "referenceURI": { + "description": "Address of the user application instance. It shall only be included in the response.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + } + } + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "array (Structure inlined)" + } + }, + "required": [ + "appName", + "appProvider", + "appDVersion", + "userAppInstanceInfo" + ], + "type": "object", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "appLocationUpdates": { + "description": "Used by the device application to request to receive notifications at the callbackReference URI relating to location availability for user application instantiation.", + "type": "boolean", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Boolean" + }, + "associateDevAppId": { + "description": "Uniquely identifies the device application. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "callbackReference": { + "description": "URI assigned by the device application to receive application lifecycle related notifications. Inclusion in the request implies the client supports the pub/sub mechanism and is capable of receiving notifications. This endpoint shall be maintained for the lifetime of the application context.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + }, + "contextId": { + "description": "Uniquely identifies the application context in the MEC system. Assigned by the MEC system and shall be present other than in a create request. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "associateDevAppId", + "appInfo" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tIf a value of the attribute is included in the request, the same value shall be included in the response.\nNOTE 2:\tThe design of the current operation with callback reference assumes no web proxy between the entity that originates the notification and the entity that receives it.\nNOTE 3:\tThe language support for the application description may be limited.\nNOTE 4:\tAttribute appLocationUpdates and appAutoInstantiation shall not both be set to TRUE.", + "x-etsi-ref": "6.2.3" + }, + "ApplicationContextDeleteNotification": { + "properties": { + "contextId": { + "description": "Uniquely identifies the application context that has been deleted from the MEC system.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "notificationType": { + "description": "Shall be set to \"ApplicationContextDeleteNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "notificationType", + "contextId" + ], + "type": "object", + "x-etsi-ref": "6.4.3" + }, + "ApplicationContextUpdateNotification": { + "properties": { + "contextId": { + "description": "Uniquely identifies the application context in the MEC system.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "notificationType": { + "description": "Shall be set to \"ApplicationContextUpdateNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "userAppInstanceInfo": { + "description": "List of user application instance information.", + "items": { + "type": "object", + "properties": { + "appInstanceId": { + "description": "Identifier of the user application instance.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appLocation": { + "$ref": "#/components/schemas/LocationConstraints" + }, + "referenceURI": { + "description": "Address of the user application instance.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "URI" + } + } + }, + "minItems": 1, + "required": [ + "appInstanceId", + "referenceURI" + ], + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "array (Structure inlined)" + } + }, + "type": "object", + "required": [ + "notificationType", + "contextId", + "userAppInstanceInfo" + ], + "x-etsi-ref": "6.4.4" + }, + "ApplicationList": { + "properties": { + "appList": { + "description": "List of user applications available to the device application. As defined below.", + "items": { + "type": "object", + "properties": { + "appInfo": { + "description": "", + "properties": { + "appCharcs": { + "description": "Characteristics of the application. As defined below. The application characteristics relate to the system resources consumed by the application. A device application can use this information e.g. for estimating the cost of use of the application or for the expected user experience.", + "properties": { + "bandwidth": { + "description": "The required connection bandwidth in kbit/s for the use of the MEC application instance. ", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "uint32" + }, + "latency": { + "description": "The target round trip time in milliseconds supported by the MEC system for the MEC application instance.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "uint32" + }, + "memory": { + "description": "The maximum size in Mbytes of the memory resource expected to be used by the MEC application instance in the MEC system.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "uint32" + }, + "serviceCont": { + "description": "Required service continuity mode for this application. Permitted values: 0 = SERVICE_CONTINUITY_NOT_REQUIRED. 1 = SERVICE_CONTINUITY_REQUIRED.", + "enum": [ + 0, + 1 + ], + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Enum" + }, + "storage": { + "description": "The maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "uint32" + } + }, + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "appDId": { + "description": "Identifier of this MEC application descriptor. It is equivalent to the appDId defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1]. This attribute shall be globally unique.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appDVersion": { + "description": "Identifies the version of the application descriptor. It is equivalent to the appDVersion defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appDescription": { + "description": "Human readable description of the MEC application (see note 2).", + "type": "string", + "maxLength": 128, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appLocation": { + "description": "Identifies the locations of the MEC application.", + "items": { + "$ref": "#/components/schemas/LocationConstraints" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "LocationConstraints" + }, + "appName": { + "description": "Name of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appProvider": { + "description": "Provider of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appSoftVersion": { + "description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "appDId", + "appName", + "appProvider", + "appSoftVersion", + "appDVersion", + "appDescription" + ], + "type": "object", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "vendorSpecificExt": { + "description": "Extension for vendor specific information (see note 1).", + "properties": { + "vendorId": { + "description": "Vendor identifier. The length of the value shall not exceed 32 characters. The rest of the structure of vendor specific extension is not defined.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "vendorId" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + } + }, + "minItems": 0, + "required": [ + "appInfo" + ], + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Array (Structure (inlined))" + } + }, + "type": "object", + "x-etsi-notes": "NOTE 1:\tThe vendor specific extension allows submitting information on the application lists that have been made available to the device application of the corresponding vendor.\nNOTE 2:\tThe language support may be limited. The length of the value shall not exceed 128 characters.", + "x-etsi-ref": "6.2.2" + }, + "ApplicationLocationAvailability": { + "properties": { + "appInfo": { + "description": "", + "properties": { + "appDVersion": { + "description": "Identifies the version of the application descriptor. It is equivalent to the appDVersion defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appDescription": { + "description": "Human readable description of the MEC application. The length of the value shall not exceed 128 characters.", + "type": "string", + "maxLength": 128, + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "appName": { + "description": "Name of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appPackageSource": { + "description": "URI of the application package. Shall be included in the request. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + }, + "appProvider": { + "description": "Provider of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appSoftVersion": { + "description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "availableLocations": { + "description": "MEC application location constraints. ", + "items": { + "type": "object", + "properties": { + "appLocation": { + "$ref": "#/components/schemas/LocationConstraints" + } + } + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "array (Structure (inline))" + } + }, + "required": [ + "appName", + "appProvider", + "appDVersion" + ], + "type": "object", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "associateDevAppId": { + "description": "Uniquely identifies the device application. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "associateDevAppId", + "appInfo" + ], + "type": "object", + "x-etsi-ref": "6.2.4" + }, + "ApplicationLocationAvailabilityNotification": { + "properties": { + "availableLocations": { + "description": "Locations available to the MEC application.", + "items": { + "type": "object", + "properties": { + "appLocation": { + "$ref": "#/components/schemas/LocationConstraints" + } + } + }, + "minItems": 1, + "required": [ + "appLocation" + ], + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "array (Structure (inline))" + }, + "contextId": { + "description": "Uniquely identifies the application context in the MEC system.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "notificationType": { + "description": "Shall be set to \"ApplicationLocationAvailabilityNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "type": "object", + "required": [ + "notificationType", + "availableLocations" + ], + "x-etsi-ref": "6.4.5" + }, + "InlineNotification": { + "oneOf": [ + { + "$ref": "#/components/schemas/AddressChangeNotification" + }, + { + "$ref": "#/components/schemas/ApplicationContextDeleteNotification" + }, + { + "$ref": "#/components/schemas/ApplicationContextUpdateNotification" + }, + { + "$ref": "#/components/schemas/ApplicationLocationAvailabilityNotification" + } + ], + "discriminator": { + "propertyName": "notificationType" + } + }, + "LocationConstraints": { + "properties": { + "area": { + "$ref": "#/components/schemas/Polygon" + }, + "civicAddressElement": { + "description": "Zero or more elements comprising the civic address. Shall be absent if the \"area\" attribute is present.", + "items": { + "type": "object", + "properties": { + "caType": { + "description": "Describe the content type of caValue. The value of caType shall comply with section 3.4 of IETF RFC 4776 [6]. ", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "caValue": { + "description": "Content of civic address element corresponding to the caType. The format caValue shall comply with section 3.4 of IETF RFC 4776 [6].", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + } + }, + "minItems": 0, + "required": [ + "caType", + "caValue" + ], + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "array (Structure inlined)" + }, + "countryCode": { + "description": "The two-letter ISO 3166 [7] country code in capital letters. Shall be present in case the \"area\" attribute is absent. May be absent if the \"area\" attribute is present (see note).", + "type": "string", + "maxLength": 2, + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "type": "object", + "x-etsi-notes": "NOTE:\tIf both \"countryCode\" and \"area\" are present, no conflicts should exist between the values of these two attributes. In case of conflicts, the API producer (e.g. MEO, MEAO) shall disregard parts of the geographic area signalled by \"area\" that are outside the boundaries of the country signalled by \"countryCode\". If \"countryCode\" is absent, it is solely the \"area\" attribute that defines the location constraint.", + "x-etsi-ref": "6.5.2" + }, + "Polygon": { + "properties": { + "coordinates": { + "items": { + "items": { + "items": { + "type": "number", + "format": "float" + }, + "type": "array" + }, + "type": "array" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "array" + } + }, + "type": "object" + }, + "ProblemDetails": { + "properties": { + "detail": { + "description": "A human-readable explanation specific to this occurrence of the problem", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "instance": { + "description": "A URI reference that identifies the specific occurrence of the problem", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + }, + "status": { + "description": "The HTTP status code for this occurrence of the problem", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "title": { + "description": "A short, human-readable summary of the problem type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "type": { + "description": "A URI reference according to IETF RFC 3986 that identifies the problem type", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + } + }, + "type": "object" + } + } + } +} diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/module.mk b/ttcn/LibMec/DeviceApplicationInterfaceAPI/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..ebf24a3700b95452c0f169bf3efe80820c239e8a --- /dev/null +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/module.mk @@ -0,0 +1,7 @@ +sources := \ + ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn \ + ttcn/DeviceApplicationInterfaceAPI_Pics.ttcn \ + ttcn/DeviceApplicationInterfaceAPI_Pixits.ttcn \ + ttcn/DeviceApplicationInterfaceAPI_Templates.ttcn \ + ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn \ + diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..bf592752f7ea2c48523714b4196977cf101c84fe --- /dev/null +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Functions.ttcn @@ -0,0 +1,119 @@ +module DeviceApplicationInterfaceAPI_Functions { + + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_Time all; + import from LibCommon_VerdictControl all; + import from LibCommon_Sync all; + + // LibHttp + import from LibItsHttp_TypesAndValues all; + import from LibItsHttp_Functions all; + import from LibItsHttp_Templates all; + import from LibItsHttp_JsonTemplates all; + import from LibItsHttp_TestSystem all; + + // LibMec/DeviceApplicationInterfaceAPI + import from DeviceApplicationInterfaceAPI_TypesAndValues all; + import from DeviceApplicationInterfaceAPI_Templates all; + import from DeviceApplicationInterfaceAPI_Pixits all; + + // LibMec + import from LibMec_Templates all; + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + + function f_create_application_context( + out AppContext p_device_info_app_context + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_DEVICE_APP_CTX_URI, + v_headers, + m_http_message_body_json( + m_body_json_device_info_app_context( + m_device_app_context( + PX_ASSOCIATE_DEV_APPID, + m_app_context_info( + PX_APPD_ID, + PX_UNKNOWN_APP_NAME, + PX_APP_PROVIDER, + PX_APPD_VERSION + ), + PX_DEVICE_APP_CALLBACK + ) + ) + ) + ) + ) + ); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_device_info_app_context( + mw_device_app_context( + -, + PX_ASSOCIATE_DEV_APPID, + mw_app_context_info, + PX_DEVICE_APP_CALLBACK + )))))) -> value v_response { + tc_ac.stop; + + // TODO Check presence of Location HTTP header + p_device_info_app_context := v_response.response.body.json_body.appContext_device_info; + log("f_create_application_context: INFO: IUT successfully responds with an Application Context: ", p_device_info_app_context); + } + [] tc_ac.timeout { + log("f_create_application_context: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_application_context + + function f_delete_application_context( + in AppContext p_device_info_app_context + ) runs on HttpComponent { + var Headers v_headers; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_DEVICE_APP_CTX_URI & "/" & p_device_info_app_context.contextId, + v_headers + ) + ) + ); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + + log("f_delete_application_context: INFO: IUT successfully deletes the Application Context: ", p_device_info_app_context.contextId); + } + [] tc_ac.timeout { + log("f_delete_application_context: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_application_context + +} // End of module DeviceApplicationInterfaceAPI_Functions diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Pics.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Pics.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..3bb6df692b09e0ecfc2d1c55b499bf94cb8d6663 --- /dev/null +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Pics.ttcn @@ -0,0 +1,8 @@ +module DeviceApplicationInterfaceAPI_Pics { + + /** + * @desc Does the IUT support DeviceApplicationInterfaceAPI? + */ + modulepar boolean PICS_DEVICE_APPLICATION_INTERFACE_API_SUPPORTED := true; + +} // End of module DeviceApplicationInterfaceAPI_Pics diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Pixits.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Pixits.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..8fa9b27b90a808494e8923b1c91b294158e07717 --- /dev/null +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Pixits.ttcn @@ -0,0 +1,36 @@ +module DeviceApplicationInterfaceAPI_Pixits { + + // JSON + import from JSON all; + + modulepar charstring PX_DEVICE_APP_LIST_URI := "/dev_app/v1/app_list"; + + modulepar charstring PX_DEVICE_APP_CTX_URI := "/dev_app/v1/app_contexts"; + + modulepar charstring PX_DEVICE_APP_LOC_URI := "/dev_app/v1/obtain_app_loc_availability"; + + modulepar charstring PX_DEVICE_APP_NAME := ""; + + modulepar charstring PX_DEVICE_UNKNOWN_APP_NAME := ""; + + modulepar charstring PX_ASSOCIATE_DEV_APPID := ""; + + modulepar charstring PX_INVALID_ASSOCIATE_DEV_APPID := ""; + + modulepar charstring PX_DEVICE_APP_CALLBACK := ""; + + modulepar charstring PX_DEVICE_NEW_APP_CALLBACK := ""; + + modulepar charstring PX_APPD_ID := ""; + + modulepar charstring PX_APP_NAME := ""; + + modulepar charstring PX_UNKNOWN_APP_NAME := ""; + + modulepar charstring PX_APP_PROVIDER := ""; + + modulepar charstring PX_APPD_VERSION := ""; + + modulepar charstring PX_UNKNOWN_APP_CONTEXT_ID := ""; + +} // End of module DeviceApplicationInterfaceAPI_Pixits diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Templates.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6071d1d20bd2dbd160105bd2e4d3fbdd07109d01 --- /dev/null +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_Templates.ttcn @@ -0,0 +1,143 @@ +module DeviceApplicationInterfaceAPI_Templates { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibMec/DeviceApplicationInterfaceAPI + import from DeviceApplicationInterfaceAPI_TypesAndValues all; + import from DeviceApplicationInterfaceAPI_Pixits all; + + + template (omit) AppContext m_device_app_context( + in template (value) JSON.String p_associateDevAppId, + in template (value) ApplicationContext_AppInfo p_appInfo, + in template (omit) JSON.AnyURI p_callbackReference := omit, + in template (omit) boolean p_appLocationUpdates := omit, + in template (omit) boolean p_appAutoInstantiation := omit + ) := { + contextId := omit, + associateDevAppId := p_associateDevAppId, + callbackReference := p_callbackReference, + appLocationUpdates := p_appLocationUpdates, + appAutoInstantiation := p_appAutoInstantiation, + appInfo := p_appInfo + } // End of template m_device_app_context + + template (present) AppContext mw_device_app_context( + template (present) JSON.String p_contextId := ?, + template (present) JSON.String p_associateDevAppId := ?, + template (present) ApplicationContext_AppInfo p_appInfo := ?, + template JSON.AnyURI p_callbackReference := *, + template boolean p_appLocationUpdates := *, + template boolean p_appAutoInstantiation := * + ) := { + contextId := p_contextId, + associateDevAppId := p_associateDevAppId, + callbackReference := p_callbackReference, + appLocationUpdates := p_appLocationUpdates, + appAutoInstantiation := p_appAutoInstantiation, + appInfo := p_appInfo + } // End of template mw_device_app_context + + template (omit) ApplicationContext_AppInfo m_app_context_info( + in JSON.String p_appDId, + in JSON.String p_appName, + in JSON.String p_appProvider, + in JSON.String p_appDVersion, + in template (omit) JSON.String p_appDescription := omit, + in template (omit) JSON.String p_appSoftVersion := omit, + in template (omit) UserAppInstanceInfoList p_userAppInstanceInfo := omit, + in template (omit) JSON.AnyURI p_appPackageSource := omit + ) := { + appDId := p_appDId, + appName := p_appName, + appProvider := p_appProvider, + appSoftVersion := p_appSoftVersion, + appDVersion := p_appDVersion, + appDescription := p_appDescription, + userAppInstanceInfo := p_userAppInstanceInfo, + appPackageSource := p_appPackageSource + } // End ot template m_app_context_info + + template (present) ApplicationContext_AppInfo mw_app_context_info( + template (present) JSON.String p_appDId := ?, + template (present) JSON.String p_appName := ?, + template (present) JSON.String p_appProvider := ?, + template (present) JSON.String p_appDVersion := ?, + template JSON.String p_appDescription := *, + template JSON.String p_appSoftVersion := *, + template UserAppInstanceInfoList p_userAppInstanceInfo := *, + template JSON.AnyURI p_appPackageSource := * + ) := { + appDId := p_appDId, + appName := p_appName, + appProvider := p_appProvider, + appSoftVersion := p_appSoftVersion, + appDVersion := p_appDVersion, + appDescription := p_appDescription, + userAppInstanceInfo := p_userAppInstanceInfo, + appPackageSource := p_appPackageSource + } // End ot template mw_app_context_info + + template (value) ApplicationLocationAvailability m_application_location_availability( + in JSON.String p_associateDevAppId, + in template (value) ApplicationLocationAvailability_AppInfo p_appInfo + ) := { + associateDevAppId := p_associateDevAppId, + appInfo := p_appInfo + } // End of template m_application_location_availability + + template (present) ApplicationLocationAvailability mw_application_location_availability( + template (present) JSON.String p_associateDevAppId := ?, + template (present) ApplicationLocationAvailability_AppInfo p_appInfo := ? + ) := { + associateDevAppId := p_associateDevAppId, + appInfo := p_appInfo + } // End of template mw_application_location_availability + + template (omit) ApplicationLocationAvailability_AppInfo m_application_location_availability_info( + in JSON.String p_appDId, + in JSON.String p_appName, + in JSON.String p_appProvider, + in JSON.String p_appDVersion, + in template (omit) JSON.String p_appSoftVersion := omit, + in template (omit) JSON.String p_appDescription := omit, + in template (omit) AvailableLocationsList p_availableLocations := omit, + in template (omit) JSON.AnyURI p_appPackageSource := omit +) := { + appDId := p_appDId, + appName := p_appName, + appProvider := p_appProvider, + appSoftVersion := p_appSoftVersion, + appDVersion := p_appDVersion, + appDescription := p_appDescription, + availableLocations := p_availableLocations, + appPackageSource := p_appPackageSource + } // End of template m_application_location_availability_info + + template (present) ApplicationLocationAvailability_AppInfo mw_application_location_availability_info( + template (present) JSON.String p_appDId := ?, + template (present) JSON.String p_appName := ?, + template (present) JSON.String p_appProvider := ?, + template (present) JSON.String p_appDVersion := ?, + template JSON.String p_appSoftVersion := *, + template JSON.String p_appDescription := *, + template AvailableLocationsList p_availableLocations := *, + template JSON.AnyURI p_appPackageSource := * +) := { + appDId := p_appDId, + appName := p_appName, + appProvider := p_appProvider, + appSoftVersion := p_appSoftVersion, + appDVersion := p_appDVersion, + appDescription := p_appDescription, + availableLocations := p_availableLocations, + appPackageSource := p_appPackageSource + } // End of template mw_application_location_availability_info + +} // End of module DeviceApplicationInterfaceAPI_Templates + + diff --git a/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..e37a38a00dde07185b57d970fd854b61dcd655e1 --- /dev/null +++ b/ttcn/LibMec/DeviceApplicationInterfaceAPI/ttcn/DeviceApplicationInterfaceAPI_TypesAndValues.ttcn @@ -0,0 +1,302 @@ +/** + * @author ETSI / TTF T012 + * @version $Url$ + * $Id$ + * @desc Types ANd Values for ETSI GS MEC 016 V2.2.1 (2020-04) + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + */ +module DeviceApplicationInterfaceAPI_TypesAndValues { + + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + /** + * @desc Required service continuity mode for this application. + */ + type enumerated ServiceCount { + SERVICE_CONTINUITY_NOT_REQUIRED (0), + SERVICE_CONTINUITY_REQUIRED (1) + } with { + variant "JSON: as number" + } + + /** + * @desc Characteristics of the application + * @member memory The maximum size in Mbytes of the memory resource expected to be used by the MEC application instance in the MEC system + * @member storageThe maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system + * @member latency The target round trip time in milliseconds supported by the MEC system for the MEC application instance + * @member bandwidth The required connection bandwidth in kbit/s for the use of the MEC application instance + * @member serviceCont Required service continuity mode for this application + * @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList + */ + type record AppCharcs { + UInt32 memory optional, + UInt32 storage optional, + UInt32 latency optional, + UInt32 bandwidth optional, + ServiceCount serviceCont optional + } + + /** + * @desc elements comprising the civic address + * @member caType Describe the content type of caValue. The value of caType shall comply with section 3.4 of IETF RFC 4776 + * @member caValue Content of civic address element corresponding to the caType. The format caValue shall comply with section 3.4 of IETF RFC 4776 + */ + type record CivicAddressElement { + JSON.Integer caType, + JSON.String caValue + } + + type record Geometry { + JSON.String type_, + Coordinates coordinates + } with { + variant (type_) "name as 'type'"; + } + type record of JSON.Number Coordinate; + type record of Coordinate Coordinates; + type record Property { + JSON.String key, + JSON.String value_ + } with { + variant (value_) "name as 'value'"; + } + type record of Property Properties; + type record Polygon { + JSON.String type_, + Geometry geometry, + Properties properties, + JSON.String this_ + } with { + variant (type_) "name as 'type'"; + variant (type_) "name as 'this_'"; + } + + /** + * @desc Identifies the locations of the MEC application + * @member countryCode The two-letter ISO 3166 [7] country code in capital letters. Shall be present in case the "area" attribute is absent + * @member civicAddressElement Zero or more elements comprising the civic address + * @member area Geographic area. Shall be absent if the "civicAddressElement" attribute is present + * @see ETSI GS MEC 016 Clause 6.5.2 Type: LocationConstraints + */ + type record LocationConstraints { + JSON.String countryCode optional, + CivicAddressElement civicAddressElement optional, + Polygon area optional + } + type record of LocationConstraints LocationConstraintsList; + + /** + * @desc Information on available applications + * @member appDId Identifier of this MEC application descriptor + * @member appName Name of the MEC application + * @member appProvider Provider of the MEC application + * @member appSoftVersion Software version of the MEC application + * @member appDVersion Identifies the version of the application descriptor + * @member appDescription Human readable description of the MEC application + * @member appLocation Identifies the locations of the MEC application + * @member appCharcs Characteristics of the application + * @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList + */ + type record ApplicationList_AppInfo { + JSON.String appDId, + JSON.String appName, + JSON.String appProvider, + JSON.String appSoftVersion optional, + JSON.String appDVersion, + JSON.String appDescription optional, + LocationConstraintsList appLocation optional, + AppCharcs appCharcs optional + } + + /** + * @desc Extension for vendor specific information + * @member vendorId Vendor identifier + */ + type record VendorSpecificExt { + JSON.String vendorId + } + + /** + * @desc Information on available applications + * @member appInfo List of user applications available to the device application + * @member vendorSpecificExt Extension for vendor specific information + * @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList + */ + type record AppListItem { + ApplicationList_AppInfo appInfo, + VendorSpecificExt vendorSpecificExt optional + } + type record of AppListItem AppList; + + /** + * @desc Information on available applications + * @member appList List of user applications available to the device application + * @see ETSI GS MEC 016 Clause 6.2.2 Type: ApplicationList + */ + type record ApplicationList { + AppList appList optional + } + + /** + * @desc user application instance information + * @member appInstanceId Identifier of the user application instance + * @member referenceURI Address of the user application instance + * @member appLocation Location of the user application instance + * @see ETSI GS MEC 016 Clause 6.2.3 Type: AppContext + */ + type record UserAppInstanceInfo { + JSON.String appInstanceId optional, + JSON.AnyURI referenceURI optional, + LocationConstraints appLocation optional + } + type record of UserAppInstanceInfo UserAppInstanceInfoList; + + /** + * @desc Information on available applications + * @member appDId Identifier of this MEC application descriptor + * @member appName Name of the MEC application + * @member appProvider Provider of the MEC application + * @member appSoftVersion Software version of the MEC application + * @member appDVersion Identifies the version of the application descriptor + * @member appDescription Human readable description of the MEC application + * @member userAppInstanceInfo List of user application instance information + * @member appPackageSource URI of the application package + * @see ETSI GS MEC 016 Clause 6.2.3 Type: AppContext + */ + type record ApplicationContext_AppInfo { + JSON.String appDId, + JSON.String appName, + JSON.String appProvider, + JSON.String appSoftVersion optional, + JSON.String appDVersion, + JSON.String appDescription optional, + UserAppInstanceInfoList userAppInstanceInfo optional, + JSON.AnyURI appPackageSource optional + } + + /** + * @desc Information on application context created by the MEC system + * @member contextId Uniquely identifies the application context in the MEC system + * @member associateDevAppId Uniquely identifies the device application + * @member callbackReference Assigned by the device application to receive application lifecycle related notifications + * @member appLocationUpdates Used by the device application to request to receive notifications at the callbackReference URI relating to location availability for user application instantiation + * @member appAutoInstantiation Provides indication to the MEC system that instantiation of the requested application is desired should a requested appLocation become available that was not at the time of the request + * @member appInfo + * @see ETSI GS MEC 016 Clause 6.2.3 Type: AppContext + */ + type record AppContext { + JSON.String contextId optional, + JSON.String associateDevAppId, + JSON.AnyURI callbackReference optional, + boolean appLocationUpdates optional, + boolean appAutoInstantiation optional, + ApplicationContext_AppInfo appInfo + } + + /** + * @desc + * @member appLocation Shall only be included in the response, where it indicates a location constraint available in the MEC system + + * @see ETSI GS MEC 016 Clause 6.2.4 Type: ApplicationLocationAvailability + */ + type record AvailableLocations { + LocationConstraints appLocation optional + } + type record of AvailableLocations AvailableLocationsList; + /** + * @desc + * @member appDId Identifier of this MEC application descriptor + * @member appName Name of the MEC application + * @member appProvider Provider of the MEC application + * @member appSoftVersion Software version of the MEC application + * @member appDVersion Identifies the version of the application descriptor + * @member appDescription Human readable description of the MEC application + * @member availableLocations MEC application location constraints + * @member appPackageSource URI of the application package. Shall be included in the request + * @see ETSI GS MEC 016 Clause 6.2.4 Type: ApplicationLocationAvailability + */ + type record ApplicationLocationAvailability_AppInfo { + JSON.String appDId, + JSON.String appName, + JSON.String appProvider, + JSON.String appSoftVersion optional, + JSON.String appDVersion, + JSON.String appDescription optional, + AvailableLocationsList availableLocations optional, + JSON.AnyURI appPackageSource optional + } + + /** + * @desc Information on locations available instantiation of new user application instances + * @member associateDevAppId Uniquely identifies the device application + * @member appInfo + * @see ETSI GS MEC 016 Clause 6.2.4 Type: ApplicationLocationAvailability + */ + type record ApplicationLocationAvailability { + JSON.String associateDevAppId, + ApplicationLocationAvailability_AppInfo appInfo + } + + /** + * @desc Notification from the UALCMP regarding a change in address of a user application instance + * @member notificationType Shall be set to "AddressChangeNotification" + * @member contextId Uniquely identifies the application context in the MEC system + * @member appInstanceId Identifier of the user application instance + * @member referenceURI Address of the user application. Used as the reference URI for the application + * @see ETSI GS MEC 016 Clause 6.4.2 Type: AddressChangeNotification + */ + type record AddressChangeNotification { + JSON.String notificationType, + JSON.String contextId, + JSON.String appInstanceId, + JSON.AnyURI referenceURI + } + + /** + * @desc Notification from the UALCMP regarding the deletion of an application context by the MEC system + * @member notificationType Shall be set to "AddressChangeNotification" + * @member contextId Uniquely identifies the application context in the MEC system + * @see ETSI GS MEC 016 Clause 6.4.3 Type: ApplicationContextDeleteNotification + */ + type record ApplicationContextDeleteNotification { + JSON.String notificationType, + JSON.String contextId + } + + /** + * @desc Notification from the UALCMP regarding an update to an application change by the MEC system + * @member notificationType Shall be set to "AddressChangeNotification" + * @member contextId Uniquely identifies the application context in the MEC system + * @member userAppInstanceInfo List of user application instance information + * @see ETSI GS MEC 016 Clause 6.4.4 Type: ApplicationContextDeleteNotification + */ + type record ApplicationContextUpdateNotification { + JSON.String notificationType, + JSON.String contextId, + UserAppInstanceInfoList userAppInstanceInfo + } + + /** + * @desc Notification from the UALCMP regarding the availability of a location that was requested in the Application context create that could not be fulfilled at the time of the request + * @member notificationType Shall be set to "AddressChangeNotification" + * @member contextId Uniquely identifies the application context in the MEC system + * @member availableLocations Locations available to the MEC application + * @see ETSI GS MEC 016 Clause 6.4.5 Type: ApplicationLocationAvailabilityNotification + */ + type record ApplicationLocationAvailabilityNotification { + JSON.String notificationType, + JSON.String contextId, + AvailableLocationsList availableLocations + } + +} with { + encode "JSON" +} // End of module DeviceApplicationInterfaceAPI_TypesAndValues diff --git a/ttcn/LibMec/Grant/module.mk b/ttcn/LibMec/Grant/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..a97e1899ea472c70fd709216a1c6fe59e8cc6fed --- /dev/null +++ b/ttcn/LibMec/Grant/module.mk @@ -0,0 +1,6 @@ +sources := \ + ttcn/Grant_EncdecDeclarations.ttcn \ + ttcn/Grant_Pics.ttcn \ + ttcn/Grant_Pixits.ttcn \ + ttcn/Grant_Templates.ttcn \ + ttcn/Grant_TypesAndValues.ttcn diff --git a/ttcn/LibMec/LocationAPI/json/LocationAPI.json b/ttcn/LibMec/LocationAPI/json/LocationAPI.json index 253a585dbb06f32672deeef22d395e8a30f7e7de..5a483d722b686eddd9c37e1988743e07880145c5 100644 --- a/ttcn/LibMec/LocationAPI/json/LocationAPI.json +++ b/ttcn/LibMec/LocationAPI/json/LocationAPI.json @@ -1,518 +1,400 @@ { - "swagger": "2.0", + "openapi": "3.0.0", "info": { - "title": "Location API", - "version": "1.1.1", - "description": "The ETSI MEC ISG MEC012 Location API described using OpenAPI. The API is based on the Open Mobile Alliance's specification RESTful Network API for Zonal Presence", + "contact": { + "url": "https://forge.etsi.org/rep/mec/gs013-location-api" + }, + "title": "ETSI GS MEC 013 - Location API", + "version": "2.1.1", + "description": "The ETSI MEC ISG MEC013 Location API described using OpenAPI.", "license": { "name": "BSD-3-Clause", "url": "https://forge.etsi.org/legal-matters" } }, "externalDocs": { - "description": "ETSI MEC013 V1.1.1 Location Service API", - "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/01.01.01_60/gs_mec013v010101p.pdf" + "description": "ETSI MEC013 V2.1.1 Location API", + "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/013/02.01.01_60/gs_mec013v020101p.pdf" }, - "host": "127.0.0.1:8081", - "basePath": "/exampleAPI/location/v1", - "schemes": [ - "http", - "https" - ], - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" + "servers": [ + { + "url": "https://localhost/location/v2" + } ], "tags": [ { - "name": "zones" - }, - { - "name": "users" - }, - { - "name": "subscriptions" + "name": "location" } ], - "parameters": { - "Body.UserTrackingSubscription": { - "name": "userTrackingSubscription", - "in": "body", - "description": "User Tracking Subscription", - "required": true, - "schema": { - "$ref": "#/definitions/UserTrackingSubscription" - } - }, - "Body.ZonalTrafficSubscription": { - "name": "zonalTrafficSubscription", - "in": "body", - "description": "Zonal Traffic Subscription", - "required": true, - "schema": { - "$ref": "#/definitions/ZonalTrafficSubscription" - } - }, - "Body.ZoneStatusSubscription": { - "name": "zoneStatusSubscription", - "in": "body", - "description": "Zone Status Subscription", - "required": true, - "schema": { - "$ref": "#/definitions/ZoneStatusSubscription" - } - }, - "Path.AccessPointId": { - "name": "accessPointId", - "in": "path", - "description": "Access Point ID", - "required": true, - "type": "string" - }, - "Path.SubscriptionId": { - "name": "subscriptionId", - "in": "path", - "description": "Subscription ID", - "required": true, - "type": "string" - }, - "Path.UserId": { - "name": "userId", - "in": "path", - "description": "User ID", - "required": true, - "type": "string" - }, - "Path.ZoneId": { - "name": "zoneId", - "in": "path", - "description": "Zone ID", - "required": true, - "type": "string" - }, - "Query.AccessPointId": { - "name": "accessPointId", - "in": "query", - "description": "Identifier of access point, reference \"definitions\" for string format", - "required": false, - "type": "string" - }, - "Query.InterestRealm": { - "name": "interestRealm", - "in": "query", - "description": "Interest realm of access point (e.g. geographical area, a type of industry etc.).", - "required": false, - "type": "string" - }, - "Query.ZoneId": { - "name": "zoneId", - "in": "query", - "description": "Zone ID", - "required": true, - "type": "string" - } - }, "paths": { - "/zones": { + "/queries/distance": { "get": { "tags": [ - "zones" + "location" ], - "operationId": "zonesGet", - "description": "Used to get a list of identifiers for zones authorized for use by the application.", - "produces": [ - "application/json" + "summary": "UE Distance Lookup of a specific UE", + "description": "UE Distance Lookup between terminals or a terminal and a location", + "operationId": "distanceGET", + "parameters": [ + { + "$ref": "#/components/parameters/Query.Requester" + }, + { + "$ref": "#/components/parameters/Query.AddressMandatory" + }, + { + "$ref": "#/components/parameters/Query.Latitude" + }, + { + "$ref": "#/components/parameters/Query.Longitude" + } ], "responses": { "200": { - "description": "Successful response to a query regarding the status of a zone", - "schema": { - "properties": { - "zoneList": { - "$ref": "#/definitions/ZoneList" - } - } - }, - "examples": { + "description": "Successful response to a distance request", + "content": { "application/json": { - "zoneList": { - "zone": [ - { - "zoneId": "zone01", - "numberOfAccessPoints": "3", - "numberOfUnserviceableAccessPoints": "1", - "numberOfUsers": "10", - "resourceURL": "http://example.com/exampleAPI/location/v1/zones/zone01" - }, - { - "zoneId": "zone02", - "numberOfAccessPoints": "12", - "numberOfUnserviceableAccessPoints": "0", - "numberOfUsers": "36", - "resourceURL": "http://example.com/exampleAPI/location/v1/zones/zone02" + "schema": { + "type": "object", + "properties": { + "terminalDistance": { + "$ref": "#/components/schemas/TerminalDistance" } - ], - "resourceURL": "http://example.com/exampleAPI/location/v1/zones" + } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "queries" } }, - "/zones/{zoneId}": { - "parameters": [ - { - "$ref": "#/parameters/Path.ZoneId" - } - ], + "/queries/users": { "get": { "tags": [ - "zones" + "location" ], - "operationId": "zonesGetById", - "description": "Used to get the status of a zone.", - "produces": [ - "application/json" + "summary": "UE Location Lookup of a specific UE or group of UEs", + "description": "UE Location Lookup of a specific UE or group of UEs", + "operationId": "usersGET", + "parameters": [ + { + "$ref": "#/components/parameters/Query.ZoneId" + }, + { + "$ref": "#/components/parameters/Query.AccessPointId" + }, + { + "$ref": "#/components/parameters/Query.Address" + } ], "responses": { "200": { - "description": "Successful response to a query regarding the status of a zone", - "schema": { - "properties": { - "zoneInfo": { - "$ref": "#/definitions/ZoneInfo" - } - } - }, - "examples": { + "description": "Successful response to users request", + "content": { "application/json": { - "zoneInfo": { - "zoneId": "zone01", - "numberOfAccessPoints": "3", - "numberOfUnserviceableAccessPoints": "1", - "numberOfUsers": "10", - "resourceURL": "http://example.com/exampleAPI/location/v1/zones/zone01" + "schema": { + "type": "object", + "properties": { + "userList": { + "$ref": "#/components/schemas/UserList" + } + } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "queries" } }, - "/zones/{zoneId}/accessPoints": { - "parameters": [ - { - "$ref": "#/parameters/Path.ZoneId" - } - ], + "/queries/zones": { "get": { "tags": [ - "zones" - ], - "operationId": "zonesByIdGetAps", - "description": "Access point status can be retrieved for sets of access points matching attribute in the request.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Query.InterestRealm" - } + "location" ], + "summary": "Zones information Lookup", + "description": "Used to get a list of identifiers for zones authorized for use by the application.", + "operationId": "zonesGET", "responses": { "200": { - "description": "Successful response to a query a named set of access point status request", - "schema": { - "properties": { - "accessPointList": { - "$ref": "#/definitions/AccessPointList" - } - } - }, - "examples": { + "description": "Successful response to zones request", + "content": { "application/json": { - "accessPointList": { - "zoneId": "zone01", - "accessPoint": [ - { - "accessPointId": "001010000000000000000000000000001", - "locationInfo": { - "latitude": "90.123", - "longitude": "80.123", - "altitude": "10.0", - "accuracy": "0" - }, - "connectionType": "Macro", - "operationStatus": "Serviceable", - "numberOfUsers": "5", - "interestRealm": "LA", - "resourceURL": "http://example.com/exampleAPI/location/v1/zones/zone01/accessPoints/ap001" - }, - { - "accessPointId": "001010000000000000000000000000010", - "locationInfo": { - "latitude": "91.123", - "longitude": "81.123", - "altitude": "12.0", - "accuracy": "1" - }, - "connectionType": "Macro", - "operationStatus": "Unserviceable", - "numberOfUsers": "0", - "interestRealm": "DC", - "resourceURL": "http://example.com/exampleAPI/location/v1/zones/zone01/accessPoints/ap002" - }, - { - "accessPointId": "001010000000000000000000000000011", - "locationInfo": { - "latitude": "93.123", - "longitude": "83.123", - "altitude": "16.0", - "accuracy": "3" - }, - "connectionType": "Macro", - "operationStatus": "Serviceable", - "numberOfUsers": "5", - "interestRealm": "NJ", - "resourceURL": "http://example.com/exampleAPI/location/v1/zones/zone01/accessPoints/ap003" + "schema": { + "type": "object", + "properties": { + "zoneList": { + "$ref": "#/components/schemas/ZoneList" } - ], - "resourceURL": "http://example.com/exampleAPI/location/v1/zones/zone01/accessPoints" + } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "queries" } }, - "/zones/{zoneId}/accessPoints/{accessPointId}": { - "parameters": [ - { - "$ref": "#/parameters/Path.ZoneId" - }, - { - "$ref": "#/parameters/Path.AccessPointId" - } - ], + "/queries/zones/{zoneId}": { "get": { "tags": [ - "zones" + "location" ], - "operationId": "zonesByIdGetApsById", - "description": "Access point status can be retrieved for sets of access points matching attribute in the request.", - "produces": [ - "application/json" + "summary": "Zones information Lookup", + "description": "Used to get the information for an authorized zone for use by the application.", + "operationId": "zonesGetById", + "parameters": [ + { + "$ref": "#/components/parameters/Path.ZoneId" + } ], "responses": { "200": { - "description": "Successful response to a query a named set of access point status request", - "schema": { - "properties": { - "accessPointInfo": { - "$ref": "#/definitions/AccessPointInfo" - } - } - }, - "examples": { + "description": "Successful response to an access point Id request", + "content": { "application/json": { - "accessPointInfo": { - "accessPointId": "001010000000000000000000000000001", - "locationInfo": { - "latitude": "90.123", - "longitude": "80.123", - "altitude": "10.0", - "accuracy": "0" - }, - "connectionType": "Macro", - "operationStatus": "Serviceable", - "numberOfUsers": "5", - "interestRealm": "LA", - "resourceURL": "http://example.com/exampleAPI/location/v1/zones/zone001/accessPoints/ap001" + "schema": { + "type": "object", + "properties": { + "zoneInfo": { + "$ref": "#/components/schemas/ZoneInfo" + } + } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "queries" } }, - "/users": { + "/queries/zones/{zoneId}/accessPoints": { "get": { "tags": [ - "users" - ], - "operationId": "usersGet", - "description": "Users currently using a zone may be retrieved for sets of access points matching attribute in the request", - "produces": [ - "application/json" + "location" ], + "summary": "Radio Node Location Lookup", + "description": "Radio Node Location Lookup to retrieve a list of radio nodes associated to a zone.", + "operationId": "apGET", "parameters": [ { - "$ref": "#/parameters/Query.ZoneId" + "$ref": "#/components/parameters/Path.ZoneId" }, { - "$ref": "#/parameters/Query.AccessPointId" + "$ref": "#/components/parameters/Query.InterestRealm" } ], "responses": { "200": { - "description": "Successful response to a query users within a zone request", - "schema": { - "properties": { - "userList": { - "$ref": "#/definitions/UserList" - } - } - }, - "examples": { + "description": "Successful response to an access point Id request", + "content": { "application/json": { - "userList": { - "user": [ - { - "address": "acr:192.0.2.1", - "accessPointId": "001010000000000000000000000000001", - "zoneId": "zone01", - "resourceURL": "http://example.com/exampleAPI/location/v1/users/acr%3A192.0.2.1" - }, - { - "address": "acr:192.0.2.2", - "accessPointId": "001010000000000000000000000000001", - "zoneId": "zone01", - "resourceURL": "http://example.com/exampleAPI/location/v1/users/acr%3A192.0.2.2" - }, - { - "address": "acr:192.0.2.3", - "accessPointId": "001010000000000000000000000000010", - "zoneId": "zone01", - "resourceURL": "http://example.com/exampleAPI/location/v1/users/acr%3A192.0.2.3" - }, - { - "address": "acr:192.0.2.4", - "accessPointId": "001010000000000000000000000000001", - "zoneId": "zone02", - "resourceURL": "http://example.com/exampleAPI/location/v1/users/acr%3A192.0.2.4" - }, - { - "address": "acr:192.0.2.5", - "accessPointId": "001010000000000000000000000000010", - "zoneId": "zone02", - "resourceURL": "http://example.com/exampleAPI/location/v1/users/acr%3A192.0.2.5" + "schema": { + "type": "object", + "properties": { + "accessPointList": { + "$ref": "#/components/schemas/AccessPointList" } - ], - "resourceURL": "http://example.com/exampleAPI/location/v1/users" + } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "queries" } }, - "/users/{userId}": { - "parameters": [ - { - "$ref": "#/parameters/Path.UserId" - } - ], + "/queries/zones/{zoneId}/accessPoints/{accessPointId}": { "get": { "tags": [ - "users" + "location" ], - "operationId": "usersGetById", - "description": "Users currently using a zone may be retrieved for sets of access points matching attribute in the request", - "produces": [ - "application/json" + "summary": "Radio Node Location Lookup", + "description": "Radio Node Location Lookup to retrieve a radio node associated to a zone.", + "operationId": "apByIdGET", + "parameters": [ + { + "$ref": "#/components/parameters/Path.ZoneId" + }, + { + "$ref": "#/components/parameters/Path.AccessPointId" + } ], "responses": { "200": { - "description": "Successful response to a query users within a zone request", - "schema": { - "properties": { - "userInfo": { - "$ref": "#/definitions/UserInfo" - } - } - }, - "examples": { + "description": "Successful response to an access point Id request", + "content": { "application/json": { - "userInfo": { - "address": "acr:192.0.2.1", - "accessPointId": "001010000000000000000000000000001", - "zoneId": "zone01", - "resourceURL": "http://example.com/exampleAPI/location/v1/users/acr%3A192.0.2.1", - "locationInfo": { - "latitude": "90.123", - "longitude": "80.123", - "altitude": "10.0", - "accuracy": "0" - }, - "contextLocationInfo": "GroundFloor" + "schema": { + "type": "object", + "properties": { + "accessPointInfo": { + "$ref": "#/components/schemas/AccessPointInfo" + } + } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "queries" } }, - "/subscriptions/zonalTraffic": { + "/subscriptions/area/circle": { "get": { "tags": [ - "subscriptions" - ], - "operationId": "zonalTrafficSubGet", - "description": "This operation is used for retrieving all active subscriptions to zonal traffic change notifications.", - "produces": [ - "application/json" + "location" ], + "summary": "Retrieves all active subscriptions to area change notifications", + "description": "This operation is used for retrieving all active subscriptions to area change notifications.", + "operationId": "areaCircleSubListGET", "responses": { "200": { - "description": "Response to retrieve zonal traffic subscriptions", - "schema": { - "type": "object", - "properties": { - "notificationSubscriptionList": { + "description": "Response to retrieve area subscriptions", + "content": { + "application/json": { + "schema": { "type": "object", + "required": [ + "notificationSubscriptionList" + ], "properties": { - "zonalTrafficSubscription": { - "type": "array", - "items": { - "$ref": "#/definitions/ZonalTrafficSubscription" - } - }, - "resourceURL": { - "$ref": "#/definitions/ResourceURL" + "notificationSubscriptionList": { + "$ref": "#/components/schemas/NotificationSubscriptionList" } - } - } - } - }, - "examples": { - "application/json": { - "notificationSubscriptionList": { - "zonalTrafficSubscription": [ - { - "clientCorrelator": "0123", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/zonalTraffic/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "zoneId": "zone01", - "interestRealm": "LA", - "userEventCriteria": "Transferring" - }, - { - "clientCorrelator": "0124", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/zonalTraffic/subscription124", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123457" - }, - "zoneId": "zone02", - "interestRealm": "LA", - "userEventCriteria": "Transferring" + }, + "example": { + "notificationSubscriptionList": { + "circleNotificationSubscription": [ + { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:10.0.0.1", + "checkImmediate": true, + "enteringLeavingCriteria": "Entering", + "frequency": 10, + "latitude": -80.88, + "longitude": 41.277, + "radius": 500, + "trackingAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/area/circle/subscription123" + } + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/area/circle" } - ], - "resourceURL": "http://example.com/exampleAPI/location/v1/zonalTraffic" + } } } } @@ -521,201 +403,414 @@ }, "post": { "tags": [ - "subscriptions" + "location" ], - "operationId": "zonalTrafficSubPost", - "description": "This operation is used for creating a new subscription to zonal traffic change notification.", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Body.ZonalTrafficSubscription" + "summary": "Creates a subscription for area change notification", + "description": "Creates a subscription to the Location Service for an area change notification.", + "operationId": "areaCircleSubPOST", + "requestBody": { + "description": "Subscription to be created", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "circleNotificationSubscription": { + "$ref": "#/components/schemas/CircleNotificationSubscription" + } + }, + "example": { + "circleNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:10.0.0.1", + "checkImmediate": true, + "enteringLeavingCriteria": "Entering", + "frequency": 10, + "latitude": -80.88, + "longitude": 41.277, + "radius": 500, + "trackingAccuracy": 10 + } + } + } + } } - ], + }, "responses": { "201": { - "description": "Response to create new zonal traffic subscription", - "schema": { - "properties": { - "zonalTrafficSubscription": { - "$ref": "#/definitions/ZonalTrafficSubscription" - } - } - }, - "examples": { + "description": "Successful subscription", + "content": { "application/json": { - "zonalTrafficSubscription": { - "clientCorrelator": "0123", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/zonalTraffic/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" + "schema": { + "type": "object", + "properties": { + "circleNotificationSubscription": { + "$ref": "#/components/schemas/CircleNotificationSubscription" + } }, - "zoneId": "zone01", - "interestRealm": "LA", - "userEventCriteria": "Transferring" + "example": { + "circleNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:10.0.0.1", + "checkImmediate": true, + "enteringLeavingCriteria": "Entering", + "frequency": 10, + "latitude": -80.88, + "longitude": 41.277, + "radius": 500, + "trackingAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/area/circle/subscription123" + } + } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "callbacks": { + "notification": { + "{$request.body#/circleNotificationSubscription.callbackReference.notifyURL}": { + "post": { + "summary": "Callback POST used to send a notification", + "description": "Notification from Location service, content based on subscription type", + "operationId": "circleNotificationPOST", + "requestBody": { + "description": "Subscription notification", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "subscriptionNotification": { + "$ref": "#/components/schemas/SubscriptionNotification" + } + }, + "example": { + "subscriptionNotification": { + "enteringLeavingCriteria": "Entering", + "isFinalNotification": "false,", + "link": { + "rel": "CircleNotificationSubscription", + "href": "http://meAppServer.example.com/location/v2/subscriptions/area/circle/sub123" + }, + "terminalLocation": { + "address": "acr:10.0.0.1", + "currentLocation": { + "accuracy": 100, + "altitude": 1001, + "latitude": -80.86302, + "longitude": 41.277306, + "timestamp": { + "seconds": 1483231138, + "nanoSeconds\"": 0 + } + }, + "locationRetrievalStatus": "Retrieved" + } + } + } + } + } + } + }, + "responses": { + "204": { + "$ref": "#/components/responses/204" + } + } + } + } + } + }, + "x-swagger-router-controller": "subscriptions" } }, - "/subscriptions/zonalTraffic/{subscriptionId}": { - "parameters": [ - { - "$ref": "#/parameters/Path.SubscriptionId" - } - ], + "/subscriptions/area/circle/{subscriptionId}": { "get": { "tags": [ - "subscriptions" + "location" ], - "operationId": "zonalTrafficSubGetById", - "description": "This operation is used for updating an individual subscription to zonal traffic change notification.", - "produces": [ - "application/json" + "summary": "Retrieve subscription information", + "description": "Get subscription information.", + "operationId": "areaCircleSubGET", + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } ], "responses": { "200": { - "description": "Response to retrieve individual zonal traffic subscription", - "schema": { - "properties": { - "zonalTrafficSubscription": { - "$ref": "#/definitions/ZonalTrafficSubscription" - } - } - }, - "examples": { + "description": "Subscription information regarding subscription notifications", + "content": { "application/json": { - "zonalTrafficSubscription": { - "clientCorrelator": "0123", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/zonalTraffic/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" + "schema": { + "type": "object", + "required": [ + "circleNotificationSubscription" + ], + "properties": { + "circleNotificationSubscription": { + "$ref": "#/components/schemas/CircleNotificationSubscription" + } }, - "zoneId": "zone01", - "interestRealm": "LA", - "userEventCriteria": "Transferring" - } - } + "example": { + "circleNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:10.0.0.1", + "checkImmediate": true, + "enteringLeavingCriteria": "Entering", + "frequency": 10, + "latitude": -80.88, + "longitude": 41.277, + "radius": 500, + "trackingAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/area/circle/subscription123" + } + } + } + } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "subscriptions" }, "put": { "tags": [ - "subscriptions" - ], - "operationId": "zonalTrafficSubPutById", - "description": "This operation is used for updating an individual subscription to zonal traffic change notification.", - "produces": [ - "application/json" + "location" ], + "summary": "Updates a subscription information", + "description": "Updates a subscription.", + "operationId": "areaCircleSubPUT", + "requestBody": { + "description": "Subscription to be modified", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "circleNotificationSubscription": { + "$ref": "#/components/schemas/CircleNotificationSubscription" + } + }, + "example": { + "circleNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:10.0.0.1", + "checkImmediate": true, + "enteringLeavingCriteria": "Entering", + "frequency": 10, + "latitude": -80.88, + "longitude": 41.277, + "radius": 500, + "trackingAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/area/circle/subscription123" + } + } + } + } + } + }, "parameters": [ { - "$ref": "#/parameters/Body.ZonalTrafficSubscription" + "$ref": "#/components/parameters/Path.SubscrId" } ], "responses": { "200": { - "description": "Response to update individual zonal traffic subscription", - "schema": { - "properties": { - "zonalTrafficSubscription": { - "$ref": "#/definitions/ZonalTrafficSubscription" - } - } - }, - "examples": { + "description": "Successful subscription to response to subscription notifications", + "content": { "application/json": { - "zonalTrafficSubscription": { - "clientCorrelator": "0123", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/zonalTraffic/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" + "schema": { + "type": "object", + "properties": { + "circleNotificationSubscription": { + "$ref": "#/components/schemas/CircleNotificationSubscription" + } }, - "zoneId": "zone01", - "interestRealm": "LA", - "userEventCriteria": "Transferring" + "example": { + "circleNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:10.0.0.1", + "checkImmediate": true, + "enteringLeavingCriteria": "Entering", + "frequency": 10, + "latitude": -80.88, + "longitude": 41.277, + "radius": 500, + "trackingAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/area/circle/subscription123" + } + } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "412": { + "$ref": "#/components/responses/412" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "subscriptions" }, "delete": { "tags": [ - "subscriptions" + "location" ], - "operationId": "zonalTrafficSubDelById", - "description": "This operation is used for cancelling a subscription and stopping corresponding notifications.", - "produces": [ - "application/json" + "summary": "Cancel a subscription", + "description": "Method to delete a subscription.", + "operationId": "areaCircleSubDELETE", + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } ], "responses": { "204": { - "description": "No content" + "$ref": "#/components/responses/204" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "subscriptions" } }, - "/subscriptions/userTracking": { + "/subscriptions/distance": { "get": { "tags": [ - "subscriptions" - ], - "operationId": "userTrackingSubGet", - "description": "This operation is used for retrieving all active subscriptions to user tracking change notifications.", - "produces": [ - "application/json" + "location" ], + "summary": "Retrieves all active subscriptions to distance change notifications", + "description": "This operation is used for retrieving all active subscriptions to a distance change notifications.", + "operationId": "distanceSubListGET", "responses": { "200": { - "description": "Response to retrieve user tracking subscriptions", - "schema": { - "type": "object", - "properties": { - "notificationSubscriptionList": { + "description": "Response to retrieve area subscriptions", + "content": { + "application/json": { + "schema": { "type": "object", + "required": [ + "notificationSubscriptionList" + ], "properties": { - "userTrackingSubscription": { - "type": "array", - "items": { - "$ref": "#/definitions/UserTrackingSubscription" - } - }, - "resourceURL": { - "$ref": "#/definitions/ResourceURL" + "notificationSubscriptionList": { + "$ref": "#/components/schemas/NotificationSubscriptionList" } - } - } - } - }, - "examples": { - "application/json": { - "notificationSubscriptionList": { - "userTrackingSubscription": [ - { - "clientCorrelator": "0123", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/userTracking/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:192.0.2.1", - "userEventCriteria": "Transferring" - }, - { - "clientCorrelator": "0124", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/userTracking/subscription124", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:192.0.2.2", - "userEventCriteria": "Transferring" + }, + "example": { + "notificationSubscriptionList": { + "distanceNotificationSubscription": [ + { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "monitoredAddress": [ + "acr:10.0.0.1", + "acr:10.0.0.2" + ], + "checkImmediate": true, + "criteria": "AllWithinDistance", + "distance": 100, + "frequency": 10, + "referenceAddress": "acr:10.0.0.3", + "trackingAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/distance/sub123" + } + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/distance" } - ], - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/userTracking" + } } } } @@ -724,200 +819,433 @@ }, "post": { "tags": [ - "subscriptions" + "location" ], - "operationId": "userTrackingSubPost", - "description": "This operation is used for creating a new subscription to user tracking change notification", - "produces": [ - "application/json" - ], - "parameters": [ - { - "$ref": "#/parameters/Body.UserTrackingSubscription" + "summary": "Creates a subscription for distance change notification", + "description": "Creates a subscription to the Location Service for a distance change notification.", + "operationId": "distanceSubPOST", + "requestBody": { + "description": "Subscription to be created", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "distanceNotificationSubscription": { + "$ref": "#/components/schemas/DistanceNotificationSubscription" + } + }, + "example": { + "distanceNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "monitoredAddress": [ + "acr:10.0.0.1", + "acr:10.0.0.2" + ], + "checkImmediate": true, + "criteria": "AllWithinDistance", + "distance": 100, + "frequency": 10, + "referenceAddress": "acr:10.0.0.3", + "trackingAccuracy": 10 + } + } + } + } } - ], + }, "responses": { "201": { - "description": "Response to create new user tracking subscription", - "schema": { - "properties": { - "userTrackingSubscription": { - "$ref": "#/definitions/UserTrackingSubscription" - } - } - }, - "examples": { + "description": "Successful subscription", + "content": { "application/json": { - "userTrackingSubscription": { - "clientCorrelator": "0123", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/userTracking/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" + "schema": { + "type": "object", + "properties": { + "distanceNotificationSubscription": { + "$ref": "#/components/schemas/DistanceNotificationSubscription" + } }, - "address": "acr:192.0.2.1", - "userEventCriteria": "Transferring" + "example": { + "distanceNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "monitoredAddress": [ + "acr:10.0.0.1", + "acr:10.0.0.2" + ], + "checkImmediate": true, + "criteria": "AllWithinDistance", + "distance": 100, + "frequency": 10, + "referenceAddress": "acr:10.0.0.3", + "trackingAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/distance/subscription123" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "callbacks": { + "notification": { + "{$request.body#/distanceNotificationSubscription.callbackReference.notifyURL}": { + "post": { + "summary": "Callback POST used to send a notification", + "description": "Notification from Location service, content based on subscription type", + "operationId": "distanceNotificationPOST", + "requestBody": { + "description": "Subscription notification", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "subscriptionNotification": { + "$ref": "#/components/schemas/SubscriptionNotification" + } + }, + "example": { + "subscriptionNotification": { + "distanceCriteria": "AllWithinDistance", + "isFinalNotification": "false,", + "link": { + "rel": "DistanceNotificationSubscription", + "href": "http://meAppServer.example.com/location/v2/subscriptions/distance/sub123" + }, + "terminalLocation": [ + { + "address": "acr:10.0.0.1", + "currentLocation": { + "accuracy": 100, + "altitude": 1001, + "latitude": -80.86302, + "longitude": 41.277306, + "timestamp": { + "seconds": 1483231138, + "nanoSeconds\"": 0 + } + }, + "locationRetrievalStatus": "Retrieved" + }, + { + "address": "acr:10.0.0.2", + "currentLocation": { + "accuracy": 100, + "altitude": 1001, + "latitude": -80.86301, + "longitude": 41.277306, + "timestamp": { + "seconds": 1483231138, + "nanoSeconds\"": 0 + } + }, + "locationRetrievalStatus": "Retrieved" + } + ] + } + } + } + } + } + }, + "responses": { + "204": { + "$ref": "#/components/responses/204" + } } } } } - } + }, + "x-swagger-router-controller": "subscriptions" } }, - "/subscriptions/userTracking/{subscriptionId}": { - "parameters": [ - { - "$ref": "#/parameters/Path.SubscriptionId" - } - ], + "/subscriptions/distance/{subscriptionId}": { "get": { "tags": [ - "subscriptions" + "location" ], - "operationId": "userTrackingSubGetById", - "description": "This operation is used for retrieving an individual subscription to user tracking change notification.", - "produces": [ - "application/json" + "summary": "Retrieve subscription information", + "description": "Get subscription information.", + "operationId": "distanceSubGET", + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } ], "responses": { "200": { - "description": "Response to retrieve individual user tracking subscription", - "schema": { - "properties": { - "userTrackingSubscription": { - "$ref": "#/definitions/UserTrackingSubscription" - } - } - }, - "examples": { + "description": "Subscription information regarding subscription notifications", + "content": { "application/json": { - "userTrackingSubscription": { - "clientCorrelator": "0123", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/userTracking/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" + "schema": { + "type": "object", + "required": [ + "distanceNotificationSubscription" + ], + "properties": { + "distanceNotificationSubscription": { + "$ref": "#/components/schemas/DistanceNotificationSubscription" + } }, - "address": "acr:192.0.2.1", - "userEventCriteria": "Transferring" + "example": { + "distanceNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "monitoredAddress": [ + "acr:10.0.0.1", + "acr:10.0.0.2" + ], + "checkImmediate": true, + "criteria": "AllWithinDistance", + "distance": 100, + "frequency": 10, + "referenceAddress": "acr:10.0.0.3", + "trackingAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/distance/subscription123" + } + } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "subscriptions" }, "put": { "tags": [ - "subscriptions" - ], - "operationId": "userTrackingSubPutById", - "description": "This operation is used for updating an individual subscription to user tracking change notification.", - "produces": [ - "application/json" + "location" ], + "summary": "Updates a subscription information", + "description": "Updates a subscription.", + "operationId": "distanceSubPUT", + "requestBody": { + "description": "Subscription to be modified", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "distanceNotificationSubscription": { + "$ref": "#/components/schemas/DistanceNotificationSubscription" + } + }, + "example": { + "distanceNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "monitoredAddress": [ + "acr:10.0.0.1", + "acr:10.0.0.2" + ], + "checkImmediate": true, + "criteria": "AllWithinDistance", + "distance": 100, + "frequency": 10, + "referenceAddress": "acr:10.0.0.3", + "trackingAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/distance/subscription123" + } + } + } + } + } + }, "parameters": [ { - "$ref": "#/parameters/Body.UserTrackingSubscription" + "$ref": "#/components/parameters/Path.SubscrId" } ], "responses": { "200": { - "description": "Response to update individual user tracking subscription", - "schema": { - "properties": { - "userTrackingSubscription": { - "$ref": "#/definitions/UserTrackingSubscription" - } - } - }, - "examples": { + "description": "Successful subscription to response to subscription notifications", + "content": { "application/json": { - "userTrackingSubscription": { - "clientCorrelator": "0123", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/userTracking/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" + "schema": { + "type": "object", + "properties": { + "distanceNotificationSubscription": { + "$ref": "#/components/schemas/DistanceNotificationSubscription" + } }, - "address": "acr:192.0.2.1", - "userEventCriteria": "Transferring" + "example": { + "distanceNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "monitoredAddress": [ + "acr:10.0.0.1", + "acr:10.0.0.2" + ], + "checkImmediate": true, + "criteria": "AllWithinDistance", + "distance": 100, + "frequency": 10, + "referenceAddress": "acr:10.0.0.3", + "trackingAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/distance/subscription123" + } + } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "412": { + "$ref": "#/components/responses/412" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "subscriptions" }, "delete": { "tags": [ - "subscriptions" + "location" ], - "operationId": "userTrackingSubDelById", - "description": "This operation is used for retrieving an individual subscription to user tracking change notification.", - "produces": [ - "application/json" + "summary": "Cancel a subscription", + "description": "Method to delete a subscription.", + "operationId": "distanceSubDELETE", + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } ], "responses": { "204": { - "description": "No Content" + "$ref": "#/components/responses/204" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "subscriptions" } }, - "/subscriptions/zonalStatus": { + "/subscriptions/periodic": { "get": { "tags": [ - "subscriptions" - ], - "operationId": "zoneStatusGet", - "description": "This operation is used for creating a new subscription to zone status change notification.", - "produces": [ - "application/json" + "location" ], + "summary": "Retrieves all active subscriptions to periodic notifications", + "description": "This operation is used for retrieving all active subscriptions to periodic notifications.", + "operationId": "periodicSubListGET", "responses": { "200": { - "description": "Response to retrieve zone status subscriptions", - "schema": { - "type": "object", - "properties": { - "notificationSubscriptionList": { + "description": "Response to retrieve area subscriptions", + "content": { + "application/json": { + "schema": { "type": "object", + "required": [ + "notificationSubscriptionList" + ], "properties": { - "zonalTrafficSubscription": { - "type": "array", - "items": { - "$ref": "#/definitions/ZoneStatusSubscription" - } - }, - "resourceURL": { - "$ref": "#/definitions/ResourceURL" + "notificationSubscriptionList": { + "$ref": "#/components/schemas/NotificationSubscriptionList" } - } - } - } - }, - "examples": { - "application/json": { - "notificationSubscriptionList": { - "zoneStatusSubscription": [ - { - "clientCorrelator": "0123", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/zoneStatus/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "zoneId": "zone01", - "numberOfUsersZoneThreshold": "500", - "operationStatus": "Serviceable" - }, - { - "clientCorrelator": "0124", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/zoneStatus/subscription124", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123457" - }, - "zoneId": "zone02", - "numberOfUsersAPThreshold": "50", - "operationStatus": "Serviceable" + }, + "example": { + "notificationSubscriptionList": { + "periodicNotificationSubscription": [ + { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:10.0.0.1", + "frequency": 10, + "requestedAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/periodic/subscription123" + } + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/periodic" } - ], - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/zoneStatus" + } } } } @@ -926,715 +1254,3090 @@ }, "post": { "tags": [ - "subscriptions" - ], - "operationId": "zoneStatusPost", - "description": "This operation is used for creating a new subscription to zone status change notification.", - "produces": [ - "application/json" + "location" ], - "parameters": [ - { - "$ref": "#/parameters/Body.ZoneStatusSubscription" + "summary": "Creates a subscription for periodic notification", + "description": "Creates a subscription to the Location Service for a periodic notification.", + "operationId": "periodicSubPOST", + "requestBody": { + "description": "Subscription to be created", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "periodicNotificationSubscription": { + "$ref": "#/components/schemas/PeriodicNotificationSubscription" + } + }, + "example": { + "periodicNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:10.0.0.1", + "frequency": 10, + "requestedAccuracy": 10 + } + } + } + } } - ], + }, "responses": { "201": { - "description": "Response to create new zone status subscription", - "schema": { - "properties": { - "zonalTrafficSubscription": { - "$ref": "#/definitions/ZoneStatusSubscription" - } - } - }, - "examples": { + "description": "Successful subscription", + "content": { "application/json": { - "zoneStatusSubscription": { - "clientCorrelator": "0123", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/zoneStatus/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" + "schema": { + "type": "object", + "properties": { + "periodicNotificationSubscription": { + "$ref": "#/components/schemas/PeriodicNotificationSubscription" + } }, - "zoneId": "zone01", - "numberOfUsersZoneThreshold": "500", - "operationStatus": "Serviceable" + "example": { + "periodicNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:10.0.0.1", + "frequency": 10, + "requestedAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/periodic/subscription123" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "callbacks": { + "notification": { + "{$request.body#/periodicNotificationSubscription.callbackReference.notifyURL}": { + "post": { + "summary": "Callback POST used to send a notification", + "description": "Notification from Location service, content based on subscription type", + "operationId": "periodicNotificationPOST", + "requestBody": { + "description": "Subscription notification", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "subscriptionNotification": { + "$ref": "#/components/schemas/SubscriptionNotification" + } + }, + "example": { + "subscriptionNotification": { + "isFinalNotification": "false,", + "link": { + "rel": "PeriodicNotificationSubscription", + "href": "http://meAppServer.example.com/location/v2/subscriptions/periodic/sub123" + }, + "terminalLocation": { + "address": "acr:10.0.0.1", + "currentLocation": { + "accuracy": 100, + "altitude": 1001, + "latitude": -80.86302, + "longitude": 41.277306, + "timestamp": { + "seconds": 1483231138, + "nanoSeconds\"": 0 + } + }, + "locationRetrievalStatus": "Retrieved" + } + } + } + } + } + } + }, + "responses": { + "204": { + "$ref": "#/components/responses/204" + } } } } } - } + }, + "x-swagger-router-controller": "subscriptions" } }, - "/subscriptions/zoneStatus/{subscriptionId}": { - "parameters": [ - { - "$ref": "#/parameters/Path.SubscriptionId" - } - ], + "/subscriptions/periodic/{subscriptionId}": { "get": { "tags": [ - "subscriptions" + "location" ], - "operationId": "zoneStatusGetById", - "description": "This operation is used for retrieving an individual subscription to zone status change notification.", - "produces": [ - "application/json" + "summary": "Retrieve subscription information", + "description": "Get subscription information.", + "operationId": "periodicSubGET", + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } ], "responses": { "200": { - "description": "Response to retrieve individual zone status subscription", - "schema": { - "properties": { - "zoneStatusSubscription": { - "$ref": "#/definitions/ZoneStatusSubscription" - } - } - }, - "examples": { + "description": "Subscription information regarding subscription notifications", + "content": { "application/json": { - "zoneStatusSubscription": { - "clientCorrelator": "0123", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/zoneStatus/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" + "schema": { + "type": "object", + "required": [ + "periodicNotificationSubscription" + ], + "properties": { + "periodicNotificationSubscription": { + "$ref": "#/components/schemas/PeriodicNotificationSubscription" + } }, - "zoneId": "zone01", - "numberOfUsersZoneThreshold": "500", - "operationStatus": "Serviceable" + "example": { + "periodicNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:10.0.0.1", + "frequency": 10, + "requestedAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/periodic/subscription123" + } + } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "subscriptions" }, "put": { "tags": [ - "subscriptions" - ], - "operationId": "zoneStatusPutById", - "description": "This operation is used for updating an individual subscription to zone status change notification.", - "produces": [ - "application/json" + "location" ], + "summary": "Updates a subscription information", + "description": "Updates a subscription.", + "operationId": "periodicSubPUT", + "requestBody": { + "description": "Subscription to be modified", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "periodicNotificationSubscription": { + "$ref": "#/components/schemas/PeriodicNotificationSubscription" + } + }, + "example": { + "periodicNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:10.0.0.1", + "frequency": 10, + "requestedAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/periodic/subscription123" + } + } + } + } + } + }, "parameters": [ { - "$ref": "#/parameters/Body.ZoneStatusSubscription" + "$ref": "#/components/parameters/Path.SubscrId" } ], "responses": { "200": { - "description": "Response to update individual zone status subscription", - "schema": { - "properties": { - "zoneStatusSubscription": { - "$ref": "#/definitions/ZoneStatusSubscription" - } - } - }, - "examples": { + "description": "Successful subscription to response to subscription notifications", + "content": { "application/json": { - "zoneStatusSubscription": { - "clientCorrelator": "0123", - "resourceURL": "http://example.com/exampleAPI/location/v1/subscriptions/zoneStatus/subscription123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" + "schema": { + "type": "object", + "properties": { + "periodicNotificationSubscription": { + "$ref": "#/components/schemas/PeriodicNotificationSubscription" + } }, - "zoneId": "zone01", - "numberOfUsersZoneThreshold": "500", - "operationStatus": "Serviceable" + "example": { + "periodicNotificationSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "callbackData": "1234", + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:10.0.0.1", + "frequency": 10, + "requestedAccuracy": 10, + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/periodic/subscription123" + } + } } } } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "412": { + "$ref": "#/components/responses/412" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "subscriptions" }, "delete": { "tags": [ - "subscriptions" + "location" ], - "operationId": "zoneStatusDelById", - "description": "This operation is used for cancelling a subscription and stopping corresponding notifications.", - "produces": [ - "application/json" + "summary": "Cancel a subscription", + "description": "Method to delete a subscription.", + "operationId": "periodicSubDELETE", + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } ], "responses": { "204": { - "description": "No content" - } - } - } - } - }, - "definitions": { - "AccessPointId": { - "description": "Identifier of access point, (reference ETSI TS 129 171). Where the E-CGI is made up of the PLMN and Cell Identity (28 bit string). Then the PLMN is made up of the 3 digit MCC & 2 or 3 digit MNC. The Cell Portion is an optional element", - "type": "string", - "example": "001010000000000000000000000000001" - }, - "AccessPointInfo": { - "description": "A type containing access point information.", - "type": "object", - "required": [ - "accessPointId", - "connectionType", - "operationStatus", - "numberOfUsers", - "resourceURL" - ], - "properties": { - "accessPointId": { - "$ref": "#/definitions/AccessPointId" - }, - "locationInfo": { - "$ref": "#/definitions/LocationInfo" - }, - "connectionType": { - "$ref": "#/definitions/ConnectionType" - }, - "operationStatus": { - "$ref": "#/definitions/OperationStatus" - }, - "numberOfUsers": { - "$ref": "#/definitions/NumberOfUsers" - }, - "timezone": { - "$ref": "#/definitions/Timezone" - }, - "interestRealm": { - "$ref": "#/definitions/InterestRealm" - }, - "resourceURL": { - "$ref": "#/definitions/ResourceURL" - } - } - }, - "AccessPointList": { - "description": "A type containing list of access points.", - "type": "object", - "required": [ - "zoneId", - "resourceURL" - ], - "properties": { - "zoneId": { - "$ref": "#/definitions/ZoneId" - }, - "accessPoint": { - "description": "Collection of the access point information list.", - "type": "array", - "items": { - "$ref": "#/definitions/AccessPointInfo" + "$ref": "#/components/responses/204" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" } }, - "resourceURL": { - "$ref": "#/definitions/ResourceURL" - } - } - }, - "Address": { - "description": "Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI).", - "type": "string", - "format": "uri", - "example": "acr:192.0.2.1" - }, - "AncillaryInfo": { - "description": "Reserved for future use.", - "type": "string" - }, - "CallbackData": { - "description": "CallBackData if passed by the application during the associated ZonalTrafficSubscription and UserTrackingSubscription operation. See [REST_NetAPI_Common].", - "type": "string", - "example": "1234" - }, - "CallbackReference": { - "description": "Notification callback definition.", - "type": "object", - "required": [ - "notifyURL" - ], - "properties": { - "notifyURL": { - "$ref": "#/definitions/NotifyURL" - } - } - }, - "ClientCorrelator": { - "description": "Uniquely identifies this create subscription request. If there is a communication failure during the request, using the same clientCorrelator when retrying the request allows the operator to avoid creating a duplicate subscription.", - "type": "string", - "example": "0123" - }, - "ConnectionType": { - "description": "The connection type for the access point", - "type": "string", - "enum": [ - "Femto", - "LTE-femto", - "Smallcell", - "LTE-smallcell", - "Wifi", - "Pico", - "Micro", - "Macro", - "Wimax", - "Unknown" - ], - "example": "Macro" - }, - "ContextLocationInfo": { - "description": "Contextual information of a user location (e.g., aisle, floor, room number, etc.)", - "type": "string", - "example": "GroundFloor" - }, - "CurrentAccessPointId": { - "description": "Zone ID", - "type": "string", - "example": "zone01" - }, - "Duration": { - "description": "Period (in seconds) of time notifications are provided for. If set to \"0\" (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications. This element MAY be given by the client during resource creation in order to signal the desired lifetime of the subscription. The server MUST return in this element the period of time for which the subscription will still be valid.", - "type": "string", - "example": "0" - }, - "InterestRealm": { - "description": "Interest realm of access point (e.g. geographical area, a type of industry etc.).", - "type": "string", - "example": "LA" - }, - "Link": { - "description": "Link to other resources", - "type": "object", - "required": [ - "rel", - "href" - ], - "properties": { - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "object", - "format": "string" - }, - "href": { - "description": "URI", - "type": "object", - "format": "anyURI" - } - } - }, - "LocationInfo": { - "description": "A type containing location information with latitude, longitude and altitude, in addition the accuracy of the information are provided.", - "type": "object", - "required": [ - "latitude", - "longitude", - "accuracy" - ], - "properties": { - "latitude": { - "type": "number", - "format": "float", - "example": "80.123" - }, - "longitude": { - "type": "number", - "format": "float", - "example": "70.123" - }, - "altitude": { - "type": "number", - "format": "float", - "example": "10.0" - }, - "accuracy": { - "type": "integer", - "format": "int32", - "example": "10" - } - } - }, - "NotifyURL": { - "description": "The URL of your own listener application.", - "type": "string", - "format": "url", - "example": "http://clientApp.example.com/location_notifications/123456" - }, - "NumberOfAccessPoints": { - "description": "The number of access points within the zone", - "type": "integer", - "format": "uint32", - "example": "10" - }, - "NumberOfUnserviceableAccessPoints": { - "description": "Number of inoperable access points within the zone.", - "type": "integer", - "format": "uint32", - "example": "9" - }, - "NumberOfUsers": { - "description": "The number of users currently on the access point.", - "type": "integer", - "format": "uint32", - "example": "7" - }, - "NumberOfUsersAPThreshold": { - "description": "Threshold number of users in an access point which if crossed shall cause a notification.", - "type": "integer", - "format": "uint32", - "example": "20" - }, - "NumberOfUsersInAP": { - "description": "This element shall be present when ZoneStatusSubscription includes numberOfUsersAPThreshold element and the number of users in an access point exceeds the threshold defined in the subscription.", - "type": "integer", - "format": "uint32", - "example": "12" - }, - "NumberOfUsersInZone": { - "description": "This element shall be present when ZoneStatusSubscription includes numberOfUsersZoneThreshold element and the number of users in a zone exceeds the threshold defined in this subscription.", - "type": "integer", - "format": "uint32", - "example": "20" - }, - "NumberOfUsersZoneThreshold": { - "description": "Threshold number of users in a zone which if crossed shall cause a notification.", - "type": "integer", - "format": "uint32", - "example": "40" - }, - "OperationStatus": { - "description": "The operation status of the access point", - "type": "string", - "enum": [ - "Serviceable", - "Unserviceable", - "Unknown" - ], - "example": "Serviceable" - }, - "PreviousAccessPointId": { - "description": "Zone ID", - "type": "string", - "example": "zone02" - }, - "ResourceURL": { - "description": "Self referring URL.", - "type": "string", - "format": "uri", - "example": "http://example.com/exampleAPI/location/v1/subscriptions/userTracking/subscription123" - }, - "Timestamp": { - "description": "Indicates the time of day for zonal presence notification.", - "type": "string", - "format": "date-time", - "example": "2017-01-01T02:51:43Z" - }, - "Timezone": { - "description": "Time zone of access point", - "type": "string", - "format": "date-time", - "example": "2017-01-01T02:51:43Z" - }, - "UserEventCriteria": { - "description": "List of user event values to generate notifications for (these apply to address specified). If this element is missing, a notification is requested to be generated for any change in user event.", - "type": "array", - "items": { - "$ref": "#/definitions/UserEventType" + "x-swagger-router-controller": "subscriptions" } }, - "UserEventType": { - "description": "User event", - "type": "string", - "enum": [ - "Entering", - "Leaving", - "Transferring" - ], - "example": "Entering" - }, - "UserInfo": { - "description": "A type containing user information.", - "type": "object", - "required": [ - "address", - "accessPointId", - "zoneId", - "resourceURL" - ], - "properties": { - "address": { - "$ref": "#/definitions/Address" - }, - "accessPointId": { - "$ref": "#/definitions/AccessPointId" - }, - "zoneId": { - "$ref": "#/definitions/ZoneId" - }, - "resourceURL": { - "$ref": "#/definitions/ResourceURL" - }, - "locationInfo": { - "$ref": "#/definitions/LocationInfo" - }, - "contextLocationInfo": { - "$ref": "#/definitions/ContextLocationInfo" - }, - "ancillaryInfo": { - "$ref": "#/definitions/AncillaryInfo" + "/subscriptions/userTracking": { + "get": { + "tags": [ + "location" + ], + "summary": "Retrieves all active subscriptions to user tracking notifications", + "description": "This operation is used for retrieving all active subscriptions to user tracking notifications.", + "operationId": "userTrackingSubListGET", + "responses": { + "200": { + "description": "Response to retrieve user tracking subscriptions", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "notificationSubscriptionList" + ], + "properties": { + "notificationSubscriptionList": { + "$ref": "#/components/schemas/NotificationSubscriptionList" + } + }, + "example": { + "notificationSubscriptionList": { + "userTrackingSubscription": [ + { + "clientCorrelator": "0123", + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/subscription123", + "callbackReference": { + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:192.0.2.1", + "userEventCriteria": [ + "Transferring" + ] + }, + { + "clientCorrelator": "0124", + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/subscription124", + "callbackReference": { + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "address": "acr:192.0.2.2", + "userEventCriteria": [ + "Transferring" + ] + } + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking" + } + } + } + } + } + } } - } - }, - "UserList": { - "description": "A type containing list of users.", - "type": "object", - "required": [ - "resourceURL" - ], - "properties": { - "user": { - "description": "Collection of the zone information list.", - "type": "array", - "items": { - "$ref": "#/definitions/UserInfo" + }, + "post": { + "tags": [ + "location" + ], + "summary": "Creates a subscription for user tracking notification", + "description": "Creates a subscription to the Location Service for user tracking change notification.", + "operationId": "userTrackingSubPOST", + "requestBody": { + "description": "Subscription to be created", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "userTrackingSubscription": { + "$ref": "#/components/schemas/UserTrackingSubscription" + } + }, + "example": { + "userTrackingSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "address": "acr:10.0.0.1", + "userEventCriteria": [ + "Transferring" + ] + } + } + } + } } }, - "resourceURL": { - "$ref": "#/definitions/ResourceURL" - } - } - }, - "UserTrackingSubscription": { - "description": "A type containing user tracking subscription.", - "type": "object", - "required": [ - "callbackReference", - "address" - ], - "properties": { - "clientCorrelator": { - "$ref": "#/definitions/ClientCorrelator" - }, - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "address": { - "$ref": "#/definitions/Address" - }, - "userEventCriteria": { - "$ref": "#/definitions/UserEventCriteria" - }, - "resourceURL": { - "$ref": "#/definitions/ResourceURL" - } - } - }, - "ZonalPresenceNotification": { - "description": "A type containing zonal presence notification", - "type": "object", - "required": [ - "zoneId", - "address", - "userEventType", - "currentAccessPointId", - "timestamp" - ], - "properties": { - "callbackData": { - "$ref": "#/definitions/CallbackData" - }, - "zoneId": { - "$ref": "#/definitions/ZoneId" - }, - "address": { - "$ref": "#/definitions/Address" - }, - "interestRealm": { - "$ref": "#/definitions/InterestRealm" - }, - "userEventType": { - "$ref": "#/definitions/UserEventType" - }, - "currentAccessPointId": { - "$ref": "#/definitions/CurrentAccessPointId" - }, - "previousAccessPointId": { - "$ref": "#/definitions/PreviousAccessPointId" - }, - "timestamp": { - "$ref": "#/definitions/Timestamp" - }, - "link": { - "description": "Link to other resources that are in relationship with this notification. The server SHOULD include a link to the related subscription. No other links are required or suggested by this specification.", - "type": "array", - "items": { - "$ref": "#/definitions/Link" + "responses": { + "201": { + "description": "Successful subscription", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "userTrackingSubscription": { + "$ref": "#/components/schemas/UserTrackingSubscription" + } + }, + "example": { + "userTrackingSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "address": "acr:10.0.0.1", + "userEventCriteria": [ + "Transferring" + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/sub123" + } + } + } + } + } }, - "example": "rel=\"ZonalTrafficSubscription\" href=\"http://example.com/exampleAPI/location/v1/subscriptions/zonalTraffic/sub123\"/" - } - } - }, - "ZonalTrafficSubscription": { - "description": "A type containing zonal traffic subscription", - "type": "object", - "required": [ - "callbackReference", - "zoneId" - ], - "properties": { - "clientCorrelator": { - "$ref": "#/definitions/ClientCorrelator" - }, - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "zoneId": { - "$ref": "#/definitions/ZoneId" - }, - "interestRealm": { - "description": "Interest realms of access points within a zone (e.g. geographical area, a type of industry etc.).", - "type": "array", - "items": { - "$ref": "#/definitions/InterestRealm" + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" } }, - "userEventCriteria": { - "description": "List of user event values to generate notifications for (these apply to zone identifier or all interest realms within zone identifier specified). If this element is missing, a notification is requested to be generated for any change in user event.", - "type": "array", - "items": { - "$ref": "#/definitions/UserEventType" + "callbacks": { + "notification": { + "{$request.body#/userTrackingSubscription.callbackReference.notifyURL}": { + "post": { + "summary": "Callback POST used to send a notification", + "description": "Notification from Location service, content based on subscription type", + "operationId": "userTrackingNotificationPOST", + "requestBody": { + "description": "Subscription notification", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "zonalPresenceNotification": { + "$ref": "#/components/schemas/ZonalPresenceNotification" + } + }, + "example": { + "zonalPresenceNotification": { + "clientCorrelator": "0123", + "zoneId": "zone01", + "address": "acr:10.0.0.1", + "userEventType": "Transferring", + "currentAccessPointId": "ap2", + "previousAccessPointId": "ap1", + "timestamp": { + "seconds": 1483231138, + "nanoseconds": 0 + }, + "link": { + "rel": "UserTrackingSubscription", + "href": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/sub123" + } + } + } + } + } + } + }, + "responses": { + "204": { + "$ref": "#/components/responses/204" + } + } + } + } } }, - "duration": { - "$ref": "#/definitions/Duration" - }, - "resourceURL": { - "$ref": "#/definitions/ResourceURL" - } - } - }, - "ZoneId": { - "description": "Identifier of zone", - "type": "string", - "example": "zone01" - }, - "ZoneInfo": { - "description": "A type containing zone information.", - "type": "object", - "required": [ - "zoneId", - "numberOfAccessPoints", - "numberOfUnservicableAccessPoints", - "numberOfUsers", - "resourceURL" - ], - "properties": { - "zoneId": { - "$ref": "#/definitions/ZoneId" - }, - "numberOfAccessPoints": { - "$ref": "#/definitions/NumberOfAccessPoints" - }, - "numberOfUnservicableAccessPoints": { - "$ref": "#/definitions/NumberOfUnserviceableAccessPoints" - }, - "numberOfUsers": { - "$ref": "#/definitions/NumberOfUsers" - }, - "resourceURL": { - "$ref": "#/definitions/ResourceURL" - } + "x-swagger-router-controller": "subscriptions" } }, - "ZoneList": { - "description": "Collection of the zone information list.", - "type": "object", - "required": [ - "resourceURL" - ], - "properties": { - "zone": { - "description": "Collection of the zone information list.", - "type": "array", - "items": { - "$ref": "#/definitions/ZoneInfo" + "/subscriptions/userTracking/{subscriptionId}": { + "get": { + "tags": [ + "location" + ], + "summary": "Retrieve subscription information", + "description": "Get subscription information.", + "operationId": "userTrackingSubGET", + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" } - }, - "resourceURL": { - "$ref": "#/definitions/ResourceURL" - } - } - }, - "ZoneStatusNotification": { - "description": "A type containing zone status notification.", - "type": "object", - "required": [ - "zoneId", - "timestamp" - ], - "properties": { - "callbackData": { - "$ref": "#/definitions/CallbackData" - }, - "zoneId": { - "$ref": "#/definitions/ZoneId" - }, - "accessPointId": { - "$ref": "#/definitions/AccessPointId" - }, - "numberOfUsersInZone": { - "$ref": "#/definitions/NumberOfUsersInZone" - }, - "numberOfUsersInAP": { - "$ref": "#/definitions/NumberOfUsersInAP" - }, - "operationStatus": { - "$ref": "#/definitions/OperationStatus" - }, - "timestamp": { - "$ref": "#/definitions/Timestamp" - }, - "link": { - "description": "Link to other resources that are in relationship with this notification. The server SHOULD include a link to the related subscription. No other links are required or suggested by this specification.", - "type": "array", - "items": { - "$ref": "#/definitions/Link" + ], + "responses": { + "200": { + "description": "Subscription information regarding subscription notifications", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "userTrackingSubscription" + ], + "properties": { + "userTrackingSubscription": { + "$ref": "#/components/schemas/UserTrackingSubscription" + } + }, + "example": { + "userTrackingSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "address": "acr:10.0.0.1", + "userEventCriteria": [ + "Transferring" + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/sub123" + } + } + } + } + } }, - "example": "rel=\"ZonalStatusSubscription\" href=\"http://example.com/exampleAPI/location/v1/subscriptions/zonalStatus/sub123\"" - } - } - }, - "ZoneStatusSubscription": { - "description": "A type containing zone status subscription.", - "type": "object", - "required": [ - "callbackReference", - "zoneId" - ], - "properties": { - "clientCorrelator": { - "$ref": "#/definitions/ClientCorrelator" - }, - "resourceURL": { - "$ref": "#/definitions/ResourceURL" - }, - "callbackReference": { - "$ref": "#/definitions/CallbackReference" - }, - "zoneId": { - "$ref": "#/definitions/ZoneId" - }, - "numberOfUsersZoneThreshold": { - "$ref": "#/definitions/NumberOfUsersZoneThreshold" - }, - "numberOfUsersAPThreshold": { - "$ref": "#/definitions/NumberOfUsersAPThreshold" - }, - "operationStatus": { - "description": "List of operation status values to generate notifications for (these apply to all access points within a zone).", - "type": "array", - "items": { - "$ref": "#/definitions/OperationStatus" + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" } - } + }, + "x-swagger-router-controller": "subscriptions" + }, + "put": { + "tags": [ + "location" + ], + "summary": "Updates a subscription information", + "description": "Updates a subscription.", + "operationId": "userTrackingSubPUT", + "requestBody": { + "description": "Subscription to be modified", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "userTrackingSubscription": { + "$ref": "#/components/schemas/UserTrackingSubscription" + } + }, + "example": { + "userTrackingSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "address": "acr:10.0.0.1", + "userEventCriteria": [ + "Transferring" + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/sub123" + } + } + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } + ], + "responses": { + "200": { + "description": "Successful subscription to response to subscription notifications", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "userTrackingSubscription": { + "$ref": "#/components/schemas/UserTrackingSubscription" + } + } + }, + "example": { + "userTrackingSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "address": "acr:10.0.0.1", + "userEventCriteria": [ + "Transferring" + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/userTracking/sub123" + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "412": { + "$ref": "#/components/responses/412" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "x-swagger-router-controller": "subscriptions" + }, + "delete": { + "tags": [ + "location" + ], + "summary": "Cancel a subscription", + "description": "Method to delete a subscription.", + "operationId": "userTrackingSubDELETE", + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } + ], + "responses": { + "204": { + "$ref": "#/components/responses/204" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "x-swagger-router-controller": "subscriptions" + } + }, + "/subscriptions/zonalTraffic": { + "get": { + "tags": [ + "location" + ], + "summary": "Retrieves all active subscriptions to zonal traffic notifications", + "description": "This operation is used for retrieving all active subscriptions to zonal traffic change notifications.", + "operationId": "zonalTrafficSubListGET", + "responses": { + "200": { + "description": "Response to retrieve zonal traffic subscriptions", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "notificationSubscriptionList" + ], + "properties": { + "notificationSubscriptionList": { + "$ref": "#/components/schemas/NotificationSubscriptionList" + } + }, + "example": { + "notificationSubscriptionList": { + "zonalTrafficSubscription": [ + { + "clientCorrelator": "0123", + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/subscription123", + "callbackReference": { + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "zoneId": "zone01", + "userEventCriteria": [ + "Transferring" + ] + }, + { + "clientCorrelator": "0124", + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/subscription124", + "callbackReference": { + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "zoneId": "zone02", + "userEventCriteria": [ + "Transferring" + ] + } + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic" + } + } + } + } + } + } + } + }, + "post": { + "tags": [ + "location" + ], + "summary": "Creates a subscription for zonal traffic notification", + "description": "Creates a subscription to the Location Service for zonal traffic change notification.", + "operationId": "zonalTrafficSubPOST", + "requestBody": { + "description": "Subscription to be created", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "zonalTrafficSubscription": { + "$ref": "#/components/schemas/ZonalTrafficSubscription" + } + }, + "example": { + "zonalTrafficSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "zoneId": "zone01", + "userEventCriteria": [ + "Transferring" + ] + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Successful subscription", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "zonalTrafficSubscription": { + "$ref": "#/components/schemas/ZonalTrafficSubscription" + } + }, + "example": { + "zonalTrafficSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "zoneId": "zone01", + "userEventCriteria": [ + "Transferring" + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/sub123" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "callbacks": { + "notification": { + "{$request.body#/zonalTrafficSubscription.callbackReference.notifyURL}": { + "post": { + "summary": "Callback POST used to send a notification", + "description": "Notification from Location service, content based on subscription type", + "operationId": "zonalTrafficNotificationPOST", + "requestBody": { + "description": "Subscription notification", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "zonalPresenceNotification": { + "$ref": "#/components/schemas/ZonalPresenceNotification" + } + }, + "example": { + "zonalPresenceNotification": { + "clientCorrelator": "0123", + "zoneId": "zone01", + "address": "acr:10.0.0.1", + "userEventType": "Transferring", + "currentAccessPointId": "ap2", + "previousAccessPointId": "ap1", + "timestamp": { + "seconds": 1483231138, + "nanoseconds": 0 + }, + "link": { + "rel": "ZonalTrafficSubscription", + "href": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/sub123" + } + } + } + } + } + } + }, + "responses": { + "204": { + "$ref": "#/components/responses/204" + } + } + } + } + } + }, + "x-swagger-router-controller": "subscriptions" + } + }, + "/subscriptions/zonalTraffic/{subscriptionId}": { + "get": { + "tags": [ + "location" + ], + "summary": "Retrieve subscription information", + "description": "Get subscription information.", + "operationId": "zonalTrafficSubGET", + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } + ], + "responses": { + "200": { + "description": "Subscription information regarding subscription notifications", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "zonalTrafficSubscription" + ], + "properties": { + "zonalTrafficSubscription": { + "$ref": "#/components/schemas/ZonalTrafficSubscription" + } + }, + "example": { + "zonalTrafficSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "zoneId": "zone01", + "userEventCriteria": [ + "Transferring" + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/sub123" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "x-swagger-router-controller": "subscriptions" + }, + "put": { + "tags": [ + "location" + ], + "summary": "Updates a subscription information", + "description": "Updates a subscription.", + "operationId": "zonalTrafficSubPUT", + "requestBody": { + "description": "Subscription to be modified", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "zonalTrafficSubscription": { + "$ref": "#/components/schemas/ZonalTrafficSubscription" + } + }, + "example": { + "zonalTrafficSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "zoneId": "zone01", + "userEventCriteria": [ + "Transferring" + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/sub123" + } + } + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } + ], + "responses": { + "200": { + "description": "Successful subscription to response to subscription notifications", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "zonalTrafficSubscription": { + "$ref": "#/components/schemas/ZonalTrafficSubscription" + } + } + }, + "example": { + "zonalTrafficSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "zoneId": "zone01", + "userEventCriteria": [ + "Transferring" + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zonalTraffic/sub123" + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "412": { + "$ref": "#/components/responses/412" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "x-swagger-router-controller": "subscriptions" + }, + "delete": { + "tags": [ + "location" + ], + "summary": "Cancel a subscription", + "description": "Method to delete a subscription.", + "operationId": "zonalTrafficSubDELETE", + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } + ], + "responses": { + "204": { + "$ref": "#/components/responses/204" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "x-swagger-router-controller": "subscriptions" + } + }, + "/subscriptions/zoneStatus": { + "get": { + "tags": [ + "location" + ], + "summary": "Retrieves all active subscriptions to zone status notifications", + "description": "This operation is used for retrieving all active subscriptions to zone status change notifications.", + "operationId": "zoneStatusSubListGET", + "responses": { + "200": { + "description": "Response to retrieve zone status subscriptions", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "notificationSubscriptionList" + ], + "properties": { + "notificationSubscriptionList": { + "$ref": "#/components/schemas/NotificationSubscriptionList" + } + }, + "example": { + "notificationSubscriptionList": { + "zoneStatusSubscription": [ + { + "clientCorrelator": "0123", + "resourceURL": "http://example.com/exampleAPI/location/v2/subscriptions/zoneStatus/subscription123", + "callbackReference": { + "notifyURL": "http://clientApp.example.com/location_notifications/123456" + }, + "zoneId": "zone01", + "numberOfUsersZoneThreshold": 500, + "operationStatus": [ + "Serviceable" + ] + } + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zoneStatus" + } + } + } + } + } + } + } + }, + "post": { + "tags": [ + "location" + ], + "summary": "Creates a subscription for zone status notification", + "description": "Creates a subscription to the Location Service for zone status change notification.", + "operationId": "zoneStatusSubPOST", + "requestBody": { + "description": "Subscription to be created", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "zoneStatusSubscription": { + "$ref": "#/components/schemas/ZoneStatusSubscription" + } + }, + "example": { + "zoneStatusSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "zoneId": "zone01", + "numberOfUsersZoneThreshold": 500, + "operationStatus": [ + "Serviceable" + ] + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Successful subscription", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "zoneStatusSubscription": { + "$ref": "#/components/schemas/ZoneStatusSubscription" + } + }, + "example": { + "zoneStatusSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "zoneId": "zone01", + "numberOfUsersZoneThreshold": 500, + "operationStatus": [ + "Serviceable" + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zoneStatus/sub123" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "callbacks": { + "notification": { + "{$request.body#/zoneStatusSubscription.callbackReference.notifyURL}": { + "post": { + "summary": "Callback POST used to send a notification", + "description": "Notification from Location service, content based on subscription type", + "operationId": "zoneStatusNotificationPOST", + "requestBody": { + "description": "Subscription notification", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "zoneStatusNotification": { + "$ref": "#/components/schemas/ZoneStatusNotification" + } + }, + "example": { + "zoneStatusNotification": { + "clientCorrelator": "0123", + "zoneId": "zone01", + "accessPointId": "poa1", + "operationStatus": "Serviceable", + "numberOfUsersInZone": "20", + "numberOfUsersInAP": "12", + "timestamp": { + "seconds": 1483231138, + "nanoseconds": 0 + }, + "link": { + "rel": "ZoneStatusSubscription", + "href": "http://meAppServer.example.com/location/v2/subscriptions/zoneStatus/sub123" + } + } + } + } + } + } + }, + "responses": { + "204": { + "$ref": "#/components/responses/204" + } + } + } + } + } + }, + "x-swagger-router-controller": "subscriptions" + } + }, + "/subscriptions/zoneStatus/{subscriptionId}": { + "get": { + "tags": [ + "location" + ], + "summary": "Retrieve subscription information", + "description": "Get subscription information.", + "operationId": "zoneStatusSubGET", + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } + ], + "responses": { + "200": { + "description": "Subscription information regarding subscription notifications", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "zoneStatusSubscription" + ], + "properties": { + "zoneStatusSubscription": { + "$ref": "#/components/schemas/ZoneStatusSubscription" + } + }, + "example": { + "zoneStatusSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "zoneId": "zone01", + "numberOfUsersZoneThreshold": 500, + "operationStatus": [ + "Serviceable" + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zoneStatus/sub123" + } + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "x-swagger-router-controller": "subscriptions" + }, + "put": { + "tags": [ + "location" + ], + "summary": "Updates a subscription information", + "description": "Updates a subscription.", + "operationId": "zoneStatusSubPUT", + "requestBody": { + "description": "Subscription to be modified", + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "zoneStatusSubscription": { + "$ref": "#/components/schemas/ZoneStatusSubscription" + } + }, + "example": { + "zoneStatusSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "zoneId": "zone01", + "numberOfUsersZoneThreshold": 500, + "operationStatus": [ + "Serviceable" + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zoneStatus/sub123" + } + } + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } + ], + "responses": { + "200": { + "description": "Successful subscription to response to subscription notifications", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "zoneStatusSubscription": { + "$ref": "#/components/schemas/ZoneStatusSubscription" + } + } + }, + "example": { + "zoneStatusSubscription": { + "clientCorrelator": "0123", + "callbackReference": { + "notifyURL": "http://my.callback.com/location_notifications/some-id" + }, + "zoneId": "zone01", + "numberOfUsersZoneThreshold": 500, + "operationStatus": [ + "Serviceable" + ], + "resourceURL": "http://meAppServer.example.com/location/v2/subscriptions/zoneStatus/sub123" + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "412": { + "$ref": "#/components/responses/412" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "x-swagger-router-controller": "subscriptions" + }, + "delete": { + "tags": [ + "location" + ], + "summary": "Cancel a subscription", + "description": "Method to delete a subscription.", + "operationId": "zoneStatusSubDELETE", + "parameters": [ + { + "$ref": "#/components/parameters/Path.SubscrId" + } + ], + "responses": { + "204": { + "$ref": "#/components/responses/204" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "x-swagger-router-controller": "subscriptions" + } + } + }, + "components": { + "responses": { + "200": { + "description": "OK" + }, + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request : used to indicate that incorrect parameters were passed to the request.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "401": { + "description": "Unauthorized : used when the client did not submit credentials.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "403": { + "description": "Forbidden : operation is not allowed given the current status of the resource.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "404": { + "description": "Not Found : used when a client provided a URI that cannot be mapped to a valid resource URI.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "406": { + "description": "Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "412": { + "description": "Precondition failed : used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts when using PUT", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "414": { + "description": "URI Too Long : used to indicate that the server is refusing to process the request because the request URI is longer than the server is willing or able to process.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "415": { + "description": "Unsupported Media Type : used to indicate that the server or the client does not support the content type of the entity body.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "422": { + "description": "Unprocessable Entity : used to indicate that the server understands the content type of the request entity and that the syntax of the request entity is correct but that the server is unable to process the contained instructions. This error condition can occur if an JSON request body is syntactically correct but semantically incorrect, for example if the target area for the request is considered too large. This error condition can also occur if the capabilities required by the request are not supported.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + }, + "example": { + "application/problem+json": { + "type": "https://meAppServer.example.com/rni/v2/probs/too-many targets", + "title": "Too many targets", + "status": "422", + "detail": "The target area for the request is considered too large", + "instance": "/meAppClient.example.com/77777/msgs/abc" + } + } + } + } + }, + "429": { + "description": "Too Many Requests : used when a rate limiter has triggered.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + }, + "parameters": { + "Path.AccessPointId": { + "name": "accessPointId", + "in": "path", + "description": "Identifier of access Point", + "required": true, + "schema": { + "type": "string" + }, + "x-exportParamName": "AccessPointId" + }, + "Path.SubscrId": { + "name": "subscriptionId", + "in": "path", + "description": "Subscription Identifier, specifically the \"self\" returned in the subscription request", + "required": true, + "schema": { + "type": "string", + "format": "uri" + }, + "x-exportParamName": "SubscriptionId" + }, + "Path.ZoneId": { + "name": "zoneId", + "in": "path", + "description": "Indentifier of zone", + "required": true, + "schema": { + "type": "string" + }, + "x-exportParamName": "ZoneId" + }, + "Query.AccessPointId": { + "name": "accessPointId", + "in": "query", + "description": "Identifier of access point", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "x-exportParamName": "AccessPointId" + }, + "Query.Address": { + "name": "address", + "in": "query", + "description": "address of users (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "x-exportParamName": "Address" + }, + "Query.AddressMandatory": { + "name": "address", + "in": "query", + "description": "address of users (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "x-exportParamName": "AddressMandatory" + }, + "Query.InterestRealm": { + "name": "interestRealm", + "in": "query", + "description": "Interest realm of access point (e.g. geographical area, a type of industry etc.).", + "required": false, + "schema": { + "type": "string" + }, + "x-exportParamName": "InterestRealm" + }, + "Query.Latitude": { + "name": "latitude", + "in": "query", + "description": "Latitude geo position", + "required": false, + "schema": { + "type": "number", + "format": "float" + }, + "x-exportParamName": "Latitude" + }, + "Query.Longitude": { + "name": "longitude", + "in": "query", + "description": "Longitude geo position", + "required": false, + "schema": { + "type": "number", + "format": "float" + }, + "x-exportParamName": "Longitude" + }, + "Query.Requester": { + "name": "requester", + "in": "query", + "description": "Entity that is requesting the information", + "required": false, + "schema": { + "type": "string" + }, + "x-exportParamName": "Requester" + }, + "Query.ZoneId": { + "name": "zoneId", + "in": "query", + "description": "Identifier of zone", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "x-exportParamName": "ZoneId" + } + }, + "schemas": { + "AccessPointInfo": { + "description": "A type containing access point information.", + "properties": { + "accessPointId": { + "description": "Identifier of access point.", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "string" + }, + "connectionType": { + "$ref": "#/components/schemas/ConnectionType" + }, + "interestRealm": { + "description": "Interest realm of access point.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "locationInfo": { + "$ref": "#/components/schemas/LocationInfo" + }, + "numberOfUsers": { + "description": "Number of users currently on the access point.", + "type": "integer", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "integer" + }, + "operationStatus": { + "$ref": "#/components/schemas/OperationStatus" + }, + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "anyURI" + }, + "timezone": { + "description": "Time zone of access point.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "dateTimeStamp" + } + }, + "required": [ + "accessPointId", + "connectionType", + "operationStatus", + "numberOfUsers", + "resourceURL" + ], + "type": "object" + }, + "AccessPointList": { + "description": "A type containing list of access points.", + "properties": { + "accessPoint": { + "description": "Collection of the access point information list.", + "items": { + "$ref": "#/components/schemas/AccessPointInfo" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "AccessPointInfo" + }, + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "anyURI" + }, + "zoneId": { + "description": "Identifier of zone", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "string" + } + }, + "required": [ + "zoneId", + "resourceURL" + ], + "type": "object" + }, + "CallbackReference": { + "properties": { + "callbackData": { + "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "notificationFormat": { + "$ref": "#/components/schemas/NotificationFormat" + }, + "notifyURL": { + "description": "Notify Callback URL", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "anyURI" + } + }, + "required": [ + "notifyURL" + ], + "type": "object" + }, + "CircleNotificationSubscription": { + "description": "A type containing data for notifications, when the area is defined as a circle.", + "properties": { + "address": { + "description": "Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", + "items": { + "type": "string" + }, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "anyURI" + }, + "callbackReference": { + "$ref": "#/components/schemas/CallbackReference" + }, + "checkImmediate": { + "description": "Check location immediately after establishing notification.", + "type": "boolean", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "boolean" + }, + "clientCorrelator": { + "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "count": { + "description": "Maximum number of notifications per individual address. For no maximum, either do not include this element or specify a value of zero. Default value is 0.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "int" + }, + "duration": { + "description": "Period of time (in seconds) notifications are provided for. If set to “0” (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "int" + }, + "enteringLeavingCriteria": { + "$ref": "#/components/schemas/EnteringLeavingCriteria" + }, + "frequency": { + "description": "Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications).", + "type": "integer", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "int" + }, + "latitude": { + "description": "Latitude of center point.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "float" + }, + "link": { + "description": "Link to other resources that are in relationship with the resource.", + "items": { + "$ref": "#/components/schemas/Link" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Link" + }, + "longitude": { + "description": "Longitude of center point.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "float" + }, + "radius": { + "description": "Radius circle around center point in meters.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "float" + }, + "requester": { + "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "anyURI" + }, + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "anyURI" + }, + "trackingAccuracy": { + "description": "Number of meters of acceptable error in tracking distance.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "float" + } + }, + "required": [ + "callbackReference", + "address", + "latitude", + "longitude", + "radius", + "trackingAccuracy", + "enteringLeavingCriteria", + "checkImmediate", + "frequency" + ], + "type": "object" + }, + "ConnectionType": { + "description": "The connection type for the access point", + "enum": [ + "Femto", + "LTE-femto", + "Smallcell", + "LTE-smallcell", + "Wifi", + "Pico", + "Micro", + "Macro", + "Wimax", + "Unknown" + ], + "type": "string" + }, + "DistanceCriteria": { + "enum": [ + "AllWithinDistance", + "AnyWithinDistance", + "AllBeyondDistance", + "AnyBeyondDistance" + ], + "type": "string" + }, + "DistanceNotificationSubscription": { + "description": "A type containing data for distance subscription, with reference to other devices.", + "properties": { + "callbackReference": { + "$ref": "#/components/schemas/CallbackReference" + }, + "checkImmediate": { + "description": "Check location immediately after establishing notification.", + "type": "boolean", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "boolean" + }, + "clientCorrelator": { + "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "count": { + "description": "Maximum number of notifications per individual address. For no maximum, either do not include this element or specify a value of zero. Default value is 0.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "int" + }, + "criteria": { + "$ref": "#/components/schemas/DistanceCriteria" + }, + "distance": { + "description": "Distance between devices that shall be monitored.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "float" + }, + "duration": { + "description": "Period of time (in seconds) notifications are provided for. If set to “0” (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "int" + }, + "frequency": { + "description": "Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications).", + "type": "integer", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "int" + }, + "link": { + "description": "Link to other resources that are in relationship with the resource.", + "items": { + "$ref": "#/components/schemas/Link" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Link" + }, + "monitoredAddress": { + "description": "Contains addresses of devices to monitor (e.g., 'sip' URI, 'tel' URI, 'acr' URI)", + "items": { + "type": "string" + }, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "anyURI" + }, + "referenceAddress": { + "description": "Indicates address of each device that will be used as reference devices from which the distances towards monitored devices indicated in the Addresses will be monitored (e.g., 'sip' URI, 'tel' URI, 'acr' URI)", + "items": { + "type": "string" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "anyURI" + }, + "requester": { + "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "anyURI" + }, + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "anyURI" + }, + "trackingAccuracy": { + "description": "Number of meters of acceptable error in tracking distance.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "float" + } + }, + "required": [ + "callbackReference", + "monitoredAddress", + "distance", + "trackingAccuracy", + "criteria", + "checkImmediate", + "frequency" + ], + "type": "object" + }, + "EnteringLeavingCriteria": { + "enum": [ + "Entering", + "Leaving" + ], + "type": "string" + }, + "Link": { + "description": "Link to other resources", + "properties": { + "href": { + "description": "URI", + "format": "anyURI", + "type": "string" + }, + "rel": { + "description": "Describes the relationship between the URI and the resource.", + "type": "string" + } + }, + "required": [ + "rel", + "href" + ], + "type": "object" + }, + "LocationInfo": { + "properties": { + "accuracy": { + "description": "Horizontal accuracy / (semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracyAltitude": { + "description": "Altitude accuracy / uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 3 or 4", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracySemiMinor": { + "description": "Horizontal accuracy / (semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "confidence": { + "description": "Confidence by which the position of a target entity is known to be within the shape description, expressed as a percentage and defined in [14]. Present only if \"shape\" equals 1, 4 or 6", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "includedAngle": { + "description": "Present only if \"shape\" equals 6", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "innerRadius": { + "description": "Present only if \"shape\" equals 6", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°. Cardinality greater than one only if \"shape\" equals 7.", + "items": { + "format": "float", + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°. Cardinality greater than one only if \"shape\" equals 7.", + "items": { + "format": "float", + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "offsetAngle": { + "description": "Present only if \"shape\" equals 6", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "orientationMajorAxis": { + "description": "Angle of orientation of the major axis, expressed in the range 0° to 180°, as defined in [14]. Present only if \"shape\" equals 4 or 6", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "shape": { + "description": "Shape information, as detailed in [14], associated with the reported location coordinate:

1 = ELLIPSOID_ARC

2 = ELLIPSOID_POINT

3 = ELLIPSOID_POINT_ALTITUDE

4 = ELLIPSOID_POINT_ALTITUDE_UNCERT_ELLIPSOID

5 = ELLIPSOID_POINT_UNCERT_CIRCLE

6 = ELLIPSOID_POINT_UNCERT_ELLIPSE

7 = POLYGON", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "timestamp": { + "$ref": "#/components/schemas/TimeStamp" + }, + "uncertaintyRadius": { + "description": "Present only if \"shape\" equals 6", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocity": { + "description": "Structure with attributes relating to the target entity’s velocity, as defined in [14].", + "properties": { + "bearing": { + "description": "Bearing, expressed in the range 0° to 360°, as defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "horizontalSpeed": { + "description": "Horizontal speed, expressed in km/h and defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "uncertainty": { + "description": "Horizontal uncertainty, as defined in [14]. Present only if \"velocityType\" equals 3 or 4", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocityType": { + "description": "Velocity information, as detailed in [14], associated with the reported location coordinate:

1 = HORIZONTAL

2 = HORIZONTAL_VERTICAL

3 = HORIZONTAL_UNCERT

4 = HORIZONTAL_VERTICAL_UNCERT", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "verticalSpeed": { + "description": "Vertical speed, expressed in km/h and defined in [14]. Present only if \"velocityType\" equals 2 or 4", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Int" + }, + "verticalUncertainty": { + "description": "Vertical uncertainty, as defined in [14]. Present only if \"velocityType\" equals 4", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + } + }, + "required": [ + "velocityType", + "bearing", + "horizontalSpeed" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "latitude", + "longitude", + "shape" + ], + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "NotificationFormat": { + "enum": [ + "XML", + "JSON" + ], + "type": "string" + }, + "NotificationSubscriptionList": { + "properties": { + "circleNotificationSubscription": { + "description": "Collection of CircleNotificationSubscription elements, see note 2.", + "items": { + "$ref": "#/components/schemas/CircleNotificationSubscription" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0.. N", + "x-etsi-mec-origin-type": "CircleNotificationSubscription" + }, + "distanceNotificationSubscription": { + "description": "Collection of DistanceNotificationSubscription elements, see note 2.", + "items": { + "$ref": "#/components/schemas/DistanceNotificationSubscription" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0.. N", + "x-etsi-mec-origin-type": "DistanceNotificationSubscription" + }, + "periodicNotificationSubscription": { + "description": "Collection of PeriodicNotificationSubscription elements, see note 2.", + "items": { + "$ref": "#/components/schemas/PeriodicNotificationSubscription" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0.. N", + "x-etsi-mec-origin-type": "PeriodicNotificationSubscription" + }, + "resourceURL": { + "description": "Self-referring URL, see note 1.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "AnyURI" + }, + "userTrackingSubscription": { + "description": "Collection of UserTrackingSubscription elements, see note 1.", + "items": { + "$ref": "#/components/schemas/UserTrackingSubscription" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0.. N", + "x-etsi-mec-origin-type": "UserTrackingSubscription" + }, + "zonalTrafficSubscription": { + "description": "Collection of ZonalTrafficSubscription elements, see note 1.", + "items": { + "$ref": "#/components/schemas/ZonalTrafficSubscription" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0.. N", + "x-etsi-mec-origin-type": "ZonalTrafficSubscription" + }, + "zoneStatusSubscription": { + "description": "Collection of ZoneStatusSubscription elements, see note 1.", + "items": { + "$ref": "#/components/schemas/ZoneStatusSubscription" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0.. N", + "x-etsi-mec-origin-type": "ZoneStatusSubscription" + } + }, + "required": [ + "resourceURL" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tAs specified in [5], clause 5.2.2.8.\nNOTE 2: \tAs specified in [6], clause 5.2.2.7.", + "x-etsi-ref": "6.3.3" + }, + "OperationStatus": { + "enum": [ + "Serviceable", + "Unserviceable", + "Unknown" + ], + "type": "string" + }, + "PeriodicNotificationSubscription": { + "description": "A type containing data for periodic subscription.", + "properties": { + "address": { + "description": "Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", + "items": { + "type": "string" + }, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "anyURI" + }, + "callbackReference": { + "$ref": "#/components/schemas/CallbackReference" + }, + "clientCorrelator": { + "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "duration": { + "description": "Period of time (in seconds) notifications are provided for. If set to “0” (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "int" + }, + "frequency": { + "description": "Maximum frequency (in seconds) of notifications (can also be considered minimum time between notifications) per subscription.", + "type": "integer", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "int" + }, + "link": { + "description": "Link to other resources that are in relationship with the resource.", + "items": { + "$ref": "#/components/schemas/Link" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Link" + }, + "requestedAccuracy": { + "description": "Accuracy of the provided distance in meters.", + "type": "integer", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "int" + }, + "requester": { + "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "anyURI" + }, + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "anyURI" + } + }, + "required": [ + "callbackReference", + "address", + "requestedAccuracy", + "frequency" + ], + "type": "object" + }, + "ProblemDetails": { + "properties": { + "detail": { + "description": "A human-readable explanation specific to this occurrence of the problem", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "instance": { + "description": "A URI reference that identifies the specific occurrence of the problem", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + }, + "status": { + "description": "The HTTP status code for this occurrence of the problem", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "title": { + "description": "A short, human-readable summary of the problem type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "type": { + "description": "A URI reference according to IETF RFC 3986 that identifies the problem type", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + } + }, + "type": "object" + }, + "RetrievalStatus": { + "enum": [ + "Retrieved", + "NotRetrieved", + "Error" + ], + "type": "string" + }, + "ServiceError": { + "description": "used to indicate a notification termination or cancellation.", + "properties": { + "messageId": { + "description": "Message identifier, either with prefix SVC or with prefix POL", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "string" + }, + "text": { + "description": "Message text, with replacement variables marked with %n, where n is an index into the list of elements, starting at 1", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "string" + }, + "variables": { + "description": "Variables to substitute into text string", + "items": { + "type": "string" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "string" + } + }, + "required": [ + "messageId", + "text" + ], + "type": "object" + }, + "SubscriptionCancellationNotification": { + "description": "A type containing the subscription cancellation notification.", + "properties": { + "address": { + "description": "Address of terminal if the error applies to an individual terminal.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "anyURI" + }, + "callbackData": { + "description": "CallbackData if passed by the application in the receiptRequest element during the associated subscription operation", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "link": { + "description": "Link to other resources that are in relationship with the resource.", + "items": { + "$ref": "#/components/schemas/Link" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Link" + }, + "reason": { + "$ref": "#/components/schemas/ServiceError" + } + }, + "required": [ + "terminalLocation" + ], + "type": "object" + }, + "SubscriptionNotification": { + "description": "A type containing the notification subscription.", + "properties": { + "callbackData": { + "description": "CallbackData if passed by the application in the receiptRequest element during the associated subscription operation", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "distanceCriteria": { + "$ref": "#/components/schemas/DistanceCriteria" + }, + "enteringLeavingCriteria": { + "$ref": "#/components/schemas/EnteringLeavingCriteria" + }, + "isFinalNotification": { + "description": "Set to true if it is a final notification about location change.", + "type": "boolean", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "boolean" + }, + "link": { + "description": "Link to other resources that are in relationship with the resource.", + "items": { + "$ref": "#/components/schemas/Link" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Link" + }, + "terminalLocation": { + "description": "Collection of the terminal locations.", + "items": { + "$ref": "#/components/schemas/TerminalLocation" + }, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "TerminalLocation" + } + }, + "required": [ + "terminalLocation" + ], + "type": "object" + }, + "TerminalDistance": { + "description": "A type containing information about the distance from a terminal to a location or between two terminals, in addition the accuracy and a timestamp of the information are provided.", + "properties": { + "accuracy": { + "description": "Accuracy of the provided distance in meters", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "integer" + }, + "distance": { + "description": "Distance from terminal to a location or between two terminals specified in meters", + "type": "integer", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "integer" + }, + "timestamp": { + "$ref": "#/components/schemas/TimeStamp" + } + }, + "required": [ + "distance" + ], + "type": "object" + }, + "TerminalLocation": { + "description": "A type containing device address, retrieval status and location information.", + "properties": { + "address": { + "description": "Address of the terminal to which the location information applies (e.g., 'sip' URI, 'tel' URI, 'acr' URI).", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "anyURI" + }, + "currentLocation": { + "$ref": "#/components/schemas/LocationInfo" + }, + "errorInformation": { + "$ref": "#/components/schemas/ServiceError" + }, + "locationRetrievalStatus": { + "$ref": "#/components/schemas/RetrievalStatus" + } + }, + "required": [ + "address", + "locationRetrievalStatus" + ], + "type": "object" + }, + "TerminalLocationList": { + "description": "Collection of the terminal locations.", + "items": { + "$ref": "#/components/schemas/TerminalLocation" + }, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "TerminalLocation" + }, + "TimeStamp": { + "properties": { + "nanoSeconds": { + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "seconds": { + "description": "The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "required": [ + "seconds", + "nanoSeconds" + ], + "type": "object", + "x-etsi-ref": "6.5.2" + }, + "UserEventType": { + "enum": [ + "Entering", + "Leaving", + "Transferring" + ], + "type": "string" + }, + "UserInfo": { + "properties": { + "accessPointId": { + "description": "The identity of the access point the user is currently on, see note 1.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "address": { + "description": "Address of user (e.g. 'sip' URI, 'tel' URI, 'acr' URI) currently on the access point, see note 1.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "AnyURI" + }, + "ancillaryInfo": { + "description": "Reserved for future use.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "contextLocationInfo": { + "description": "Contextual information of a user location (e.g. aisle, floor, room number, etc.).", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "locationInfo": { + "$ref": "#/components/schemas/LocationInfo" + }, + "resourceURL": { + "description": "Self-referring URL, see note 1.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "timestamp": { + "$ref": "#/components/schemas/TimeStamp" + }, + "zoneId": { + "description": "The identity of the zone the user is currently within, see note 1.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "address", + "accessPointId", + "zoneId", + "resourceURL", + "timestamp" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tAs specified in [5], clause 5.2.2.7.\nNOTE 2: \tAs specified in [5], clause 5.2.2.5.", + "x-etsi-ref": "6.2.2" + }, + "UserList": { + "description": "A type containing list of users.", + "properties": { + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "anyURI" + }, + "user": { + "description": "Collection of the zone information list.", + "items": { + "$ref": "#/components/schemas/UserInfo" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "UserInfo" + } + }, + "required": [ + "resourceURL" + ], + "type": "object" + }, + "UserTrackingSubscription": { + "description": "A type containing user tracking subscription.", + "properties": { + "address": { + "description": "Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) to monitor", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "anyURI" + }, + "callbackReference": { + "$ref": "#/components/schemas/CallbackReference" + }, + "clientCorrelator": { + "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "anyURI" + }, + "userEventCriteria": { + "description": "List of user event values to generate notifications for (these apply to address specified). If this element is missing, a notification is requested to be generated for any change in user event.", + "items": { + "$ref": "#/components/schemas/UserEventType" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "UserEventType" + } + }, + "required": [ + "callbackReference", + "address" + ], + "type": "object" + }, + "ZonalPresenceNotification": { + "description": "A type containing zonal presence notification", + "properties": { + "address": { + "description": "Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) to monitor", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "anyURI" + }, + "callbackData": { + "description": "CallBackData if passed by the application during the associated ZonalTrafficSubscription and UserTrackingSubscription operation. See [REST_NetAPI_Common].", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "currentAccessPointId": { + "description": "Identifier of access point.", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "string" + }, + "interestRealm": { + "description": "Interest realm of access point (e.g. geographical area, a type of industry etc.).", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "link": { + "description": "Link to other resources that are in relationship with this notification. The server SHOULD include a link to the related subscription. No other links are required or suggested by this specification", + "items": { + "$ref": "#/components/schemas/Link" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Link" + }, + "previousAccessPointId": { + "description": "Identifier of access point.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "timestamp": { + "$ref": "#/components/schemas/TimeStamp" + }, + "userEventType": { + "$ref": "#/components/schemas/UserEventType" + }, + "zoneId": { + "description": "Identifier of zone", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "string" + } + }, + "required": [ + "zoneId", + "address", + "userEventType", + "currentAccessPointId", + "timestamp" + ], + "type": "object" + }, + "ZonalTrafficSubscription": { + "description": "A type containing zonal traffic subscription", + "properties": { + "callbackReference": { + "$ref": "#/components/schemas/CallbackReference" + }, + "clientCorrelator": { + "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "duration": { + "description": "Period (in seconds) of time notifications are provided for. If set to \"0\" (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications. This element MAY be given by the client during resource creation in order to signal the desired lifetime of the subscription. The server MUST return in this element the period of time for which the subscription will still be valid.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "unsignedInt" + }, + "interestRealm": { + "description": "Interest realm of access point (e.g. geographical area, a type of industry etc.).", + "items": { + "type": "string" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "string" + }, + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "anyURI" + }, + "userEventCriteria": { + "description": "List of user event values to generate notifications for (these apply to zone identifier or all interest realms within zone identifier specified). If this element is missing, a notification is requested to be generated for any change in user event.", + "items": { + "$ref": "#/components/schemas/UserEventType" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "UserEventType" + }, + "zoneId": { + "description": "Identifier of zone", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "string" + } + }, + "required": [ + "callbackReference", + "zoneId" + ], + "type": "object" + }, + "ZoneInfo": { + "description": "A type containing zone information.", + "properties": { + "numberOfAccessPoints": { + "description": "The number of access points within the zone", + "type": "integer", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "unsignedInt" + }, + "numberOfUnserviceableAccessPoints": { + "description": "Number of inoperable access points within the zone.", + "type": "integer", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "unsignedInt" + }, + "numberOfUsers": { + "description": "The number of users currently on the access point.", + "type": "integer", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "unsignedInt" + }, + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "anyURI" + }, + "zoneId": { + "description": "Identifier of zone", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "string" + } + }, + "required": [ + "zoneId", + "numberOfAccessPoints", + "numberOfUnserviceableAccessPoints", + "numberOfUsers", + "resourceURL" + ], + "type": "object" + }, + "ZoneList": { + "description": "A type containing a list of zones.", + "properties": { + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "anyURI" + }, + "zone": { + "description": "Collection of the zone information list.", + "items": { + "$ref": "#/components/schemas/ZoneInfo" + }, + "type": "array" + } + }, + "required": [ + "resourceURL" + ], + "type": "object" + }, + "ZoneStatusNotification": { + "description": "A type containing zone status notification.", + "properties": { + "accessPointId": { + "description": "Identifier of an access point.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "callbackData": { + "description": "CallBackData if passed by the application during the associated ZoneStatusSubscription operation. See [REST_NetAPI_Common].", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "link": { + "description": "Link to other resources that are in relationship with this notification. The server SHOULD include a link to the related subscription. No other links are required or suggested by this specification", + "items": { + "$ref": "#/components/schemas/Link" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Link" + }, + "numberOfUsersInAP": { + "description": "This element shall be present when ZoneStatusSubscription includes numberOfUsersAPThreshold element and the number of users in an access point exceeds the threshold defined in the subscription.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "unsignedInt" + }, + "numberOfUsersInZone": { + "description": "This element shall be present when ZoneStatusSubscription includes numberOfUsersZoneThreshold element and the number of users in a zone exceeds the threshold defined in this subscription.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "unsignedInt" + }, + "operationStatus": { + "$ref": "#/components/schemas/OperationStatus" + }, + "timestamp": { + "$ref": "#/components/schemas/TimeStamp" + }, + "zoneId": { + "description": "Identifier of zone", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "string" + } + }, + "required": [ + "zoneId", + "timestamp" + ], + "type": "object" + }, + "ZoneStatusSubscription": { + "description": "A type containing zone status subscription.", + "properties": { + "callbackReference": { + "$ref": "#/components/schemas/CallbackReference" + }, + "clientCorrelator": { + "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "numberOfUsersAPThreshold": { + "description": "Threshold number of users in an access point which if crossed shall cause a notification", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "unsignedInt" + }, + "numberOfUsersZoneThreshold": { + "description": "Threshold number of users in a zone which if crossed shall cause a notification", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "unsignedInt" + }, + "operationStatus": { + "description": "List of operation status values to generate notifications for (these apply to all access points within a zone).", + "items": { + "$ref": "#/components/schemas/OperationStatus" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "OperationStatus" + }, + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "anyURI" + }, + "zoneId": { + "description": "Identifier of zone", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "string" + } + }, + "required": [ + "callbackReference", + "zoneId" + ], + "type": "object" } } } diff --git a/ttcn/LibMec/LocationAPI/module.mk b/ttcn/LibMec/LocationAPI/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..420e9390872441518710e151bd62d467beead6c6 --- /dev/null +++ b/ttcn/LibMec/LocationAPI/module.mk @@ -0,0 +1,6 @@ +sources := \ + ttcn/LocationAPI_EncdecDeclarations.ttcn \ + ttcn/LocationAPI_Pics.ttcn \ + ttcn/LocationAPI_Pixits.ttcn \ + ttcn/LocationAPI_Templates.ttcn \ + ttcn/LocationAPI_TypesAndValues.ttcn diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn index 7f86a783dbe70e96d129c402648d9524c5623519..955ed4687e036e375b467e22c34292e140a3fffd 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_Templates.ttcn @@ -14,11 +14,13 @@ module LocationAPI_Templates { in Address p_address := PX_USER, in AccessPointId p_access_point_id := PX_ACCESS_POINT_ID, in ZoneId p_zone_id := PX_ZONE_ID, + in TimeStamp p_timestamp, in ResourceURL p_resource_url := PX_RESOURCE_URL ) := { address_ := p_address, accessPointId := p_access_point_id, zoneId := p_zone_id, + timestamp_ := p_timestamp, resourceURL := p_resource_url, locationInfo := omit, contextLocationInfo := omit, @@ -29,11 +31,13 @@ module LocationAPI_Templates { template (present) Address p_address := ?, template (present) AccessPointId p_access_point_id := ?, template (present) ZoneId p_zone_id := ?, + template (present) TimeStamp p_timestamp := ?, template (present) ResourceURL p_resource_url := ? ) := { address_ := p_address, accessPointId := p_access_point_id, zoneId := p_zone_id, + timestamp_ := p_timestamp, resourceURL := p_resource_url, locationInfo := *, contextLocationInfo := *, @@ -57,8 +61,8 @@ module LocationAPI_Templates { } // End of template mw_user_list template (value) LocationInfo m_location_info( - in JSON.Number p_latitude, - in JSON.Number p_longitude, + in Latitude p_latitude, + in Longitude p_longitude, in Shape p_shape := POLYGON, in VelocityType p_velocityType := HORIZONTAL_VERTICAL_UNCERT ) := { @@ -75,12 +79,13 @@ module LocationAPI_Templates { offsetAngle := omit, includedAngle := omit, shape := p_shape, + timestamp_ := omit, velocity := omit } // End of template m_location_info template (present) LocationInfo mw_location_info( - template (present) JSON.Number p_latitude := ?, - template (present) JSON.Number p_longitude := ?, + template (present) Latitude p_latitude := ?, + template (present) Longitude p_longitude := ?, template (present) Shape p_shape := ? ) := { latitude := p_latitude, @@ -96,6 +101,7 @@ module LocationAPI_Templates { offsetAngle := *, includedAngle := *, shape := p_shape, + timestamp_ := *, velocity := * } // End of template mw_location_info @@ -245,24 +251,23 @@ module LocationAPI_Templates { in template (value) JSON.Number p_frequency := 10.0, in template (omit) ResourceURL p_resourceURL := omit ) := { - clientCorrelator := p_clientCorrelator, - resourceURL := p_resourceURL, - link := omit, - callbackReference := p_callbackReference, - requester := omit, - address_ := p_address, - latitude := p_latitude, - longitude := p_longitude, - radius := p_radius, - trackingAccuracy := p_trackingAccuracy, + address_ := p_address, + callbackReference := p_callbackReference, + checkImmediate := p_checkImmediate, + clientCorrelator := p_clientCorrelator, + count := omit, + duration := omit, enteringLeavingCriteria := p_enteringLeavingCriteria, - checkImmediate := p_checkImmediate, - frequency := p_frequency, - duration := omit, - count := omit - + frequency := p_frequency, + latitude := p_latitude, + link := omit, + longitude := p_longitude, + radius := p_radius, + requester := omit, + resourceURL := p_resourceURL, + trackingAccuracy := p_trackingAccuracy } // End of template m_circle_notification_subscription - + template CircleNotificationSubscription mw_circle_notification_subscription( template ClientCorrelator p_clientCorrelator := *, template (present) CallbackReference p_callbackReference := ?, @@ -276,81 +281,127 @@ module LocationAPI_Templates { template (present) JSON.Number p_frequency := ?, template ResourceURL p_resourceURL := * ) := { - clientCorrelator := p_clientCorrelator, - resourceURL := p_resourceURL, - link := *, - callbackReference := p_callbackReference, - requester := *, - address_ := p_address, - latitude := p_latitude, - longitude := p_longitude, - radius := p_radius, - trackingAccuracy := p_trackingAccuracy, + address_ := p_address, + callbackReference := p_callbackReference, + checkImmediate := p_checkImmediate, + clientCorrelator := p_clientCorrelator, + count := *, + duration := *, enteringLeavingCriteria := p_enteringLeavingCriteria, - checkImmediate := p_checkImmediate, - frequency := p_frequency, - duration := *, - count := * + frequency := p_frequency, + latitude := p_latitude, + link := *, + longitude := p_longitude, + radius := p_radius, + requester := *, + resourceURL := p_resourceURL, + trackingAccuracy := p_trackingAccuracy } // End of template m_wcircle_notification_subscription template (value) TerminalDistance m_terminal_distance(in JSON.Number p_distance) := { - distance := p_distance, - accuracy := omit, - timestamp := omit + distance := p_distance, + accuracy := omit, + timestamp_ := omit } // End of template m_terminal_distance template (present) TerminalDistance mw_terminal_distance(template (present) JSON.Number p_distance := ?) := { - distance := p_distance, - accuracy := *, - timestamp := * + distance := p_distance, + accuracy := *, + timestamp_ := * } // End of template mw_terminal_distance template (omit) DistanceNotificationSubscription m_distance_notification_subscription( - in template (omit) ClientCorrelator p_clientCorrelator := omit, in template (value) CallbackReference p_callbackReference, - in template (omit) ResourceURL p_resourceURL := omit, - in template (omit) Address p_address := omit + in template (value) JSON.Bool p_checkImmediate := true, + in template (omit) ClientCorrelator p_clientCorrelator := omit, + in template (value) DistanceCriteria p_criteria := AllWithinDistance, + in template (value) JSON.Number p_distance, + in template (value) JSON.Number p_frequency := 10.0, + in template (value) JSON.AnyURI p_monitoredAddress, + in template (omit) Addresses p_referenceAddress := omit, + in template (value) JSON.Number p_trackingAccuracy := 10.0, + in template (omit) ResourceURL p_resourceURL := omit ) := { - clientCorrelator := p_clientCorrelator, - resourceURL := p_resourceURL, callbackReference := p_callbackReference, - address_ := p_address + checkImmediate := p_checkImmediate, + clientCorrelator := p_clientCorrelator, + count := omit, + criteria := p_criteria, + distance := p_distance, + duration := omit, + frequency := p_frequency, + link := omit, + monitoredAddress := p_monitoredAddress, + referenceAddress := p_referenceAddress, + requester := omit, + resourceURL := p_resourceURL, + trackingAccuracy := p_trackingAccuracy } // End of template m_distance_notification_subscription template DistanceNotificationSubscription mw_distance_notification_subscription( - template ClientCorrelator p_clientCorrelator := *, template (present) CallbackReference p_callbackReference := ?, - template ResourceURL p_resourceURL := *, - template Address p_address := * - ) := { - clientCorrelator := p_clientCorrelator, - resourceURL := p_resourceURL, + template (present) JSON.Bool p_checkImmediate := ?, + template ClientCorrelator p_clientCorrelator := *, + template (present) DistanceCriteria p_criteria := ?, + template (present) JSON.Number p_distance := ?, + template (present) JSON.Number p_frequency := ?, + template (present) JSON.AnyURI p_monitoredAddress := ?, + template Addresses p_referenceAddress := *, + template (present) JSON.Number p_trackingAccuracy := ?, + template ResourceURL p_resourceURL := * + ) := { callbackReference := p_callbackReference, - address_ := p_address + checkImmediate := p_checkImmediate, + clientCorrelator := p_clientCorrelator, + count := *, + criteria := p_criteria, + distance := p_distance, + duration := *, + frequency := p_frequency, + link := *, + monitoredAddress := p_monitoredAddress, + referenceAddress := p_referenceAddress, + requester := *, + resourceURL := p_resourceURL, + trackingAccuracy := p_trackingAccuracy } // End of template mw_distance_notification_subscription - + template (omit) PeriodicNotificationSubscription m_periodic_notification_subscription( - in template (omit) ClientCorrelator p_clientCorrelator := omit, + in template (value) Address p_address, in template (value) CallbackReference p_callbackReference, - in template (omit) ResourceURL p_resourceURL := omit, - in template (omit) Address p_address := omit + in template (value) JSON.Number p_frequency := 10.0, + in template (value) JSON.Number p_requestedAccuracy := 0.1, + in template (omit) ClientCorrelator p_clientCorrelator := omit, + in template (omit) ResourceURL p_resourceURL := omit ) := { - clientCorrelator := p_clientCorrelator, - resourceURL := p_resourceURL, + address_ := p_address, callbackReference := p_callbackReference, - address_ := p_address + clientCorrelator := p_clientCorrelator, + duration := omit, + frequency := p_frequency, + link := omit, + requestedAccuracy := p_requestedAccuracy, + requester := omit, + resourceURL := p_resourceURL } // End of template m_periodic_notification_subscription - + template PeriodicNotificationSubscription mw_periodic_notification_subscription( - template ClientCorrelator p_clientCorrelator := *, + template (present) Address p_address := ?, template (present) CallbackReference p_callbackReference := ?, - template ResourceURL p_resourceURL := *, - template Address p_address := * - ) := { - clientCorrelator := p_clientCorrelator, - resourceURL := p_resourceURL, + template (present) JSON.Number p_frequency := ?, + template (present) JSON.Number p_requestedAccuracy := ?, + template ClientCorrelator p_clientCorrelator := *, + template ResourceURL p_resourceURL := * + ) := { + address_ := p_address, callbackReference := p_callbackReference, - address_ := p_address + clientCorrelator := p_clientCorrelator, + duration := *, + frequency := p_frequency, + link := *, + requestedAccuracy := p_requestedAccuracy, + requester := *, + resourceURL := p_resourceURL } // End of template mw_periodic_notification_subscription - + } // End of module LocationAPI_Templates diff --git a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn index bd158438100ccc95d646b27d33c1ac14479f9881..85ff63d91440dfe598329a491d2e733ab9bf4275 100644 --- a/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn +++ b/ttcn/LibMec/LocationAPI/ttcn/LocationAPI_TypesAndValues.ttcn @@ -9,13 +9,13 @@ * All rights reserved. */ module LocationAPI_TypesAndValues { - + // JSON import from JSON all; - + // LibCommon import from LibCommon_BasicTypesAndValues all; - + /** * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC */ @@ -36,7 +36,7 @@ module LocationAPI_TypesAndValues { Seconds seconds, NanoSeconds nanoSeconds } - + /** * @desc A type containing list of users. * @member user Collection of the zone information list. @@ -61,6 +61,8 @@ module LocationAPI_TypesAndValues { ELLIPSOID_POINT_UNCERT_CIRCLE (5), ELLIPSOID_POINT_UNCERT_ELLIPSE (6), POLYGON (7) + } with { + variant "JSON: as number" } /** @@ -82,17 +84,31 @@ module LocationAPI_TypesAndValues { UInt32 verticalUncertainty optional } + type record of JSON.Number Latitude; + + type record of JSON.Number Longitude; + /** * @desc A type containing location information with latitude, longitude and altitude, in addition the accuracy of the information are provided. * @member latitude Location latitude, expressed in the range -90° to +90°. Cardinality greater than one only if "shape" equals 7. * @member longitude Location longitude, expressed in the range -180° to +180°. Cardinality greater than one only if "shape" equals 7. * @member altitude Location altitude relative to the WGS84 ellipsoid surface. * @member accuracy Horizontal accuracy / (semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if "shape" equals 4, 5 or 6 + * @member accuracySemiMinor Horizontal accuracy / (semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6 + * @member accuracyAltitude Altitude accuracy / uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 3 or 4 + * @member orientationMajorAxis Angle of orientation of the major axis, expressed in the range 0° to 180°, as defined in [14]. Present only if \"shape\" equals 4 or 6 + * @member confidence Confidence by which the position of a target entity is known to be within the shape description, expressed as a percentage and defined in [14]. Present only if \"shape\" equals 1, 4 or 6 + * @member innerRadius Present only if \"shape\" equals 6 + * @member uncertaintyRadius Present only if \"shape\" equals 6 + * @member offsetAngle Present only if \"shape\" equals 6 + * @member includedAngle Present only if \"shape\" equals 6 + * @member shape Shape information, as detailed in [14], associated with the reported location coordinate + * @member velocity Structure with attributes relating to the target entity’s velocity, as defined in [14] * @see ETSI GS MEC 013 V2.1.1 (2019-09) Clause 6.5.3 Type: LocationInfo */ type record LocationInfo { - JSON.Number latitude, - JSON.Number longitude, + Latitude latitude, + Longitude longitude, JSON.Number altitude optional, UInt32 accuracy optional, UInt32 accuracySemiMinor optional, @@ -104,9 +120,12 @@ module LocationAPI_TypesAndValues { UInt32 offsetAngle optional, UInt32 includedAngle optional, Shape shape, + TimeStamp timestamp_ optional, Velocity velocity optional + } with { + variant (timestamp_) "name as 'timestamp'"; } // End of type LocationInfo - + /** * @desc A type containing zone information. * @member zoneId Identifier of zone @@ -139,13 +158,17 @@ module LocationAPI_TypesAndValues { * @see ETSI GS MEC 013 V2.1.1 (2019-09) 6.6.1 accessPointId */ type JSON.String AccessPointId; - + + type UInt32 DateTimeStamp; // FIXME To be reviewed + /** * @desc A type containing access point information. - * @member accessPointId + * @member accessPointId Identifier of access point * @member connectionType The connection type for the access poin * @member operationStatus The operation status of the access point * @member numberOfUsers The number of users currently on the access point. + * @member interestRealm Interest realm of access point + * @member timezone Time zone of access point * @member resourceURL Self referring URL. */ type record AccessPointInfo { @@ -154,16 +177,20 @@ module LocationAPI_TypesAndValues { ConnectionType connectionType, OperationStatus operationStatus, NumberOfUsers numberOfUsers, - InterestRealm interestRealm, + InterestRealm interestRealm optional, + DateTimeStamp timezone optional, ResourceURL resourceURL } + /** + * @desc Collection of the access point information list + */ type record of AccessPointInfo AccessPointInfos; /** * @desc A type containing list of access points. - * @member zoneId + * @member zoneId Identifier of zone * @member accessPoint Collection of the access point information list. - * @member resourceURL + * @member resourceURL Self referring URL */ type record AccessPointList { ZoneId zoneId, @@ -189,10 +216,22 @@ REST_NetAPI_Common]. type JSON.String CallbackData; /** - * @desc Notification callback definition. - * @member notifyURL + * @desc Notification serialization format + */ + type enumerated NotificationFormat { + JSON (1), + XML (2) + } + + /** + * @desc CallbackData description + * @member callbackData Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes + * @member notificationFormat + * @member notifyURL Notify Callback URL */ type record CallbackReference { + CallbackData callbackData optional, + NotificationFormat notificationFormat optional, NotifyURL notifyURL } @@ -296,6 +335,15 @@ REST_NetAPI_Common]. Unknown } + /** + * @desc The retrieval operation status + */ + type enumerated RetrievalStatus { + Retrieved, + NotRetrieved, + Error + } + /** * @desc Zone ID */ @@ -306,11 +354,6 @@ REST_NetAPI_Common]. */ type JSON.AnyURI ResourceURL; - /** - * @desc Indicates the time of day for zonal presence notification. - */ - type JSON.String Timestamp; - /** * @desc Time zone of access point */ @@ -335,6 +378,7 @@ REST_NetAPI_Common]. * @member address_ Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI). * @member accessPointId Identifier of access point, (reference ETSI TS 129 171). * @member zoneId Identifier of zone + * @member timestamp * @member resourceURL Self referring URL. * @member locationInfo A type containing location information with latitude, longitude and altitude, in addition the accuracy of the information are provided. * @member contextLocationInfo Contextual information of a user location (e.g. aisle, floor, room number, etc.). @@ -345,17 +389,23 @@ REST_NetAPI_Common]. Address address_, AccessPointId accessPointId, ZoneId zoneId, + TimeStamp timestamp_, ResourceURL resourceURL, LocationInfo locationInfo optional, ContextLocationInfo contextLocationInfo optional, AncillaryInfo ancillaryInfo optional } with { variant (address_) "name as 'address'"; + variant (timestamp_) "name as 'timestamp'"; } // End of type UserInfo /** * @desc A type containing user tracking subscription. - * @member + * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server + * @member callbackReference + * @member address_ Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) to monitor + * @member userEventCriteria List of user event values to generate notifications for (these apply to address specified). If this element is missing, a notification is requested to be generated for any change in user event + * @member resourceURL Self referring URL */ type record UserTrackingSubscription { ClientCorrelator clientCorrelator optional, @@ -384,18 +434,25 @@ REST_NetAPI_Common]. /** * @desc A type containing zonal presence notification - * @member + * @member callbackData CallBackData if passed by the application during the associated ZonalTrafficSubscription and UserTrackingSubscription operation. See + * @member zoneId Identifier of zone + * @member address_ Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) to monitor + * @member interestRealm Interest realm of access point (e.g. geographical area, a type of industry etc.) + * @member userEventType + * @member currentAccessPointId Identifier of access point + * @member previousAccessPointId Identifier of access point + * @member timestamp_ * @member link Link to other resources that are in relationship with this notification. The server SHOULD include a link to the related subscription. No other links are required or suggested by this specification. */ type record ZonalPresenceNotification { - CallbackReference callbackReference optional, + CallbackData callbackData optional, ZoneId zoneId, Address address_, InterestRealm interestRealm optional, UserEventType userEventType, CurrentAccessPointId currentAccessPointId, PreviousAccessPointId previousAccessPointId optional, - Timestamp timestamp_, + TimeStamp timestamp_, Link link optional } with { variant (address_) "name as 'address'"; @@ -404,10 +461,13 @@ REST_NetAPI_Common]. /** * @desc A type containing zonal traffic subscription - * @member + * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server + * @member callbackReference + * @member zoneId Identifier of zone * @member interestRealm Interest realms of access points within a zone (e.g. geographical area, a type of industry etc.). * @member userEventCriteria List of user event values to generate notifications for (these apply to zone identifier or all interest realms within zone identifier specified). If this element is missing, a notification is requested to be generated for any change in user event. - * @member resourceURL + * @member duration Period (in seconds) of time notifications are provided for + * @member resourceURL Self referring URL */ type record ZonalTrafficSubscription { ClientCorrelator clientCorrelator optional, @@ -426,8 +486,14 @@ REST_NetAPI_Common]. /** * @desc A type containing zone status notification. - * @member zoneId - * @member + * @member callbackData CallBackData if passed by the application during the associated ZoneStatusSubscription operation + * @member zoneId Identifier of zone + * @member accessPointId Identifier of an access point + * @member numberOfUsersInZone This element shall be present when ZoneStatusSubscription includes numberOfUsersZoneThreshold element and the number of users in a zone exceeds the threshold defined in this subscription + * @member numberOfUsersInAP This element shall be present when ZoneStatusSubscription includes numberOfUsersAPThreshold element and the number of users in an access point exceeds the threshold defined in the subscription + * @member operationStatus + * @member timestamp_ + * @member link Link to other resources that are in relationship with this notification */ type record ZoneStatusNotification { CallbackData callbackData optional, @@ -436,18 +502,20 @@ REST_NetAPI_Common]. NumberOfUsersInZone numberOfUsersInZone optional, NumberOfUsersInAP numberOfUsersInAP optional, OperationStatus operationStatus optional, - Timestamp timestamp_, - Link link + TimeStamp timestamp_, + Link link optional } with { variant (timestamp_) "name as 'timestamp'"; } /** * @desc A type containing zone status subscription. - * @member zoneId - * @member - * @member - * @member + * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server + * @member resourceURL Self referring URL + * @member callbackReference + * @member zoneId Identifier of zone + * @member numberOfUsersZoneThreshold Threshold number of users in a zone which if crossed shall cause a notification + * @member numberOfUsersAPThreshold Threshold number of users in an access point which if crossed shall cause a notification * @member operationStatus List of operation status values to generate notifications for (these apply to all access points within a zone). */ type record ZoneStatusSubscription { @@ -459,23 +527,41 @@ REST_NetAPI_Common]. NumberOfUsersAPThreshold numberOfUsersAPThreshold optional, OperationStatus operationStatus optional } - - type record CircleNotificationSubscription { // FIXME Incomplete data structure desciption - ClientCorrelator clientCorrelator optional, - ResourceURL resourceURL optional, - Link link optional, - CallbackReference callbackReference, - JSON.AnyURI requester optional, + + /** + * @desc A type containing data for notifications, when the area is defined as a circle + * @member address Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) + * @member callbackReference + * @member checkImmediate Check location immediately after establishing notification + * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server + * @member count Maximum number of notifications per individual address. For no maximum, either do not include this element or specify a value of zero. Default value is 0 + * @member duration Period of time (in seconds) notifications are provided for. If set to “0” (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications + * @member enteringLeavingCriteria + * @member frequency Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications) + * @member latitude Latitude of center point + * @member link Link to other resources that are in relationship with the resource + * @member longitude Longitude of center point + * @member radius Radius circle around center point in meters + * @member requester Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) + * @member resourceURL Self referring URL + * @member trackingAccuracy Number of meters of acceptable error in tracking distance + */ + type record CircleNotificationSubscription { Addresses address_, + CallbackReference callbackReference, + JSON.Bool checkImmediate, + ClientCorrelator clientCorrelator optional, + JSON.Number count optional, + JSON.Number duration optional, + EnteringLeavingCriteria enteringLeavingCriteria, + JSON.Number frequency, JSON.Number latitude, + Link link optional, JSON.Number longitude, JSON.Number radius, - JSON.Number trackingAccuracy, - EnteringLeavingCriteria enteringLeavingCriteria, - JSON.Bool checkImmediate, - JSON.Number frequency, - JSON.Number duration optional, - JSON.Number count optional + JSON.AnyURI requester optional, + ResourceURL resourceURL optional, + JSON.Number trackingAccuracy } with { variant (address_) "name as 'address'"; } @@ -484,33 +570,162 @@ REST_NetAPI_Common]. Entering, Leaving } - + + /** + * @desc A type containing information about the distance from a terminal to a location or between two terminals, in addition the accuracy and a timestamp of the information are provided + * @member distance Distance from terminal to a location or between two terminals specified in meters + * @member accuracy Accuracy of the provided distance in meters + * @member timestamp + */ type record TerminalDistance { JSON.Number distance, JSON.Number accuracy optional, - JSON.DateTime timestamp optional + JSON.DateTime timestamp_ optional + } with { + variant (timestamp_) "name as 'timestamp'"; } - - type record DistanceNotificationSubscription { // FIXME Incomplete data structure desciption + + /** + * @desc Distance criterium + */ + type enumerated DistanceCriteria { + AllWithinDistance, + AnyWithinDistance, + AllBeyondDistance, + AnyBeyondDistance + } + + /** + * @desc A type containing data for distance subscription, with reference to other devices + * @member callbackReference + * @member checkImmediate Check location immediately after establishing notification + * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server + * @member count Maximum number of notifications per individual address. For no maximum, either do not include this element or specify a value of zero. Default value is 0 + * @member criteria + * @member distance Distance between devices that shall be monitored + * @member duration Period of time (in seconds) notifications are provided for. If set to “0” (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications + * @member frequency Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications) + * @member link Link to other resources that are in relationship with the resource + * @member monitoredAddress Contains addresses of devices to monitor (e.g., 'sip' URI, 'tel' URI, 'acr' URI) + * @member referenceAddress Indicates address of each device that will be used as reference devices from which the distances towards monitored devices indicated in the Addresses will be monitored (e.g., 'sip' URI, 'tel' URI, 'acr' URI) + * @member requester Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) + * @member resourceURL Self referring URL + * @member trackingAccuracy Number of meters of acceptable error in tracking distance + */ + type record DistanceNotificationSubscription { + CallbackReference callbackReference, + JSON.Bool checkImmediate, ClientCorrelator clientCorrelator optional, + JSON.Number count optional, + DistanceCriteria criteria, + JSON.Number distance, + JSON.Number duration optional, + JSON.Number frequency, + Link link optional, + JSON.AnyURI monitoredAddress, + Addresses referenceAddress optional, + JSON.AnyURI requester optional, ResourceURL resourceURL optional, + JSON.Number trackingAccuracy + } + + /** + * @desc A type containing data for periodic subscription + * @member address_ Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) + * @member callbackReference + * @member clientCorrelator A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server + * @member duration Period of time (in seconds) notifications are provided for. If set to “0” (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications + * @member frequency Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications) + * @member link Link to other resources that are in relationship with the resource + * @member monitoredAddress Contains addresses of devices to monitor (e.g., 'sip' URI, 'tel' URI, 'acr' URI) + * @member requestedAccuracy Accuracy of the provided distance in meters + * @member requester Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) + * @member resourceURL Self referring URL + */ + type record PeriodicNotificationSubscription { + Address address_, CallbackReference callbackReference, - Address address_ optional + ClientCorrelator clientCorrelator optional, + JSON.Number duration optional, + JSON.Number frequency, + Link link optional, + JSON.Number requestedAccuracy, + JSON.AnyURI requester optional, + ResourceURL resourceURL optional } with { variant (address_) "name as 'address'"; } - - type record PeriodicNotificationSubscription { // FIXME Incomplete data structure desciption - ClientCorrelator clientCorrelator optional, - ResourceURL resourceURL optional, - CallbackReference callbackReference, - Address address_ optional + + type record of JSON.String Variables; + /** + * @desc Used to indicate a notification termination or cancellation + * @member messageId Message identifier, either with prefix SVC or with prefix POL + * @member text Message text, with replacement variables marked with %n, where n is an index into the list of elements, starting at 1 + * @member variables Variables to substitute into text string + */ + type record ServiceError { + JSON.String messageId, + JSON.String text, + Variables variables optional + } + + /** + * @desc A type containing device address, retrieval status and location information + * @member address_ Address of the terminal to which the location information applies (e.g., 'sip' URI, 'tel' URI, 'acr' URI) + * @member currentLocation + * @member errorInformation Used to indicate a notification termination or cancellation + * @member locationRetrievalStatus + */ + type record TerminalLocation { + Address address_, + LocationInfo currentLocation optional, + ServiceError errorInformation optional, + RetrievalStatus locationRetrievalStatus + } with { + variant (address_) "name as 'address'"; + } + type record of TerminalLocation TerminalLocationList + + /** + * @desc A type containing the notification subscription + * @member callbackData CallbackData if passed by the application in the receiptRequest element during the associated subscription operation + * @member link Link to other resources that are in relationship with the resource + * @member isFinalNotification Set to true if it is a final notification about location change + * @member terminalLocation Collection of the terminal locations + */ + type record SubscriptionNotification { + CallbackData callbackData optional, + DistanceCriteria distanceCriteria optional, + JSON.Bool isFinalNotification optional, + Link link optional, + TerminalLocationList terminalLocation + } + + /** + * @desc A type containing the subscription cancellation notification + * @member address_ Address of terminal if the error applies to an individual terminal + * @member callbackData CallbackData if passed by the application in the receiptRequest element during the associated subscription operation + * @member link Link to other resources that are in relationship with the resource + * @member reason Used to indicate a notification termination or cancellation + */ + type record SubscriptionCancellationNotification { + Address address_, + CallbackData callbackData optional, + Link link optional, + ServiceError reason } with { variant (address_) "name as 'address'"; } /** * @desc This type contains a list of subscriptions + * @member zonalTrafficSubscription Collection of ZonalTrafficSubscription elements + * @member userTrackingSubscription Collection of UserTrackingSubscription elements + * @member periodicTrackingSubscription Collection of PeriodicNotificationSubscription elements + * @member zoneStatusSubscription Collection of ZoneStatusSubscription elements + * @member circleNotificationSubscription Collection of CircleNotificationSubscription elements + * @member distanceNotificationSubscription Collection of DistanceNotificationSubscription elements + * @member resourceURL Self-referring URL * @ see ETSI GS MEC 013 V2.1.1 (2019-09) Clause 6.3.3 Type: NotificationSubscriptionList */ type record NotificationSubscriptionList { @@ -519,7 +734,6 @@ REST_NetAPI_Common]. PeriodicTrackingSubscription periodicTrackingSubscription optional, ZoneStatusSubscription zoneStatusSubscription optional, CircleNotificationSubscription circleNotificationSubscription optional, - PeriodicNotificationSubscription periodicNotificationSubscription optional, DistanceNotificationSubscription distanceNotificationSubscription optional, ResourceURL resourceURL } diff --git a/ttcn/LibMec/MeoPkgm/module.mk b/ttcn/LibMec/MeoPkgm/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..45f37a2333797160e9690b0245868173fc2d4263 --- /dev/null +++ b/ttcn/LibMec/MeoPkgm/module.mk @@ -0,0 +1,5 @@ +sources := \ + ttcn/MeoPkgm_Pics.ttcn \ + ttcn/MeoPkgm_Pixits.ttcn \ + ttcn/MeoPkgm_Templates.ttcn \ + ttcn/MeoPkgm_TypesAndValues.ttcn diff --git a/ttcn/LibMec/MepmPkgm/module.mk b/ttcn/LibMec/MepmPkgm/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..aa44ff9ac64624040c88ca53b8c4baba6750f18f --- /dev/null +++ b/ttcn/LibMec/MepmPkgm/module.mk @@ -0,0 +1,5 @@ +sources := \ + ttcn/MepmPkgm_Pics.ttcn \ + ttcn/MepmPkgm_Pixits.ttcn \ + ttcn/MepmPkgm_Templates.ttcn \ + ttcn/MepmPkgm_TypesAndValues.ttcn diff --git a/ttcn/LibMec/RnisAPI/module.mk b/ttcn/LibMec/RnisAPI/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..ba9d6958b56310b48b6f93a92112a9c683944651 --- /dev/null +++ b/ttcn/LibMec/RnisAPI/module.mk @@ -0,0 +1,5 @@ +sources := \ + ttcn/RnisAPI_Pics.ttcn \ + ttcn/RnisAPI_Pixits.ttcn \ + ttcn/RnisAPI_Templates.ttcn \ + ttcn/RnisAPI_TypesAndValues.ttcn diff --git a/ttcn/LibMec/TrafficManagementAPI/json/BwManagementApi.json b/ttcn/LibMec/TrafficManagementAPI/json/BwManagementApi.json new file mode 100644 index 0000000000000000000000000000000000000000..12010d61681535518f6f016b684d3c422a5d0f8b --- /dev/null +++ b/ttcn/LibMec/TrafficManagementAPI/json/BwManagementApi.json @@ -0,0 +1,629 @@ +{ + "openapi": "3.0.0", + "info": { + "contact": { + "url": "https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api" + }, + "title": "ETSI GS MEC 015 Bandwidth Management API", + "version": "2.1.1", + "description": "The ETSI MEC ISG Bandwidth Management API described using OpenAPI.", + "license": { + "name": "BSD-3-Clause", + "url": "https://forge.etsi.org/legal-matters" + } + }, + "externalDocs": { + "description": "ETSI GS MEC015 V2.1.1 Traffic Management APIs", + "url": "https://www.etsi.org/deliver/etsi_gs/MEC/001_099/015/02.01.01_60/gs_MEC015v020101p.pdf" + }, + "servers": [ + { + "url": "https://localhost/bwm/v1" + } + ], + "tags": [ + { + "name": "bwm" + } + ], + "paths": { + "/bw_allocations": { + "get": { + "tags": [ + "bwm" + ], + "summary": "Retrieve information about a list of bandwidthAllocation resources", + "description": "Retrieves information about a list of bandwidthAllocation resources. Typically used in 'Get configured bandwidth allocation from Bandwidth Management Service' procedure as described in clause 6.2.5.", + "operationId": "bandwidthAllocationListGET", + "parameters": [ + { + "$ref": "#/components/parameters/Query.app_instance_id" + }, + { + "$ref": "#/components/parameters/Query.app_name" + }, + { + "$ref": "#/components/parameters/Query.session_id" + } + ], + "responses": { + "200": { + "description": "Upon success, a response body containing an array of the bandwidthAllocations is returned.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BwInfo" + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + }, + "post": { + "tags": [ + "bwm" + ], + "summary": "Create a bandwidthAllocation resource", + "description": "Used to create a bandwidthAllocation resource. Typically used in 'Register to Bandwidth Management Service' procedure as described in clause 6.2.1.", + "operationId": "bandwidthAllocationPOST", + "parameters": [], + "requestBody": { + "description": "Entity body in the request contains BwInfo to be created.", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BwInfo" + } + } + } + }, + "responses": { + "201": { + "description": "Upon success, the HTTP response shall include a 'Location' HTTP header that contains the resource URI of the created resource.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BwInfo" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/bw_allocations/{allocationId}": { + "get": { + "tags": [ + "bwm" + ], + "summary": "Retrieve information about a specific bandwidthAllocation", + "description": "Retrieves information about a bandwidthAllocation resource. Typically used in 'Get configured bandwidth allocation from Bandwidth Management Service' procedure as described in clause 6.2.5.", + "operationId": "bandwidthAllocationGET", + "parameters": [ + { + "$ref": "#/components/parameters/Path.allocationId" + } + ], + "responses": { + "200": { + "description": "Used to indicate nonspecific success. The response body contains a representation of the resource.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BwInfo" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + }, + "put": { + "tags": [ + "bwm" + ], + "summary": "Update the information about a specific bandwidthAllocation", + "description": "Updates the information about a bandwidthAllocation resource. As specified in ETSI GS MEC 009 [6], the PUT HTTP method has 'replace' semantics.", + "operationId": "bandwidthAllocationPUT", + "requestBody": { + "description": "BwInfo with updated information is included as entity body of the request.", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BwInfo" + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Path.allocationId" + } + ], + "responses": { + "200": { + "description": "Used to indicate nonspecific success. The response body contains a representation of the resource.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BwInfo" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "412": { + "$ref": "#/components/responses/412" + } + } + }, + "patch": { + "tags": [ + "bwm" + ], + "summary": "Modify the information about a specific existing bandwidthAllocation by sending updates on the data structure", + "description": "Updates the information about a bandwidthAllocation resource. As specified in ETSI GS MEC 009 [6], the PATCH HTTP method updates a resource on top of the existing resource state by just including the changes ('deltas') in the request body.", + "operationId": "bandwidthAllocationPATCH", + "requestBody": { + "description": "Description of the changes to instruct the server how to modify the resource representation.", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BwInfoDeltas" + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Path.allocationId" + } + ], + "responses": { + "200": { + "description": "Used to indicate nonspecific success. The response body contains a representation of the resource.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BwInfo" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "412": { + "$ref": "#/components/responses/412" + } + } + }, + "delete": { + "tags": [ + "bwm" + ], + "summary": "Remove a specific bandwidthAllocation", + "description": "Used in 'Unregister from Bandwidth Management Service' procedure as described in clause 6.2.3.", + "operationId": "bandwidthAllocationDELETE", + "parameters": [ + { + "$ref": "#/components/parameters/Path.allocationId" + } + ], + "responses": { + "204": { + "$ref": "#/components/responses/204" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + } + }, + "components": { + "responses": { + "204": { + "description": "Upon success, a response 204 No Content without any response body is returned." + }, + "400": { + "description": "Bad Request : used to indicate that incorrect parameters were passed to the request.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "403": { + "description": "Forbidden : operation is not allowed given the current status of the resource.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "404": { + "description": "Not Found : used when a client provided a URI that cannot be mapped to a valid resource URI.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "412": { + "description": "Precondition failed : used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts when using PUT", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + }, + "parameters": { + "Path.allocationId": { + "name": "allocationId", + "in": "path", + "description": "Represents a bandwidth allocation instance", + "required": true, + "schema": { + "type": "string" + } + }, + "Query.app_instance_id": { + "name": "app_instance_id", + "in": "query", + "description": "A MEC application instance may use multiple app_instance_ids as an input parameter to query the bandwidth allocation of a list of MEC application instances. See note.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Query.app_name": { + "name": "app_name", + "in": "query", + "description": "A MEC application instance may use multiple app_names as an input parameter to query the bandwidth allocation of a list of MEC application instances. See note.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Query.session_id": { + "name": "session_id", + "in": "query", + "description": "A MEC application instance may use session_id as an input parameter to query the bandwidth allocation of a list of sessions. See note.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "schemas": { + "BwInfo": { + "properties": { + "allocationDirection": { + "description": "The direction of the requested BW allocation: 00 = Downlink (towards the UE) 01 = Uplink (towards the application/session) 10 = Symmetrical", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appInsId": { + "description": "Application instance identifier", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "fixedAllocation": { + "description": "Size of requested fixed BW allocation in [bps]", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "fixedBWPriority": { + "description": "Indicates the allocation priority when dealing with several applications or sessions in parallel. Values are not defined in the present document", + "enum": [ + "SEE_DESCRIPTION" + ], + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Enum" + }, + "requestType": { + "description": "Numeric value (0 - 255) corresponding to specific type of consumer as following: 0 = APPLICATION_SPECIFIC_BW_ALLOCATION 1 = SESSION_SPECIFIC_BW_ALLOCATION", + "type": "integer", + "enum": [ + 0, + 1 + ], + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "sessionFilter": { + "description": "Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected", + "items": { + "type": "object", + "properties": { + "dstAddress": { + "description": "Destination address identity of session (including range)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "dstPort": { + "description": "Destination port identity of session", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "protocol": { + "description": "Protocol number", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "sourceIp": { + "description": "Source address identity of session (including range)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "sourcePort": { + "description": "Source port identity of session", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + } + } + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "timeStamp": { + "description": "Time stamp to indicate when the corresponding information elements are sent", + "properties": { + "nanoSeconds": { + "description": "The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "seconds": { + "format": "uint32", + "type": "integer", + "description": "The seconds part of the Time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "required": [ + "seconds", + "nanoSeconds" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "appInsId", + "requestType", + "fixedAllocation", + "allocationDirection" + ], + "type": "object", + "x-etsi-ref": "7.2.2" + }, + "BwInfoDeltas": { + "properties": { + "allocationDirection": { + "description": "The direction of the requested BW allocation: 00 = Downlink (towards the UE) 01 = Uplink (towards the application/session) 10 = Symmetrical", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "appInsId": { + "description": "Application instance identifier", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "fixedAllocation": { + "description": "Size of requested fixed BW allocation in [bps]", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "fixedBWPriority": { + "description": "Indicates the allocation priority when dealing with several applications or sessions in parallel. Values are not defined in the present document", + "enum": [ + "SEE DESCRIPTION" + ], + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "requestType": { + "description": "Numeric value (0 - 255) corresponding to specific type of consumer as following: 0 = APPLICATION_SPECIFIC_BW_ALLOCATION 1 = SESSION_SPECIFIC_BW_ALLOCATION", + "type": "string", + "enum": [ + 0, + 1 + ], + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "sessionFilter": { + "description": "Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected", + "items": { + "type": "object", + "properties": { + "dstAddress": { + "description": "Destination address identity of session (including range)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "dstPort": { + "description": "Destination port identity of session", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "protocol": { + "description": "Protocol number", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "sourceIp": { + "description": "Source address identity of session (including range)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "sourcePort": { + "description": "Source port identity of session ", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + } + } + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "appInsId", + "requestType" + ], + "type": "object", + "x-etsi-ref": "7.2.3" + }, + "ProblemDetails": { + "properties": { + "detail": { + "description": "A human-readable explanation specific to this occurrence of the problem", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "instance": { + "description": "A URI reference that identifies the specific occurrence of the problem", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + }, + "status": { + "description": "The HTTP status code for this occurrence of the problem", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "title": { + "description": "A short, human-readable summary of the problem type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "type": { + "description": "A URI reference according to IETF RFC 3986 that identifies the problem type", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + } + }, + "type": "object" + } + } + } +} diff --git a/ttcn/LibMec/TrafficManagementAPI/json/TrafficSteeringApi.json b/ttcn/LibMec/TrafficManagementAPI/json/TrafficSteeringApi.json new file mode 100644 index 0000000000000000000000000000000000000000..2a5b2920b6c2d95274a201a002527de07bf7c70b --- /dev/null +++ b/ttcn/LibMec/TrafficManagementAPI/json/TrafficSteeringApi.json @@ -0,0 +1,657 @@ +{ + "openapi": "3.0.0", + "info": { + "contact": { + "url": "https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api" + }, + "title": "ETSI GS MEC 015 Multi-access Traffic Steering APIs", + "version": "2.1.1", + "description": "The present document focuses on the Multi-access Traffic Steering multi-access edge service. It describes the related application policy information including authorization and access control, information flows, required information and service aggregation patterns. The present document specifies the necessary API with the data model and data format.", + "license": { + "name": "BSD-3-Clause", + "url": "https://forge.etsi.org/legal-matters" + } + }, + "externalDocs": { + "description": "ETSI GS MEC015 V2.1.1 Traffic Management APIs", + "url": "https://www.etsi.org/deliver/etsi_gs/MEC/001_099/015/02.01.01_60/gs_MEC015v020101p.pdf" + }, + "servers": [ + { + "url": "https://localhost/mts/v1" + } + ], + "tags": [ + { + "name": "mts" + } + ], + "paths": { + "/mts_capability_info": { + "get": { + "tags": [ + "mts" + ], + "summary": "Retrieve the MTS capability informations", + "description": "Used to query information about the MTS information. Typically used in the 'Get MTS service Info from the MTS Service' procedure as described in clause 6.2.6.", + "operationId": "mtsCapabilityInfoGET", + "parameters": [], + "responses": { + "200": { + "description": "Upon success, a response body containing the MTS capability information is returned.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MtsCapabilityInfo" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/mts_sessions": { + "get": { + "tags": [ + "mts" + ], + "summary": "Retrieve information about a list of MTS sessions", + "description": "Retrieves information about a list of MTS sessions. Typically used in the 'Get configured MTS Session Info from the MTS Service' procedure as described in clause 6.2.10.", + "operationId": "mtsSessionsListGET", + "parameters": [ + { + "$ref": "#/components/parameters/Query.app_instance_id" + }, + { + "$ref": "#/components/parameters/Query.app_name" + }, + { + "$ref": "#/components/parameters/Query.session_id" + } + ], + "responses": { + "200": { + "description": "Upon success, a response body containing an array of the MTS sessions is returned.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MtsSessionInfo" + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + }, + "post": { + "tags": [ + "mts" + ], + "summary": "Create a MTS session", + "description": "Used to create a MTS session. This method is typically used in 'Register application to the MTS Service' procedure as described in clause 6.2.7.", + "operationId": "mtsSessionPOST", + "parameters": [], + "requestBody": { + "description": "Entity body in the request contains MtsSessionInfo to be created.", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MtsSessionInfo" + } + } + } + }, + "responses": { + "201": { + "description": "Upon success, the HTTP response shall include a 'Location' HTTP header that contains the resource URI of the created resource.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MtsSessionInfo" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/mts_sessions/{sessionId}": { + "get": { + "tags": [ + "mts" + ], + "summary": "Retrieve information about specific MTS session", + "description": "Retrieves information about an individual MTS session. Typically used in the 'Get configured MTS Session Info from the MTS Service' procedure as described in clause 6.2.10.", + "operationId": "mtsSessionGET", + "parameters": [ + { + "$ref": "#/components/parameters/Path.sessionId" + } + ], + "responses": { + "200": { + "description": "Used to indicate nonspecific success. The response body contains a representation of the resource.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MtsSessionInfo" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + }, + "put": { + "tags": [ + "mts" + ], + "summary": "Update the information about specific MTS session", + "description": "Updates the information about an individual MTS session. As specified in ETSI GS MEC 009 [6], the PUT HTTP method has 'replace' semantics. ", + "operationId": "mtsSessionPUT", + "parameters": [ + { + "$ref": "#/components/parameters/Path.sessionId" + } + ], + "requestBody": { + "description": "MtsSessionInfo with updated information is included as entity body of the request.", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MtsSessionInfo" + } + } + } + }, + "responses": { + "200": { + "description": "Used to indicate nonspecific success. The response body contains a representation of the resource.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MtsSessionInfo" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "412": { + "$ref": "#/components/responses/412" + } + } + }, + "delete": { + "tags": [ + "mts" + ], + "summary": "Remove specific MTS session", + "description": "DELETE method is typically used in 'Unregister from the MTS Service' procedure as described in clause 6.2.8.", + "operationId": "mtsSessionDELETE", + "parameters": [ + { + "$ref": "#/components/parameters/Path.sessionId" + } + ], + "responses": { + "204": { + "$ref": "#/components/responses/204" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + } + }, + "components": { + "responses": { + "204": { + "description": "Upon success, a response 204 No Content without any response body is returned." + }, + "400": { + "description": "Bad Request : used to indicate that incorrect parameters were passed to the request.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "403": { + "description": "Forbidden : operation is not allowed given the current status of the resource.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "404": { + "description": "Not Found : used when a client provided a URI that cannot be mapped to a valid resource URI.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "412": { + "description": "Precondition failed : used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts when using PUT", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + }, + "parameters": { + "Path.sessionId": { + "name": "sessionId", + "in": "path", + "description": "Represents a MTS session instance", + "required": true, + "schema": { + "type": "string" + } + }, + "Query.app_instance_id": { + "name": "app_instance_id", + "in": "query", + "description": "A MEC application instance may use multiple app_instance_ids as an input parameter to query the MTS session of a list of MEC application instances. See note.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Query.app_name": { + "name": "app_name", + "in": "query", + "description": "A MEC application instance may use multiple app_names as an input parameter to query the MTS session of a list of MEC application instances. See note.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Query.session_id": { + "name": "session_id", + "in": "query", + "description": "A MEC application instance may use session_id as an input parameter to query the information of a list of MTS sessions. See note.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "schemas": { + "MtsCapabilityInfo": { + "properties": { + "mtsAccessInfo": { + "description": "The information on access network connection as defined below", + "items": { + "type": "object", + "properties": { + "accessId": { + "format": "uint32", + "type": "integer", + "description": "Unique identifier for the access network connection", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "accessType": { + "format": "uint32", + "type": "integer", + "description": "Numeric value (0-255) corresponding to specific type of access network as following: 0 = Unknown 1 = Any IEEE802.11-based WLAN technology 2 = Any 3GPP-based Cellular technology 3 = Any Fixed Access 11 = IEEE802.11 a/b/g WLAN 12 = IEEE 802.11 a/b/g/n WLAN 13 = IEEE 802.11 a/b/g/n/ac WLAN 14 = IEEE 802.11 a/b/g/n/ac/ax WLAN (Wi-Fi 6) 15 = IEEE 802.11 b/g/n WLAN 31 = 3GPP GERAN/UTRA (2G/3G) 32 = 3GPP E-UTRA (4G/LTE) 33 = 3GPP NR (5G)", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "metered": { + "format": "uint32", + "type": "integer", + "description": "Numeric value (0-255) corresponding to the following: 0: the connection is not metered (see note) 1: the connection is metered 2: unknown ", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + } + } + }, + "required": [ + "accessId", + "accessType", + "metered" + ], + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "mtsMode": { + "description": "Numeric value corresponding to a specific MTS operation supported by the TMS 0 = low cost, i.e. using the unmetered access network connection whenever it is available 1 = low latency, i.e. using the access network connection with lower latency 2 = high throughput, i.e. using the access network connection with higher throughput, or/and multiple access network connection simultaneously if supported 3 = redundancy, i.e. sending duplicated (redundancy) packets over multiple access network connections for highreliability and low-latency applications 4 = QoS, i.e. performing MTS based on the specific QoS requirements from the app", + "items": { + "type": "integer", + "format": "uint32" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Uint32" + }, + "timeStamp": { + "description": "Time stamp to indicate when the corresponding information elements are sent", + "properties": { + "nanoSeconds": { + "format": "uint32", + "type": "integer", + "description": "Time in nanoseconds in Unix-time since January 1, 1970, 00:00:00 UTC", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "seconds": { + "description": "Time in seconds in Unix-time since January 1, 1970, 00:00:00 UTC", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "required": [ + "seconds", + "nanoSeconds" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "mtsAccessInfo", + "mtsMode" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tA metered connection is a network connection that has a maximum data usage in a specific period, e.g. per hour/day/week/month. The user may get billed extra charges if they go over the allotted amount.", + "x-etsi-ref": "7.2.4" + }, + "MtsSessionInfo": { + "properties": { + "appInsId": { + "description": "Application instance identifier", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "flowFilter": { + "description": "Traffic flow filtering criteria, applicable only if when requestType is set as FLOW_SPECIFIC_MTS_SESSION. Any filtering criteria shall define a single session only. In case multiple sessions match flowFilter the request shall be rejected. If the flowFilter field is included, at least one of its subfields shall be included. Any flowFilter subfield that is not included shall be ignored in traffic flow filtering", + "items": { + "type": "object", + "properties": { + "dscp": { + "format": "uint32", + "type": "integer", + "description": "DSCP in the IPv4 header or Traffic Class in the IPv6 header", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dstIp": { + "description": "Destination address identity of session (including range)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "dstPort": { + "description": "Destination port identity of session", + "items": { + "type": "integer", + "format": "uint32" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Uint32" + }, + "flowlabel": { + "format": "uint32", + "type": "integer", + "description": "Flow Label in the IPv6 header, applicable only if the flow is IPv6", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "protocol": { + "format": "uint32", + "type": "integer", + "description": "Protocol number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "sourceIp": { + "description": "Source address identity of session (including range)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "sourcePort": { + "description": "Source port identity of session", + "items": { + "type": "integer", + "format": "uint32" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Uint32" + } + } + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "mtsMode": { + "format": "uint32", + "type": "integer", + "description": "Numeric value (0 - 255) corresponding to a specific MTS mode of the MTS session: 0 = low cost, i.e. using the unmetered access network connection whenever it is available 1 = low latency, i.e. using the access network connection with lower latency 2 = high throughput, i.e. using the access network connection with higher throughput, or multiple access network connection simultaneously 3 = redundancy, i.e. sending duplicated (redundancy) packets over multiple access network connections for high-reliability and low-latency applications 4 = QoS, i.e. performing MTS based on the QoS requirement (qosD)", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "qosD": { + "description": "QoS requirement description of the MTS session, applicable only if mtsMode = 4 (QoS). If the qosD field is included, at least one of its subfields shall be included. Any qosD subfield that is not included shall be ignored in Multi-access Traffic Steering (MTS)", + "properties": { + "maxJitter": { + "description": "tolerable jitter in [10 nanoseconds]", + "type": "integer", + "format": "uint32", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "maxLatency": { + "description": "tolerable (one-way) delay in [10 nanoseconds]", + "type": "integer", + "format": "uint32", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "maxLoss": { + "description": "tolerable packet loss rate in [1/10^x]", + "type": "integer", + "format": "uint32", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "minTpt": { + "description": "minimal throughput in [kbps]", + "type": "integer", + "format": "uint32", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "priority": { + "description": "numeric value (0 - 255) corresponding to the traffic priority 0: low; 1: medium; 2: high; 3: critical", + "type": "integer", + "format": "uint32", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "type": "object", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Structure" + }, + "requestType": { + "description": "Numeric value (0 - 255) corresponding to specific type of consumer as following: 0 = APPLICATION_SPECIFIC_MTS_SESSION 1 = FLOW_SPECIFIC_MTS_SESSION", + "enum": [ + 0, + 1 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "timeStamp": { + "description": "Time stamp to indicate when the corresponding information elements are sent ", + "properties": { + "nanoSeconds": { + "format": "uint32", + "type": "integer", + "description": "The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "seconds": { + "format": "uint32", + "type": "integer", + "description": "The seconds part of the Time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "required": [ + "seconds", + "nanoSeconds" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "trafficDirection": { + "description": "The direction of the requested MTS session: 00 = Downlink (towards the UE) 01 = Uplink (towards the application/session) 10 = Symmetrical (see note) ", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "appInsId", + "requestType", + "flowFilter", + "qosD", + "mtsMode", + "trafficDirection" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tFor the downlink direction of a symmetrical flow, \"sourceIp\" and \"sourcePort\" in the \"flowFilter\" structure are used for source address and port, respectively; \"dstIp\" and \"dstPort\" are used for destination address and port, respectively. For the uplink direction of a symmetrical flow, \"sourceIp\" and \"sourcePort\" are used for destination address and port, respectively; \"dstIp\" and \"dstPort\" are used for source address and port, respectively.", + "x-etsi-ref": "7.2.5" + }, + "ProblemDetails": { + "properties": { + "detail": { + "description": "A human-readable explanation specific to this occurrence of the problem", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "instance": { + "description": "A URI reference that identifies the specific occurrence of the problem", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + }, + "status": { + "description": "The HTTP status code for this occurrence of the problem", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "title": { + "description": "A short, human-readable summary of the problem type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "type": { + "description": "A URI reference according to IETF RFC 3986 that identifies the problem type", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + } + }, + "type": "object" + } + } + } +} diff --git a/ttcn/LibMec/TrafficManagementAPI/module.mk b/ttcn/LibMec/TrafficManagementAPI/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..67f953c5e5bc7b6682094671aa4aeaf5ff933d40 --- /dev/null +++ b/ttcn/LibMec/TrafficManagementAPI/module.mk @@ -0,0 +1,6 @@ +sources := \ + ttcn/TrafficManagementAPI_Pics.ttcn \ + ttcn/TrafficManagementAPI_Pixits.ttcn \ + ttcn/TrafficManagementAPI_Templates.ttcn \ + ttcn/TrafficManagementAPI_Functions.ttcn \ + ttcn/TrafficManagementAPI_TypesAndValues.ttcn diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..1d86a9e14286e197a97b33d985db05359113f1fb --- /dev/null +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Functions.ttcn @@ -0,0 +1,191 @@ +module TrafficManagementAPI_Functions { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_Time all; + import from LibCommon_VerdictControl all; + import from LibCommon_Sync all; + + // LibHttp + import from LibItsHttp_TypesAndValues all; + import from LibItsHttp_Functions all; + import from LibItsHttp_Templates all; + import from LibItsHttp_JsonTemplates all; + import from LibItsHttp_TestSystem all; + + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_TypesAndValues all; + import from TrafficManagementAPI_Templates all; + import from TrafficManagementAPI_Pixits all; + + // LibMec + import from LibMec_Templates all; + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + + function f_create_bw_allocation_resource( + in JSON.String p_app_instance_id, + out charstring p_bw_allocation_id, + out BwInfo p_bw_info + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + p_bw_allocation_id := ""; + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PX_ME_BWM_URI, + v_headers, + m_http_message_body_json( + m_body_json_bw_info( + m_bw_info( + p_app_instance_id, + APPLICATION_SPECIFIC_BW_ALLOCATION, // Request type + "1024", // FixedAllocation + Downlink // AllocationDirection + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_bw_info( + mw_bw_info( + p_app_instance_id + )))))) -> value v_response { + var charstring_list v_bw_allocation_id; + + tc_ac.stop; + + log("f_create_bw_allocation_resource: BwInfo resource created: ", v_response); + f_get_header(valueof(v_response.response.header), "Location", v_bw_allocation_id); + if (lengthof(v_bw_allocation_id) != 0) { + p_bw_allocation_id := v_bw_allocation_id[0]; + p_bw_info := v_response.response.body.json_body.bwInfo; + } + } + [] tc_ac.timeout { + log("f_create_bw_allocation_resource: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_create_bw_allocation_resource + + function f_delete_bw_allocation_resource( + in JSON.String p_app_instance_id, + in charstring p_bw_allocation_id + ) runs on HttpComponent { + var Headers v_headers; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PX_ME_BWM_URI & "/" & p_bw_allocation_id, + v_headers + ))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_bw_allocation_resource: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_bw_allocation_resource + + function f_create_mts_session_info_resource( + in JSON.String p_app_instance_id, + out charstring p_mts_session_id, + out MtsSessionInfo p_mts_session_info + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + p_mts_session_id := ""; + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PX_ME_MTS_SESSIONS_URI, + v_headers, + m_http_message_body_json( + m_body_json_mts_session_info( + m_mts_session_info( + PX_APP_INSTANCE_ID, + APPLICATION_SPECIFIC_MTS_ALLOCATION, // Request type + m_qosd, // QoS + LowCost, // MtsMode + Downlink, // TrafficDirection + { + m_session_filter( + "10.10.10.10", + {"1010"} + ) + } // FlowFilter + )))))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_mts_session_info( + mw_mts_session_info( + p_app_instance_id + )))))) -> value v_response { + var charstring_list v_mts_session_info_id; + + tc_ac.stop; + + log("f_create_mts_session_info_resource: BwInfo resource created: ", v_response); + f_get_header(valueof(v_response.response.header), "Location", v_mts_session_info_id); + if (lengthof(v_mts_session_info_id) != 0) { + p_mts_session_id := v_mts_session_info_id[0]; + p_mts_session_info := v_response.response.body.json_body.mtsSessionInfo; + } + } + [] tc_ac.timeout { + log("f_create_mts_session_info_resource: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_create_mts_session_info_resource + + function f_delete_mts_session_info_resource( + in JSON.String p_app_instance_id, + in charstring p_mts_session_id + ) runs on HttpComponent { + var Headers v_headers; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PX_ME_MTS_SESSIONS_URI & "/" & p_mts_session_id, + v_headers + ))); + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_mts_session_info_resource: Expected message not received"); + } + } // End of 'alt' statement + } // End of function f_delete_mts_session_info_resource + +} // End of module TrafficManagementAPI_Functions diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pics.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pics.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..fa8cf88ce21d803c7f09b04e4a62c9d20fd33f7a --- /dev/null +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pics.ttcn @@ -0,0 +1,8 @@ +module TrafficManagementAPI_Pics { + + /** + * @desc Does the IUT support TrafficManagementAPI? + */ + modulepar boolean PICS_BWMANAGEMENT_API_SUPPORTED := true; + +} // End of module TrafficManagementAPI_Pics diff --git a/ttcn/LibMec/BwManagementAPI/ttcn/BwManagementAPI_Pixits.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn similarity index 67% rename from ttcn/LibMec/BwManagementAPI/ttcn/BwManagementAPI_Pixits.ttcn rename to ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn index ff8445d5ff637f7e6f8ebdd457dc7cca6f6cdd06..9a7219aa4ac1d61b5d26f5e2790bc166ddcd4aed 100644 --- a/ttcn/LibMec/BwManagementAPI/ttcn/BwManagementAPI_Pixits.ttcn +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Pixits.ttcn @@ -1,4 +1,4 @@ -module BwManagementAPI_Pixits { +module TrafficManagementAPI_Pixits { // LibCommon import from LibCommon_BasicTypesAndValues all; @@ -8,6 +8,8 @@ module BwManagementAPI_Pixits { modulepar Address PX_APP_INSTANCE_ID := "appInst01"; + modulepar Address PX_UNKNOWN_APP_INSTANCE_ID := "appInst99"; + modulepar ResourceURL PX_RESOURCE_URL := "http://example.com/exampleAPI/location/v2/users?address:acr:192.0.0.1"; -} // End of module BwManagementAPI_Pixits +} // End of module TrafficManagementAPI_Pixits diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..93e9faac6eacf564b2019cd39eb35f341a9cd57d --- /dev/null +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_Templates.ttcn @@ -0,0 +1,213 @@ +module TrafficManagementAPI_Templates { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_TypesAndValues all; + import from TrafficManagementAPI_Pixits all; + + template (omit) BwInfo m_bw_info( + in AppInsId p_appInsId := PX_APP_INSTANCE_ID, + in BwRequestType p_requestType, + in FixedAllocation p_fixedAllocation, + in AllocationDirection p_allocationDirection, + in template (omit) SessionFilter p_sessionFilter := omit, + in template (omit) FixedBWPriority p_fixedBWPriority := omit + ) := { + timeStamp := omit, + appInsId := p_appInsId, + requestType := p_requestType, + sessionFilter := p_sessionFilter, + fixedBWPriority := p_fixedBWPriority, + fixedAllocation := p_fixedAllocation, + allocationDirection := p_allocationDirection + } // End of template m_bw_info + + template BwInfo mw_bw_info( + template (present) AppInsId p_appInsId := ?, + template (present) BwRequestType p_requestType := ?, + template (present) FixedAllocation p_fixedAllocation := ?, + template (present) AllocationDirection p_allocationDirection := ?, + template SessionFilter p_sessionFilter := *, + template FixedBWPriority p_fixedBWPriority := * + ) := { + timeStamp := *, + appInsId := p_appInsId, + requestType := p_requestType, + sessionFilter := p_sessionFilter, + fixedBWPriority := p_fixedBWPriority, + fixedAllocation := p_fixedAllocation, + allocationDirection := p_allocationDirection + } // End of template mw_bw_info + + template (omit) BwInfoDeltas m_bw_info_deltas( + in AppInsId p_appInsId := PX_APP_INSTANCE_ID, + in BwRequestType p_requestType, + in template (omit) SessionFilter p_sessionFilter := omit, + in template (omit) FixedAllocation p_fixedAllocation := omit, + in template (omit) AllocationDirection p_allocationDirection := omit, + in template (omit) FixedBWPriority p_fixedBWPriority := omit + ) := { + appInsId := p_appInsId, + requestType := p_requestType, + sessionFilter := p_sessionFilter, + fixedBWPriority := p_fixedBWPriority, + fixedAllocation := p_fixedAllocation, + allocationDirection := p_allocationDirection + } // End of template m_bw_info_deltas + + template BwInfoDeltas mw_bw_info_deltas( + template (present) AppInsId p_appInsId := ?, + template (present) BwRequestType p_requestType := ?, + template (present) SessionFilter p_sessionFilter := ?, + template (present) FixedAllocation p_fixedAllocation := ?, + template (present) AllocationDirection p_allocationDirection := ?, + template FixedBWPriority p_fixedBWPriority := * + ) := { + appInsId := p_appInsId, + requestType := p_requestType, + sessionFilter := p_sessionFilter, + fixedBWPriority := p_fixedBWPriority, + fixedAllocation := p_fixedAllocation, + allocationDirection := p_allocationDirection + } // End of template mw_bw_info_deltas + + template (omit) SessionFilterItems m_session_filter( + in template (value) SourceIp p_sourceIp, + in template (value) SourcePort p_sourcePort, + in template (omit) DstAddress p_dstAddress := omit, + in template (omit) DstPort p_dstPort := omit, + in template (omit) Protocol p_protocol := omit + ) := { + sourceIp := p_sourceIp, + sourcePort := p_sourcePort, + dstAddress := p_dstAddress, + dstPort := p_dstPort, + protocol := p_protocol + } // End of template m_session_filter + + template SessionFilterItems mw_session_filter( + template (present) SourceIp p_sourceIp := ?, + template (present) SourcePort p_sourcePort := ?, + template DstAddress p_dstAddress := *, + template DstPort p_dstPort := *, + template Protocol p_protocol := * + ) := { + sourceIp := p_sourceIp, + sourcePort := p_sourcePort, + dstAddress := p_dstAddress, + dstPort := p_dstPort, + protocol := p_protocol + } // End of template mw_session_filter + + template (omit) MtsCapabilityInfo m_mts_capability_info( + in template (value) MtsAccessInfos p_mtsAccessInfo, + in template (value) MtsModes p_mtsMode, + in template (omit) TimeStamp p_timeStamp := omit + ) := { + timeStamp := p_timeStamp, + mtsAccessInfo := p_mtsAccessInfo, + mtsMode := p_mtsMode + } // End of template m_mts_capability_info + + template MtsCapabilityInfo mw_mts_capability_info( + template (present) MtsAccessInfos p_mtsAccessInfo := ?, + template (present) MtsModes p_mtsMode := ?, + template TimeStamp p_timeStamp := * + ) := { + timeStamp := p_timeStamp, + mtsAccessInfo := p_mtsAccessInfo, + mtsMode := p_mtsMode + } // End of template mw_mts_capability_info + + template (omit) MtsSessionInfo m_mts_session_info( + in template (value) AppInsId p_appInsId, + in template (value) MtsRequestType p_requestType, + in template (value) QosD p_qosD, + in template (value) MtsMode p_mtsMode, + in template (value) TrafficDirection p_trafficDirection, + in template (omit) FlowFilter p_flowFilter := omit, + in template (omit) TimeStamp p_timeStamp := omit + ) := { + timeStamp := p_timeStamp, + appInsId := p_appInsId, + requestType := p_requestType, + flowFilter := p_flowFilter, + qosD := p_qosD, + mtsMode := p_mtsMode, + trafficDirection := p_trafficDirection + } // End of template m_mts_session_info + + template MtsSessionInfo mw_mts_session_info( + template (present) AppInsId p_appInsId := ?, + template (present) MtsRequestType p_requestType := ?, + template (present) QosD p_qosD := ?, + template (present) MtsMode p_mtsMode := ?, + template (present) TrafficDirection p_trafficDirection := ?, + template FlowFilter p_flowFilter := *, + template TimeStamp p_timeStamp := * + ) := { + timeStamp := p_timeStamp, + appInsId := p_appInsId, + requestType := p_requestType, + flowFilter := p_flowFilter, + qosD := p_qosD, + mtsMode := p_mtsMode, + trafficDirection := p_trafficDirection + } // End of template mw_mts_session_info + + template (value) QosD m_qosd( + in UInt32 p_minTpt := 128, + in UInt32 p_maxLatency := 128, + in UInt32 p_maxLoss := 128, + in UInt32 p_maxJitter := 128, + in Priority p_priority := Low + ) := { + minTpt := p_minTpt, + maxLatency := p_maxLatency, + maxLoss := p_maxLoss, + maxJitter := p_maxJitter, + priority := p_priority + } // End of template m_qosd + + template (value) QosD m_qosd_1( + in UInt32 p_minTpt := 64, + in UInt32 p_maxLatency := 64 + ) := { + minTpt := p_minTpt, + maxLatency := p_maxLatency, + maxLoss := omit, + maxJitter := omit, + priority := omit + } // End of template m_qosd_1 + + template QosD mw_qosd( + template UInt32 p_minTpt := *, + template UInt32 p_maxLatency := *, + template UInt32 p_maxLoss := *, + template UInt32 p_maxJitter := *, + template Priority p_priority := * + ) := { + minTpt := p_minTpt, + maxLatency := p_maxLatency, + maxLoss := p_maxLoss, + maxJitter := p_maxJitter, + priority := p_priority + } // End of template mw_qosd + + template QosD mw_qosd_1( + template UInt32 p_minTpt := ?, + template UInt32 p_maxLatency := ? + ) := { + minTpt := p_minTpt, + maxLatency := p_maxLatency, + maxLoss := omit, + maxJitter := omit, + priority := omit + } // End of template mw_qos1 + +} // End of module TrafficManagementAPI_Templates diff --git a/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..6b460308cd65b1333163f85ea9c368cb68f87bc6 --- /dev/null +++ b/ttcn/LibMec/TrafficManagementAPI/ttcn/TrafficManagementAPI_TypesAndValues.ttcn @@ -0,0 +1,270 @@ +module TrafficManagementAPI_TypesAndValues { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + /** + * @desc Information of bandwidth resource + * @member timeStamp Time stamp to indicate when the corresponding information elements are sent + * @member appInsId Application instance identifier + * @member sessionFilter Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only + * @member requestType Numeric value (0 - 255) corresponding to specific type of consumer + * @member fixedBWPriority Indicates the allocation priority when dealing with several applications or sessions in parallel. Values are not defined in the present document + * @member fixedAllocation Size of requested fixed BW allocation in [bps] + * @member allocationDirection The direction of the requested BW allocation + */ + type record BwInfo { + TimeStamp timeStamp optional, + AppInsId appInsId, + BwRequestType requestType, + SessionFilter sessionFilter optional, + FixedBWPriority fixedBWPriority optional, + FixedAllocation fixedAllocation, + AllocationDirection allocationDirection + } + type record of BwInfo BwInfoList; + + /** + * @desc Conform to JSON merge patch format and processing rules specified IETF RFC 7396 [8], this type represents the attributes whose value are allowed to be updated with HTTP PATCH method in content format JSON + * @member appInsId Application instance identifier + * @member requestType Numeric value (0 - 255) corresponding to specific type of consumer + * @member sessionFilter Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION + * @member fixedBWPriority Indicates the allocation priority when dealing with several applications or sessions in parallel + * @member fixedAllocation Size of requested fixed BW allocation in [bps] + * @member allocationDirection The direction of the requested BW allocation + */ + type record BwInfoDeltas { + AppInsId appInsId, + BwRequestType requestType, + SessionFilter sessionFilter optional, + FixedBWPriority fixedBWPriority optional, + FixedAllocation fixedAllocation optional, + AllocationDirection allocationDirection optional + } + + /** + * @desc Time stamp description + * @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type record TimeStamp { + Seconds seconds, + NanoSeconds nanoSeconds + } + + /** + * @desc Application instance identifier + */ + type JSON.String AppInsId; + + /** + * @desc Numeric value (0 - 255) corresponding to specific type of consumer + */ + type enumerated BwRequestType { + APPLICATION_SPECIFIC_BW_ALLOCATION (0), + SESSION_SPECIFIC_BW_ALLOCATION (1) + } with { + variant "JSON: as number" + } + + type enumerated MtsRequestType { + APPLICATION_SPECIFIC_MTS_ALLOCATION (0), + SESSION_SPECIFIC_MTS_ALLOCATION (1) + } with { + variant "JSON: as number" + } + + /** + * @desc Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected + */ + type record of SessionFilterItems SessionFilter; + /** + * @desc Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected + * @member sourceIp Source address identity of session (including range) + * @member sourcePort Source port identity of session + * @member dstAddress Destination address identity of session (including range) + * @member dstPort Destination port identity of session + * @member protocol Protocol number + */ + type record SessionFilterItems { + SourceIp sourceIp optional, + SourcePort sourcePort optional, + DstAddress dstAddress optional, + DstPort dstPort optional, + Protocol protocol optional + } + + /** + * @desc Indicates the allocation priority when dealing with several applications or sessions in parallel. Values are not defined in the present document + */ + type enumerated FixedBWPriority { + reserved + } + + /** + * @desc Size of requested fixed BW allocation in [bps] + */ + type JSON.String FixedAllocation; + + + /** + * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type UInt32 Seconds; + + /** + * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type UInt32 NanoSeconds; + + /** + * @desc The direction of the requested BW allocation + */ + type enumerated AllocationDirection { + Downlink, + Uplink, + Symmetrical + } + + /** + * @desc Source address identity of session (including range) + */ + type JSON.String SourceIp; + + /** + * @desc Source port identity of session + */ + type record of JSON.String SourcePort; + + /** + * @desc Destination address identity of session (including range) + */ + type JSON.String DstAddress; + + /** + * @desc Destination port identity of session + */ + type record of JSON.String DstPort; + + /** + * @desc Protocol number + */ + type JSON.String Protocol; + + /** + * @desc The information on access network connection + * @member timeStamp Time stamp to indicate when the corresponding information elements are sent + * @member mtsAccessInfo The information on access network connection as defined below + * @member mtsMode Numeric value corresponding to a specific MTS operation supported by the TMS + */ + type record MtsCapabilityInfo { + TimeStamp timeStamp optional, + MtsAccessInfos mtsAccessInfo, + MtsModes mtsMode + } + + type enumerated MtsMode { + LowCost (0), + LowLatency (1), + HighThroughput (2), + Redundancy (3), + QoS (4) + } with { + variant "JSON: as number" + } + type record of MtsMode MtsModes; + + /** + * @desc The information on access network connection as defined below + * @member accessId Unique identifier for the access network connection + * @member accessType Numeric value (0-255) corresponding to specific type of access network + * @member metered Numeric value (0-255) + */ + type record MtsAccessInfo { + AccessId accessId, + AccessType accessType, + Metered metered + } + type record of MtsAccessInfo MtsAccessInfos; + + type UInt32 AccessId; + type enumerated AccessType { + Unknown (0), + IEEE802_11_Based (1), + ThreeGPP_Based (2), + Fixed_Access (3), + IEEE802_11abg (11), + IEEE802_11abgn (12), + IEEE802_11abgnac (13), + IEEE802_11abgnacax (14), + IEEE802_11bgn (15), + ThreeGPP_GERAN_UTRA (31), + ThreeGPP_E_UTRA (32), + Three3GPP_NR (33) + } with { + variant "JSON: as number" + } + type enumerated Metered { + CxNotMetered (0), + CxMetered (1), + Unknown (2) + } with { + variant "JSON: as number" + } + + /** + * @desc The information on access network connection as defined below + * @member timeStamp Time stamp to indicate when the corresponding information elements are sent + * @member appInsId Application instance identifier + * @member requestType Numeric value (0 - 255) corresponding to specific type of consumer + * @member flowFilter Traffic flow filtering criteria, applicable only + * @member qosD QoS requirement description of the MTS session + * @member mtsMode Numeric value corresponding to a specific MTS operation + * @member trafficDirection The direction of the requested MTS session supported by the TMS + */ + type record MtsSessionInfo { + TimeStamp timeStamp optional, + AppInsId appInsId, + MtsRequestType requestType, + FlowFilter flowFilter optional, + QosD qosD, + MtsMode mtsMode, + TrafficDirection trafficDirection + } + type record of MtsSessionInfo MtsSessionInfos + + type SessionFilter FlowFilter; + + type AllocationDirection TrafficDirection; + + /** + * @desc + * @member minTpt Minimal throughput in [kbps] + * @member maxLatency Tolerable (one-way) delay in [10 nanoseconds] + * @member maxLoss Tolerable packet loss rate in [1/10^x] + * @member maxJitter Tolerable jitter in [10 nanoseconds] + * @member priority numeric value (0 - 255) corresponding to the traffic priority + */ + type record QosD { + UInt32 minTpt optional, + UInt32 maxLatency optional, + UInt32 maxLoss optional, + UInt32 maxJitter optional, + Priority priority optional + } + + type enumerated Priority { + Low (0), + Medium (1), + High (2), + Critical (3) + } with { + variant "JSON: as number" + } + +} with { + encode "JSON" +} // End of module TrafficManagementAPI_TypesAndValues diff --git a/ttcn/LibMec/UEAppInterfaceAPI/module.mk b/ttcn/LibMec/UEAppInterfaceAPI/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..d69303eb65398ddbfb51ac5243e04acd1afd2276 --- /dev/null +++ b/ttcn/LibMec/UEAppInterfaceAPI/module.mk @@ -0,0 +1,6 @@ +sources := \ + ttcn/UEAppInterfaceAPI_Functions.ttcn \ + ttcn/UEAppInterfaceAPI_Pixits.ttcn \ + ttcn/UEAppInterfaceAPI_TypesAndValues.ttcn \ + ttcn/UEAppInterfaceAPI_Pics.ttcn \ + ttcn/UEAppInterfaceAPI_Templates.ttcn diff --git a/ttcn/LibMec/UEidentityAPI/module.mk b/ttcn/LibMec/UEidentityAPI/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..60c20d0a1b04dc6daf7625bada6f34ed53ad9811 --- /dev/null +++ b/ttcn/LibMec/UEidentityAPI/module.mk @@ -0,0 +1,5 @@ +sources := \ + ttcn/UEidentityAPI_Pics.ttcn \ + ttcn/UEidentityAPI_Pixits.ttcn \ + ttcn/UEidentityAPI_Templates.ttcn \ + ttcn/UEidentityAPI_TypesAndValues.ttcn diff --git a/ttcn/LibMec/V2XInformationServiceAPI/json/MEC030_V2XInformationService.yaml b/ttcn/LibMec/V2XInformationServiceAPI/json/MEC030_V2XInformationService.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4dc7cf39c11dac42c53e343a293c427dd1285efe --- /dev/null +++ b/ttcn/LibMec/V2XInformationServiceAPI/json/MEC030_V2XInformationService.yaml @@ -0,0 +1,1568 @@ +info: + title: "ETSI GS MEC 030 V2X Information Service API" + version: 2.1.1 + description: "ETSI GS MEC 030 V2X Information Service API described using OpenAPI." + contact: + name: ETSI Forge + email: cti_support@etsi.org + url: https://forge.etsi.org/rep/mec/gs030-vis-api + license: + name: BSD-3-Clause + url: 'https://forge.etsi.org/legal-matters' +externalDocs: + description: "ETSI GS MEC 030 V2X Information Service API, v2.1.1" + url: 'https://www.etsi.org/deliver/etsi_gs/MEC/001_099/030/02.01.01_60/gs_mec030v020101p.pdf' +openapi: 3.0.0 +servers: + - url: 'https://localhost/vis/v1' +tags: + - name: queries + description: Queries + - name: subscription + description: Subscription + +paths: + /queries/uu_unicast_provisioning_info: + get: + tags: + - 'queries' + summary: 'Used to query provisioning information for V2X communication over Uu unicast.' + description: 'Used to query provisioning information for V2X communication over Uu unicast.' + operationId: prov_info_uu_unicastGET + parameters: + - in: query + name: location_info + schema: + type: string + required: true + description: 'Comma separated list of locations to identify a cell of a base station or a particular geographical area' + + responses: + '200': + description: 'A response body containing the Uu unicast provisioning information. ' + content: + application/json: + schema: + $ref: '#/components/schemas/UuUnicastProvisioningInfo' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '429': + $ref: '#/components/responses/429' + + /queries/uu_mbms_provisioning_info: + get: + tags: + - 'queries' + summary: 'retrieve information required for V2X communication over Uu MBMS.' + description: 'retrieve information required for V2X communication over Uu MBMS.' + operationId: prov_info_uu_mbmsGET + parameters: + - in: query + name: location_info + schema: + type: string + required: true + description: 'omma separated list of locations to identify a cell of a base station or a particular geographical area' + + responses: + '200': + description: 'A response body containing the Uu unicast provisioning information. ' + content: + application/json: + schema: + $ref: '#/components/schemas/UuMbmsProvisioningInfo' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '429': + $ref: '#/components/responses/429' + + /queries/pc5_provisioning_info: + get: + tags: + - 'queries' + summary: 'Query provisioning information for V2X communication over PC5.' + description: 'Query provisioning information for V2X communication over PC5.' + operationId: prov_infoGET + parameters: + - in: query + name: location_info + schema: + type: string + required: true + description: 'Comma separated list of locations to identify a cell of a base station or a particular geographical area' + responses: + '200': + description: 'A response body containing the PC5 provisioning information is returned.' + content: + application/json: + schema: + $ref: '#/components/schemas/Pc5ProvisioningInfo' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '429': + $ref: '#/components/responses/429' + + /provide_predicted_qos: + post: + tags: + - 'QoS' + summary: 'Request the predicted QoS correspondent to potential routes of a vehicular UE.' + description: 'Request the predicted QoS correspondent to potential routes of a vehicular UE.' + operationId: predicted_qosPOST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/PredictedQos' + responses: + '200': + description: 'The response body shall contain the predicted QoS corresponding to potential routes of a vehicular UE' + content: + application/json: + schema: + $ref: '#/components/schemas/PredictedQos' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + + /publish_v2x_message: + post: + tags: + - 'V2X_msg' + summary: 'Used to publish a V2X message.' + description: 'Used to publish a V2X message.' + operationId: v2x_messagePOST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/V2xMsgPublication' + responses: + '204': + $ref: '#/components/responses/204' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '429': + $ref: '#/components/responses/429' + + /subscriptions: + get: + tags: + - 'subscription' + summary: 'Request information about the subscriptions for this requestor.' + description: 'Request information about the subscriptions for this requestor.' + operationId: subGET + parameters: + - in: query + name: subscription_type + description: 'Query parameter to filter on a specific subscription type. Permitted values: prov_chg_uu_uni: provisioning information change for V2X communication over Uuunicast prov_chg_uu_mbms: provisioning information change for V2X communication over Uu MBMS prov_chg_uu_pc5: provisioning information change for V2X communication over PC5. v2x_msg: V2X interoperability message' + schema: + type: string + required: false + responses: + '200': + description: 'A response body containing the list of links to requestor subscriptions is returned.' + content: + application/json: + schema: + $ref: '#/components/schemas/SubscriptionLinkList' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '429': + $ref: '#/components/responses/429' + post: + tags: + - 'subscription' + summary: ' create a new subscription to VIS notifications.' + description: ' create a new subscription to VIS notifications.' + operationId: subPOST + requestBody: + required: true + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ProvChgUuUniSubscription' + - $ref: '#/components/schemas/ProvChgUuMbmsSubscription' + - $ref: '#/components/schemas/ProvChgPc5Subscription' + - $ref: '#/components/schemas/V2xMsgSubscription' + responses: + '201': + description: 'In the returned NotificationSubscription structure, the created subscription is described using the appropriate data type.' + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ProvChgUuUniSubscription' + - $ref: '#/components/schemas/ProvChgUuMbmsSubscription' + - $ref: '#/components/schemas/ProvChgPc5Subscription' + - $ref: '#/components/schemas/V2xMsgSubscription' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '415': + $ref: '#/components/responses/415' + '422': + $ref: '#/components/responses/422' + '429': + $ref: '#/components/responses/429' + + callbacks: + notification: + '{$request.body#/callbackReference}': + post: + summary: 'Callback POST used to send a notification' + description: 'A notification from VIS.' + operationId: notificationPOST + requestBody: + description: Subscription notification + required: true + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ProvChgUuUniNotification' + - $ref: '#/components/schemas/ProvChgUuMbmsNotification' + - $ref: '#/components/schemas/ProvChgPc5Notification' + - $ref: '#/components/schemas/V2xMsgNotification' + responses: + '204': + $ref: '#/components/responses/204' + + /subscriptions/{subscriptionId}: + parameters: + - in: path + name: subscriptionId + description: 'Refers to created subscription, where the VIS API allocates a unique resource name for this subscription' + schema: + type: string + required: true + + + get: + tags: + - 'subscription' + summary: 'Retrieve information about this subscription.' + description: 'Retrieve information about this subscription.' + operationId: individualSubscriptionGET + + responses: + '200': + description: 'A response body containing the data type describing the specific RNI event subscription is returned' + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ProvChgUuUniSubscription' + - $ref: '#/components/schemas/ProvChgUuMbmsSubscription' + - $ref: '#/components/schemas/ProvChgPc5Subscription' + - $ref: '#/components/schemas/V2xMsgSubscription' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '406': + $ref: '#/components/responses/406' + '429': + $ref: '#/components/responses/429' + + put: + tags: + - 'subscription' + summary: 'Used to update the existing subscription.' + description: 'Used to update the existing subscription.' + operationId: individualSubscriptionPUT + requestBody: + required: true + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ProvChgUuUniSubscription' + - $ref: '#/components/schemas/ProvChgUuMbmsSubscription' + - $ref: '#/components/schemas/ProvChgPc5Subscription' + - $ref: '#/components/schemas/V2xMsgSubscription' + responses: + '200': + description: 'A response body containing data type describing the updated subscription is returned' + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/ProvChgUuUniSubscription' + - $ref: '#/components/schemas/ProvChgUuMbmsSubscription' + - $ref: '#/components/schemas/ProvChgPc5Subscription' + - $ref: '#/components/schemas/V2xMsgSubscription' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' + + '403': + $ref: '#/components/responses/403' + + '404': + $ref: '#/components/responses/404' + + '406': + $ref: '#/components/responses/406' + + '412': + $ref: '#/components/responses/412' + + '422': + $ref: '#/components/responses/422' + + '429': + $ref: '#/components/responses/429' + delete: + tags: + - 'subscription' + summary: 'Used to cancel the existing subscription.' + description: 'Used to cancel the existing subscription.' + operationId: individualSubscriptionDELETE + responses: + '204': + $ref: '#/components/responses/204' + '401': + $ref: '#/components/responses/401' + '403': + $ref: '#/components/responses/403' + '404': + $ref: '#/components/responses/404' + '429': + $ref: '#/components/responses/429' + + # /notifitication_end_point_provided_by_client + #post: + +components: + schemas: + CellId: + properties: + cellId: + description: E-UTRAN Cell Identity as a bit string (size (28)). + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + required: + - cellId + type: object + x-etsi-ref: 6.6.2 + Earfcn: + properties: + earfcn: + description: E-UTRA Absolute Radio Frequency Channel Number, range (0... 65535) + type: integer + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: Integer + required: + - earfcn + type: object + x-etsi-ref: 6.6.3 + Ecgi: + properties: + cellId: + # description': The E-UTRAN Cell Identity. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': CellId + $ref: '#/components/schemas/CellId' + plmn: + # description': Public Land Mobile Network Identity. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': Plmn + $ref: '#/components/schemas/Plmn' + required: + - plmn + - cellId + type: object + x-etsi-ref: 6.5.5 + FddInfo: + properties: + dlEarfcn: + # description': '' + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': Earfcn + $ref: '#/components/schemas/Earfcn' + dlTransmissionBandwidth: + # description': '' + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': TransmissionBandwidth + $ref: '#/components/schemas/TransmissionBandwidth' + ulEarfcn: + # description': '' + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': Earfcn + $ref: '#/components/schemas/Earfcn' + ulTransmissionBandwidth: + # description': '' + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': TransmissionBandwidth + $ref: '#/components/schemas/TransmissionBandwidth' + required: + - ulEarfcn + - dlEarfcn + - ulTransmissionBandwidth + - dlTransmissionBandwidth + type: object + x-etsi-ref: 6.5.6 + + LocationInfo.geoArea: + description: Information of a geographical area. + properties: + latitude: + description: 'Latitude (DATUM = WGS84) -90 to 90 in decimal degree format DDD.ddd' + format: Float + type: number + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: Float + longitude: + description: 'Longitude (DATUM = WGS84)-180 to 180 in decimal degree format DDD.ddd' + format: Float + type: number + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: Float + required: + - latitude + - longitude + type: object + x-etsi-mec-cardinality: 0..1 + + LocationInfo: + properties: + ecgi: + # description': E-UTRAN CelI Global Identifier of the serving cell. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': Ecgi + $ref: '#/components/schemas/Ecgi' + geoArea: + $ref: '#/components/schemas/LocationInfo.geoArea' + type: object + x-etsi-notes: "NOTE:\tEither ecgi or geoArea shall be present, but not both." + x-etsi-ref: 6.5.3 + Pc5NeighbourCellInfo: + properties: + ecgi: + # description': E-UTRAN CelI Global Identifier. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': Ecgi + $ref: '#/components/schemas/Ecgi' + plmn: + # description': Public Land Mobile Network Identity. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': Plmn + $ref: '#/components/schemas/Plmn' + siV2xConfig: + description: V2X sidelink communication configuration, as defined in ETSI TS 136 331 [i.11]. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': SystemInformationBlockType21 (as defined in ETSI TS 136 331 [i.11]) + type: string + required: + - plmn + - ecgi + - siV2xConfig + type: object + x-etsi-ref: 6.5.12 + + + Pc5ProvisioningInfo.proInfoPc5: + description: The provisioning information per location as defined below. + + properties: + dstLayer2Id: + description: "For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID, see ETSI TS\_136\_321 [i.12].\nPLMN operators coordinate to make sure Destination Layer-2 ID(s) for different V2X services are configured in a consistent manner." + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + locationInfo: + # description': Location information to identify a cell of a base station or a particular geographical area. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LocationInfo + $ref: '#/components/schemas/LocationInfo' + neighbourCellInfo: + description: The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5. + items: + $ref: '#/components/schemas/Pc5NeighbourCellInfo' + minItems: 0 + type: array + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Pc5NeighbourCellInfo + required: + - locationInfo + - dstLayer2Id + + Pc5ProvisioningInfo: + properties: + proInfoPc5: + type: array + items: + $ref: '#/components/schemas/Pc5ProvisioningInfo.proInfoPc5' + timeStamp: + # description': Time stamp. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': TimeStamp + $ref: '#/components/schemas/TimeStamp' + required: + - proInfoPc5 + type: object + x-etsi-ref: 6.2.4 + + Plmn: + properties: + mcc: + description: The Mobile Country Code part of PLMN Identity. + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + mnc: + description: The Mobile Network Code part of PLMN Identity. + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + required: + - mcc + - mnc + type: object + x-etsi-ref: 6.5.4 + + PredictedQos.routes.routeInfo: + required: + - location + properties: + location: + $ref: '#/components/schemas/LocationInfo' + time: + $ref: '#/components/schemas/TimeStamp' + rsrp: + description: 'Reference Signal Received Quality as defined in ETSI TS 136 214 [i.13]. Shall only be included in the response' + type: integer + format: Uint8 + + rsrq: + description: 'Reference Signal Received Quality as defined in ETSI TS 136 214 [i.13]. Shall only be included in the response' + type: integer + format: Uint8 + + PredictedQos.routes: + properties: + routeinfo: + description: 'Information relating to a specific route. The first structure shall relate to the route origin and the last to the route destination. Intermediate waypoint locations may also be provided. ' + type: array + minItems: 2 + items: + $ref: '#/components/schemas/PredictedQos.routes.routeInfo' + required: + - routeinfo + + PredictedQos: + description: 'predicted QoS of a vehicular UE' + properties: + timeGranularity: + $ref: '#/components/schemas/TimeStamp' + locationGranularity: + description: 'Granularity of visited location. Measured in meters' + type: string + routes: + type: array + items: + $ref: '#/components/schemas/PredictedQos.routes' + required: + - locationGranularity + - routes + type: object + x-etsi-mec-cardinality: 0..1 + + + ProvChgPc5Notification: + properties: + dstLayer2Id: + description: For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID, see ETSI TS 136 321 [i.12]. + type: string + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: String + locationInfo: + # description': Location information to identify a cell of a base station or a particular geographical area. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LocationInfo + $ref: '#/components/schemas/LocationInfo' + neighbourCellInfo: + description: The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5. + items: + $ref: '#/components/schemas/Pc5NeighbourCellInfo' + minItems: 0 + type: array + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Pc5NeighbourCellInfo + notificationType: + description: Shall be set to "ProvChgPc5Notification". + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + timeStamp: + # description': Time stamp. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': TimeStamp + $ref: '#/components/schemas/TimeStamp' + required: + - notificationType + - locationInfo + type: object + x-etsi-ref: 6.4.4 + + ProvChgPc5Subscription.links: + description: Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests. + properties: + self: + # description': Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LinkType + $ref: '#/components/schemas/LinkType' + required: + - self + type: object + x-etsi-mec-cardinality: 0..1 + + ProvChgPc5Subscription.filterCriteria: + description: List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response. + properties: + dstLayer2Id: + description: For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID, see ETSI TS 136 321 [i.12]. + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + locationInfo: + # description': Location information to identify a cell of a base station or a particular geographical area. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LocationInfo + $ref: '#/components/schemas/LocationInfo' + neighbourCellInfo: + description: The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5. + items: + $ref: '#/components/schemas/Pc5NeighbourCellInfo' + minItems: 0 + type: array + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Pc5NeighbourCellInfo + required: + - locationInfo + - dstLayer2Id + type: object + x-etsi-mec-cardinality: '1' + ProvChgPc5Subscription: + properties: + _links: + $ref: '#/components/schemas/ProvChgPc5Subscription.links' + callbackReference: + description: URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response. + format: uri + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: URI + expiryDeadline: + # description': Time stamp. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': TimeStamp + $ref: '#/components/schemas/TimeStamp' + filterCriteria: + $ref: '#/components/schemas/ProvChgPc5Subscription.filterCriteria' + subscriptionType: + description: Shall be set to "ProvChgPc5Subscription". + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + required: + - subscriptionType + - callbackReference + - filterCriteria + type: object + x-etsi-ref: 6.3.4 + ProvChgUuMbmsNotification: + properties: + locationInfo: + # description': Location information to identify a cell of a base station or a particular geographical area. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LocationInfo + $ref: '#/components/schemas/LocationInfo' + neighbourCellInfo: + description: The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS. + items: + $ref: '#/components/schemas/UuMbmsNeighbourCellInfo' + minItems: 0 + type: array + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: UuMbmsNeighbourCellInfo + notificationType: + description: Shall be set to "ProvChgUuMbmsNotification". + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + timeStamp: + # description': Time stamp. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': TimeStamp + $ref: '#/components/schemas/TimeStamp' + v2xServerUsd: + # description': User Service Description for V2X Application Server is used to configure the UE for receiving local V2X Application Server information when it is provided over MBMS. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': V2xServerUsd + $ref: '#/components/schemas/V2xServerUsd' + required: + - notificationType + - locationInfo + type: object + x-etsi-ref: 6.4.3 + ProvChgUuMbmsSubscription.links: + description: Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests. + properties: + self: + # description': Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LinkType + $ref: '#/components/schemas/LinkType' + required: + - self + type: object + x-etsi-mec-cardinality: 0..1 + + ProvChgUuMbmsSubscription.filterCriteria: + description: List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response. + properties: + locationInfo: + # description': Location information to identify a cell of a base station or a particular geographical area. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LocationInfo + $ref: '#/components/schemas/LocationInfo' + neighbourCellInfo: + description: The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS. + items: + $ref: '#/components/schemas/UuMbmsNeighbourCellInfo' + minItems: 0 + type: array + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: UuMbmsNeighbourCellInfo + v2xServerUsd: + # description': User Service Description for V2X Application Server is used to configure the UE for receiving local V2X Application Server information when it is provided over MBMS. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': V2xServerUsd + $ref: '#/components/schemas/V2xServerUsd' + required: + - locationInfo + - v2xServerUsd + type: object + x-etsi-mec-cardinality: '1' + + ProvChgUuMbmsSubscription: + properties: + _links: + $ref: '#/components/schemas/ProvChgUuMbmsSubscription.links' + callbackReference: + description: URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response. + format: uri + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: URI + expiryDeadline: + # description': Time stamp. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': TimeStamp + $ref: '#/components/schemas/TimeStamp' + filterCriteria: + $ref: '#/components/schemas/ProvChgUuMbmsSubscription.filterCriteria' + subscriptionType: + description: Shall be set to "ProvChgUuMbmsSubscription". + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + required: + - subscriptionType + - callbackReference + - filterCriteria + type: object + x-etsi-ref: 6.3.3 + ProvChgUuUniNotification: + properties: + locationInfo: + # description': Location information to identify a cell of a base station or a particular geographical area. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LocationInfo + $ref: '#/components/schemas/LocationInfo' + neighbourCellInfo: + description: The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu unicast. + items: + $ref: '#/components/schemas/UuUniNeighbourCellInfo' + minItems: 0 + type: array + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: UuUniNeighbourCellInfo + notificationType: + description: Shall be set to "ProvChgUuUniNotification". + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + timeStamp: + # description': Time stamp. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': TimeStamp + $ref: '#/components/schemas/TimeStamp' + v2xApplicationServer: + # description': V2X Application Server address (consisting of IP address and UDP port) for unicast. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': V2xApplicationServer + $ref: '#/components/schemas/V2xApplicationServer' + required: + - notificationType + - locationInfo + type: object + x-etsi-ref: 6.4.2 + ProvChgUuUniSubscription.links: + description: Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests. + properties: + self: + # description': Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LinkType + $ref: '#/components/schemas/LinkType' + required: + - self + type: object + x-etsi-mec-cardinality: 0..1 + + ProvChgUuUniSubscription.filterCriteria: + description: List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response. + properties: + locationInfo: + # description': Location information to identify a cell of a base station or a particular geographical area. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LocationInfo + $ref: '#/components/schemas/LocationInfo' + neighbourCellInfo: + description: The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu unicast. + items: + $ref: '#/components/schemas/UuUniNeighbourCellInfo' + minItems: 0 + type: array + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: UuUniNeighbourCellInfo + v2xApplicationServer: + # description': V2X Application Server address (consisting of IP address and UDP port) for unicast. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': V2xApplicationServer + $ref: '#/components/schemas/V2xApplicationServer' + required: + - locationInfo + - v2xApplicationServer + type: object + x-etsi-mec-cardinality: '1' + + ProvChgUuUniSubscription: + properties: + _links: + $ref: '#/components/schemas/ProvChgUuUniSubscription.links' + callbackReference: + description: URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response. + format: uri + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: URI + expiryDeadline: + # description': Time stamp. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': TimeStamp + $ref: '#/components/schemas/TimeStamp' + filterCriteria: + $ref: '#/components/schemas/ProvChgUuUniSubscription.filterCriteria' + subscriptionType: + description: Shall be set to "ProvChgUuUniSubscription". + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + required: + - subscriptionType + - callbackReference + - filterCriteria + type: object + x-etsi-ref: 6.3.2 + + SubscriptionLinkList.links.subscriptions: + description: "The service consumer\u2019s subscriptions." + properties: + href: + description: The URI referring to the subscription. + format: uri + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: URI + subscriptionType: + description: Type of the subscription. The values are as defined in the \"subscriptionType\" attribute for each different V2X information event subscription data type. + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + required: + - href + - subscriptionType + x-etsi-mec-cardinality: 0..N + + SubscriptionLinkList.links: + description: List of hyperlinks related to the resource. + properties: + self: + # description': URI of this resource. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LinkType + $ref: '#/components/schemas/LinkType' + subscriptions: + type: array + items: + $ref: '#/components/schemas/SubscriptionLinkList.links.subscriptions' + type: object + required: + - self + x-etsi-mec-cardinality: '1' + + SubscriptionLinkList: + properties: + _links: + $ref: '#/components/schemas/SubscriptionLinkList.links' + required: + - _links + type: object + x-etsi-ref: 6.3.6 + + TddInfo: + properties: + earfcn: + # description': '' + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': Earfcn + $ref: '#/components/schemas/Earfcn' + subframeAssignment: + description: Uplink-downlink subframe configuration information. + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + transmissionBandwidth: + # description': '' + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': TransmissionBandwidth + $ref: '#/components/schemas/TransmissionBandwidth' + required: + - earfcn + - transmissionBandwidth + - subframeAssignment + type: object + x-etsi-ref: 6.5.7 + TimeStamp: + properties: + nanoSeconds: + description: The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. + format: Uint32 + type: integer + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: Uint32 + seconds: + description: The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC. + format: Uint32 + type: integer + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: Uint32 + required: + - seconds + - nanoSeconds + type: object + x-etsi-ref: 6.5.2 + TransmissionBandwidth.transmissionBandwidth: + description: 'Numeric value corresponding to the transmission bandwidth expressed in units of resource blocks as follows:1 = bw6 (6 resource blocks)2 = bw15 (15 resource blocks) 3 = bw25 (25 resource blocks) 4 = bw50 (50 resource blocks) 5 = bw75 (75 resource blocks) 6 = bw100 (100 resource blocks)' + enum: + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + type: integer + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: Enum + + TransmissionBandwidth: + properties: + transmissionBandwidth: + $ref: '#/components/schemas/TransmissionBandwidth.transmissionBandwidth' + required: + - transmissionBandwidth + type: object + x-etsi-ref: 6.6.4 + UuMbmsNeighbourCellInfo: + properties: + ecgi: + # description': E-UTRAN CelI Global Identifier. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': Ecgi + $ref: '#/components/schemas/Ecgi' + fddInfo: + # description': Information for FDD operation. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': FddInfo + $ref: '#/components/schemas/FddInfo' + mbmsServiceAreaIdentity: + description: Supported MBMS Service Area Identities in the cell. + items: + type: string + minItems: 1 + type: array + x-etsi-mec-cardinality: 1..N + x-etsi-mec-origin-type: String + pci: + description: Physical Cell Identifier. + type: integer + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: Integer + plmn: + # description': Public Land Mobile Network Identity. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': Plmn + $ref: '#/components/schemas/Plmn' + tddInfo: + # description': Information for TDD operation. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': TddInfo + $ref: '#/components/schemas/TddInfo' + required: + - plmn + - ecgi + - pci + - fddInfo + - tddInfo + - mbmsServiceAreaIdentity + type: object + x-etsi-ref: 6.5.11 + + UuMbmsProvisioningInfo.proInfoUuMbms: + description: The provisioning information per location as defined below. + properties: + locationInfo: + # description': Location information to identify a cell of a base station or a particular geographical area. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LocationInfo + $ref: '#/components/schemas/LocationInfo' + neighbourCellInfo: + description: The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS. + type: array + items: + $ref: '#/components/schemas/UuMbmsNeighbourCellInfo' + minItems: 0 + + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: UuMbmsNeighbourCellInfo + v2xServerUsd: + # description': User Service Description for V2X Application Server is used to configure the UE for receiving local V2X Application Server information when it is provided over MBMS. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': V2xServerUsd + $ref: '#/components/schemas/V2xServerUsd' + required: + - locationInfo + - v2xServerUsd + + UuMbmsProvisioningInfo: + properties: + proInfoUuMbms: + $ref: '#/components/schemas/UuMbmsProvisioningInfo.proInfoUuMbms' + timeStamp: + # description': Time stamp. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': TimeStamp + $ref: '#/components/schemas/TimeStamp' + required: + - proInfoUuMbms + type: object + x-etsi-ref: 6.2.3 + + UuUniNeighbourCellInfo: + properties: + ecgi: + # description': E-UTRAN CelI Global Identifier. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': Ecgi + $ref: '#/components/schemas/Ecgi' + fddInfo: + # description': Information for FDD operation. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': FddInfo + $ref: '#/components/schemas/FddInfo' + pci: + description: Physical Cell Identifier. + type: integer + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: Integer + plmn: + # description': Public Land Mobile Network Identity. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': Plmn + $ref: '#/components/schemas/Plmn' + tddInfo: + # description': Information for TDD operation. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': TddInfo + $ref: '#/components/schemas/TddInfo' + required: + - plmn + - ecgi + - pci + - fddInfo + - tddInfo + type: object + x-etsi-ref: 6.5.9 + + UuUnicastProvisioningInfo.proInfoUuUnicast: + description: The provisioning information per location as defined below. + properties: + locationInfo: + # description': Location information to identify a cell of a base station or a particular geographical area. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LocationInfo + $ref: '#/components/schemas/LocationInfo' + neighbourCellInfo: + description: The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu unicast. + items: + $ref: '#/components/schemas/UuUniNeighbourCellInfo' + minItems: 0 + type: array + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: UuUniNeighbourCellInfo + v2xApplicationServer: + # description': V2X Application Server address (consisting of IP address and UDP port) for unicast. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': V2xApplicationServer + $ref: '#/components/schemas/V2xApplicationServer' + required: + - locationInfo + - v2xApplicationServer + x-etsi-mec-cardinality: 1..N + UuUnicastProvisioningInfo: + properties: + proInfoUuUnicast: + type: array + items: + $ref: '#/components/schemas/UuUnicastProvisioningInfo.proInfoUuUnicast' + timeStamp: + # description': Time stamp. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': TimeStamp + $ref: '#/components/schemas/TimeStamp' + required: + - proInfoUuUnicast + type: object + x-etsi-ref: 6.2.2 + V2xApplicationServer: + properties: + ipAddress: + description: '' + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + udpPort: + description: '' + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + required: + - ipAddress + - udpPort + type: object + x-etsi-ref: 6.5.8 + + + msgType: + description: '− denm(1): Decentralized Environmental Notification Message (DENM) as specified in ETSI EN 302 637-3 [i.3], − cam(2): Cooperative Awareness Message (CAM) as specified in ETSI EN 302 637-2 [i.2], − poi(3): Point of Interest message as specified in ETSI TS 101 556-1 [i.11], − spat(4): Signal Phase And Timing (SPAT) message as specified in SAE J2735 [i.12], − map(5): MAP message as specified in SAE J2735 [i.12], − ivi(6): In Vehicle Information (IVI) message as defined in ISO TS 19321 [i.13], − ev-rsr(7): Electric vehicle recharging spot reservation message, as defined in ETSI TS 101 556-3 [i.14], ' + enum: + - 1 + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + type: integer + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: Enum + + V2xMsgPublication: + properties: + msgContent: + description: Published V2X message content. Its format is defined by the standardization organization indicated by the attribute stdOrganization. + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + msgEncodeFormat: + description: The encode format of the V2X message, for example base64. + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + msgType: + $ref: '#/components/schemas/msgType' + #x-etsi-mec-origin-type: Enum + stdOrganization: + description: "Standardization organization which defines the published V2X message type: \nETSI: European Telecommunications Standards Institute. \nSee note 1." + enum: + - ETSI + type: string + x-etsi-mec-cardinality: '1' + #-etsi-mec-origin-type: Enum + required: + - stdOrganization + - msgType + - msgEncodeFormat + - msgContent + type: object + x-etsi-notes: "NOTE 1: Other standardization organizations could be added as needed.NOTE 2:The V2X message types of ETSI shall be used as specified in ETSI TS 102 894-2 [6], clause A.114." + x-etsi-ref: 6.2.6 + + V2xMsgSubscription.links: + description: Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests. + properties: + self: + # description': Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LinkType + $ref: '#/components/schemas/LinkType' + required: + - self + type: object + x-etsi-mec-cardinality: 0..1 + + V2xMsgSubscription.filterCriteria: + description: List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response. + properties: + msgType: + description: Subscribed V2X message type. Its value is defined by the standardization organization indicated by the attribute stdOrganization. See note 2. + items: + type: string + minItems: 0 + type: array + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Enum + stdOrganization: + description: "Standardization organization which defines the subscribed V2X message type: \nETSI: European Telecommunications Standards Institute. \nSee note 1." + enum: + - ETSI + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: Enum + required: + - stdOrganization + type: object + x-etsi-mec-cardinality: '1' + + V2xMsgSubscription: + properties: + _links: + $ref: '#/components/schemas/V2xMsgSubscription.links' + callbackReference: + description: URI selected by the service consumer to receive notifications on the subscribed V2X message. This shall be included both in the request and in response. + format: uri + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: URI + expiryDeadline: + # description': Time stamp. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': TimeStamp + $ref: '#/components/schemas/TimeStamp' + filterCriteria: + $ref: '#/components/schemas/V2xMsgSubscription.filterCriteria' + subscriptionType: + description: Shall be set to "V2xMsgSubscription". + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + required: + - subscriptionType + - callbackReference + - filterCriteria + type: object + x-etsi-notes: "NOTE 1:\tOther standardization organizations could be added as needed.\nNOTE 2:\tThe V2X message types of ETSI shall be used as specified in ETSI TS 102 894-2 [6], clause A.114." + x-etsi-ref: 6.3.5 + + + V2xMsgNotification.links: + description: 'Links to resources related to this notification.' + properties: + subscription: + # description': Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription. + # x-etsi-mec-cardinality': '1' + # x-etsi-mec-origin-type': LinkType + $ref: '#/components/schemas/LinkType' + required: + - subscription + type: object + x-etsi-mec-cardinality: 0..1 + + V2xMsgNotification: + properties: + notificationType: + description: Shall be set to "V2xMsgNotification". + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + timeStamp: + # description': Time stamp. + # x-etsi-mec-cardinality': 0..1 + # x-etsi-mec-origin-type': TimeStamp + $ref: '#/components/schemas/TimeStamp' + stdOrganization: + description: 'Standardization organization which defines the published V2X message type ETSI: European Telecommunications Standards Institute. See note 1.' + enum: + - "ETSI" + type: string + msgType: + $ref: '#/components/schemas/msgType' + msgEncodeFormat: + description: 'The encode format of the V2X message, for example base64 ' + type: string + msgContent: + description: 'Published V2X message content. The format of the string is defined by the standardization organization indicated by the attribute stdOrganization.' + type: string + _links: + $ref: '#/components/schemas/V2xMsgNotification.links' + required: + - notificationType + - timeStamp + - stdOrganization + - msgType + - msgEncodeFormat + - msgContent + - _links + type: object + x-etsi-notes: "NOTE 1: Other standardization organizations could be added as needed. NOTE 2: The V2X message types of ETSI shall be used as specified in ETSI TS 102 894-2 [6], clause A.114" + + V2xServerUsd.sdpInfo: + description: SDP with IP multicast address and port number used for V2X communication via MBMS. + properties: + ipMulticastAddress: + description: '' + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + portNumber: + description: '' + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + required: + - ipMulticastAddress + - portNumber + type: object + x-etsi-mec-cardinality: '1' + V2xServerUsd.tmgi: + description: Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services. + properties: + mbmsServiceId: + description: MBMS Service ID consisting of three octets. + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + mcc: + description: The Mobile Country Code part of PLMN Identity. + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + mnc: + description: The Mobile Network Code part of PLMN Identity. + type: string + x-etsi-mec-cardinality: '1' + x-etsi-mec-origin-type: String + required: + - mbmsServiceId + - mcc + - mnc + type: object + x-etsi-mec-cardinality: '' + + V2xServerUsd: + properties: + sdpInfo: + $ref: '#/components/schemas/V2xServerUsd.sdpInfo' + serviceAreaIdentifier: + description: A list of service area identifier for the applicable MBMS broadcast area. + items: + type: string + minItems: 1 + type: array + x-etsi-mec-cardinality: 1..N + x-etsi-mec-origin-type: String + tmgi: + $ref: '#/components/schemas/V2xServerUsd.tmgi' + required: + - tmgi + - serviceAreaIdentifier + - sdpInfo + type: object + x-etsi-ref: 6.5.10 + + LinkType: + description: >- + 'This data type represents a type of link' + type: object + required: + - href + properties: + href: + $ref: '#/components/schemas/Href' + Href: + description: >- + The URI referring to the subscription. + type: string + format: uri + ProblemDetails: + properties: + detail: + description: A human-readable explanation specific to this occurrence of the problem + type: string + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: String + instance: + description: A URI reference that identifies the specific occurrence of the problem + format: uri + type: string + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: URI + status: + description: The HTTP status code for this occurrence of the problem + format: uint32 + type: integer + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint32 + title: + description: A short, human-readable summary of the problem type + type: string + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: String + type: + description: A URI reference according to IETF RFC 3986 that identifies the problem type + format: uri + type: string + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: URI + type: object + responses: + 204: + description: No Content + 206: + description: Partial content + 400: + description: 'Bad Request : used to indicate that incorrect parameters were passed to the request.' + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetails' + 401: + description: 'Unauthorized : used when the client did not submit credentials.' + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetails' + 403: + description: 'Forbidden : operation is not allowed given the current status of the resource.' + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetails' + 404: + description: 'Not Found : used when a client provided a URI that cannot be mapped to a valid resource URI.' + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetails' + 406: + description: 'Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client.' + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetails' + 409: + description: 'Conflict : The operation cannot be executed currently, due to a conflict with the state of the resource' + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetails' + 412: + description: 'Precondition failed : used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts when using PUT' + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetails' + 415: + description: 'Unsupported Media Type : used to indicate that the server or the client does not support the content type of the entity body.' + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetails' + 422: + description: 'Unprocessable Entity : used to indicate that the server understands the content type of the request entity and that the syntax of the request entity is correct but that the server is unable to process the contained instructions. This error condition can occur if an JSON request body is syntactically correct but semantically incorrect, for example if the target area for the request is considered too large. This error condition can also occur if the capabilities required by the request are not supported.' + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetails' + 429: + description: 'Too Many Requests : used when a rate limiter has triggered.' + content: + application/json: + schema: + $ref: '#/components/schemas/ProblemDetails' diff --git a/ttcn/LibMec/V2XInformationServiceAPI/module.mk b/ttcn/LibMec/V2XInformationServiceAPI/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..82178f330aa1caa90634fb90e1e6ccbb128ecf4c --- /dev/null +++ b/ttcn/LibMec/V2XInformationServiceAPI/module.mk @@ -0,0 +1,7 @@ +sources := \ + ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn \ + ttcn/V2XInformationServiceAPI_Pics.ttcn \ + ttcn/V2XInformationServiceAPI_Pixits.ttcn \ + ttcn/V2XInformationServiceAPI_Templates.ttcn \ + ttcn/V2XInformationServiceAPI_Functions.ttcn \ + diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..a3ba215346f6fd4f7f850f541d6ec337948a9912 --- /dev/null +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Functions.ttcn @@ -0,0 +1,362 @@ +/** + * @author ETSI / TTF T012 + * @version $URL$ + * $ID:$ + * @desc This module provides the custom templates for ITS HTTP based protocols. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + */ +module V2XInformationServiceAPI_Functions { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_Time all; + import from LibCommon_VerdictControl all; + import from LibCommon_Sync all; + + // LibHttp + import from LibItsHttp_TypesAndValues all; + import from LibItsHttp_Functions all; + import from LibItsHttp_Templates all; + import from LibItsHttp_JsonTemplates all; + import from LibItsHttp_TestSystem all; + + // LibMec/V2XInformationServiceAPI + import from V2XInformationServiceAPI_TypesAndValues all; + import from V2XInformationServiceAPI_Templates all; + import from V2XInformationServiceAPI_Pixits all; + + // LibMec + import from LibMec_Templates all; + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + + function f_create_prov_uu_uni_subscription( + out ProvChgUuUniSubscription p_prov_chg_uu_uni_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_uu_uni", + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_uni_subscription( + m_prov_chg_uu_uni_subscription( + PX_PROV_UU_UNI_SUB_CALLBACK, + m_prov_chg_uu_uni_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_application_server( + oct2char(unichar2oct(PX_V2X_SERVER_IP_ADDRESS, "UTF-8")), + oct2char(unichar2oct(PX_V2X_SERVER_UDP_PORT, "UTF-8")) + )))))))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_prov_chg_uu_uni_subscription( + mw_prov_chg_uu_uni_subscription( + PX_PROV_UU_UNI_SUB_CALLBACK, + -, + ? + )))))) -> value v_response { + tc_ac.stop; + + p_prov_chg_uu_uni_subscription := v_response.response.body.json_body.provChgUuUniSubscription; + log("f_create_prov_uu_uni_subscription: IUT successfully registers subscription: ", p_prov_chg_uu_uni_subscription); + } + [] tc_ac.timeout { + log("f_create_prov_uu_uni_subscription: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_prov_uu_uni_subscription + + function f_delete_prov_uu_uni_subscription( + in ProvChgUuUniSubscription p_prov_chg_uu_uni_subscription + ) runs on HttpComponent { + var Headers v_headers; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & p_prov_chg_uu_uni_subscription.links.self_, + v_headers + ))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_prov_uu_uni_subscription: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_prov_uu_uni_subscription + + function f_create_prov_uu_mbms_subscription( + out ProvChgUuMbmsSubscription p_prov_chg_uu_mbms_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_uu_mbms", + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_uu_mbms_subscription( + m_prov_chg_uu_mbms_subscription( + PX_PROV_UU_MBMS_SUB_CALLBACK, + m_prov_chg_uu_mbms_filter_criteria( + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + )), + m_v2x_server_usd( + { PX_V2X_MBMS_SERVICE_ID }, + m_sdp_info( + PX_V2X_MC_SERVER, + PX_V2X_MC_PORT + ), + m_tmgi( + PX_V2X_SERVICE_AREA_ID, + PX_MCC, + PX_MNC + ) + )))))))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_prov_chg_uu_mbms_subscription( + mw_prov_chg_uu_mbms_subscription( + PX_PROV_UU_MBMS_SUB_CALLBACK, + -, + ? + )))))) -> value v_response { + tc_ac.stop; + + p_prov_chg_uu_mbms_subscription := v_response.response.body.json_body.provChgUuMbmsSubscription; + log("f_create_prov_uu_mbms_subscription: IUT successfully registers subscription: ", p_prov_chg_uu_mbms_subscription); + } + [] tc_ac.timeout { + log("f_create_prov_uu_mbms_subscription: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_prov_uu_mbms_subscription + + function f_delete_prov_uu_mbms_subscription( + in ProvChgUuMbmsSubscription p_prov_chg_uu_mbms_subscription + ) runs on HttpComponent { + var Headers v_headers; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & p_prov_chg_uu_mbms_subscription.links.self_, + v_headers + ))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_prov_uu_mbms_subscription: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_prov_uu_mbms_subscription + + function f_create_prov_pc5_subscription( + out ProvChgPc5Subscription p_prov_chg_pc5_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/prov_chg_pc5", + v_headers, + m_http_message_body_json( + m_body_json_prov_chg_pc5_subscription( + m_prov_chg_pc5_subscription( + PX_PROV_PC5_SUB_CALLBACK, + m_filter_criteria( + PX_V2X_DST_LAYER_2_ID, + m_location_info( + m_ecgi( + PX_CELL_ID,m_plmn(PX_MCC, PX_MNC) + ), + m_location_info_geo_area( + 43.72, + 10.41 + ))))))))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_prov_chg_pc5_subscription( + mw_prov_chg_pc5_subscription( + PX_PROV_PC5_SUB_CALLBACK, + -, + ? + )))))) -> value v_response { + tc_ac.stop; + + p_prov_chg_pc5_subscription := v_response.response.body.json_body.provChgPc5Subscription; + log("f_create_prov_pc5_subscription: IUT successfully registers subscription: ", p_prov_chg_pc5_subscription); + } + [] tc_ac.timeout { + log("f_create_prov_pc5_subscription: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_prov_pc5_subscription + + function f_delete_prov_pc5_subscription( + in ProvChgPc5Subscription p_prov_chg_pc5_subscription + ) runs on HttpComponent { + var Headers v_headers; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/" & p_prov_chg_pc5_subscription.links.self_, + v_headers + ))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_prov_pc5_subscription: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_prov_pc5_subscription + + function f_create_v2x_msg_subscription( + out V2xMsgSubscription p_v2x_msg_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_V2X_URI & "/subscriptions/V2xMsgSubscription", + v_headers, + m_http_message_body_json( + m_body_json_v2x_msg_subscription( + m_v2x_msg_subscription( + PX_PROV_V2X_SUB_CALLBACK, + m_v2x_msg_subscription_filter_criteria + )))))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_v2x_msg_subscription( + mw_v2x_msg_subscription( + PX_PROV_V2X_SUB_CALLBACK, + -, + ? + )))))) -> value v_response { + tc_ac.stop; + + p_v2x_msg_subscription := v_response.response.body.json_body.v2xMsgSubscription; + log("f_create_v2x_msg_subscription: IUT successfully registers subscription: ", p_v2x_msg_subscription); + } + [] tc_ac.timeout { + log("f_create_v2x_msg_subscription: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_create_v2x_msg_subscription + + function f_delete_v2x_msg_subscription( + in V2xMsgSubscription p_v2x_msg_subscription + ) runs on HttpComponent { + var Headers v_headers; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & p_v2x_msg_subscription.links.self_, + v_headers + ))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_v2x_msg_subscription: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_v2x_msg_subscription + +} // End of module V2XInformationServiceAPI_Functions diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pics.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pics.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..8d27d142695c83c7d5296541a1a9bf0d88d70f35 --- /dev/null +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pics.ttcn @@ -0,0 +1,8 @@ +module V2XInformationServiceAPI_Pics { + + /** + * @desc Does the IUT support V2XInformationServiceAPI? + */ + modulepar boolean PICS_V2X_INFORMATION_SERVICE_API_SUPPORTED := true; + +} // End of module V2XInformationServiceAPI_Pics diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..70f38ce801df399622d5a8c9a94a73c977ef067f --- /dev/null +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Pixits.ttcn @@ -0,0 +1,51 @@ +module V2XInformationServiceAPI_Pixits { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // JSON + import from JSON all; + + modulepar charstring PX_V2X_ECGI := "ecgi,135792468"; + + modulepar charstring PX_V2X_UNKNOWN_ECGI := "ecgi,1357924689"; + + modulepar charstring PX_V2X_LATITUDE := "latitude,000.000,001.000,longitude,000.000,001.000"; + + modulepar charstring PX_LOC_GRANULARITY := "17"; + + modulepar charstring PX_CELL_ID := "4680"; + + modulepar charstring PX_UNKNOWN_CELL_ID := "4680"; + + modulepar charstring PX_MCC := "135"; + + modulepar charstring PX_MNC := "792"; + + modulepar charstring PX_UNKNOWN_MCC := "136"; + + modulepar charstring PX_UNKNOWN_MNC := "796"; + + modulepar JSON.AnyURI PX_PROV_UU_UNI_SUB_CALLBACK := ""; + + modulepar JSON.AnyURI PX_PROV_UU_MBMS_SUB_CALLBACK := ""; + + modulepar JSON.AnyURI PX_PROV_PC5_SUB_CALLBACK := ""; + + modulepar JSON.AnyURI PX_PROV_V2X_SUB_CALLBACK := ""; + + modulepar charstring PX_V2X_SERVER_IP_ADDRESS := ""; + + modulepar charstring PX_V2X_SERVER_UDP_PORT := ""; + + modulepar charstring PX_V2X_MBMS_SERVICE_ID := ""; + + modulepar charstring PX_V2X_MC_SERVER := ""; + + modulepar charstring PX_V2X_MC_PORT := ""; + + modulepar charstring PX_V2X_SERVICE_AREA_ID := ""; + + modulepar charstring PX_V2X_DST_LAYER_2_ID := ""; + +} // End of module V2XInformationServiceAPI_Pixits diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..7cd78d21fedbb6e2d3992821eb6c62912859b33a --- /dev/null +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_Templates.ttcn @@ -0,0 +1,484 @@ +/** + * @author ETSI / TTF T012 + * @version $Url$ + * $Id$ + * @desc Types ANd Values for ETSI GS MEC 030 V2.1.1 (2020-04) + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + */ +module V2XInformationServiceAPI_Templates { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibMec/V2XInformationServiceAPI + import from V2XInformationServiceAPI_TypesAndValues all; + import from V2XInformationServiceAPI_Pixits all; + + template (omit) UuUnicastProvisioningInfo m_uu_unicast_provisioning_info( + in template (value) ProInfoUuUnicastList p_proInfoUuUnicast, + in template (omit) TimeStamp p_timeStamp := omit + ) := { + proInfoUuUnicast := p_proInfoUuUnicast, + timeStamp := p_timeStamp + } // End of template m_uu_unicast_provisioning_info + + template (present) UuUnicastProvisioningInfo mw_uu_unicast_provisioning_info( + template (present) ProInfoUuUnicastList p_proInfoUuUnicast := ?, + template TimeStamp p_timeStamp := * + ) := { + proInfoUuUnicast := p_proInfoUuUnicast, + timeStamp := p_timeStamp + } // End of template mw_uu_unicast_provisioning_info + + template (omit) UuMbmsProvisioningInfo m_uu_mbms_provisioning_info( + in template (value) ProInfoUuMbmsList p_proInfoUuMbms, + in template (omit) TimeStamp p_timeStamp := omit + ) := { + proInfoUuMbms := p_proInfoUuMbms, + timeStamp := p_timeStamp + } // End of template m_uu_mbms_provisioning_info + + template (present) UuMbmsProvisioningInfo mw_uu_mbms_provisioning_info( + template (present) ProInfoUuMbmsList p_proInfoUuMbms := ?, + template TimeStamp p_timeStamp := * + ) := { + proInfoUuMbms := p_proInfoUuMbms, + timeStamp := p_timeStamp + } // End of template mw_uu_mbms_provisioning_info + + template (omit) Pc5ProvisioningInfo m_pc5_provisioning_info( + in template (value) Pc5ProvisioningInfoProInfoPc5List p_proInfoPc5, + in template (omit) TimeStamp p_timeStamp := omit + ) := { + proInfoPc5 := p_proInfoPc5, + timeStamp := p_timeStamp + } // End of template m_pc5_provisioning_info + + template (present) Pc5ProvisioningInfo mw_pc5_provisioning_info( + template (present) Pc5ProvisioningInfoProInfoPc5List p_proInfoPc5 := ?, + template TimeStamp p_timeStamp := * + ) := { + proInfoPc5 := p_proInfoPc5, + timeStamp := p_timeStamp + } // End of template mw_pc5_provisioning_info + + template (omit) PredictedQos m_predicted_qos( + in template (value) JSON.String p_locationGranularity, + in template (value) PredictedQosRoutesList p_routes, + in template (omit) TimeStamp p_timeGranularity := omit + ) := { + timeGranularity := p_timeGranularity, + locationGranularity := p_locationGranularity, + routes := p_routes + } // End of template m_predicted_qos + + template PredictedQos mw_predicted_qos( + template (present) JSON.String p_locationGranularity := ?, + template (present) PredictedQosRoutesList p_routes := ?, + template TimeStamp p_timeGranularity := * + ) := { + timeGranularity := p_timeGranularity, + locationGranularity := p_locationGranularity, + routes := p_routes + } // End of template mw_predicted_qos + + template (value) PredictedQosRoutes m_predicted_qos_routes( + in template (value) RouteInfoList p_routeinfo + ) := { + routeinfo := p_routeinfo + } // End of template m_predicted_qos_routes + + template (present) PredictedQosRoutes mw_predicted_qos_routes( + template (present) RouteInfoList p_routeinfo := ? + ) := { + routeinfo := p_routeinfo + } // End of template mw_predicted_qos_routes + + template (omit) RouteInfo m_route_info( + in template (value) LocationInfo p_location, + in template (omit) TimeStamp p_time := omit, + in template (omit) UInt8 p_rsrp := omit, + in template (omit) UInt8 p_rsrq := omit + ) := { + location := p_location, + time := p_time, + rsrp := p_rsrp, + rsrq := p_rsrq + } // End of template m_route_info + + template RouteInfo mw_route_info( + template (present) LocationInfo p_location := ?, + template TimeStamp p_time := *, + template UInt8 p_rsrp := *, + template UInt8 p_rsrq := * + ) := { + location := p_location, + time := p_time, + rsrp := p_rsrp, + rsrq := p_rsrq + } // End of template mw_route_info + + template (omit) LocationInfo m_location_info( + in template (value) Ecgi p_ecgi, + in template (omit) LocationInfoGeoArea p_geoArea := omit + ) := { + ecgi := p_ecgi, + geoArea := p_geoArea + } // End of template m_location_info + + template LocationInfo mw_location_info( + template (present) Ecgi p_ecgi := ?, + template LocationInfoGeoArea p_geoArea := * + ) := { + ecgi := p_ecgi, + geoArea := p_geoArea + } // End of template mw_location_info + + template (value) LocationInfoGeoArea m_location_info_geo_area( + in JSON.Number p_latitude, + in JSON.Number p_longitude + ) := { + latitude := p_latitude, + longitude := p_longitude + } // End of m_location_info_geo_area + + template (present) LocationInfoGeoArea mw_location_info_geo_area( + template (present) JSON.Number p_latitude := ?, + template (present) JSON.Number p_longitude := ? + ) := { + latitude := p_latitude, + longitude := p_longitude + } // End of mw_location_info_geo_area + + template (value) Ecgi m_ecgi( + in JSON.String p_cellId, + in template (value) Plmn p_plmn + ) := { + cellId := { + cellId := p_cellId + }, + plmn := p_plmn + } // End of template m_ecgi + + template (present) Ecgi mw_ecgi( + template (present) JSON.String p_cellId := ?, + template (present) Plmn p_plmn := ? + ) := { + cellId := { + cellId := p_cellId + }, + plmn := p_plmn + } // End of template mw_ecgi + + template (value) Plmn m_plmn( + in JSON.String p_mcc, + in JSON.String p_mnc + ) := { + mcc := p_mcc, + mnc := p_mnc + } // End of template m_plmn + + template (present) Plmn mw_plmn( + template (present) JSON.String p_mcc := ?, + template (present) JSON.String p_mnc := ? + ) := { + mcc := p_mcc, + mnc := p_mnc + } // End of template mw_plmn + + template (value) V2xMsgPublication m_v2x_message( + in JSON.String p_msgContent := "AgIAEPQ9JwVAWXGJVq3AIK5gAgAgADDUHgAAASAWhAMQpQcz/+H/+gAQAA==", + in JSON.String p_msgEncodeFormat := "base64", + in MsgType p_msgType := cam, + in StdOrganization p_stdOrganization := ETSI + ) := { + msgContent := p_msgContent, + msgEncodeFormat := p_msgEncodeFormat, + msgType := p_msgType, + stdOrganization := p_stdOrganization + } // End of template m_v2x_message + + template (present) V2xMsgPublication mw_v2x_message( + template (present) JSON.String p_msgContent := ?, + template (present) JSON.String p_msgEncodeFormat := "base64", + template (present) MsgType p_msgType := ?, + template (present) StdOrganization p_stdOrganization := ETSI + ) := { + msgContent := p_msgContent, + msgEncodeFormat := p_msgEncodeFormat, + msgType := p_msgType, + stdOrganization := p_stdOrganization + } // End of template mw_v2x_message + + template (omit) ProvChgUuUniSubscription m_prov_chg_uu_uni_subscription( + in template (value) JSON.AnyURI p_callbackReference, + in template (value) ProvChgUuUniSubscriptionFilterCriteria p_filterCriteria, + in template (omit) LinkType p_links := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + links := p_links, + callbackReference := p_callbackReference, + expiryDeadline := p_expiryDeadline, + filterCriteria := p_filterCriteria, + subscriptionType := "ProvChgUuUniSubscription" + } // End of template m_prov_chg_uu_uni_subscription + + template (omit) ProvChgUuUniSubscription m_prov_chg_uu_uni_subscription_invalid( + in template (value) JSON.AnyURI p_callbackReference, + in template (value) ProvChgUuUniSubscriptionFilterCriteria p_filterCriteria, + in template (omit) LinkType p_links := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + links := p_links, + callbackReference := p_callbackReference, + expiryDeadline := p_expiryDeadline, + filterCriteria := p_filterCriteria, + subscriptionType := "InvalidProvChgUuUniSubscription" + } // End of template m_prov_chg_uu_uni_subscription + + template ProvChgUuUniSubscription mw_prov_chg_uu_uni_subscription( + template (present) JSON.AnyURI p_callbackReference := ?, + template (present) ProvChgUuUniSubscriptionFilterCriteria p_filterCriteria := ?, + template LinkType p_links := *, + template TimeStamp p_expiryDeadline := * + ) := { + links := p_links, + callbackReference := p_callbackReference, + expiryDeadline := p_expiryDeadline, + filterCriteria := p_filterCriteria, + subscriptionType := "ProvChgUuUniSubscription" + } // End of template mw_prov_chg_uu_uni_subscription + + template (omit) ProvChgUuUniSubscriptionFilterCriteria m_prov_chg_uu_uni_filter_criteria( + in template (value) LocationInfo p_location_info, + in template (value) V2xApplicationServer p_v2xApplicationServer, + in template (omit) UuMbmsNeighbourCellInfoList p_neighbourCellInfo := omit + ) := { + locationInfo := p_location_info, + neighbourCellInfo := p_neighbourCellInfo, + v2xApplicationServer := p_v2xApplicationServer + } // End of template m_prov_chg_uu_uni_filter_criteria + + template ProvChgUuUniSubscriptionFilterCriteria mw_prov_chg_uu_uni_filter_criteria( + template (present) LocationInfo p_location_info := ?, + template (present) V2xApplicationServer p_v2xApplicationServer := ?, + template UuMbmsNeighbourCellInfoList p_neighbourCellInfo := * + ) := { + locationInfo := p_location_info, + neighbourCellInfo := p_neighbourCellInfo, + v2xApplicationServer := p_v2xApplicationServer + } // End of template mw_prov_chg_uu_uni_filter_criteria + + template (value) V2xApplicationServer m_v2x_application_server( + in JSON.String p_ip_address, + in JSON.String p_udp_port + ) := { + ipAddress := p_ip_address, + udpPort := p_udp_port + } // End of template m_v2x_application_server + + template (present) V2xApplicationServer mw_v2x_application_server( + template (present) JSON.String p_ip_address := ?, + template (present) JSON.String p_udp_port := ? + ) := { + ipAddress := p_ip_address, + udpPort := p_udp_port + } // End of template mw_v2x_application_server + + template (omit) ProvChgUuMbmsSubscription m_prov_chg_uu_mbms_subscription( + in template (value) JSON.AnyURI p_callbackReference, + in template (value) ProvChgUuMbmsSubscriptionFilterCriteria p_filterCriteria, + in template (omit) LinkType p_links := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + links := p_links, + callbackReference := p_callbackReference, + expiryDeadline := p_expiryDeadline, + filterCriteria := p_filterCriteria, + subscriptionType := "ProvChgUuMbmsSubscription" + } // End of template m_prov_chg_uu_mbms_subscription + + template ProvChgUuMbmsSubscription mw_prov_chg_uu_mbms_subscription( + template (present) JSON.AnyURI p_callbackReference := ?, + template (present) ProvChgUuMbmsSubscriptionFilterCriteria p_filterCriteria := ?, + template LinkType p_links := *, + template TimeStamp p_expiryDeadline := * + ) := { + links := p_links, + callbackReference := p_callbackReference, + expiryDeadline := p_expiryDeadline, + filterCriteria := p_filterCriteria, + subscriptionType := "ProvChgUuMbmsSubscription" + } // End of template mw_prov_chg_uu_mbms_subscription + + template (omit) ProvChgUuMbmsSubscriptionFilterCriteria m_prov_chg_uu_mbms_filter_criteria( + in template (value) LocationInfo p_locationInfo, + in template (value) V2xServerUsd p_v2xServerUsd, + template (omit) UuMbmsNeighbourCellInfoList p_neighbourCellInfo := omit + ) := { + locationInfo := p_locationInfo, + neighbourCellInfo := p_neighbourCellInfo, + v2xServerUsd := p_v2xServerUsd + } // End of template m_prov_chg_uu_mbms_filter_criteria + + template (present) ProvChgUuMbmsSubscriptionFilterCriteria mw_prov_chg_uu_mbms_filter_criteria( + template (present) LocationInfo p_locationInfo := ?, + template (present) V2xServerUsd p_v2xServerUsd := ?, + template UuMbmsNeighbourCellInfoList p_neighbourCellInfo := * + ) := { + locationInfo := p_locationInfo, + neighbourCellInfo := p_neighbourCellInfo, + v2xServerUsd := p_v2xServerUsd + } // End of template mw_prov_chg_uu_mbms_filter_criteria + + template (value) V2xServerUsd m_v2x_server_usd( + in template (value) ServiceAreaIdentifier p_serviceAreaIdentifier, + in template (value) SdpInfo p_sdpInfo, + in template (value) Tmgi p_tmgi + ) := { + serviceAreaIdentifier := p_serviceAreaIdentifier, + sdpInfo := p_sdpInfo, + tmgi := p_tmgi + } // End of template m_v2x_server_usd + + template (present) V2xServerUsd mw_v2x_server_usd( + template (present) ServiceAreaIdentifier p_serviceAreaIdentifier := ?, + template (present) SdpInfo p_sdpInfo := ?, + template (present) Tmgi p_tmgi := ? + ) := { + serviceAreaIdentifier := p_serviceAreaIdentifier, + sdpInfo := p_sdpInfo, + tmgi := p_tmgi + } // End of template mw_v2x_server_usd + + template (value) SdpInfo m_sdp_info( + in JSON.String p_ipMulticastAddress, + in JSON.String p_portNumber + ) := { + ipMulticastAddress := p_ipMulticastAddress, + portNumber := p_portNumber + } // End of template m_sdp_info + + template (present) SdpInfo mw_sdp_info( + template (present) JSON.String p_ipMulticastAddress := ?, + template (present) JSON.String p_portNumber := ? + ) := { + ipMulticastAddress := p_ipMulticastAddress, + portNumber := p_portNumber + } // End of template mw_sdp_info + + template (value) Tmgi m_tmgi( + in JSON.String p_mbmsServiceId, + in JSON.String p_mcc, + in JSON.String p_mnc + ) := { + mbmsServiceId := p_mbmsServiceId, + mcc := p_mcc, + mnc := p_mnc + } // End of template m_tmgi + + template (present) Tmgi mw_tmgi( + template (present) JSON.String p_mbmsServiceId := ?, + template (present) JSON.String p_mcc := ?, + template (present) JSON.String p_mnc := ? + ) := { + mbmsServiceId := p_mbmsServiceId, + mcc := p_mcc, + mnc := p_mnc + } // End of template mw_tmgi + + template (omit) ProvChgPc5Subscription m_prov_chg_pc5_subscription( + in template (value) JSON.AnyURI p_callbackReference, + in template (value) FilterCriteria p_filterCriteria, + in template (omit) LinkType p_links := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + links := p_links, + callbackReference := p_callbackReference, + expiryDeadline := p_expiryDeadline, + filterCriteria := p_filterCriteria, + subscriptionType := "ProvChgPc5Subscription" + } // End of template m_prov_chg_pc5_subscription + + template (present) ProvChgPc5Subscription mw_prov_chg_pc5_subscription( + template (present) JSON.AnyURI p_callbackReference := ?, + template (present) FilterCriteria p_filterCriteria := ?, + template LinkType p_links := *, + template TimeStamp p_expiryDeadline := * + ) := { + links := p_links, + callbackReference := p_callbackReference, + expiryDeadline := p_expiryDeadline, + filterCriteria := p_filterCriteria, + subscriptionType := "ProvChgPc5Subscription" + } // End of template mw_prov_chg_pc5_subscription + + template (omit) FilterCriteria m_filter_criteria( + in template (value) JSON.String p_dstLayer2Id, + in template (value) LocationInfo p_locationInfo, + in template (omit) Pc5NeighbourCellInfoList p_neighbourCellInfo := omit + ) := { + dstLayer2Id := p_dstLayer2Id, + locationInfo := p_locationInfo, + neighbourCellInfo := p_neighbourCellInfo + } // End of template m_filter_criteria + + template (present) FilterCriteria mw_filter_criteria( + template (present) JSON.String p_dstLayer2Id := ?, + template (present) LocationInfo p_locationInfo := ?, + template Pc5NeighbourCellInfoList p_neighbourCellInfo := * + ) := { + dstLayer2Id := p_dstLayer2Id, + locationInfo := p_locationInfo, + neighbourCellInfo := p_neighbourCellInfo + } // End of template mw_filter_criteria + + template (omit) V2xMsgSubscription m_v2x_msg_subscription( + in template (value) JSON.AnyURI p_callbackReference, + in template (value) V2xMsgSubscriptionFilterCriteria p_filterCriteria, + in template (omit) LinkType p_links := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + links := p_links, + callbackReference := p_callbackReference, + expiryDeadline := p_expiryDeadline, + filterCriteria := p_filterCriteria, + subscriptionType := "V2xMsgSubscription" + } // End of template m_v2x_msg_subscription + + template (present) V2xMsgSubscription mw_v2x_msg_subscription( + template (present) JSON.AnyURI p_callbackReference := ?, + template (present) V2xMsgSubscriptionFilterCriteria p_filterCriteria := ?, + template LinkType p_links := *, + template TimeStamp p_expiryDeadline := * + ) := { + links := p_links, + callbackReference := p_callbackReference, + expiryDeadline := p_expiryDeadline, + filterCriteria := p_filterCriteria, + subscriptionType := "V2xMsgSubscription" + } // End of template mw_v2x_msg_subscription + + template (omit) V2xMsgSubscriptionFilterCriteria m_v2x_msg_subscription_filter_criteria( + in StdOrganization p_stdOrganization := ETSI, + in template (omit) MsgTypeList p_msgType := { cam, denm } + ) := { + msgType := p_msgType, + stdOrganization := p_stdOrganization + } // End of template m_v2x_msg_subscription_filter_criteria + + template (present) V2xMsgSubscriptionFilterCriteria mw_v2x_msg_subscription_filter_criteria( + template (present) StdOrganization p_stdOrganization := ETSI, + template MsgTypeList p_msgType := * + ) := { + msgType := p_msgType, + stdOrganization := p_stdOrganization + } // End of template mw_v2x_msg_subscription_filter_criteria + +} // End of module V2XInformationServiceAPI_Templates diff --git a/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..29ebd242023d26ac595a3e8a77dc69c232bd5949 --- /dev/null +++ b/ttcn/LibMec/V2XInformationServiceAPI/ttcn/V2XInformationServiceAPI_TypesAndValues.ttcn @@ -0,0 +1,641 @@ +/** + * @author ETSI / TTF T012 + * @version $Url$ + * $Id$ + * @desc Types ANd Values for ETSI GS MEC 030 V2.1.1 (2020-04) + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + */ +module V2XInformationServiceAPI_TypesAndValues { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + /** + * @desc E-UTRAN Cell Identity as a bit string (size (28)) + * @see ETSI TS 136 413 + */ + type record CellId { + JSON.String cellId + } + + /** + * @desc E-UTRA Absolute Radio Frequency Channel Number, range (0... 65535) + * @see ETSI TS 136 413 + */ + type UInt16 Earfcn; + + /** + * @desc Transmission Bandwidth, which is used to indicate the UL or DL transmission bandwidth expressed in units of resource blocks + * @see ETSI TS 136 413 + */ + type enumerated TransmissionBandwidth { + bw6 (1), + bw15 (2), + bw25 (3), + bw50 (4), + bw75 (6), + bw100 (7) + } with { + variant "JSON: as number" + } + + /** + * @desc E-UTRAN Cell Global Identifier + * @member cellId The E-UTRAN Cell Identity + * @member plmn Public Land Mobile Network Identity + * @see ETSI TS 136 413 + */ + type record Ecgi { + CellId cellId, + Plmn plmn + } + + /** + * @desc FDD information + * @member dlEarfcn Downlink E-UTRA Absolute Radio Frequency Channel Number + * @member dlTransmissionBandwidth Downlink Transmission Bandwidth + * @member ulEarfcn Uplink E-UTRA Absolute Radio Frequency Channel Number + * @member ulTransmissionBandwidth Uplink Transmission Bandwidth + * @see ETSI TS 136 413 + */ + type record FddInfo { + Earfcn dlEarfcn, + TransmissionBandwidth dlTransmissionBandwidth, + Earfcn ulEarfcn, + TransmissionBandwidth ulTransmissionBandwidth + } + + /** + * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type UInt32 Seconds; + + /** + * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type UInt32 NanoSeconds; + + /** + * @desc Time stamp description + * @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @see MEC030 Clause 6.5.2 Type: TimeStamp + */ + type record TimeStamp { + Seconds seconds, + NanoSeconds nanoSeconds + } + + /** + * @desc Information of a geographical area + * @member latitude Latitude (DATUM = WGS84) -90 to 90 in decimal degree format DDD.ddd + * @member longitude Longitude (DATUM = WGS84)-180 to 180 in decimal degree format DDD.ddd + * @see MEC030 Clause 6.5.3 Type: LocationInfo + */ + type record LocationInfoGeoArea { + JSON.Number latitude, + JSON.Number longitude + } + + /** + * @desc Location information + * @member ecgi E-UTRAN CelI Global Identifier of the serving cell + * @member geoArea Information of a geographical area + * @see MEC030 Clause 6.5.3 Type: LocationInfo + */ + type record LocationInfo { + Ecgi ecgi, + LocationInfoGeoArea geoArea optional + } + type record of LocationInfo LocationInfoList; + + /** + * @desc Location information + * @member ecgi E-UTRAN CelI Global Identifier + * @member plmn Public Land Mobile Network Identity + * @member siV2xConfig V2X sidelink communication configuration, as defined in ETSI TS 136 331 + * @see MEC030 Clause 6.5.12 Type: Pc5NeighbourCellInfo + */ + type record Pc5NeighbourCellInfo { + Ecgi ecgi, + Plmn plmn, + JSON.String siV2xConfig + } + type record of Pc5NeighbourCellInfo Pc5NeighbourCellInfoList; + + /** + * @desc The provisioning information per location + * @member dstLayer2Id For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5 + * @see MEC030 Clause 6.2.4 Type: Pc5ProvisioningInfo + */ + type record Pc5ProvisioningInfoProInfoPc5 { + JSON.String dstLayer2Id, + LocationInfo locationInfo, + Pc5NeighbourCellInfoList neighbourCellInfo optional + } + type record of Pc5ProvisioningInfoProInfoPc5 Pc5ProvisioningInfoProInfoPc5List; + + /** + * @desc Provisioning information required for V2X communication over PC5 + * @member proInfoPc5 The provisioning information per location + * @member timeStamp Time stamp + * @see MEC030 Clause 6.5.12 Type: Pc5NeighbourCellInfo + */ + type record Pc5ProvisioningInfo { + Pc5ProvisioningInfoProInfoPc5List proInfoPc5, + TimeStamp timeStamp optional + } + + /** + * @desc PLMN Identity + * @member mcc The Mobile Country Code part of PLMN Identity + * @member mnc The Mobile Network Code part of PLMN Identity + * @see MEC030 Clause 6.5.4 Type: Plmn + */ + type record Plmn { + JSON.String mcc, + JSON.String mnc + } + + /** + * @desc Information relating to a specific route + * @member location Vehicular UE location + * @member time Estimated time at the location + * @member rsrp Reference Signal Received Quality as defined in ETSI TS 136 214 + * @member rsrq Reference Signal Received Quality as defined in ETSI TS 136 214 [i.13]. Shall only be included in the response + * @see MEC030 Clause 6.2.5 Type: PredictedQos + */ + type record RouteInfo { + LocationInfo location, + TimeStamp time optional, + UInt8 rsrp optional, + UInt8 rsrq optional + } + type record of RouteInfo RouteInfoList; + + /** + * @desc Information relating to the potential routes of a vehicular UE + * @member routeinfo Information relating to a specific route + * @see MEC030 Clause 6.2.5 Type: PredictedQos + */ + type record PredictedQosRoutes { + RouteInfoList routeinfo + } + type record of PredictedQosRoutes PredictedQosRoutesList; + + /** + * @desc Predicted QoS of a vehicular UE + * @member timeGranularity Granularity of visited location. Measured in meters + * @member locationGranularity Granularity of visited location. Measured in meters + * @member routes Information relating to the potential routes of a vehicular UE + * @see MEC030 Clause 6.2.5 Type: PredictedQos + */ + type record PredictedQos { + TimeStamp timeGranularity optional, + JSON.String locationGranularity, + PredictedQosRoutesList routes + } + + /** + * @desc Notification from VIS with regards to the provisioning information changes for V2X communication over PC5 + * @member dstLayer2Id For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5 + * @member notificationType Shall be set to "ProvChgPc5Notification" + * @see MEC030 Clause 6.4.4 Type: ProvChgPc5Notification + */ + type record ProvChgPc5Notification { + JSON.String dstLayer2Id optional, + LocationInfo locationInfo, + Pc5NeighbourCellInfoList neighbourCellInfo optional, + JSON.String notificationType, + TimeStamp timeStamp optional + } + + /** + * @desc Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests + * @member self_ Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription + * @see MEC030 Clause 6.3.4 Type: ProvChgPc5Subscription + */ + type record LinkType { + JSON.AnyURI self_ + } with { + variant (self_) "name as 'self'"; + } + + /** + * @desc List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response + * @member dstLayer2Id For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over PC5 + * @see MEC030 Clause 6.3.4 Type: ProvChgPc5Subscription + */ + type record FilterCriteria { + JSON.String dstLayer2Id, + LocationInfo locationInfo, + Pc5NeighbourCellInfoList neighbourCellInfo optional + } + + /** + * @desc Subscription to the notifications from VIS about the provisioning information changes for V2X communication over PC5 + * @member links URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response + * @member expiryDeadline Time stamp + * @member filterCriteria List of filtering criteria for the subscription + * @member subscriptionType Shall be set to "ProvChgPc5Subscription" + * @see MEC030 Clause 6.3.4 Type: ProvChgPc5Subscription + */ + type record ProvChgPc5Subscription { + LinkType links optional, + JSON.AnyURI callbackReference, + TimeStamp expiryDeadline optional, + FilterCriteria filterCriteria, + JSON.String subscriptionType + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Notification from VIS with regards to the provisioning information changes for V2X communication over Uu MBMS + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS + * @member notificationType Shall be set to "ProvChgUuMbmsNotification" + * @member timeStamp_ Time stamp + * @member v2xServerUsd User Service Description for V2X Application Server is used to configure the UE for receiving local V2X Application Server information when it is provided over MBMS + * @see MEC030 Clause 6.4.3 Type: ProvChgUuMbmsNotification + */ + type record ProvChgUuMbmsNotification { + LocationInfo locationInfo, + UuMbmsNeighbourCellInfoList neighbourCellInfo optional, + JSON.String notificationType, + TimeStamp timeStamp optional, + V2xServerUsd v2xServerUsd optional + } + + /** + * @desc List of filtering criteria for the subscription + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS + * @member v2xServerUsd User Service Description for V2X Application Server is used to configure the UE for receiving local V2X Application Server information when it is provided over MBMS + * @see MEC030 Clause 6.3.3 Type: ProvChgUuMbmsSubscription + */ + type record ProvChgUuMbmsSubscriptionFilterCriteria { + LocationInfo locationInfo, + UuMbmsNeighbourCellInfoList neighbourCellInfo optional, + V2xServerUsd v2xServerUsd + } + + /** + * @desc Subscription to the notifications from VIS about the provisioning information changes for V2X communication over Uu MBMS + * @member links URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response + * @member callbackReferenceURI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response + * @member expiryDeadline Time stamp + * @member filterCriteria List of filtering criteria for the subscription + * @member subscriptionType Shall be set to "ProvChgUuMbmsSubscription" + * @see MEC030 Clause 6.3.3 Type: ProvChgUuMbmsSubscription + */ + type record ProvChgUuMbmsSubscription { + LinkType links optional, + JSON.AnyURI callbackReference, + TimeStamp expiryDeadline optional, + ProvChgUuMbmsSubscriptionFilterCriteria filterCriteria, + JSON.String subscriptionType + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Notification from VIS with regards to the provisioning information changes for V2X communication over Uu unicast + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu unicast + * @member notificationType Shall be set to "ProvChgUuUniNotification" + * @member timeStamp_ Time stamp + * @member v2xApplicationServer V2X Application Server address (consisting of IP address and UDP port) for unicast + * @see MEC030 Clause 6.4.2 Type: ProvChgUuUniNotification + */ + type record ProvChgUuUniNotification { + LocationInfo locationInfo, + UuUniNeighbourCellInfoList neighbourCellInfo optional, + JSON.String notificationType, + TimeStamp timeStamp optional, + V2xApplicationServer v2xApplicationServer optional + } + + /** + * @desc List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS + * @member v2xApplicationServer V2X Application Server address (consisting of IP address and UDP port) for unicast + * @see MEC030 Clause 6.3.3 Type: ProvChgUuMbmsSubscription + */ + type record ProvChgUuUniSubscriptionFilterCriteria { + LocationInfo locationInfo, + UuMbmsNeighbourCellInfoList neighbourCellInfo optional, + V2xApplicationServer v2xApplicationServer + } + + /** + * @desc Subscription to the notifications from VIS about the provisioning information changes for V2X communication over Uu unicast + * @member links URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response + * @member callbackReferenceURI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response + * @member expiryDeadline Time stamp + * @member filterCriteria List of filtering criteria for the subscription + * @member subscriptionType Shall be set to "ProvChgUuUniSubscription" + * @see MEC030 Clause 6.3.2 Type: ProvChgUuUniSubscription + */ + type record ProvChgUuUniSubscription { + LinkType links optional, + JSON.AnyURI callbackReference, + TimeStamp expiryDeadline optional, + ProvChgUuUniSubscriptionFilterCriteria filterCriteria, + JSON.String subscriptionType + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc The service consumers subscriptions + * @member href The URI referring to the subscription + * @member subscriptionType Type of the subscription. The values are as defined in the \"subscriptionType\" attribute for each different V2X information event subscription data type + * @see MEC030 Clause 6.3.6 Type: SubscriptionLinkList + */ + type record SubscriptionsLink_ { + JSON.AnyURI href, + JSON.String subscriptionType + } + type record of SubscriptionsLink_ SubscriptionLinkList_; + + /** + * @desc List of hyperlinks related to the resource + * @member self_ URI of this resource + * @member subscriptions The service consumer’s subscriptions + * @see MEC030 Clause 6.3.6 Type: SubscriptionLinkList + */ + type record SubscriptionLinkList { + LinkType self_, + SubscriptionLinkList_ subscriptions + } with { + variant (self_) "name as 'self'"; + } + + /** + * @desc TDD information + * @member earfcn E-UTRA Absolute Radio Frequency Channel Number + * @member subframeAssignment Uplink-downlink subframe configuration information + * @member transmissionBandwidth Transmission Bandwidth + * @see MEC030 Clause 6.5.7 Type: TddInfo + */ + type record TddInfo { + Earfcn earfcn, + JSON.String subframeAssignment, + TransmissionBandwidth transmissionBandwidth + } + + /** + * @desc Neighbour cell information in a visiting PLMN that supports V2X communication over Uu MBMS + * @member ecgi E-UTRAN CelI Global Identifier + * @member fddInfo Information for FDD operation + * @member mbmsServiceAreaIdentity Supported MBMS Service Area Identities in the cell + * @member pci Physical Cell Identifier + * @member plmn Public Land Mobile Network Identity + * @member tddInfo Information for TDD operation + * @see MEC030 Clause 6.5.11 Type: UuMbmsNeighbourCellInfo + */ + type record UuMbmsNeighbourCellInfo { + Ecgi ecgi, + FddInfo fddInfo, + MbmsServiceAreaIdentityList mbmsServiceAreaIdentity, + integer pci, + Plmn plmn, + TddInfo tddInfo + } + type record of JSON.String MbmsServiceAreaIdentityList; + type record of UuMbmsNeighbourCellInfo UuMbmsNeighbourCellInfoList; + + /** + * @desc The provisioning information per location + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member neighbourCellInfo The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS + */ + type record ProInfoUuMbms { + LocationInfo locationInfo, + UuMbmsNeighbourCellInfoList neighbourCellInfo optional, + V2xServerUsd v2xServerUsd + } + type record of ProInfoUuMbms ProInfoUuMbmsList; + + /** + * @desc Provisioning information required for V2X communication over Uu MBMS + * @member proInfoUuMbms The provisioning information per location as defined below + * @member timeStamp_ TimeStamp + * @see MEC030 Clause 6.2.3 Type: UuMbmsProvisioningInfo + */ + type record UuMbmsProvisioningInfo { + ProInfoUuMbmsList proInfoUuMbms, + TimeStamp timeStamp optional + } + + /** + * @desc Neighbour cell information in a visiting PLMN that supports V2X communication over Uu unicast + * @member ecgi E-UTRAN CelI Global Identifier + * @member fddInfo Information for FDD operation + * @member pci Physical Cell Identifier + * @member plmn Public Land Mobile Network Identity + * @member tddInfo Information for TDD operation + * @see MEC030 Clause 6.5.9 Type: UuUniNeighbourCellInfo + */ + type record UuUniNeighbourCellInfo { + Ecgi ecgi, + FddInfo fddInfo, + integer pci, + Plmn plmn, + TddInfo tddInfo + } + type record of UuUniNeighbourCellInfo UuUniNeighbourCellInfoList; + + /** + * @desc The provisioning information per location as defined below + * @member locationInfo Location information to identify a cell of a base station or a particular geographical area + * @member neighbourCellInfoThe information of the neighbour cells in a visiting PLMN that support V2X communication over Uu unicast + * @member v2xApplicationServer V2X Application Server address (consisting of IP address and UDP port) for unicast + * @see MEC030 Clause 6.2.2 Type: UuUnicastProvisioningInfo + */ + type record ProInfoUuUnicast { + LocationInfo locationInfo, + V2xApplicationServer v2xApplicationServer, + UuUniNeighbourCellInfoList neighbourCellInfo optional + } + type record of ProInfoUuUnicast ProInfoUuUnicastList; + + /** + * @desc Provisioning information required for V2X communication over Uu unicast + * @member proInfoUuUnicast The provisioning information per location + * @member timeStamp_ Time stamp + * @see MEC030 Clause 6.2.2 Type: UuUnicastProvisioningInfo + */ + type record UuUnicastProvisioningInfo { + ProInfoUuUnicastList proInfoUuUnicast, + TimeStamp timeStamp optional + } + + /** + * @desc V2X Application Server address (consisting of IP address and UDP port) for unicast + * @member ipAddress + * @member udpPort + * @see MEC030 Clause 6.5.8 Type: V2xApplicationServer + */ + type record V2xApplicationServer { + JSON.String ipAddress, + JSON.String udpPort + } + + /** + * @desc Published V2X message type. Its value is defined by the standardization organization + */ + type enumerated MsgType { + denm (1), + cam (2), + poi (3), + spat (4), + map_ (5), + ivi (6), + ev_rsr(7) + } with { + variant "JSON: as number" + } + type record of MsgType MsgTypeList; + + /** + * @desc Standardization organization which defines the published V2X message type + */ + type enumerated StdOrganization { + ETSI + } + + /** + * @desc V2X message that a service consumer publishes to VIS + * @member msgContent Published V2X message content. Its format is defined by the standardization organization indicated by the attribute stdOrganization + * @member msgEncodeFormat The encode format of the V2X message, for example base64 + * @member msgType Published V2X message type. Its value is defined by the standardization organization indicated by the attribute stdOrganization + * @member stdOrganization Standardization organization which defines the published V2X message type + * @see MEC030 Clause 6.2.6 Type: V2xMsgPublication + */ + type record V2xMsgPublication { + JSON.String msgContent, + JSON.String msgEncodeFormat, + MsgType msgType, + StdOrganization stdOrganization + } + + /** + * @desc List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response + * @member msgType Subscribed V2X message type. Its value is defined by the standardization organization indicated by the attribute stdOrganization + * @member stdOrganization Standardization organization which defines the published V2X message type + * @see MEC030 Clause 6.3.5 Type: V2xMsgSubscription + */ + type record V2xMsgSubscriptionFilterCriteria { + MsgTypeList msgType optional, + StdOrganization stdOrganization + } + +/** + * @desc Subscription to notification of V2X message + * @member links Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed V2X message. This shall be included both in the request and in response + * @member expiryDeadline Time stamp + * @member filterCriteria List of filtering criteria for the subscription + * @member subscriptionType Shall be set to "V2xMsgSubscription" + * @see MEC030 Clause 6.3.5 Type: V2xMsgSubscription + */ + type record V2xMsgSubscription { + LinkType links optional, + JSON.AnyURI callbackReference, + TimeStamp expiryDeadline optional, + V2xMsgSubscriptionFilterCriteria filterCriteria, + JSON.String subscriptionType + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Link to resources related to this notification + * @member subscription Self-referring URI. The URI shall be unique within the VIS API as it acts as an ID for the subscription + * @see MEC030 Clause 6.4.5 Type: V2xMsgNotification + */ + type record V2xMsgNotificationLinks { + LinkType subscription + } + + /** + * @desc Notification for informing the subscribers about the V2X message + * @member notificationType Shall be set to "V2xMsgNotification" + * @member timeStamp_ Time stamp + * @member stdOrganization Standardization organization which defines the published V2X message type ETSI: European Telecommunications Standards Institute + * @member msgType Published V2X message type. Its value is defined by the standardization organization + * @member msgEncodeFormat The encode format of the V2X message, for example base64 + * @member msgContent Published V2X message content. The format of the string is defined by the standardization organization + * @member links Link to resources related to this notification + * @see MEC030 Clause 6.4.5 Type: V2xMsgNotification + */ + type record V2xMsgNotification { + JSON.String notificationType, + TimeStamp timeStamp, + StdOrganization stdOrganization, + MsgType msgType, + JSON.String msgEncodeFormat, + JSON.String msgContent, + V2xMsgNotificationLinks links + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc SDP with IP multicast address and port number used for V2X communication via MBMS + * @member ipMulticastAddress + * @member portNumber + * @see MEC030 Clause 6.5.10 Type: V2xServerUsd + */ + type record SdpInfo { + JSON.String ipMulticastAddress, + JSON.String portNumber + } + type record of SdpInfo SdpInfoList; + + /** + * @desc Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services + * @member mbmsServiceId MBMS Service ID consisting of three octets + * @member mcc The Mobile Country Code part of PLMN Identity + * @member mnc The Mobile Network Code part of PLMN Identity + * @see MEC030 Clause 6.5.10 Type: V2xServerUsd + */ + type record Tmgi { + JSON.String mbmsServiceId, + JSON.String mcc, + JSON.String mnc + } + + /** + * @desc Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services + * @member serviceAreaIdentifier A list of service area identifier for the applicable MBMS broadcast area + * @member sdpInfo SDP with IP multicast address and port number used for V2X communication via MBMS + * @member tmgi Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services + * @see MEC030 Clause 6.5.10 Type: V2xServerUsd + */ + type record V2xServerUsd { + ServiceAreaIdentifier serviceAreaIdentifier, + SdpInfo sdpInfo, + Tmgi tmgi + } + type record of JSON.String ServiceAreaIdentifier; + +} with { + encode "JSON" +} // End of module V2XInformationServiceAPI_TypesAndValues diff --git a/ttcn/LibMec/WlanInformationAPI/json/WlanInformationAPI.json b/ttcn/LibMec/WlanInformationAPI/json/WlanInformationAPI.json new file mode 100644 index 0000000000000000000000000000000000000000..73fd3482425eaba9603887e6e282f8ff9b35dc9e --- /dev/null +++ b/ttcn/LibMec/WlanInformationAPI/json/WlanInformationAPI.json @@ -0,0 +1,2701 @@ +{ + "openapi": "3.0.0", + "info": { + "contact": { + "url": "https://forge.etsi.org/rep/mec/gs028-wai-api" + }, + "title": "ETSI GS MEC 028 - WLAN Access Information API", + "version": "2.1.1", + "description": "The ETSI MEC ISG MEC028 WLAN Access Information API described using OpenAPI", + "license": { + "name": "BSD-3-Clause", + "url": "https://forge.etsi.org/legal-matters" + } + }, + "externalDocs": { + "description": "ETSI MEC028 V2.1.1 WLAN Information API", + "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/028/02.01.01_60/gs_mec028v020101p.pdf" + }, + "servers": [ + { + "url": "https://localhost/wai/v2" + } + ], + "tags": [ + { + "name": "wai" + } + ], + "paths": { + "/queries/ap/ap_information": { + "get": { + "tags": [ + "wai" + ], + "summary": "Retrieve information on existing Access Points", + "description": "Queries information about existing WLAN Access Points", + "operationId": "apInfoGET", + "parameters": [ + { + "$ref": "#/components/parameters/Query.Filter" + }, + { + "$ref": "#/components/parameters/Query.AllFields" + }, + { + "$ref": "#/components/parameters/Query.Fields" + }, + { + "$ref": "#/components/parameters/Query.ExcludeFields" + }, + { + "$ref": "#/components/parameters/Query.ExcludeDefault" + } + ], + "responses": { + "200": { + "description": "Successful response to ap_info request", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ApInfo" + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" + } + } + } + }, + "/queries/sta/sta_information": { + "get": { + "tags": [ + "wai" + ], + "summary": "Retrieve information on existing Stations", + "description": "Queries information about existing WLAN stations", + "operationId": "staInfoGET", + "parameters": [ + { + "$ref": "#/components/parameters/Query.Filter" + }, + { + "$ref": "#/components/parameters/Query.AllFields" + }, + { + "$ref": "#/components/parameters/Query.Fields" + }, + { + "$ref": "#/components/parameters/Query.ExcludeFields" + }, + { + "$ref": "#/components/parameters/Query.ExcludeDefault" + } + ], + "responses": { + "200": { + "description": "Successful response to sta_info request", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/StaInfo" + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" + } + } + } + }, + "/subscriptions": { + "get": { + "tags": [ + "wai" + ], + "summary": "Retrieve information on subscriptions for notifications", + "description": "Queries information on subscriptions for notifications", + "operationId": "subscriptionLinkList_subscriptionsGET", + "parameters": [ + { + "$ref": "#/components/parameters/Query.SubscriptionType" + } + ], + "responses": { + "200": { + "description": "Response body contains the list of links to requestors subscriptions.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubscriptionLinkList" + }, + "example": { + "_links": { + "self": { + "href": "http://meAppServer.example.com/wai/v2/subscriptions" + } + }, + "subscription": [ + { + "_links": { + "self": { + "href": "http://meAppServer.example.com/wai/v2/subscriptions/sub123" + } + }, + "callbackReference": "http://my.callback.com/wai/assocStaSubscription/some-id", + "subscriptionType": "AssocStaSubscription" + } + ] + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" + } + } + }, + "post": { + "tags": [ + "wai" + ], + "summary": "Create a new subscription", + "description": "Creates a new subscription to WLAN Access Information notifications", + "operationId": "subscriptionsPOST", + "requestBody": { + "description": "Subscription to be created", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InlineSubscription" + }, + "example": { + "subscriptionType": "AssocStaSubscription", + "callbackReference": "http://meAppClient.example.com/wai/v2/notifications/1", + "expiryDeadline": { + "seconds": 1977836800, + "nanoSeconds": 0 + }, + "apId": { + "macId": "005C0A0A0A0A", + "ssid": "myNetworkSsid", + "ipAddress": "10.10.100.1" + } + } + } + } + }, + "responses": { + "201": { + "description": "Successful subscription response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InlineSubscription" + }, + "example": { + "subscriptionType": "AssocStaSubscription", + "callbackReference": "http://meAppClient.example.com/wai/v2/notifications/1", + "_links": { + "self": { + "href": "http://meAppServer.example.com/wai/v2/subscriptions/sub123" + } + }, + "expiryDeadline": { + "seconds": 1977836800, + "nanoSeconds": 0 + }, + "apId": { + "macId": "005C0A0A0A0A", + "ssid": "myNetworkSsid", + "ipAddress": "10.10.100.1" + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "415": { + "$ref": "#/components/responses/415" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "429": { + "$ref": "#/components/responses/429" + } + }, + "callbacks": { + "notification": { + "{$request.body#/callbackReference}": { + "post": { + "summary": "Callback POST used to send a notification", + "description": "Notification from WAIS, content based on subscription type", + "operationId": "notificationPOST", + "requestBody": { + "description": "Subscription notification", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InlineNotification" + }, + "example": { + "notificationType": "AssocStaNotification", + "timeStamp": { + "seconds": 1977836800, + "nanoseconds": 0 + }, + "apId": { + "macId": "005C0A0A0A0A", + "ssid": "myNetworkSsid", + "ipAddress": "10.10.100.1" + }, + "staId": { + "macId": "005C01111111", + "ssid": [ + "myNetworkSsid", + "myOtherNetworkSsid" + ], + "aid": "1122", + "ipAddress": "10.10.1.255" + } + } + } + } + }, + "responses": { + "204": { + "$ref": "#/components/responses/204" + } + } + } + } + } + } + } + }, + "/subscriptions/{subscriptionId}": { + "get": { + "tags": [ + "wai" + ], + "summary": "Retrieve information on current specific subscription", + "description": "Queries information about an existing subscription, identified by its self-referring URI returned on creation (initial POST)", + "operationId": "subscriptionsGET", + "parameters": [ + { + "$ref": "#/components/parameters/Path.subscrId" + } + ], + "responses": { + "200": { + "description": "Subscription information regarding subscription notifications", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InlineSubscription" + }, + "example": { + "subscriptionType": "AssocStaSubscription", + "callbackReference": "http://meAppClient.example.com/wai/v2/notifications/1", + "_links": { + "self": { + "href": "http://meAppServer.example.com/wai/v2/subscriptions/sub123" + } + }, + "expiryDeadline": { + "seconds": 1977836800, + "nanoSeconds": 0 + }, + "apId": { + "macId": "005C0A0A0A0A", + "ssid": "myNetworkSsid", + "ipAddress": "10.10.100.1" + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "429": { + "$ref": "#/components/responses/429" + } + } + }, + "put": { + "tags": [ + "wai" + ], + "summary": "Modify an existing subscription", + "description": "Updates an existing subscription, identified by its self-referring URI returned on creation (initial POST)", + "operationId": "subscriptionsPUT", + "requestBody": { + "description": "Subscription to be modified", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InlineSubscription" + }, + "example": { + "subscriptionType": "AssocStaSubscription", + "callbackReference": "http://meAppClient.example.com/wai/v2/notifications/1", + "_links": { + "self": { + "href": "http://meAppServer.example.com/wai/v2/subscriptions/sub123" + } + }, + "expiryDeadline": { + "seconds": 1977836800, + "nanoSeconds": 0 + }, + "apId": { + "macId": "005C0A0A0A0A", + "ssid": "myNetworkSsid", + "ipAddress": "10.10.100.1" + } + } + } + } + }, + "parameters": [ + { + "$ref": "#/components/parameters/Path.subscrId" + } + ], + "responses": { + "200": { + "description": "Successful subscription modification", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InlineSubscription" + }, + "example": { + "_links": { + "self": { + "href": "http://[hostIP]/sbox-xyz123/wai/v2/subscriptions/sub123" + } + }, + "callbackReference": "http://my.callback.com/wai/some-id", + "apId": { + "macId": "005C0A0A0A0A" + } + } + } + } + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "406": { + "$ref": "#/components/responses/406" + }, + "412": { + "$ref": "#/components/responses/412" + }, + "422": { + "$ref": "#/components/responses/422" + }, + "429": { + "$ref": "#/components/responses/429" + } + } + }, + "delete": { + "tags": [ + "wai" + ], + "summary": "Cancel an existing subscription", + "description": "Cancels an existing subscription, identified by its self-referring URI returned on creation (initial POST)", + "operationId": "subscriptionsDELETE", + "parameters": [ + { + "$ref": "#/components/parameters/Path.subscrId" + } + ], + "responses": { + "204": { + "$ref": "#/components/responses/204" + }, + "401": { + "$ref": "#/components/responses/401" + }, + "403": { + "$ref": "#/components/responses/403" + }, + "404": { + "$ref": "#/components/responses/404" + }, + "429": { + "$ref": "#/components/responses/429" + } + } + } + } + }, + "components": { + "responses": { + "200": { + "description": "OK" + }, + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request : used to indicate that incorrect parameters were passed to the request.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "401": { + "description": "Unauthorized : used when the client did not submit credentials.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "403": { + "description": "Forbidden : operation is not allowed given the current status of the resource.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "404": { + "description": "Not Found : used when a client provided a URI that cannot be mapped to a valid resource URI.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "406": { + "description": "Not Acceptable : used to indicate that the server cannot provide the any of the content formats supported by the client.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "412": { + "description": "Precondition failed : used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts when using PUT", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "415": { + "description": "Unsupported Media Type : used to indicate that the server or the client does not support the content type of the entity body.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "422": { + "description": "Unprocessable Entity : used to indicate that the server understands the content type of the request entity and that the syntax of the request entity is correct but that the server is unable to process the contained instructions. This error condition can occur if an JSON request body is syntactically correct but semantically incorrect, for example if the target area for the request is considered too large. This error condition can also occur if the capabilities required by the request are not supported.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + }, + "example": { + "application/problem+json": { + "type": "https://meAppServer.example.com/wai/v2/probs/too-many targets", + "title": "Too many targets", + "status": "422", + "detail": "The target area for the request is considered too large", + "instance": "/meAppClient.example.com/77777/msgs/abc" + } + } + } + } + }, + "429": { + "description": "Too Many Requests : used when a rate limiter has triggered.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + }, + "parameters": { + "Path.subscrId": { + "name": "subscriptionId", + "in": "path", + "description": "Subscription Id, specifically the \"self\" returned in the subscription request", + "required": true, + "schema": { + "type": "string", + "format": "uri" + } + }, + "Query.Filter": { + "name": "filter", + "in": "query", + "description": "Attribute-based filtering expression according to clause 6.19 of ETSI GS MEC 009. .", + "required": false, + "schema": { + "type": "string" + } + }, + "Query.AllFields": { + "name": "all_fields", + "in": "query", + "description": "Include all complex attributes in the response. See clause 6.18 of ETSI GS MEC 009 for details.", + "required": false, + "schema": { + "type": "string" + } + }, + "Query.Fields": { + "name": "fields", + "in": "query", + "description": "Complex attributes to be included into the response. See clause 6.18 of ETSI GS MEC 009 for details.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Query.ExcludeFields": { + "name": "exclude_fields", + "in": "query", + "description": "Complex attributes to be excluded from the response. See clause 6.18 of ETSI GS MEC 009 for details.", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Query.ExcludeDefault": { + "name": "exclude_default", + "in": "query", + "description": "Indicates to exclude the following complex attributes from the response. See clause 6.18 of ETSI GS MEC 009 for details. The following attributes shall be excluded from the structure in the response body if this parameter is provided, or none of the parameters \"all_fields\", \"fields\", \"exclude_fields\", \"exclude_default\" are provided: Not applicable", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Query.SubscriptionType": { + "name": "subscription_type", + "in": "query", + "description": "Filter on a specific subscription type. Permitted values: assoc_sta, sta_data_rate.", + "required": false, + "schema": { + "type": "string" + } + } + }, + "schemas": { + "ApAssociated": { + "properties": { + "assocId": { + "description": "Unique number which identifies a particular association between the station and Access Point.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "ipAddress": { + "description": "IPv4 or IPv6 address allocated for the Access Point.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "string" + }, + "macId": { + "description": "Unique identifier assigned to the Access Point (as network interface controller) for communications at the data link layer of a network segment.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "string" + }, + "ssid": { + "description": "Service Set Identifier to identify logical networks.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "macId" + ], + "type": "object", + "x-etsi-ref": "6.5.12" + }, + "ApIdentity": { + "properties": { + "ipAddress": { + "description": "IPv4 or IPv6 address allocated for the Access Point.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "macId": { + "description": "Unique Identifier assigned to an Access Point (as network interface controller) for communications at the data link layer of a network segment.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "ssid": { + "description": "Service Set Identifier to identify logical networks including Basic Service Set and Extended Service Set.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "macId" + ], + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "ApInfo": { + "properties": { + "apId": { + "$ref": "#/components/schemas/ApIdentity" + }, + "apLocation": { + "$ref": "#/components/schemas/ApLocation" + }, + "apNeighbor": { + "$ref": "#/components/schemas/NeighborReport" + }, + "bssLoad": { + "$ref": "#/components/schemas/BssLoad" + }, + "channel": { + "description": "Channel configured for the Access Point.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "extBssLoad": { + "$ref": "#/components/schemas/ExtBssLoad" + }, + "timeStamp": { + "$ref": "#/components/schemas/TimeStamp" + }, + "wanMetrics": { + "$ref": "#/components/schemas/WanMetrics" + }, + "wlanCap": { + "$ref": "#/components/schemas/WlanCapabilities" + } + }, + "required": [ + "apId" + ], + "type": "object", + "x-etsi-ref": "6.2.2" + }, + "ApLocation": { + "properties": { + "civicLocation": { + "$ref": "#/components/schemas/CivicLocation" + }, + "geolocation": { + "$ref": "#/components/schemas/GeoLocation" + } + }, + "type": "object", + "x-etsi-ref": "6.5.9" + }, + "AssocStaNotification": { + "properties": { + "apId": { + "$ref": "#/components/schemas/ApIdentity" + }, + "notificationType": { + "description": "Shall be set to \"AssocStaNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "staId": { + "description": "Identifier(s) to uniquely specify the client station(s) associated.", + "items": { + "$ref": "#/components/schemas/StaIdentity" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "StaIdentity" + }, + "timeStamp": { + "$ref": "#/components/schemas/TimeStamp" + } + }, + "required": [ + "notificationType", + "apId" + ], + "type": "object", + "x-etsi-ref": "6.4.2" + }, + "AssocStaSubscription": { + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "self": { + "$ref": "#/components/schemas/LinkType" + } + }, + "required": [ + "self" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "apId": { + "$ref": "#/components/schemas/ApIdentity" + }, + "callbackReference": { + "description": "URI selected by the service consumer to receive notifications on the subscribed WLAN information. This shall be included both in the request and in response.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "URI" + }, + "expiryDeadline": { + "$ref": "#/components/schemas/TimeStamp" + }, + "subscriptionType": { + "description": "Shall be set to \"AssocStaSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "callbackReference", + "apId" + ], + "type": "object", + "x-etsi-ref": "6.3.2" + }, + "AssociatedStations": { + "properties": { + "assocId": { + "description": "Unique number which identifies a particular association between an Access Point and a station.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "ipAddress": { + "description": "IPv4 or IPv6 address allocated for the station associated with the Access Point.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "string" + }, + "macId": { + "description": "Unique identifier assigned to a station (as network interface controller) for communications at the data link layer of a network segment.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "string" + } + }, + "required": [ + "macId" + ], + "type": "object", + "x-etsi-ref": "6.5.5" + }, + "BeaconReport": { + "properties": { + "bssId": { + "description": "The BSSID field indicates the BSSID of the BSS(s) for which a beacon report has been received.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + }, + "channelId": { + "description": "Channel number where the beacon was received.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "measurementId": { + "description": "Measurement ID of the Measurement configuration applied to this Beacon Report.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "reportingCondition": { + "description": "As in table T9-89 of IEEE 802.11-2012 [8].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "ssId": { + "description": "(Optional) The SSID subelement indicates the ESS(s) or IBSS(s) for which a beacon report is received.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + }, + "staId": { + "$ref": "#/components/schemas/StaIdentity" + } + }, + "required": [ + "staId", + "measurementId", + "channelId", + "bssId", + "ssId", + "reportingCondition" + ], + "type": "object", + "x-etsi-ref": "6.5.27" + }, + "BeaconRequestConfig": { + "properties": { + "bssId": { + "description": "The BSSID field indicates the BSSID of the BSS(s) for which a beacon report is requested. When requesting beacon reports for all BSSs on the channel, the BSSID field contains the wildcard BSSID.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + }, + "channelId": { + "description": "Channel number to scan. A Channel Number of 0 indicates a request to make iterative measurements for all supported channels in the Operating Class where the measurement is permitted on the channel and the channel is valid for the current regulatory domain. A Channel Number of 255 indicates a request to make iterative measurements for all supported channels in the current Operating Class listed in the latest AP Channel Report received from the serving AP.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "measurementMode": { + "description": "0 for passive.\n1 for active.\n2 for beacon table.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "reportingCondition": { + "description": "As in table T9-89 of IEEE 802.11-2012 [8].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "ssId": { + "description": "(Optional) The SSID subelement indicates the ESS(s) or IBSS(s) for which a beacon report is requested.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + }, + "staId": { + "$ref": "#/components/schemas/StaIdentity" + } + }, + "required": [ + "staId", + "channelId", + "measurementMode", + "bssId", + "ssId", + "reportingCondition" + ], + "type": "object", + "x-etsi-ref": "6.5.25" + }, + "BssLoad": { + "properties": { + "availAdmCap": { + "description": "Available Admission Capacity that specifies the remaining amount of medium time available via explicit admission control, in units of 32 s/s.", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint16" + }, + "channelUtilization": { + "description": "The percentage of time, linearly scaled with 255 representing 100 %, that the AP sensed the medium was busy, as indicated by either the physical or virtual Carrier Sense (CS) mechanism.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt8" + }, + "staCount": { + "description": "An unsigned integer that indicates the total number of STAs currently associated with this BSS.", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt16" + } + }, + "required": [ + "staCount", + "channelUtilization", + "availAdmCap" + ], + "type": "object", + "x-etsi-ref": "6.5.7" + }, + "ChannelLoadConfig": { + "properties": { + "apId": { + "$ref": "#/components/schemas/ApIdentity" + }, + "cChannelId": { + "description": "Channel number which load is reported", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "channelLoad": { + "description": "Channel load as per IEEE 802.11-2012 [8], section 11.11.9.3", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + } + }, + "required": [ + "apId", + "cChannelId", + "channelLoad" + ], + "type": "object", + "x-etsi-ref": "6.5.24" + }, + "CivicLocation": { + "properties": { + "ca0": { + "description": "Language", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca1": { + "description": "National subdivisions (state, canton, region,province, prefecture) ", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca128": { + "description": "Script", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca16": { + "description": "Leading street direction", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca17": { + "description": "Trailing street suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca18": { + "description": "Street suffix or type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca19": { + "description": "House number", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca2": { + "description": "County, parish, gun (JP), district (IN)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca20": { + "description": "House number suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca21": { + "description": "Landmark of vanity address", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca22": { + "description": "Additional location information", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca23": { + "description": "Name (residence and office occupant)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca24": { + "description": "Postal/zip code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca25": { + "description": "Building (structure)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca26": { + "description": "Unit (apartment/suite)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca27": { + "description": "Floor", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca28": { + "description": "Room", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca29": { + "description": "Type of place", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca3": { + "description": "City, township, shi (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca30": { + "description": "Postal community name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca31": { + "description": "Post office box", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca32": { + "description": "Additional code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca33": { + "description": "Seat (desk.cubicle, workstation)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca34": { + "description": "Primary road name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca35": { + "description": "Road section", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca36": { + "description": "Branch road name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca37": { + "description": "Sub-branch road name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca38": { + "description": "Street name pre-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca39": { + "description": "Street name post-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca4": { + "description": "City division, borough, city district, ward, chou (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca5": { + "description": "Neighborhood, block", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca6": { + "description": "Group of streets below the neighborhood level ", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "country": { + "description": "The two-letter ISO 3166 [i.9] country code in capital ASCII letters, e.g. DE or US, as per ISO 3166 [i.9]", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "country" + ], + "type": "object", + "x-etsi-ref": "6.5.20" + }, + "DmgCapabilities": { + "properties": { + "ExtScMcsCap": { + "description": "Extended SC MCS capabilities as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dmgApOrPcpCapInfo": { + "description": "DMG AP or PCP capabilities information as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint16" + }, + "dmgStaBeamTrackTimeLimit": { + "description": "DMG station beam tracking time limit as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint16" + }, + "dmgStaCapInfo": { + "description": "DMG station capabilities information as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint64" + }, + "maxNrBasicAmsduSubframes": { + "description": "Number of basic A-MSDU subframes in A-MSDU as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "maxNrShortAmsduSubframes": { + "description": "Number of short A-MSDU subframes in A-MSDU as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "sarCap": { + "description": "SAR capabilities as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "tddCap": { + "description": "TDD capabilities as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint16" + } + }, + "required": [ + "dmgStaCapInfo", + "dmgApOrPcpCapInfo", + "dmgStaBeamTrackTimeLimit", + "ExtScMcsCap", + "maxNrBasicAmsduSubframes", + "maxNrShortAmsduSubframes", + "tddCap", + "sarCap" + ], + "type": "object", + "x-etsi-ref": "6.5.17" + }, + "EdmgCapabilities": { + "properties": { + "ampduParameters": { + "description": "A-MPDU parameters as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "reserved": { + "description": "", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "supportedMcs": { + "description": "Supported MCS as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "trnParameters": { + "description": "Training parameters as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint16" + } + }, + "required": [ + "ampduParameters", + "trnParameters", + "supportedMcs" + ], + "type": "object", + "x-etsi-ref": "6.5.18" + }, + "ExtBssLoad": { + "properties": { + "muMimoStaCount": { + "description": "Indicates the total number of STAs currently associated with this BSS that have a 1 in the MU Beamformee Capable field of their VHT Capabilities element.", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt16" + }, + "obsSec20MhzUtil": { + "description": "Observable loading on each of the secondary 20 MHz channel.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "obsSec40MhzUtil": { + "description": "Observable loading on each of the secondary 40 MHz channel.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "obsSec80MhzUtil": { + "description": "Observable loading on each of the secondary 80 MHz channel.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "spatStreamUnderUtil": { + "description": "The percentage of time, linearly scaled with 255 representing 100 %, that the AP has underutilized spatial domain resources for given busy time of the medium.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt8" + } + }, + "required": [ + "muMimoStaCount", + "spatStreamUnderUtil", + "obsSec20MhzUtil", + "obsSec40MhzUtil", + "obsSec80MhzUtil" + ], + "type": "object", + "x-etsi-ref": "6.5.8" + }, + "GeoLocation": { + "properties": { + "altitude": { + "description": "The altitude value of location as defined in IETF RFC 6225 [6]", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "altitudeType": { + "description": "The type description for altitude information e.g. floors or meters as defined in IETF RFC 6225 [6]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "altitudeUncertainty": { + "description": "The uncertainty for altitude information as defined in IETF RFC 6225 [6]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "datum": { + "description": "The datum value to express how coordinates are organized and related to real world as defined in IETF RFC 6225 [6]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "lat": { + "description": "The latitude value of location as defined in IETF RFC 6225 [6]", + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint64" + }, + "latUncertainty": { + "description": "The uncertainty for Latitude information as defined in IETF RFC 6225 [6]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "long": { + "description": "The longitude value of location as defined in IETF RFC 6225 [6]", + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint64" + }, + "longUncertainty": { + "description": "The uncertainty for Longitude information as defined in IETF RFC 6225 [6]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + } + }, + "required": [ + "latUncertainty", + "lat", + "longUncertainty", + "long", + "datum" + ], + "type": "object", + "x-etsi-ref": "6.5.19" + }, + "HeCapabilities": { + "properties": { + "heMacCapInfo": { + "description": "MAC capabilities of an Access Point.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "hePhyCapinfo": { + "description": "PHY capabilities of an Access Point.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "ppeThresholds": { + "description": "PPE Threshold determines the nominal packet padding value for a HE PPDU.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "not defined" + }, + "supportedHeMcsNssSet": { + "description": "Supported MCS and NSS Set.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + } + }, + "required": [ + "heMacCapInfo", + "hePhyCapinfo", + "supportedHeMcsNssSet" + ], + "type": "object", + "x-etsi-ref": "6.5.16" + }, + "HtCapabilities": { + "properties": { + "ampduParameters": { + "description": "A-MPDU parameters as defined in IEEE 802.11-2016 [8].", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt8" + }, + "aselCap": { + "description": "ASEL capabilities as defined in IEEE 802.11-2016 [8].", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt8" + }, + "htCapabilityInfo": { + "description": "HT Capability Information as defined in IEEE 802.11-2016 [8].", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt16" + }, + "htExtendedCap": { + "description": "Extended HT Capabilities as defined in IEEE 802.11-2016 [8].", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt16" + }, + "supportedMcsSet": { + "description": "Supported MCS set as defined in IEEE 802.11-2016 [8].", + "format": "uint128", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint128" + }, + "txBeamFormCap": { + "description": "Transmit Beamforming Capabilities as defined in IEEE 802.11-2016 [8].", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt32" + } + }, + "required": [ + "htCapabilityInfo", + "ampduParameters", + "supportedMcsSet", + "htExtendedCap", + "txBeamFormCap", + "aselCap" + ], + "type": "object", + "x-etsi-ref": "6.5.14" + }, + "InlineNotification": { + "oneOf": [ + { + "$ref": "#/components/schemas/AssocStaNotification" + }, + { + "$ref": "#/components/schemas/StaDataRateNotification" + } + ], + "discriminator": { + "propertyName": "notificationType" + } + }, + "InlineSubscription": { + "oneOf": [ + { + "$ref": "#/components/schemas/AssocStaSubscription" + }, + { + "$ref": "#/components/schemas/StaDataRateSubscription" + } + ], + "discriminator": { + "propertyName": "subscriptionType" + } + }, + "LinkType": { + "properties": { + "href": { + "description": "URI referring to a resource", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "href" + ], + "type": "object", + "x-etsi-ref": "6.5.23" + }, + "MeasurementConfig": { + "properties": { + "beaconRequest": { + "$ref": "#/components/schemas/BeaconRequestConfig" + }, + "channelLoad": { + "$ref": "#/components/schemas/ChannelLoadConfig" + }, + "measurementDuration": { + "description": "Duration of the measurement, shall be lower than Maximum Measurement Duration in TU as defined in section 11.11.4 of IEEE 802.11 [8].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "measurementId": { + "description": "Identifier of this measurement configuration.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "randomnInterval": { + "description": "Random interval to be used for starting the measurement. In units of TU as specifed in section 11.11.3 of IEEE 802.11 [8].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "staStatistics": { + "$ref": "#/components/schemas/StaStatisticsConfig" + } + }, + "required": [ + "measurementId", + "measurementDuration", + "randomnInterval" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tThis element enables the configuration of the channelLoad, beaconRequest and staStatistics in a single resource data type, although only one of each measurement. Multiple measurement configurations of each kind are not allowed.", + "x-etsi-ref": "6.2.4" + }, + "NeighborReport": { + "properties": { + "bssid": { + "description": "BSS Id of the Access Point that is being reported.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "bssidInfo": { + "description": "Additional information related to Access Point that is being reported such as AP reachability, security, key scope, Mobility Domain, HT/VHT capability and Fine Time Measurements.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt32" + }, + "channel": { + "description": "The channel currently used by this Access Point.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "operatingClass": { + "description": "The channel set of the AP indicated by this BSSID.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "phyType": { + "description": "PHY type of the AP indicated by this BSSID. It is an integer value coded according to the value of the dot11PHYType.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + } + }, + "required": [ + "bssid", + "bssidInfo", + "operatingClass", + "channel", + "phyType" + ], + "type": "object", + "x-etsi-ref": "6.5.10" + }, + "ProblemDetails": { + "properties": { + "detail": { + "description": "A human-readable explanation specific to this occurrence of the problem", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "instance": { + "description": "A URI reference that identifies the specific occurrence of the problem", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + }, + "status": { + "description": "The HTTP status code for this occurrence of the problem", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "title": { + "description": "A short, human-readable summary of the problem type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "type": { + "description": "A URI reference according to IETF RFC 3986 that identifies the problem type", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + } + }, + "type": "object" + }, + "Rssi": { + "properties": { + "rssi": { + "description": "The Received Signal Strength Indicator from a station", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + } + }, + "required": [ + "rssi" + ], + "type": "object", + "x-etsi-ref": "6.5.21" + }, + "StaDataRate": { + "properties": { + "staId": { + "$ref": "#/components/schemas/StaIdentity" + }, + "staLastDataDownlinkRate": { + "description": "The data transmit rate in kbps that was most recently used for transmission of data PPDUs from the access point to the station.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "staLastDataUplinkRate": { + "description": "The data transmit rate in Kbps that was most recently used for transmission of data PPDUs from the associated station to the access point.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "type": "object", + "x-etsi-ref": "6.5.22" + }, + "StaDataRateNotification": { + "properties": { + "notificationType": { + "description": "Shall be set to \"StaDataRateNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "staDataRate": { + "description": "Data rates of a client station.", + "items": { + "$ref": "#/components/schemas/StaDataRate" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "StaDataRate" + }, + "timeStamp": { + "$ref": "#/components/schemas/TimeStamp" + } + }, + "required": [ + "notificationType" + ], + "type": "object", + "x-etsi-ref": "6.4.3" + }, + "StaDataRateSubscription": { + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "self": { + "$ref": "#/components/schemas/LinkType" + } + }, + "required": [ + "self" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "callbackReference": { + "description": "URI selected by the service consumer to receive notifications on the subscribed WLAN Access Information Service. This shall be included both in the request and in response.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "URI" + }, + "expiryDeadline": { + "$ref": "#/components/schemas/TimeStamp" + }, + "staId": { + "description": "Identifier(s) to uniquely specify the target client station(s) for the subscription", + "items": { + "$ref": "#/components/schemas/StaIdentity" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "StaIdentity" + }, + "subscriptionType": { + "description": "Shall be set to \"StaDataRateSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "callbackReference", + "staId" + ], + "type": "object", + "x-etsi-ref": "6.3.3" + }, + "StaIdentity": { + "properties": { + "aid": { + "description": "Number which identifies a particular association between a station and an Access Point ", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ipAddress": { + "description": "IPv4 or IPv6 address allocated for the station.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "macId": { + "description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "ssid": { + "description": "Service Set Identifier to identify logical networks.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "macId" + ], + "type": "object", + "x-etsi-ref": "6.5.11" + }, + "StaInfo": { + "properties": { + "apAssociated": { + "$ref": "#/components/schemas/ApAssociated" + }, + "beaconReport": { + "$ref": "#/components/schemas/BeaconReport" + }, + "channel": { + "description": "Channel currently used by the station.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "rssi": { + "$ref": "#/components/schemas/Rssi" + }, + "staDataRate": { + "$ref": "#/components/schemas/StaDataRate" + }, + "staId": { + "$ref": "#/components/schemas/StaIdentity" + }, + "staStatistics": { + "$ref": "#/components/schemas/StaStatistics" + }, + "timeStamp": { + "$ref": "#/components/schemas/TimeStamp" + } + }, + "required": [ + "staId" + ], + "type": "object", + "x-etsi-ref": "6.2.3" + }, + "StaStatistics": { + "properties": { + "groupIdentity": { + "description": "Indicates the requested statistics group describing the Statistics Group Data according to table 9-114 of IEEE 802.11-2016 [8].", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt8" + }, + "md": { + "description": "Measurement Duration.", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt16" + }, + "statisticsGroupData": { + "$ref": "#/components/schemas/StatisticsGroupData", + "description": "Statistics Group Data as defined in Annex C of IEEE 802.112016 [8].", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "not specified" + } + }, + "required": [ + "md", + "groupIdentity", + "statisticsGroupData" + ], + "type": "object", + "x-etsi-ref": "6.5.13" + }, + "StaStatisticsConfig": { + "properties": { + "groupIdentity": { + "description": "As per table T 9-114 of IEEE 802.11-2012 [8].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "staId": { + "$ref": "#/components/schemas/StaIdentity" + }, + "triggerCondition": { + "type": "integer" + }, + "triggerTimeout": { + "description": "The Trigger Timeout field contains a value in units of 100 TUs during which a measuring STA does not generate further triggered STA Statistics Reports after a trigger condition has been met.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "triggeredReport": { + "type": "boolean" + } + }, + "required": [ + "staId", + "groupIdentity", + "triggeredReport", + "triggerTimeout", + "triggerCondition" + ], + "type": "object", + "x-etsi-ref": "6.5.26" + }, + "StatisticsGroupData": { + "properties": { + "dot11AMPDUDelimiterCRCErrorCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11AMPDUReceivedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11AMSDUAckFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11AckFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11BeamformingFrameCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11ChannelWidthSwitchCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11DualCTSFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11DualCTSSuccessCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11ExplicitBARFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11FCSErrorCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11FailedAMSDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11FailedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11FortyMHzFrameReceivedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11FortyMHzFrameTransmittedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11FrameDuplicateCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11GrantedRDGUnusedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11GrantedRDGUsedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11GroupReceivedFrameCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11GroupTransmittedFrameCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11ImplicitBARFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11MPDUInReceivedAMPDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11MultipleRetryAMSDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11MultipleRetryCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11PSMPUTTGrantDuration": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11PSMPUTTUsedDuration": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosAckFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosDiscardedFrameCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosFailedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosFrameDuplicateCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosMPDUsReceivedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosMultipleRetryCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosRTSFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosRTSSuccessCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosReceivedFragmentCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosRetriesReceivedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosRetryCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosTransmittedFragmentCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosTransmittedFrameCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsBIPMICErrors": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsCCMPDecryptErrors": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsCCMPReplays": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsCMACReplays": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsRobustMgmtCCMPReplays": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsTKIPICVErrors": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsTKIPReplays": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RTSFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RTSLSIGFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RTSLSIGSuccessCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RTSSuccessCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11ReceivedAMSDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11ReceivedFragmentCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11ReceivedOctetsInAMPDUCount": { + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint64" + }, + "dot11ReceivedOctetsInAMSDUCount": { + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint64" + }, + "dot11RetryAMSDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RetryCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11STAStatisticsAPAverageAccessDelay": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STAStatisticsAverageAccessDelayBackGround": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STAStatisticsAverageAccessDelayBestEffort": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STAStatisticsAverageAccessDelayVideo": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STAStatisticsAverageAccessDelayVoice": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STAStatisticsChannelUtilization": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STAStatisticsStationCount": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STBCCTSFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11STBCCTSSuccessCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedAMPDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedAMSDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedFragmentCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedFrameCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedFramesInGrantedRDGCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedMPDUsInAMPDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedOctetsInAMPDUCount": { + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint64" + }, + "dot11TransmittedOctetsInAMSDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedOctetsInGrantedRDGCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TwentyMHzFrameReceivedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TwentyMHzFrameTransmittedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11nonSTBCCTSFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11nonSTBCCTSSuccessCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "type": "object" + }, + "SubscriptionLinkList": { + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "self": { + "$ref": "#/components/schemas/LinkType" + } + }, + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "assocStaSubscription": { + "items": { + "$ref": "#/components/schemas/AssocStaSubscription" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "AssocStaSubscription" + }, + "staDataRateSubscription": { + "items": { + "$ref": "#/components/schemas/StaDataRateSubscription" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "StaDataRateSubscription" + } + }, + "required": [ + "_links" + ], + "type": "object" + }, + "TimeStamp": { + "properties": { + "nanoSeconds": { + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "seconds": { + "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "required": [ + "seconds", + "nanoSeconds" + ], + "type": "object", + "x-etsi-ref": "6.5.2" + }, + "VhtCapabilities": { + "properties": { + "vhtCapInfo": { + "description": "VHT capabilities Info as defined in IEEE 802.11-2016 [8].", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt32" + }, + "vhtMcsNss": { + "description": "Supported VHT-MCS and NSS Set as defined in IEEE 802.11-2016 [8].", + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt64" + } + }, + "required": [ + "vhtCapInfo", + "vhtMcsNss" + ], + "type": "object", + "x-etsi-ref": "6.5.15" + }, + "WanMetrics": { + "properties": { + "downlinkLoad": { + "description": "1-octet positive integer representing the current percentage loading of the downlink WAN connection, scaled linearly with 255 representing 100 %, as measured over an interval the duration of which is reported in Load Measurement Duration. In cases where the downlink load is unknown to the AP, the value is set to zero.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt8" + }, + "downlinkSpeed": { + "description": "4-octet positive integer whose value is an estimate of the WAN Backhaul link current downlink speed in kilobits per second.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "lmd": { + "description": "The LMD (Load Measurement Duration) field is a 2-octet positive integer representing the duration over which the Downlink Load and Uplink Load have been measured, in tenths of a second. When the actual load measurement duration is greater than the maximum value, the maximum value will be reported. The value of the LMD field is set to 0 when neither the uplink nor downlink load can be computed. When the uplink and downlink loads are computed over different intervals, the maximum interval is reported.", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint16" + }, + "uplinkLoad": { + "description": "1-octet positive integer representing the current percentage loading of the uplink WAN connection, scaled linearly with 255 representing 100 %, as measured over an interval, the duration of which is reported in Load Measurement Duration. In cases where the uplink load is unknown to the AP, the value is set to zero.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "uplinkSpeed": { + "description": "4-octet positive integer whose value is an estimate of the WAN Backhaul link's current uplink speed in kilobits per second.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt32" + }, + "wanInfo": { + "description": "Info about WAN link status, link symmetricity and capacity currently used.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + } + }, + "required": [ + "wanInfo", + "downlinkSpeed", + "uplinkSpeed", + "downlinkLoad", + "uplinkLoad", + "lmd" + ], + "type": "object", + "x-etsi-ref": "6.5.6" + }, + "WlanCapabilities": { + "properties": { + "dmg": { + "$ref": "#/components/schemas/DmgCapabilities" + }, + "edmg": { + "$ref": "#/components/schemas/EdmgCapabilities" + }, + "he": { + "$ref": "#/components/schemas/HeCapabilities" + }, + "ht": { + "$ref": "#/components/schemas/HtCapabilities" + }, + "vht": { + "$ref": "#/components/schemas/VhtCapabilities" + } + }, + "type": "object", + "x-etsi-ref": "6.5.4" + } + } + } +} diff --git a/ttcn/LibMec/WlanInformationAPI/module.mk b/ttcn/LibMec/WlanInformationAPI/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..99da98a5e0903ef96b41b554e540c3049d821d7b --- /dev/null +++ b/ttcn/LibMec/WlanInformationAPI/module.mk @@ -0,0 +1,7 @@ +sources := \ + ttcn/WlanInformationAPI_TypesAndValues.ttcn \ + ttcn/WlanInformationAPI_Pics.ttcn \ + ttcn/WlanInformationAPI_Pixits.ttcn \ + ttcn/WlanInformationAPI_Templates.ttcn \ + ttcn/WlanInformationAPI_Functions.ttcn + diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..a291fe71f1c1e180dbf35aad598383bf5c315b3d --- /dev/null +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Functions.ttcn @@ -0,0 +1,118 @@ +/** + * @author ETSI / TTF T012 + * @version $URL$ + * $ID:$ + * @desc This module provides the custom templates for ITS HTTP based protocols. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + */ +module WlanInformationAPI_Functions { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_Time all; + import from LibCommon_VerdictControl all; + import from LibCommon_Sync all; + + // LibHttp + import from LibItsHttp_TypesAndValues all; + import from LibItsHttp_Functions all; + import from LibItsHttp_Templates all; + import from LibItsHttp_JsonTemplates all; + import from LibItsHttp_TestSystem all; + + // LibMec/WlanInformationAPI + import from WlanInformationAPI_TypesAndValues all; + import from WlanInformationAPI_Templates all; + import from WlanInformationAPI_Pixits all; + + // LibMec + import from LibMec_Templates all; + import from LibMec_Functions all; + import from LibMec_Pics all; + import from LibMec_Pixits all; + + function f_create_assoc_sta_subscription( + out AssocStaSubscription p_assoc_sta_subscription + ) runs on HttpComponent { + var Headers v_headers; + var HttpMessage v_response; + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_post( + PICS_ROOT_API & PX_ME_WLAN_URI & "/subscriptions", + v_headers, + m_http_message_body_json( + m_body_json_assoc_sta_subscription( + m_assoc_sta_subscription( + PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, + m_ap_identity( + PX_MAC_ID + ))))))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_201_created( + mw_http_message_body_json( + mw_body_json_assoc_sta_subscription( + mw_assoc_sta_subscription( + PX_ASSOC_STA_SUBSCRIPTION_CALLBACK, + -, + ? + )))))) -> value v_response { + tc_ac.stop; + + p_assoc_sta_subscription := v_response.response.body.json_body.assocStaSubscription; + log("f_create_assoc_sta_subscription: INFO: IUT successfully responds to the subscription: ", p_assoc_sta_subscription); + } + [] tc_ac.timeout { + log("f_create_assoc_sta_subscription: INCONC: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function "f_create_assoc_sta_subscription + + function f_delete_assoc_sta_subscription( + in AssocStaSubscription p_assoc_sta_subscription + ) runs on HttpComponent { + var Headers v_headers; + var charstring v_uri := regexp( + oct2char(unichar2oct(p_assoc_sta_subscription.links.self_.href)), + "?+(" & PX_ME_WLAN_URI & "?*)", + 0 + ); + log("====> v_uri: ", v_uri); + + f_init_default_headers_list(-, -, v_headers); + httpPort.send( + m_http_request( + m_http_request_delete( + PICS_ROOT_API & v_uri, + v_headers + ))); + + tc_ac.start; + alt { + [] httpPort.receive( + mw_http_response( + mw_http_response_204_no_content + )) { + tc_ac.stop; + } + [] tc_ac.timeout { + log("f_delete_assoc_sta_subscription: Expected message not received"); + } + } // End of 'alt' statement + + } // End of function f_delete_assoc_sta_subscription + +} // End of module WlanInformationAPI_Functions diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pics.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pics.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..d9aaf318cb24703a1a7591433fbc12de5a8d6ac1 --- /dev/null +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pics.ttcn @@ -0,0 +1,8 @@ +module WlanInformationAPI_Pics { + + /** + * @desc Does the IUT support WlanInformationAPI? + */ + modulepar boolean PICS_WLAN_INFORMATION_API_SUPPORTED := true; + +} // End of module WlanInformationAPI_Pics diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..30e11cfe064a7d40535fedfe91cb114b044c660b --- /dev/null +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Pixits.ttcn @@ -0,0 +1,18 @@ +module WlanInformationAPI_Pixits { + + // JSON + import from JSON all; + + modulepar charstring PX_WLAN_FILTER_FIELD := "ap/macId"; + + modulepar charstring PX_WLAN_FILTER_VALUE := "005C06060606"; + + modulepar JSON.String PX_MAC_ID := "005C06060606"; + + modulepar JSON.AnyURI PX_ASSOC_STA_SUBSCRIPTION_CALLBACK := "https://127.0.0.1/wai/v1/assoc_notif"; + + modulepar JSON.String PX_SSID := "WLAN_SSID"; + + modulepar JSON.String PX_IP_ADDRESS := "10.10.10.10"; + +} // End of module WlanInformationAPI_Pixits diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..bbb8620837824d77a68df73253176692f0a7656d --- /dev/null +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_Templates.ttcn @@ -0,0 +1,207 @@ +module WlanInformationAPI_Templates { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibMec/WlanInformationAPI + import from WlanInformationAPI_TypesAndValues all; + import from WlanInformationAPI_Pixits all; + + template (omit) ApInfo m_ap_info( + in template (value) ApIdentity p_apId, + in template (omit) UInt32 p_channel := omit, + in template (omit) BssLoad p_bssLoad := omit, + in template (omit) ExtBssLoad p_extBssLoad := omit, + in template (omit) ApLocation p_apLocation := omit, + in template (omit) NeighborReport p_apNeighbor := omit, + in template (omit) TimeStamp p_timeStamp := omit + ) := { + timeStamp := p_timeStamp, + apId := p_apId, + channel := p_channel, + bssLoad := p_bssLoad, + extBssLoad := p_extBssLoad, + apLocation := p_apLocation, + apNeighbor := p_apNeighbor + } // End of template m_ap_info + + template (present) ApInfo mw_ap_info( + template (present) ApIdentity p_apId := ?, + template UInt32 p_channel := *, + template BssLoad p_bssLoad := *, + template ExtBssLoad p_extBssLoad := *, + template ApLocation p_apLocation := *, + template NeighborReport p_apNeighbor := *, + template TimeStamp p_timeStamp := * + ) := { + timeStamp := p_timeStamp, + apId := p_apId, + channel := p_channel, + bssLoad := p_bssLoad, + extBssLoad := p_extBssLoad, + apLocation := p_apLocation, + apNeighbor := p_apNeighbor + } // End of template mw_ap_info + + template (omit) StaInfo m_sta_info( + in template (value) ApIdentity p_apId, + in template (omit) UInt32 p_channel := omit, + in template (omit) ApAssociated p_apAssociated := omit, + in template (omit) Rssi p_rssi := omit, + in template (omit) StaDataRate p_staDataRate := omit, + in template (omit) StaStatistics p_staStatistics := omit, + in template (omit) BeaconReport p_beaconReport := omit, + in template (omit) TimeStamp p_timeStamp := omit + ) := { + timeStamp := p_timeStamp, + apId := p_apId, + channel := p_channel, + apAssociated := p_apAssociated, + rssi := p_rssi, + staDataRate := p_staDataRate, + staStatistics := p_staStatistics, + beaconReport := p_beaconReport + } // End of template m_sta_info + + template (present) StaInfo mw_sta_info( + template (present) ApIdentity p_apId := ?, + template UInt32 p_channel := ?, + template ApAssociated p_apAssociated := ?, + template Rssi p_rssi := ?, + template StaDataRate p_staDataRate := ?, + template StaStatistics p_staStatistics := ?, + template BeaconReport p_beaconReport := ?, + template TimeStamp p_timeStamp := ? + ) := { + timeStamp := p_timeStamp, + apId := p_apId, + channel := p_channel, + apAssociated := p_apAssociated, + rssi := p_rssi, + staDataRate := p_staDataRate, + staStatistics := p_staStatistics, + beaconReport := p_beaconReport + } // End of template mw_sta_info + + template (omit) AssocStaSubscription m_assoc_sta_subscription( + in template (value) JSON.AnyURI p_callbackReference, + in template (value) ApIdentity p_apId, + in template (omit) LinkTypes p_links := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "AssocStaSubscription", + callbackReference := p_callbackReference, + links := p_links, + apId := p_apId, + expiryDeadline := p_expiryDeadline + } // End of template m_assoc_sta_subscription + + template (omit) AssocStaSubscription m_assoc_sta_subscription_invalid( + in template (value) JSON.AnyURI p_callbackReference, + in template (value) ApIdentity p_apId, + in template (omit) LinkTypes p_links := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "InvalidAssocStaSubscription", + callbackReference := p_callbackReference, + links := p_links, + apId := p_apId, + expiryDeadline := p_expiryDeadline + } // End of template m_assoc_sta_subscription_invalid + + template (present) AssocStaSubscription mw_assoc_sta_subscription( + template (present) JSON.AnyURI p_callbackReference := ?, + template (present) ApIdentity p_apId := ?, + template LinkTypes p_links := *, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "AssocStaSubscription", + callbackReference := p_callbackReference, + links := p_links, + apId := p_apId, + expiryDeadline := p_expiryDeadline + } // End of template mw_assoc_sta_subscription + + template (omit) StaDataRateSubscription m_sta_data_rate_subscription( + in template (value) JSON.AnyURI p_callbackReference, + in template (value) StaIdentities p_staId, + in template (omit) LinkTypes p_links := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "StaDataRateSubscription", + callbackReference := p_callbackReference, + links := p_links, + staId := p_staId, + expiryDeadline := p_expiryDeadline + } // End of template m_sta_data_rate_subscription + + template (omit) StaDataRateSubscription m_sta_data_rate_subscription_invalid( + in template (value) JSON.AnyURI p_callbackReference, + in template (value) StaIdentities p_staId, + in template (omit) LinkTypes p_links := omit, + in template (omit) TimeStamp p_expiryDeadline := omit + ) := { + subscriptionType := "InvalidStaDataRateSubscription", + callbackReference := p_callbackReference, + links := p_links, + staId := p_staId, + expiryDeadline := p_expiryDeadline + } // End of template m_sta_data_rate_subscription_invalid + + template (present) StaDataRateSubscription mw_sta_data_rate_subscription( + template (present) JSON.AnyURI p_callbackReference := ?, + template (present) StaIdentities p_staId := ?, + template LinkTypes p_links := *, + template TimeStamp p_expiryDeadline := * + ) := { + subscriptionType := "StaDataRateSubscription", + callbackReference := p_callbackReference, + links := p_links, + staId := p_staId, + expiryDeadline := p_expiryDeadline + } // End of template mw_sta_data_rate_subscription + + template (omit) SubscriptionLinkList m_subscription_link_list( + in template (value) LinkTypes p_links, + in template (omit) AssocStaSubscriptionList p_assocStaSubscription := omit, + in template (omit) StaDataRateSubscriptionList p_staDataRateSubscription := omit + ) := { + links := p_links, + assocStaSubscription := p_assocStaSubscription, + staDataRateSubscription := p_staDataRateSubscription + } // End of template m_subscription_link_list + + template (present) SubscriptionLinkList mw_subscription_link_list( + template (present) LinkTypes p_links := ?, + template AssocStaSubscriptionList p_assocStaSubscription := *, + template StaDataRateSubscriptionList p_staDataRateSubscription := * + ) := { + links := p_links, + assocStaSubscription := p_assocStaSubscription, + staDataRateSubscription := p_staDataRateSubscription + } // End of template mw_subscription_link_list + + template (omit) ApIdentity m_ap_identity( + in JSON.String p_macId, + in template (omit) SsidList p_ssid := omit, + in template (omit) IpAddressList p_ipAddress := omit + ) := { + macId := p_macId, + ssid := p_ssid, + ipAddress := p_ipAddress + } // End of template m_ap_identity + + template (present) ApIdentity mw_ap_identity( + template (present) JSON.String p_macId := ?, + template SsidList p_ssid := *, + template IpAddressList p_ipAddress := * + ) := { + macId := p_macId, + ssid := p_ssid, + ipAddress := p_ipAddress + } // End of template mw_ap_identity + +} // End of module WlanInformationAPI_Templates diff --git a/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..3f9fdf7fb0d49eade6e5c74a8599ce7be72f26d0 --- /dev/null +++ b/ttcn/LibMec/WlanInformationAPI/ttcn/WlanInformationAPI_TypesAndValues.ttcn @@ -0,0 +1,651 @@ +/** + * @author ETSI / TTF T012 + * @version $Url$ + * $Id$ + * @desc Types ANd Values for ETSI GS MEC 028 V2.1.1 (2020-06) + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + */ +module WlanInformationAPI_TypesAndValues { + + // JSON + import from JSON all; + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + /** + * @desc The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type UInt32 Seconds; + + /** + * @desc The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + */ + type UInt32 NanoSeconds; + + /** + * @desc Time stamp description + * @member seconds The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @member nanoSeconds The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC + * @see MEC030 Clause 6.5.2 Type: TimeStamp + */ + type record TimeStamp { + Seconds seconds, + NanoSeconds nanoSeconds + } + + + type record of JSON.String SsidList; + type record of JSON.String IpAddressList; + /** + * @desc Identifiers determining a specific Access Point + * @member macId Unique Identifier assigned to an Access Point + * @member ssid Service Set Identifier to identify logical networks including Basic Service Set and Extended Service Set + * @member ipAddress IPv4 or IPv6 address allocated for the Access Point + * @see ETSI GS MEC 028 Clause 6.5.3 Type: ApIdentity + */ + type record ApIdentity { + JSON.String macId, + SsidList ssid optional, + IpAddressList ipAddress optional + } + + /** + * @desc information on HT capabilities of an Access Point + * @member htCapabilityInfo HT Capability Information + * @member ampduParameters A-MPDU parameters + * @member supportedMcsSet Supported MCS set + * @member htExtendedCap Extended HT Capabilities + * @member txBeamFormCap Transmit Beamforming Capabilities + * @member aselCap ASEL capabilities + * @see ETSI GS MEC 028 Clause 6.5.14 Type: HtCapabilities + */ + type integer UInt128 with {variant "unsigned 128 bit"}; + type record HtCapabilities { + UInt16 htCapabilityInfo, + UInt8 ampduParameters, + UInt128 supportedMcsSet, + UInt16 htExtendedCap, + UInt32 txBeamFormCap, + UInt8 aselCap + } + + /** + * @desc Information on VHT Capabilities of an Access Point + * @member vhtCapInfo VHT capabilities Info + * @member vhtMcsNss Supported VHT-MCS and NSS Set + * @see ETSI GS MEC 028 Clause 6.5.15 Type: VhtCapabilities + */ + type record VhtCapabilities { + UInt32 vhtCapInfo, + UInt64 vhtMcsNss + } + + /** + * @desc Information on VHT Capabilities of an Access Point + * @member heMacCapInfo MAC capabilities of an Access Point + * @member hePhyCapinfo PHY capabilities of an Access Point + * @member supportedHeMcsNssSet Supported MCS and NSS Set + * @member PPE Threshold determines the nominal packet padding value for a HE PPDU + * @see ETSI GS MEC 028 Clause 6.5.16 Type: HeCapabilities + */ + type record HeCapabilities { + UInt8 heMacCapInfo, + UInt8 hePhyCapinfo, + UInt8 supportedHeMcsNssSet, + PpeThresholds ppeThresholds optional + } + type UInt8 PpeThresholds; // Type not defined, to be reviewed. See ETSI GS MEC 028 Clause 6.5.16 Type: HeCapabilities + + /** + * @desc Information on DMG Capabilities of an Access Point + * @member dmgStaCapInfo DMG station capabilities information + * @member dmgApOrPcpCapInfo DMG AP or PCP capabilities information + * @member dmgStaBeamTrackTimeLimit DMG station beam tracking time limit + * @member extScMcsCap Extended SC MCS capabilities + * @member maxNrBasicAmsduSubframes Number of basic A-MSDU subframes in A-MSDU + * @member maxNrShortAmsduSubframes Number of short A-MSDU subframes in A-MSDU + * @member tddCap TDD capabilities + * @member sarCap SAR capabilities + * @see ETSI GS MEC 028 Clause 6.5.17 Type: DmgCapabilities + */ + type record DmgCapabilities { + UInt64 dmgStaCapInfo, + UInt16 dmgApOrPcpCapInfo, + UInt16 dmgStaBeamTrackTimeLimit, + UInt8 extScMcsCap, + UInt8 maxNrBasicAmsduSubframes, + UInt8 maxNrShortAmsduSubframes, + UInt16 tddCap, + UInt8 sarCap + } + + /** + * @desc Information on EDMG Capabilities of an Access Point + * @member ampduParameters A-MPDU parameters + * @member trnParameters Training parameters + * @member supportedMcs Supported MCS + * @member reserved + * @see ETSI GS MEC 028 Clause 6.5.18 Type: EdmgCapabilities + */ + type record EdmgCapabilities { + UInt8 ampduParameters, + UInt16 trnParameters, + UInt32 supportedMcs, + UInt8 reserved optional + } + + /** + * @desc WLAN capabilities of the Access Point + * @member ht Information about Access Point HT capabilities + * @member vht Information about Access Point VHT capabilities + * @member he Information about Access Point HE capabilities + * @member dmg Information about Access Point DMG capabilities + * @member edmg Information about Access Point EDMG capabilities + * @see ETSI GS MEC 028 Clause 6.5.4 Type: WlanCapabilities + */ + type record WlanCapabilities { + HtCapabilities ht optional, + VhtCapabilities vht optional, + HeCapabilities he optional, + DmgCapabilities dmg optional, + EdmgCapabilities edmg optional + } + + /** + * @desc Stations that are associated with the Access Point + * @member macId Unique identifier assigned to a station (as network interface controller) for communications at the data link layer of a network segment + * @member assocId Unique number which identifies a particular association between an Access Point and a station + * @member ipAddress IPv4 or IPv6 address allocated for the station associated with the Access + * @see ETSI GS MEC 028 Clause 6.5.5 Type: AssociatedStations + */ + type record AssociatedStations { + JSON.String macId, + JSON.String assocId optional, + JSON.String ipAddress optional + } + + /** + * @desc Metrics related to the backhaul characteristics of an Access Point as defined for WAN metrics + * @member wanInfo Info about WAN link status, link symmetricity and capacity currently used + * @member downlinkSpeed 4-octet positive integer whose value is an estimate of the WAN Backhaul link current downlink speed in kilobits per second + * @member uplinkSpeed 4-octet positive integer whose value is an estimate of the WAN Backhaul link's current uplink speed in kilobits per second + * @member downlinkLoad 1-octet positive integer representing the current percentage loading of the downlink WAN connection + * @member uplinkLoad 1-octet positive integer representing the current percentage loading of the uplink WAN connection + * @member lmd The LMD (Load Measurement Duration) + * @see ETSI GS MEC 028 Clause 6.5.6 Type: WanMetrics + */ + type record WanMetrics { + UInt8 wanInfo, + UInt32 downlinkSpeed, + UInt32 uplinkSpeed, + UInt8 downlinkLoad, + UInt8 uplinkLoad, + UInt16 lmd + } + + /** + * @desc Load of a BSS + * @member staCount Indicates the total number of STAs currently associated with this BSS + * @member channelUtilization The percentage of time + * @member availAdmCap Available Admission Capacity that specifies the remaining amount of medium time available via explicit admission control, in units of 32 μs/s + * @see ETSI GS MEC 028 Clause 6.5.7 Type: BssLoad + */ + type record BssLoad { + UInt16 staCount, + UInt8 channelUtilization, + UInt16 availAdmCap + } + + /** + * @desc Extended BSS Load information + * @member muMimoStaCount Indicates the total number of STAs currently associated with this BSS that have a 1 in the MU Beamformee Capable field of their VHT Capabilities element + * @member spatStreamUnderUtil The percentage of time that the AP has underutilized spatial domain resources for given busy time of the medium + * @member obsSec20MhzUtil Observable loading on each of the secondary 20 MHz channel + * @member obsSec40MhzUtil Observable loading on each of the secondary 40 MHz channel + * @member obsSec80MhzUtil Observable loading on each of the secondary 80 MHz channel + * @see ETSI GS MEC 028 Clause 6.5.8 Type: ExtBssLoad + */ + type record ExtBssLoad { + UInt16 muMimoStaCount, + UInt8 spatStreamUnderUtil, + UInt8 obsSec20MhzUtil, + UInt8 obsSec40MhzUtil, + UInt8 obsSec80MhzUtil + } + + /** + * @desc Information Geospatial Location of an Access Point + * @member latUncertainty The uncertainty for Latitude information + * @member The latitude value of location + * @member longUncertainty The uncertainty for Longitude information + * @member long The longitude value of location + * @member altitudeType The type description for altitude + * @member altitudeUncertainty The uncertainty for altitude information + * @member altitude The altitude value of location + * @member datum The datum value to express how coordinates are organized and related to real world + * @see ETSI GS MEC 028 Clause 6.5.19 Type: GeoLocation + */ + type record GeoLocation { + UInt8 latUncertainty, + UInt64 lat, + UInt8 longUncertainty, + UInt64 long, + UInt8 altitudeType optional, + UInt8 altitudeUncertainty optional, + UInt32 altitude optional, + UInt8 datum + } + + /** + * @desc Iinformation on Civic Location of an Access Point + * @member country The two-letter ISO 3166 [i.9] country code in capital ASCII letters, e.g. DE or US, as per ISO 3166 + * @member ca0 Language + * @member ca0 Language + * @member ca1 National subdivisions (state, canton, region,province, prefecture) + * @member ca2 County, parish, gun (JP), district (IN) + * @member ca3 City, township, shi (JP) + * @member ca4 City division, borough, city district, ward, chou (JP) + * @member ca5 Neighborhood, block + * @member ca6 Group of streets below the neighborhood level + * @member ca16 Leading street direction + * @member ca17 Trailing street suffix + * @member ca18 Street suffix or type + * @member ca19 House number + * @member ca20 House number suffix + * @member ca21 Landmark of vanity address + * @member ca22 Additional location information + * @member ca23 Name (residence and office occupant) + * @member ca24 Postal/zip code + * @member ca25 Building (structure) + * @member ca26 Unit (apartment/suite) + * @member ca27 Floor + * @member ca28 Room + * @member ca29 Type of place + * @member ca30 Postal community name + * @member ca31 Post office box + * @member ca32 Additional code + * @member ca33 Seat (desk.cubicle, workstation) + * @member ca34 Primary road name + * @member ca35 Road section + * @member ca36 Branch road name + * @member ca37 Sub-branch road name + * @member ca38 Street name pre-modifier + * @member ca39 Street name post-modifier + * @member ca128 Script + * @see ETSI GS MEC 028 Clause 6.5.20 Type: CivicLocation + */ + type record CivicLocation { + JSON.String country, + JSON.String ca0 optional, + JSON.String ca1 optional, + JSON.String ca2 optional, + JSON.String ca3 optional, + JSON.String ca4 optional, + JSON.String ca5 optional, + JSON.String ca6 optional, + JSON.String ca16 optional, + JSON.String ca17 optional, + JSON.String ca18 optional, + JSON.String ca19 optional, + JSON.String ca20 optional, + JSON.String ca21 optional, + JSON.String ca22 optional, + JSON.String ca23 optional, + JSON.String ca24 optional, + JSON.String ca25 optional, + JSON.String ca26 optional, + JSON.String ca27 optional, + JSON.String ca28 optional, + JSON.String ca29 optional, + JSON.String ca30 optional, + JSON.String ca31 optional, + JSON.String ca32 optional, + JSON.String ca33 optional, + JSON.String ca34 optional, + JSON.String ca35 optional, + JSON.String ca36 optional, + JSON.String ca37 optional, + JSON.String ca38 optional, + JSON.String ca39 optional, + JSON.String ca128 optional + } + + /** + * @desc Location information of the Access Point + * @member geolocation Geospatial Location of the AP + * @member civicLocation Civic Location of the AP + * @see ETSI GS MEC 028 Clause 6.5.9 Type: ApLocation + */ + type record ApLocation { + GeoLocation geolocation optional, + CivicLocation civicLocation optional + } + + /** + * @desc Information about neighbor Access Points + * @member bssid BSS Id of the Access Point that is being reported + * @member bssidInfo Additional information related to Access Point that is being reported + * @member operatingClass The channel set of the AP indicated by this BSSID + * @member channel The channel currently used by this Access Point + * @member phyType PHY type of the AP indicated by this BSSID. It is an integer value coded according to the value of the dot11PHYType + * @member optionalSubelements Optional subelements + * @see ETSI GS MEC 028 Clause 6.5.10 Type: NeighborReport + */ + type record NeighborReport { + JSON.String bssid, + UInt32 bssidInfo, + UInt8 operatingClass, + UInt8 channel, + UInt8 phyType, + OptionalSubelements optionalSubelements optional + } + type record of UInt8 OptionalSubelements; // Not defined, see ETSI GS MEC 028 Clause 6.5.10 Type: NeighborReport, to be reviewed + + /** + * @desc Identifiers determining a specific client station + * @member macId Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment + * @member ssid Service Set Identifier to identify logical networks + * @member aid Number which identifies a particular association between a station and an Access Point + * @member ipAddress IPv4 or IPv6 address allocated for the station + * @see ETSI GS MEC 028 Clause 6.5.11 Type: StaIdentity + */ + type record StaIdentity { + JSON.String macId, + JSON.String ssid optional, + JSON.String aid optional, + JSON.String ipAddress optional + } + type record of StaIdentity StaIdentities; + + /** + * @desc Information for the Access Point that the client station is associated to + * @member macId Unique identifier assigned to the Access Point (as network interface controller) for communications at the data link layer of a network segment + * @member ssid Service Set Identifier to identify logical networks + * @member assocId Unique number which identifies a particular association between the station and Access Point + * @member ipAddress IPv4 or IPv6 address allocated for the Access Point + * @see ETSI GS MEC 028 Clause 6.5.12 Type: ApAssociated + */ + type record ApAssociated { + JSON.String macId, + JSON.String ssid optional, + JSON.String assocId optional, + JSON.String ipAddress optional + } + + /** + * @desc Information statistics of the client station + * @member md Measurement Duration + * @member groupIdentity Indicates the requested statistics group describing the Statistics Group Data + * @member statisticsGroupData Statistics Group Data + * @member optionalSubelements Optional subelements + * @see ETSI GS MEC 028 Clause 6.5.13 Type: StaStatistics + */ + type record StaStatistics { + UInt16 md, + UInt8 groupIdentity, + StatisticsGroupData statisticsGroupData, + OptionalSubelements optionalSubelements optional + } + type UInt8 StatisticsGroupData; // Note defined, see ETSI GS MEC 028 Clause 6.5.13 Type: StaStatistics + + /** + * @desc Information on the Received Signal Strength Indicator (RSSI) of a client station + * @member rssi The Received Signal Strength Indicator from a station + * @see ETSI GS MEC 028 Clause 6.5.21 Type: Rssi + */ + type record Rssi { + UInt8 rssi + } + + /** + * @desc Data rates of a client station as defined in Data Elements Specification v1.0 + * @member staId Identifier(s) to uniquely specify the client station(s) associated + * @member staLastDataDownlinkRate The data transmit rate in kbps that was most recently used for transmission of data PPDUs from the access point to the station + * @member staLastDataUplinkRate The data transmit rate in Kbps that was most recently used for transmission of data PPDUs from the associated station to the access point + * @see ETSI GS MEC 028 Clause 6.5.22 Type: StaDataRate + */ + type record StaDataRate { + StaIdentity staId optional, + UInt32 staLastDataDownlinkRate optional, + UInt32 staLastDataUplinkRate optional + } + type record of StaDataRate StaDataRates; + + /** + * @desc Type of link + * @member href URI referring to a resource + * @see ETSI GS MEC 028 Clause 6.5.23 Type: LinkType + */ + type record LinkType { + JSON.AnyURI href + } + + type record LinkTypes { + LinkType self_ + } with { + variant (self_) "name as 'self'"; + } + + /** + * @desc This configuration applies to BssLoad measurement + * @member apId Identifier(s) to uniquely specify the target Access Point + * @member cChannelId Channel number which load is reported + * @member channelLoad Channel load as per IEEE 802.11-2012 + * @see ETSI GS MEC 028 Clause 6.5.24 Type: ChannelLoadConfig + */ + type record ChannelLoadConfig { + ApIdentity apId, + UInt32 cChannelId, + UInt32 channelLoad + } + + /** + * @desc + * @member staId Identifier to uniquely specify the station whose information is exposed within this data type + * @member channelId Channel number to scan + * @member measurementMode + * @member bssId The BSSID field indicates the BSSID of the BSS(s) for which a beacon report is requested. When requesting beacon reports for all BSSs on the channel, the BSSID field contains the wildcard BSSID + * @member ssId The SSID subelement indicates the ESS(s) or IBSS(s) for which a beacon report is requested + * @member reportingCondition As in table T9-89 of IEEE 802.11-2012 + * @see ETSI GS MEC 028 Clause 6.5.25 Type: BeaconRequestConfig + */ + type record BeaconRequestConfig { + StaIdentity staId, + UInt32 channelId, + UInt32 measurementMode, + BssIds bssId, + SsIds ssId optional, + UInt32 reportingCondition + } + type record of JSON.String BssIds; + type record of JSON.String SsIds; + + /** + * @desc + * @member staId Identifier to uniquely specify the station whose information is exposed within this data type + * @member groupIdentity As per table T 9-114 of IEEE 802.11-2012 + * @member triggeredReport Yes, use triggered report + * @member triggerTimeout The Trigger Timeout field contains a value in units of 100 TUs during which a measuring STA does not generate further triggered STA Statistics Reports after a trigger condition has been met + * @member triggerCondition As per Figure 9-161 of IEEE 802.11. This bitmap defines what are the metrics returned by the STA Statistics Report + * @see ETSI GS MEC 028 Clause 6.5.26 Type: StaStatisticsConfig + */ + type record StaStatisticsConfig { + StaIdentity staId, + UInt32 groupIdentity, + boolean triggeredReport, + UInt32 triggerTimeout, + UInt16 triggerCondition + } + + /** + * @desc + * @member staId Identifier to uniquely specify the station whose information is exposed within this data type + * @member measurementId Measurement ID of the Measurement configuration applied to this Beacon Report + * @member bssId The BSSID field indicates the BSSID of the BSS(s) for which a beacon report has been received + * @member ssId The SSID subelement indicates the ESS(s) or IBSS(s) for which a beacon report is received + * @see ETSI GS MEC 028 Clause 6.5.27 Type: BeaconReport + */ + type record BeaconReport { + StaIdentity staId, + JSON.String measurementId, + UInt32 channelId, + BssIds bssId, + SsIds ssId optional + } + + /** + * @desc Information on Access Points available from the WLAN Access Information Service + * @member timeStamp TimeStamp + * @member apId Identifier(s) to uniquely specify the Access Point whose information is exposed within this data type + * @member channel Channel configured for the Access Point + * @member wlanCap WLAN capabilities of Access Point + * @member wanMetrics WAN Metrics element provides information about the WAN link connecting an IEEE 802.11 Access Node and the Internet + * @member bssLoad BSS Load attribute contains information on the current STA population and traffic levels in the BSS + * @member extBssLoad Extended BSS Load attribute contains more detailed information on the current STA population and traffic levels in the BSS + * @member apLocation The location on the Access Point + * @member apNeighbor Information about neighbor Access Points + * @see ETSI GS MEC 028 Clause 6.2.2 Type: ApInfo + */ + type record ApInfo { + TimeStamp timeStamp optional, + ApIdentity apId, + UInt32 channel optional, + BssLoad bssLoad optional, + ExtBssLoad extBssLoad optional, + ApLocation apLocation optional, + NeighborReport apNeighbor optional + } + type record of ApInfo ApInfoList; + + /** + * @desc Information on wireless stations available from the WLAN Access Information Service + * @member timeStamp TimeStamp + * @member apId Identifier(s) to uniquely specify the Access Point whose information is exposed within this data type + * @member channel Channel configured for the Access Point + * @member apAssociated Information about the Access Point that this Client Station is associated to + * @member rssi Receive Signal Strength Indicator + * @member staDataRate Station Data Rate + * @member staStatistics Statistics as defined in IEEE 802.11-2016 for the client station collected over measurement duration + * @member beaconReport Beacon Report as defined in Wi-Fi Agile Multiband Specification + * @see ETSI GS MEC 028 Clause 6.2.3 Type: StaInfo + */ + type record StaInfo { + TimeStamp timeStamp optional, + ApIdentity apId, + UInt32 channel optional, + ApAssociated apAssociated optional, + Rssi rssi optional, + StaDataRate staDataRate optional, + StaStatistics staStatistics optional, + BeaconReport beaconReport optional + } + type record of StaInfo StaInfoList; + + /** + * @desc Different measurements configuration available from the WLAN Access Information Service + * @member measurementId Identifier of this measurement configuration + * @member measurementDuration Duration of the measurement + * @member randomnInterval Random interval to be used for starting the measurement + * @member channelLoad Configuration related to the Channel Load + * @member beaconRequest Configuration related to Beacon Request + * @member staStatistics Configuration related to the statistics provided by STAs + * @see ETSI GS MEC 028 Clause 6.2.4 Type: MeasurementConfig + */ + type record MeasurementConfig { + JSON.String measurementId, + UInt32 measurementDuration, + UInt32 randomnInterval, + ChannelLoadConfig channelLoad optional, + BeaconRequestConfig beaconRequest optional, + StaStatisticsConfig staStatistics optional + } + + /** + * @desc Subscription to get updates on client stations that are associated to an Access Point + * @member subscriptionType Shall be set to "AssocStaSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed WLAN information + * @member _links Hyperlink related to the resource + * @member apId Identifier(s) to uniquely specify the target Access Point for the subscription + * @member expiryDeadline The expiration time of the subscription determined by the WLAN Access Information Service + * @see ETSI GS MEC 028 Clause 6.3.2 Type: AssocStaSubscription + */ + type record AssocStaSubscription { + JSON.String subscriptionType, + JSON.AnyURI callbackReference, + LinkTypes links optional, + ApIdentity apId, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; + } + type record of AssocStaSubscription AssocStaSubscriptionList; + + /** + * @desc Subscription to get updates on the Data Rate of targeted client station(s) + * @member subscriptionType Shall be set to "AssocStaSubscription" + * @member callbackReference URI selected by the service consumer to receive notifications on the subscribed WLAN information + * @member _links Hyperlink related to the resource + * @member staId Identifier(s) to uniquely specify the target client station(s) for the subscription + * @member expiryDeadline The expiration time of the subscription determined by the WLAN Access Information Service + * @see ETSI GS MEC 028 Clause 6.3.3 Type: StaDataRateSubscription + */ + type record StaDataRateSubscription { + JSON.String subscriptionType, + JSON.AnyURI callbackReference, + LinkTypes links optional, + StaIdentities staId, + TimeStamp expiryDeadline optional + } with { + variant (links) "name as '_links'"; + } + type record of StaDataRateSubscription StaDataRateSubscriptionList; + + /** + * @desc list of links to requestors subscriptions + * @member links Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests + * @member assocStaSubscription + * @member staDataRateSubscription + */ + type record SubscriptionLinkList { + LinkTypes links, + AssocStaSubscriptionList assocStaSubscription optional, + StaDataRateSubscriptionList staDataRateSubscription optional + } with { + variant (links) "name as '_links'"; + } + + /** + * @desc Notification from WLAN Access Information Service with regards to client stations associated to the targeted Access Point + * @member notificationType Shall be set to "AssocStaNotification" + * @member timeStamp Time stamp + * @member apId Identifier(s) to uniquely specify the Access Point to which the client stations are associated + * @member staId Identifier(s) to uniquely specify the client station(s) associated + * @see ETSI GS MEC 028 Clause 6.4.2 Type: AssocStaNotification + */ + type record AssocStaNotification { + JSON.String notificationType, + TimeStamp timeStamp optional, + ApIdentity apId, + StaIdentities staId optional + } + + /** + * @desc Notification from WLAN Information service with regards to Data Rates of the subscribed client stations + * @member notificationType + * @member timeStamp Time stamp + * @member staDataRate Data rates of a client station + * @see ETSI GS MEC 028 Clause 6.4.3 Type: StaDataRateNotification + */ + type record StaDataRateNotification { + JSON.String notificationType, + TimeStamp timeStamp optional, + StaDataRates staDataRate optional + } + +} with { + encode "JSON" +} // End of module WlanInformationAPI_TypesAndValues diff --git a/ttcn/LibMec/module.mk b/ttcn/LibMec/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..3d489bca94f5fb49efd030306d2d813101d63786 --- /dev/null +++ b/ttcn/LibMec/module.mk @@ -0,0 +1,9 @@ +sources := \ + ttcn/JSON.ttcn \ + ttcn/LibMec_Functions.ttcn \ + ttcn/LibMec_Pics.ttcn \ + ttcn/LibMec_Pixits.ttcn \ + ttcn/LibMec_Templates.ttcn \ + ttcn/LibMec_TypesAndValues.ttcn \ + + diff --git a/ttcn/LibMec/ttcn/LibMec_Functions.ttcn b/ttcn/LibMec/ttcn/LibMec_Functions.ttcn index b3acdea799c3fd2fbfb9ed762512811e7bf53865..19e8fbe1c91b247d7e22d9fe65966da41d46c111 100644 --- a/ttcn/LibMec/ttcn/LibMec_Functions.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Functions.ttcn @@ -47,6 +47,7 @@ module LibMec_Functions { function f_cf_01_http_notif_up() runs on HttpComponent { // Map ports + map(self:httpPort, system:httpPort); map(self:httpPort_notif, system:httpPort_notif); // Connect @@ -82,6 +83,7 @@ module LibMec_Functions { function f_cf_01_http_notif_down() runs on HttpComponent { // Unmap ports + unmap(self:httpPort, system:httpPort); unmap(self:httpPort_notif, system:httpPort_notif); // Disconnect ports diff --git a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn index d4d9913567f70f00c54dff8639813b0e2cdc469f..8e0ad2089d58d40767893fb4981dad1c74a79316 100644 --- a/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_Pixits.ttcn @@ -26,6 +26,20 @@ module LibMec_Pixits { modulepar charstring PX_ME_BWM_URI := "/bwm/v1/bw_allocations"; + modulepar charstring PX_ME_MTS_INFO_URI := "/mts/v1/mts_info"; + + modulepar charstring PX_ME_MTS_SESSIONS_URI := "/mts/v1/mts_sessions"; + + modulepar charstring PX_ME_WLAN_QUERIES_URI := "/wai/v1/queries"; + + modulepar charstring PX_ME_WLAN_URI := "/wai/v1"; + + modulepar charstring PX_ME_V2X_URI := "/vis/v1"; + + modulepar charstring PX_ME_V2X_QUERIES_URI := "/vis/v1/queries"; + + modulepar charstring PX_ME_DEVICE_APP_URI := "/dev_app/v1"; + modulepar charstring PX_ME_APP_AMS_URI := "/amsi/v1/appMobilityServices" modulepar charstring PX_ME_APP_AMS_SUBS := "/amsi/v1/subscriptions" diff --git a/ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn b/ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn index 1b44f045f66fcd7dcfc689335e41424605c87444..e233530894f89c61b3c3f6106c98cc16706ef243 100644 --- a/ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn +++ b/ttcn/LibMec/ttcn/LibMec_TypesAndValues.ttcn @@ -21,7 +21,7 @@ module LibMec_TypesAndValues { UInt32 status optional, JSON.String detail, JSON.String instance optional - } with { + } with { variant (type_) "name as 'type'"; } diff --git a/ttcn/TestCodec/TestCodec_External.ttcn b/ttcn/TestCodec/TestCodec_External.ttcn deleted file mode 100644 index 7dfd0c1dba965d0999a94c728c49ac33357b11fa..0000000000000000000000000000000000000000 --- a/ttcn/TestCodec/TestCodec_External.ttcn +++ /dev/null @@ -1,113 +0,0 @@ -module TestCodec_External { - - // LibMec - import from LocationAPI_TypesAndValues all; - import from LocationAPI_Templates all; - import from UEidentityAPI_TypesAndValues all; - import from UEidentityAPI_Templates all; - - // TestCodec - import from TestCodec_TestAndSystem all; - - testcase tc_encode_LocationInfo() runs on TCType system TCType { - var LocationInfo v_location_info := valueof(m_location_info(10.0, 12.0, 9)); - var LocationInfo v_location_info_result; - var universal charstring v_expected_result := "{\"latitude\":10.000000,\"longitude\":12.000000,\"accuracy\":9}"; - var universal charstring v_enc_msg; - var integer v_res; - - v_enc_msg := encvalue_unichar(v_location_info); - log("v_enc_msg= ", v_enc_msg); - if (match(v_expected_result, v_enc_msg)) { - setverdict(pass, "Encoding succeed"); - } else { - setverdict(fail, "Encoding failed"); - } - - v_res := decvalue_unichar(v_enc_msg, v_location_info_result); - if (v_res == 0) { - log("v_location_info_result= ", v_location_info_result); - if (match(v_location_info, v_location_info_result)) { - setverdict(pass, "Decoding succeed"); - } else { - setverdict(fail, "Decoding failed"); - } - } else { - setverdict(fail, "Decoding operation failed"); - } - } // End of testcase tc_encode_LocationInfo - - testcase tc_encode_UserInfo() runs on TCType system TCType { - var UserInfo v_location_info := valueof(m_user_info( - "acr:10.0.0.1", - "001010000000000000000000000000001", - "zone01", - "http://example.com/exampleAPI/location/v2/users?address=acr%3A10.0.0.1")); - var UserInfo v_location_info_result; - var universal charstring v_expected_result := "{\"address\":\"acr:10.0.0.1\",\"accessPointId\":\"001010000000000000000000000000001\",\"zoneId\":\"zone01\",\"resourceURL\":\"http://example.com/exampleAPI/location/v2/users?address=acr%3A10.0.0.1\",\"timeStamp\":{\"seconds\":1483231138,\"nanoSeconds\":0}}"; - var universal charstring v_enc_msg; - var integer v_res; - - v_enc_msg := encvalue_unichar(v_location_info); - log("v_enc_msg= ", v_enc_msg); - if (match(v_expected_result, v_enc_msg)) { - setverdict(pass, "Encoding succeed"); - } else { - setverdict(fail, "Encoding failed"); - } - - v_res := decvalue_unichar(v_enc_msg, v_location_info_result); - if (v_res == 0) { - log("v_location_info_result= ", v_location_info_result); - if (match(v_location_info, v_location_info_result)) { - setverdict(pass, "Decoding succeed"); - } else { - setverdict(fail, "Decoding failed"); - } - } else { - setverdict(fail, "Decoding operation failed"); - } - } // End of testcase tc_encode_UserInfo - - testcase tc_encode_UeIdentityTags() runs on TCType system TCType { - var UeIdentityTagInfo v_ue_identity_tags_info := valueof(m_ue_identity_tag_info({ m_ue_identity_tag_item("UeTagA", REGISTERED) } )); - var UeIdentityTagInfo v_ue_identity_tags_info_result; - var universal charstring v_expected_result := "{\"ueIdentityTags\":[{\"ueIdentityTag\":\"UeTagA\",\"state\":\"REGISTERED\"}]}"; - var universal charstring v_enc_msg; - var integer v_res; - - v_enc_msg := encvalue_unichar(v_ue_identity_tags_info); - log("v_enc_msg= ", v_enc_msg); - if (match(v_expected_result, v_enc_msg)) { - setverdict(pass, "Encoding succeed"); - } else { - setverdict(fail, "Encoding failed"); - } - - v_res := decvalue_unichar(v_enc_msg, v_ue_identity_tags_info_result); - if (v_res == 0) { - log("v_ue_identity_tags_info_result= ", v_ue_identity_tags_info_result); - if (match(v_ue_identity_tags_info, v_ue_identity_tags_info_result)) { - setverdict(pass, "Decoding succeed"); - } else { - setverdict(fail, "Decoding failed"); - } - } else { - setverdict(fail, "Decoding operation failed"); - } - - v_enc_msg := "{\"ueIdentityTags\": [{ \"ueIdentityTag\": \"UeTagA\",\t\"state\": \"REGISTERED\"}]}"; - v_res := decvalue_unichar(v_enc_msg, v_ue_identity_tags_info_result); - if (v_res == 0) { - log("v_ue_identity_tags_info_result (1)= ", v_ue_identity_tags_info_result); - if (match(v_ue_identity_tags_info, v_ue_identity_tags_info_result)) { - setverdict(pass, "Decoding succeed (1)"); - } else { - setverdict(fail, "Decoding failed (1)"); - } - } else { - setverdict(fail, "Decoding operation failed (1)"); - } - } // End of testcase tc_encode_UeIdentityTags - -} // End of module TestCodec_External diff --git a/ttcn/TestCodec/TestCodec_TestAndSystem.ttcn b/ttcn/TestCodec/TestCodec_TestAndSystem.ttcn deleted file mode 100644 index 4ba03ee84c0464b69c82a8a626b96f7116f0cd58..0000000000000000000000000000000000000000 --- a/ttcn/TestCodec/TestCodec_TestAndSystem.ttcn +++ /dev/null @@ -1,9 +0,0 @@ -module TestCodec_TestAndSystem { - - type component TCType { } - - type record TestRecord { - bitstring bs optional - } - -} // End of module TestCodec_TestAndSystem \ No newline at end of file diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module.mk b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module.mk new file mode 100755 index 0000000000000000000000000000000000000000..9b0b530e68349c8056d17bf0cfc676adf70adcb8 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module.mk @@ -0,0 +1,2 @@ +sources := module/src/Abstract_Socket.cc +includes := module/src \ No newline at end of file diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/Abstract_Socket_CNL113384.tpd b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/Abstract_Socket_CNL113384.tpd new file mode 100644 index 0000000000000000000000000000000000000000..5b05592ed70013a8ba19f5b596965ad71b82536a --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/Abstract_Socket_CNL113384.tpd @@ -0,0 +1,61 @@ + + + + Abstract_Socket_CNL113384 + + + + + SSL + + + + + true + bin/Abstract_Socket_CNL113384 + + + bin + + + + + + + true + true + bin_ssl/Abstract_Socket_CNL113384 + + AS_USE_SSL + + + [OPENSSL_DIR]/include + + + ssl + + + [OPENSSL_DIR]/lib + + + + bin_ssl + + + + + diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/LICENSE b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..3534f2ff9d512c471aab17543d08c32a1110b32d --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. \ No newline at end of file diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/README.md b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c2c938449e2b95c61aaed7e1d80c23f430d5f246 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/README.md @@ -0,0 +1,9 @@ +# titan.TestPorts.Common_Components.Abstract_Socket + +Main project page: + +https://projects.eclipse.org/projects/tools.titan + +The source code of the TTCN-3 compiler and executor: + +https://github.com/eclipse/titan.core diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.adoc b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.adoc new file mode 100644 index 0000000000000000000000000000000000000000..e3d359dc91f8a332076f95a9c4fc63e77f513dda --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.adoc @@ -0,0 +1,1125 @@ +--- +Author: Gábor Szalai +Version: 1551-CNL 113 384, Rev. A +Date: 2015-01-20 + +--- += Abstract Socket Test Port for TTCN-3 Toolset with TITAN, Description +:author: Gábor Szalai +:revnumber: 1551-CNL 113 384, Rev. A +:revdate: 2015-01-20 +:toc: + +== About This Document + +=== How to Read This Document + +This is the User Guide for the Abstract Socket test port. The Abstract Socket test port is developed for the TTCN-3 Toolset. + +=== Presumed Knowledge + +To use this protocol module the knowledge of the TTCN-3 language <<_1, [1]>> is essential. + += Functionality + +== System Requirements +In order to use the Abstract Socket test port the following system requirements must be satisfied: + +* Platform: any platform supported by TITAN RTE and OpenSSL +* TITAN TTCN-3 Test Executor version R8A (1.8.pl0) or higher installed. + +NOTE: This Abstract Socket version is not compatible with TITAN releases earlier than R8A. + +If SSL is used, the same OpenSSL must be installed as used in TITAN. For an OpenSSL installation guide see <<_3, [3]>>. + +== Fundamental Concepts + +The test port establishes connection between the TTCN-3 test executor and SUT and transmits/receives messages. The transport channel can be TCP or SSL. The connect and listen operations can be initiated from the test suite using the `use_connection_ASPs` test port parameter. + +=== Module Structure + +The Abstract Socket common component is implemented in the following files: + +* __Abstract_Socket.hh__ +* __Abstract_Socket.cc__ + +== Start Procedure + +=== Connection ASPs + +When choosing to use connection ASPs, the Abstract Socket is able to open a server listening port (acting like a server) or client connections at the same time. + +=== Server Mode + +When the test port is mapped by TITAN RTE, the server creates a TCP socket and starts listening on it. Depending on the transport channel specified in the runtime configuration file, it will accept either TCP or SSL connections. + +=== Client Mode + +When the test port is mapped by TITAN RTE, the client creates a TCP socket and tries to connect to the server. If the transport channel is SSL, the client starts an SSL handshake after the TCP connection is established. If the SSL handshake is successful, the SSL connection is established and the `map` operation is finished. + +The SSL handshake may fail due to several reasons (e.g. no shared ciphers, verification failure, etc.). + +[[sending-receiving-messages]] +== Sending/Receiving Messages + +Only basic octetstring sending and receiving is handled by the Abstract Socket. This functionality probably must be extended in order to build a test port for the desired protocol. First the TTCN-3 mapping of the target protocol messages must be elaborated and then the message processing functions can be developed. + +== Logging + +The type of information that will be logged can be categorized into two groups. The first one consists of information that shows the flow of the internal execution of the test port, e.g. important events, which function that is currently executing etc. The second group deals with presenting valuable data, e.g. presenting the content of a PDU. The logging printouts will be directed to the RTE log file. The user is able to decide whether logging is to take place or not by setting appropriate configuration data. + +== Error Handling + +Erroneous behavior detected during runtime is directed into the RTE log file. The following two types of messages are taken care of: + +* Errors: information about errors detected is provided. If an error occurs the execution of the test case will stop immediately. The test ports will be unmapped. +* Warnings: information about warnings detected is provided. The execution continues after the warning is shown. + +== Closing Down + +The connection can be shut down either performing the `unmap` operation on the port or if connection ASPs are used with the appropriate ASP. + +== IPv6 Support + +It is possible to select the address family used for server socket and client connections in the configuration file or during runtime. The following address families are supported: IPv4, IPv6 and UNSPEC. + +== SSL Functionality + +The Abstract Socket can use SSL or TCP as the transport channel. The same version of OpenSSL library must be used as in TITAN. + +The supported SSL/TLS versions are determined by the used OpenSSL library. It is possible to disable a specific TLS/SSL version in the run time configuration file. + +=== Compilation + +The usage of SSL and even the compilation of the SSL related code parts are optional. This is because SSL related code parts cannot be compiled without the OpenSSL installed. + +The compilation of SSL related code parts can be disabled by not defining the `AS_USE_SSL` macro in the _Makefile_ during the compilation. If the macro is defined in the _Makefile_, the SSL code parts are compiled to the executable test code. The usage of the SSL then can be enabled/disabled in the runtime configuration file. Naturally, the test port parameter will be ignored if the `AS_USE_SSL` macro is not defined during compilation. + +=== Authentication + +The Abstract Socket provides both server side and client side authentication. When authenticating the other side, a certificate is requested and the own trusted certificate authorities’ list is sent. The received certificate is verified whether it is a valid certificate or not (the public and private keys are matching). No further authentication is performed (e.g. whether hostname is present in the certificate). The verification can be enabled/disabled in the runtime configuration file. + +In server mode the test port will always send its certificate and trusted certificate authorities’ list to its clients. If verification is enabled in the runtime configuration file, the server will request for a client’s certificate. In this case, if the client does not send a valid certificate or does not send a certificate at all, the connection will be refused. If the verification is disabled, the connection will never be refused due to verification failure. + +In client mode the test port will send its certificate to the server on the server’s request. If verification is enabled in the runtime configuration file, the client will send its own trusted certificate authorities’ list to the server and will verify the server’s certificate as well. If the server’s certificate is not valid, the SSL connection will not be established. If verification is disabled, the connection will never be refused due to verification failure. + +The own certificate(s), the own private key file, the optional password protecting the own private key file and the trusted certificate authorities’ list file can be specified in the runtime configuration file. + +The test port will check the consistency between its own private key and the public key (based on the own certificate) automatically. If the check fails, a warning is issued and execution continues. + +=== Other Features + +The usage of SSL session resumption can be enabled/disabled in the runtime configuration file. + +The allowed ciphering suites can be restricted in the runtime configuration file, see. + +The SSL re-handshaking requests are accepted and processed, however re-handshaking cannot be initiated from the test port. + +=== Limitations + +* SSL re-handshaking cannot be initiated from the test port. +* The own certificate file(s), the own private key file and the trusted certificate authorities’ list file must be in PEM format. Other formats are not supported. + += The Test Port + +== Overview + +The Abstract Socket is a common component that can serve as a basis for test ports that need TCP connections with or without SSL on the top. The TCP socket can be used either with blocking or non-blocking socket. The Abstract Socket implements basic sending, receiving and socket handling routines, furthermore it supports the development of test ports that can work as a client or as a server. By extending the Abstract Socket component with additional functionality the desired test port can be built. + +See the functioning of the Abstract Socket below: + +image:images/Abstract socket.png[alt] + +== Installation + +Since the Abstract Socket test port is used as a part of the TTCN-3 test environment this requires TTCN-3 Test Executor to be installed before any operation of the Abstract Socket test port. + +The compilation of SSL related code parts can be disabled by not defining the `AS_USE_SSL` macro in the _Makefile_ during the compilation. + +When building the executable test suite the libraries compiled for the OpenSSL toolkit (if the `AS_USE_SSL` macro is defined) should also be linked into the executable along with the TTCN-3 Test Executor, i.e. the OpenSSL libraries should be added to the __Makefile__ generated by the TITAN executor (see example in section <>). To compile the source files you will also need the OpenSSL developer toolkit which contains the header files used by the source. If Share Objects (_.so_) are used in the OpenSSL toolkit, to run the executable, the path of the OpenSSL libraries must be added to the `LD_LIBRARY_PATH` environment variable. + +NOTE: If you are using the test port on Solaris, you have to set the `PLATFORM` macro to the proper value. It shall be `_SOLARIS_` in case of Solaris 6 (SunOS 5.6) and `_SOLARIS8_` in case of Solaris 8 (SunOS 5.8). + +== Configuration + +The executable test program behavior is determined via the run-time configuration file. This is a simple text file, which contains various sections (for example, `[TESTPORT_PARAMETERS]`) after each other. The usual suffix of configuration files is _.cfg._ For further information on the configuration file see <<_2, [2]>>. + +The listed port parameters (<>) are managed by default by the Abstract Socket. They have to be defined only in the TTCN configuration files. Though, if Abstract Socket's parameter handling is not appropriate for your application, you can ignore it completely and handle the variables directly from your port. It is recommended to implement your own test port parameter name passing functions so that your test port will not depend on the test port parameter names in the Abstract Socket. + +[[Abstract_Socket_Test_Port_Parameters_in_the_Test_Port_Configuration_File]] +=== Abstract Socket Test Port Parameters in the Test Port Configuration File + +In the `[TESTPORT_PARAMETERS]` section the following parameters can be set for the Abstract Socket based test port. The parameter names are case-sensitive; the parameter values are not case-sensitive (i.e. `_"YES"_`, `_"yes"_`, `_"Yes"_` values are identical). + +[[abstract-socket-test-port-parameters-in-the-test-port-configuration-file-if-the-transport-channel-is-tcp-ip]] +==== Abstract Socket Test Port Parameters in the Test Port Configuration File if the Transport Channel is TCP/IP + +* `use_connection_ASPs` ++ +The parameter is optional, and can be used to specify whether the Abstract Socket is controlled by connection ASPs. The default value is `_"no"_`. ++ +If the value is `_"yes"_`, the functionalities of the Abstract Socket have to be controlled by calling its `open_client_connection`, `open_listen_port`, `remove_client`, `remove_all_clients` and `close_listen_port` functions. The Abstract Socket will not create any connection or listening port when calling the `map_user` function. Using this parameter, more than one connection can be opened in client mode operation. The Abstract Socket will call the `listen_port_opened`, `client_connection_opened`, `peer_connected` and `peer_disconnected` functions of the test port implementing it when corresponding events happen. This allows test ports and TTCN code to directly handle TCP connection initiations and events. + +* `server_mode` ++ +The parameter is optional, and can be used to specify whether the test port shall act as a server or a client. If the value is `_"yes"_`, the test port will act as a server. If the value is `_"no"_`, the test port will act as a client. The default value is `_"no"_` . The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_` because the `open_listen_port` initiates the listening on a server port. + +* `socket_debugging` ++ +The parameter is optional, and can be used to enable debug logging related to the transport channel (TCP socket and SSL operations) in the test port. The default value is `_"no"_`. + +* `halt_on_connection_reset` ++ +The parameter is optional, and can be used to specify whether the test port shall stop on errors occurred during connection setup (including connection refusing), sending and receiving, disconnection (including the detection of the disconnection). The value `_"yes"_` means the test port will stop, the value `_"no"_` means that it will not stop on such errors. The default value is `_"no"_` in server mode and `_"yes"_` in client mode. ++ +The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_`, because the `peer_disconnected` function of the test port is called on the event. + +* `nagling` ++ +The parameter is optional, and can be used to specify whether concatenation occurs on TCP layer. If value is `_"yes"_`, concatenation is enabled. If value is `_"no"_`, it is disabled. ++ +NOTE: The `nagling` setting is valid only for the outgoing messages. The `nagling` for the incoming messages shall be set by the sending party. The default value is `_"no"_`. + +* `remote_address` ++ +The parameter can be used to specify the server's IP address. Mandatory in client mode and not used in server mode. ++ +The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_`, because the `open_client_connection` function receives the remote and optionally the local address. + +* `remote_port` ++ +The parameter can be used to specify the server's listening port. Mandatory in client mode and not used in server mode. ++ +The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_`, because the `open_client_connection` function receives the remote and optionally the local address. + +* `local_port` ++ +The parameter can be used to specify the port where the server is listening for connections. Mandatory in server mode and optional in client mode. ++ +The parameter serves as a default if `use_connection_ASPs` is set to `_"yes"_`. + +* `ai_family` ++ +The parameter can be used to specify the address family to use when opening listening ports or creating client connections. If its value is set to `_"IPv4"_` or `_"AF_INET"_` only IPv4 addresses are used. If it is set to `_"IPv6"_` or `_"AF_INET6"_` only IPv6 connections are allowed. The values `_`"UNSPEC"`_` and `"AF_UNSPEC"` can be used if the address family is not specified. The `_"UNSPEC"_` value allows using IPv4 and IPv6 addresses at the same time. The selection is made automatically depending on the actual value of the local and remote addresses. ++ +This parameter is optional. The default value is `_"AF_UNSPEC"_`. + +* `server_backlog` ++ +The parameter can be used to specify the number of allowed pending (queued) connection requests on the port the server listens. It is optional in server mode and not used in client mode. The default value is `_"1"_`. + +* `TCP_reconnect_attempts` ++ +This parameter can be used to specify the maximum number of times the connection is attempted to be established in TCP reconnect mode. The default value is `_"5"_`. ++ +The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_`, because the `peer_disconnected` function is called when the event happens, and it’s up to the test port or TTCN code how to continue. + +* `TCP_reconnect_delay` ++ +This parameter can be used to specify the time (in seconds) the test port waits between to TCP reconnection attempt. The default value is `_"1"_`. ++ +The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_`, because the `peer_disconnected` function is called when the event happens, and it’s up to the test port or TTCN code how to continue. + +* `client_TCP_reconnect` ++ +If the test port is in client mode and the connection was interrupted by the other side, it tries to reconnect again. The default value is ``no''. ++ +The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_`, because the `peer_disconnected` function is called when the event happens, and it’s up to the test port or TTCN code how to continue. + +* `use_non_blocking_socket` ++ +This parameter can be used to specify whether the Test Port shall use blocking or non-blocking TCP socket. Using this parameter, the `send` TTCN-3 operation will block until the data is sent, but an algorithm is implemented to avoid TCP deadlock. ++ +The parameter is optional, the default value is `_"no"_`. + +==== Additional Abstract Socket Test Port Parameters in the Test Port Configuration File if the Transport Channel is SSL + +These parameters available only if `AS_USE_SSL` macro is defined during compilation. + +* `ssl_use_ssl` ++ +The parameter is optional, and can be used to specify whether to use SSL on the top of the TCP connection or not. The default value is `_"no"_`. + +* `ssl_verify_certificate` ++ +The parameter is optional, and can be used to tell the test port whether to check the certificate of the other side. If it is defined `_"yes"_`, the test port will query and check the certificate. If the certificate is not valid (i.e. the public and private keys do not match), it will exit with a corresponding error message. If it is defined `_"no"_`, the test port will not check the validity of the certificate. The default value is `_"no"_`. + +* `ssl_use_session_resumption` ++ +The parameter is optional, and can be used to specify whether to use/support SSL session resumptions or not. The default value is `_"yes"_`. + +* `ssl_certificate_chain_file` ++ +It specifies a PEM encoded file’s path on the file system containing the certificate chain. Mandatory in server mode and optional in client mode. Note that the server may require client authentication. In this case no connection can be established without a client certificate. + +* `ssl_private_key_file` ++ +It specifies a PEM encoded file’s path on the file system containing the server’s RSA private key. Mandatory in server mode and optional in client mode. + +* `ssl_private_key_password` ++ +The parameter is optional, and can be used to specify the password protecting the private key file. If not defined, the SSL toolkit will ask for it. + +* `ssl_trustedCAlist_file` ++ +It specifies a PEM encoded file’s path on the file system containing the certificates of the trusted CA authorities to use. Mandatory in server mode, and mandatory in client mode if `ssl_verify_certificate="yes"`. + +* `ssl_allowed_ciphers_list` ++ +The parameter is optional, and can be used to specify the allowed cipher list. The value is passed directly to the SSL toolkit. + +* `ssl_disable_SSLv2` + +`ssl_disable_SSLv3` + +`ssl_disable_TLSv1` + +`ssl_disable_TLSv1_1` + +`ssl_disable_TLSv1_2` ++ +The usage of a specific SSL/TLS version can be disabled by setting the parameter to `_"yes"_`. Please note that the available SSL/TLS versions are depends of the used OpenSSL library. + +== The `AbstractSocket` API + +In the derived test port the following functions can be used: + +[[map-unmap-the-test-port]] +=== Map/Unmap the Test Port + +In the `user_map` and `user_unmap` functions of the derived test port these functions should be called: + +[source] +---- +void map_user(); + +void unmap_user(); +---- + +=== Setting Test Port Parameters + +[source] +---- +bool parameter_set(const char __parameter_name, const char __parameter_value); +---- + +Call this function in the `set_parameter` function of the derived test port to set the test port parameters of AbstractSocket. + +=== Open a Listening Port + +To open a server socket call the following function: + +[source] +---- +int open_listen_port(const char* localHostname, const char* localService); +---- + +This function supports both IPv4 and IPv6 addresses. The parameter `localHostname` should specify the local hostname. It can be the name of the host or an IP address. The parameter `localService` should be a string containing the port number. One of the two parameters can be `_NULL_`, meaning `_ANY_` for that parameter. The address family used is specified either by the `ai_family_name()` testport parameter or set by the function `set_ai_family(int)`. + +The following function only supports IPv4: + +`int open_listen_port(const struct sockaddr_in & localAddr);` + +NOTE: This function is deprecated. It is kept for compatibility with previous versions of test ports that use `AbstractSocket` + +After calling the `open_listen_port` function, the function virtual void `listen_port_opened(int port_number)` is called automatically with the listening port number, or `_-1_` if the opening of the listening port failed. This function can be overridden in the derived test port to implement specific behavior depending on the listen result. This can, for example, call `incoming_message` to generate an incoming `ListenResult` message in the test port. + +Subsequent calls of the function `open_listen_port` results in closing the previous listening port and opening a new one. This means that only one server port is supported by `AbstractSocket`. + +When a client connects to the listening port the following functions are called to notify the derived test port about the new client connection: + +[source] +---- +virtual void peer_connected(int client_id, const char * host, const int port) +virtual void peer_connected(int client_id, sockaddr_in& remote_addr); +---- + +Only one of these functions should be overridden in the derived test port. Note, that the second is obsolete. It is kept for backward compatibility only. + +Similar functions for client disconnects: + +[source] +---- +virtual void peer_disconnected(int client_id); +virtual void peer_half_closed(int client_id); +---- + +The `client_id` parameter specifies which client has disconnected/half closed. The `peer_half_closed` function is called when the client closes the socket for writing, while `peer_disconnected` is called when the client is disconnected. Both functions can be overridden in the derived test port. + +=== Close the Listening Port + +`void close_listen_port()` + +This function closes the listening port. + +=== Open a Client Connection + +[source] +---- +int open_client_connection(const char* remoteHostname, const char* remoteService, const char* localHostname, const char* localService); +---- + +This function creates an IPv4 or IPv6 connection from the local address `localHostname/localService` to the remote address `remoteHostname/remoteService`. + +If `localHostname` or `localService` is `_NULL_`, it will be assigned automatically. + +The parameters for the remote address cannot be `_NULL_`. The local or remote service parameters should be numbers in string format, while the addresses should be names or IP addresses in IPv4 or IPv6 format. + +The `open_client_connection` function above makes the following function obsolete: + +[source] +---- +int open_client_connection(const struct sockaddr_in & new_remote_addr, const struct sockaddr_in & new_local_addr) +---- + +It is kept for backward compatibility for derived test ports that were not adapted to the IPv6 supporting function. + +After calling the `open_client_connection` function, AbstractSocket calls automatically the function `virtual void client_connection_opened(int client_id)` to inform the test port about the result. The `client_id` parameter is set to the id of the client, or `_-1_` if the connection could not be established to the remote address. This function can be overridden in the derived test port. + +=== Send Message + +[source] + +void send_outgoing(const unsigned char* message_buffer, int length, int client_id = -1); + +With this function a message can be sent to the specified client. + +==== To Receive a Message + +When a message is received, the following function is called automatically: + +[source] +---- +virtual void message_incoming(const unsigned char* message_buffer, int length, int client_id = -1) +---- + +This function must be overridden in the derived test port. To generate an incoming TTCN3 message, the test port shall call the `incoming_message` function of the Titan API within this function. + +In order that this function could be called automatically, the derived test port shall define these functions: + +[source] +---- +virtual void Handler_Install(const fd_set* read_fds, const fd_set* write_fds, const fd_set* error_fds, double call_interval); +virtual void Handler_Uninstall(); +---- + +In `Handler_Install` the `Install_Handler` Titan API function is called. + +Also in the `Event_Handler` Titan API function, the function + +[source] +---- +void Handle_Event(const fd_set *read_fds, const fd_set __write_fds, const fd_set __error_fds, double time_since_last_call) +---- +is called. + +=== Close a Client Connection + +[source] +---- +virtual void remove_client(int client_id); +virtual void remove_all_clients(); +---- + +The first closes the connection for a given client the second function closes the connection of all clients. + +=== Test Port Parameter Names + +The default AbstractSocket test port parameter names can be redefined in the derived test port by overriding the appropriate function below: + +[source] +---- +virtual const char* local_port_name(); +virtual const char* remote_address_name(); +virtual const char* local_address_name(); +virtual const char* remote_port_name(); +virtual const char* ai_family_name(); +virtual const char* use_connection_ASPs_name(); +virtual const char* halt_on_connection_reset_name(); +virtual const char* client_TCP_reconnect_name(); +virtual const char* TCP_reconnect_attempts_name(); +virtual const char* TCP_reconnect_delay_name(); +virtual const char* server_mode_name(); +virtual const char* socket_debugging_name(); +virtual const char* nagling_name(); +virtual const char* use_non_blocking_socket_name(); +virtual const char* server_backlog_name(); +virtual const char* ssl_disable_SSLv2(); +virtual const char* ssl_disable_SSLv3(); +virtual const char* ssl_disable_TLSv1(); +virtual const char* ssl_disable_TLSv1_1(); +virtual const char* ssl_disable_TLSv1_2(); +---- + +=== Parameter Accessor Functions + +The following functions can be use to get/set the AbstractSocket parameters: + +[source] +---- +bool get_nagling() const +bool get_use_non_blocking_socket() const +bool get_server_mode() const +bool get_socket_debugging() const +bool get_halt_on_connection_reset() const +bool get_use_connection_ASPs() const +bool get_handle_half_close() const +int set_non_block_mode(int fd, bool enable_nonblock); +bool increase_send_buffer(int fd, int &old_size, int& new_size); +const char* get_local_host_name() +const unsigned int get_local_port_number() +const char* get_remote_host_name() +const unsigned int get_remote_port_number() +const int& get_ai_family() const +void set_ai_family(int parameter_value) +bool get_ttcn_buffer_usercontrol() const +void set_nagling(bool parameter_value) +void set_server_mode(bool parameter_value) +void set_handle_half_close(bool parameter_value) +void set_socket_debugging(bool parameter_value) +void set_halt_on_connection_reset(bool parameter_value) +void set_ttcn_buffer_usercontrol(bool parameter_value) +---- + +=== Logging Functions + +The following functions log a given message in different ways: + +[source] +---- +void log_debug(const char *fmt, …) const +void log_warning(const char *fmt, …) const +void log_error(const char *fmt, …) const +void log_hex(const char __prompt, const unsigned char __msg, size_t length) const; +---- + +=== Error Reporting + +[source] +---- +virtual void report_error(int client_id, int msg_length, int sent_length, const unsigned char* msg, const char* error_text); +---- + +This function is called automatically if an error occurs during send operation in `AbstractSocket`. This function can be overridden in the derived test port to override the default error reporting behavior of `AbstractSocket`, which is calling the `log_error` function. This function can also be called by the derived test port to initiate the error reporting mechanism. + += Tips and Tricks + +== Usage + +In order to build a test port based on `Abstract_Socket` the following steps must be completed: + +1. Deriving the test port class (see <>) +2. Implementation of the logger functions if needed (see <>) +3. Function translations (see <>) +4. Installing the handlers (see <>) +5. Final steps (see <>) + +These steps are discussed in detail in the following subsections. + +[[deriving_the_test_port_class]] +=== Deriving the Test Port Class + +Inherit your test port class beside the test port base also from the `Abstract_Socket` class, if you do not want to use SSL at all. If you plan to use SSL, inherit the test port from the `SSL_Socket` class. In case your SSL implementation is just optional, you have to make sure that it is possible to disable SSL related code parts at compile time. In the AS if the `AS_USE_SSL` macro is defined, then SSL is enabled, otherwise disabled. + +Example: + +[source] +---- +#ifdef AS_USE_SSL +class myport__PT : public SSL_Socket, public myport__PT_BASE { +#else +class myport__PT : public Abstract_Socket, public myport__PT_BASE { +#endif +---- + +[[implementation_of_the_logger_functions]] +=== Implementation of the Logger Functions + +Implement the `log_debug`, `log_error`, `log_warning` and `log_hex` virtual functions if you need other implementation than the default. (they can be empty implementations if logging is not needed) + +[width="100%",cols="20%,80%",options="header",] +|=============================================================== +|Function |Description +|`log_debug` |does the debug-logging +|`log_hex` |does the logging of the message content in hex format +|`log_warning` |does the logging of warning messages +|`log_error` |is expecting the test port to stop with a TTCN_ERROR +|=============================================================== + +You can use the logger functions implemented in the AS. In this case you have to call the AS constructor with your test port type and name. In this way the AS will log messages acting like your test port. + +[[function_translations]] +=== Function Translations + +Translate the port's functions to the socket's functions. By translating we mean a function call with unchanged parameters like this: + +[source] +---- +void myport__PT::set_parameter(const char *parameter_name, + const char* parameter_value) { + parameter_set(parameter_name ,parameter_value); +} +---- + +The list of functions to be translated: + +[cols=",",options="header",] +|==================================== +|Port functions: |Socket functions: +|`set_parameter` |`parameter_set` +|`Handle_Fd_Event` |`Handle_Socket_Event` +|`Handle_Timeout` |`Handle_Timeout_Event` +|`user_map` |`map_user` +|`user_unmap` |`unmap_user` +|==================================== + +If you might need other functions also to be performed during `map`, `unmap` or `set_parameter`, you can add them right after the socket's function calls. + +Example: + +[source] +---- +void myport__PT::set_parameter(const char *parameter_name, + const char *parameter_value) + { + parameter_set(parameter_name ,parameter_value); + if(strcmp(parameter_name,"dallas_addr") == 0){ + destHostId = getHostId(parameter_value); + destAddr.sin_family = AF_INET; + destAddr.sin_addr.s_addr = htonl(destHostId); + return; + } + } +---- + +The translation of the `outgoing_send` to `send_outgoing` function needs some parameter formatting since the `outgoing_send` has parameters inherited from your TTCN-3 structures, while `Abstract_Socket`'s `outgoing_send` has parameters as ``(char* message, int messageLength, int client_id)``. + +The same applies for the incoming function calls where you have to write your own `message_incoming` to `incoming_message` translation. + +Example: + +[source] +---- +void myport__PT::outgoing_send(const TTCN3__Structure& send_par) +{ + if(send_par.client__id().ispresent()) { + send_outgoing((char*)(const unsigned char*)send_par.data(), + send_par.data().lengthof(), send_par.client__id()()); + } else { + send_outgoing((char*)(const unsigned char*)send_par.data(), + send_par.data().lengthof()); + } +} +---- + +[[functions_for_manipulating_the_set_of_events_for_which_the_port_waits]] +=== Functions for Manipulating the Set of Events for Which the Port Waits + +Add the following (virtual) member functions to your port (class definition) unchanged: + +[source] +---- +void Add_Fd_Read_Handler(int fd) { Handler_Add_Fd_Read(fd); } +void Add_Fd_Write_Handler(int fd) { Handler_Add_Fd_Write(fd); } +void Remove_Fd_Read_Handler(int fd) { Handler_Remove_Fd_Read(fd); } +void Remove_Fd_Write_Handler(int fd) { Handler_Remove_Fd_Write(fd); } +void Remove_Fd_All_Handlers(int fd) { Handler_Remove_Fd(fd); } +void Handler_Uninstall() { Uninstall_Handler(); } +void Timer_Set_Handler(double call_interval, boolean is_timeout = TRUE, + boolean call_anyway = TRUE, boolean is_periodic = TRUE) { + Handler_Set_Timer(call_interval, is_timeout, call_anyway, is_periodic); +} +---- + +NOTE: These member functions are required and used by Abstract Socket. They are defined in Abstract Socket as virtual and are to be overridden in the descendant Test Port class. They are implemented in the (Test Port) class definition only for the sake of simplicity.) + +[[final_steps]] +=== Final Steps + +Finally, the function definitions must be added to the header file accordingly. Then, you are ready to go ahead and develop your test port. + +[[using-ttcn-buffer-in-test-ports]] +== Using `TTCN_Buffer` in Test Ports + +The Abstract Socket uses a `TTCN_Buffer` <<_2, [2]>> to store incoming message portions. If the test port also would like to store incoming messages, here is a description how to do that: + +The test port can access the `TTCN_Buffer` with `get_buffer`() and can operate on it. If the test port uses the buffer to store data, it must set the `ttcn_buffer_usercontrol` variable to `_true_`, so that the AS will not clear the buffer content. + +In this case the test port can use the buffer in the following ways: + +* `get_buffer`() to fetch the `TTCN_Buffer` associated with the client +* Optionally modify content; or wait for complete TLV +* Once a message portion is sent to the TTCN-3 test suite, cut the sent message from the buffer because the AS will not do that. In case the test port simply passed the message to the test suite and uses no storage of it (e.g. TCP Test Port), it can leave `ttcn_buffer_usercontrol` in false (which is the default value) so that the AS will take care of buffer cleanups. + +== Using SSL on Top of a TCP Connection + +SSL can be used on top of the TCP connection. The authentication mode can be configured via a test port parameter. + +=== Server Mode + +In server mode, first a TCP socket is created. The server starts to listen on this port (upon the `user_map`() operation or in case of connection ASPs, calling the `open_listen_port`() operation). Once a TCP connect request is received, the TCP connection is set up. After this the SSL handshake begins. The SSL is mapped to the file descriptor of the TCP socket. The BIO, which is an I/O abstraction that hides many of the underlying I/O details from an application, is automatically created by OpenSSL inheriting the characteristics of the socket (non-blocking mode). The BIO is completely transparent. The server always sends its certificate to the client. If configured so, the server will request the certificate of the client and check if it is a valid certificate. If not, the SSL connection is refused. If configured not to verify the certificate, the server will not request it from the client and the SSL connection is accepted. If usage of the SSL session resumption is enabled and the client refers to a previous SSL session, the server will accept it, unless it is not found in the SSL context cache. Once the connection is negotiated, data can be sent/received. The SSL connection is shut down using an `unmap`() operation. The shutdown process does not follow the standard: the server simply shuts down and does not expect any acknowledgement from the client. + +Clients connected to the server are distinguished with their file descriptor numbers. When a message is received, the file descriptor number is also passed, so the client can be identified. + +=== Client Mode + +In client mode, first a TCP connection is requested to the server (upon the `user_map`() operation or in case of connection ASPs, calling the `open_client_connection`() operation). Once it is accepted, the SSL endpoint is created. If configured so, the client tries to use the SSL session Id from the previous connection, if available (e.g. it is not the first connection). If no SSL session Id is available, or the server does not accept it, a full handshake is performed. If configured so, the certificate of the server is verified. If the verification fails, the SSL connection is interrupted by the client. If no verification required, the received certificate is still verified, however the result does not affect the connection even though it failed. + +=== Authentication Flow + +In summary, the authentication is done according to this flow: + +* ssl handshake begins (new client tries to connect) +* `virtual int ssl_verify_certificates_at_handshake(int preverify_ok, X509_STORE_CTX *ssl_ctx)` is called. During this handshake you can perform additional authentication. +* If the connection is accepted, the SSL handshake is finished and SSL is established. Now the function virtual `bool ssl_verify_certificates`() is called where you may perform other authentication if you want. + +`ssl_verify_certificates`() is a virtual function. It is called after the SSL connection is up. Test ports may use it to check other peer's certificate and do actions. If the return value is 0, then the SSL connection is closed. In case of client mode, the test port exits with an error (`*verification_error*`). In server mode the test port just removes client data, but keeps running. + +== Adapting Derived Test Ports to Support IPv6 + +Derived test ports should be updated in the following way to support IPv4 and IPv6: + +All calls of functions + +[source] +---- +const struct sockaddr_in & get_remote_addr() +const struct sockaddr_in & get_local_addr() +---- + +should be removed. They can be replaced by calling these functions: + +[source] +---- +virtual const char* local_port_name(); +virtual const char* local_address_name(); +virtual const char* remote_port_name(); +virtual const char* remote_address_name(); +---- + +The function `int open_listen_port(const struct sockaddr_in & localAddr);` does not support IPv6. The function below should be used instead: + +`int open_listen_port(const char* localHostname, const char* localServicename);` + +The same has to be done for the `open_client_connection` function. Replace any call of the function + +[source] +int open_client_connection(const struct sockaddr_in & new_remote_addr, const struct sockaddr_in & new_local_addr) + + +with the function: + +[source] +---- +int open_client_connection(const char* remoteHostname, const char* remoteService, const char* localHostname, const char* localService); +---- + +If the following callback function is overridden in the derived test port: + +[source] +---- +virtual void peer_connected(int client_id, sockaddr_in& remote_addr); +---- + +it should be removed and the following function should be overridden instead: + +[source] +---- +virtual void peer_connected(int client_id, const char * host, const int port) +---- + +The following function should not be used: + +`void get_host_id(const char* hostName, struct sockaddr_in *addr)` + +The socket API function `getaddrinfo` should be used instead. + += Error Messages + +== Error Messages In Case TCP Connections Are Used + +`*Parameter value not recognized for parameter *` + +The specified `` in the runtime configuration file is not recognized for the parameter . + +`*Invalid input as TCP_reconnect_attempts counter given: *` + +The specified `` in the runtime configuration file must be a positive whole number. + +`*TCP_reconnect_attempts must be greater than 0, is given*` + +The specified `` for `TCP_reconnect_attempts` in the runtime configuration file must be greater than `_0_`. + +`*Invalid input as TCP_reconnect_delay given: *` + +The specified `` for the `TCP_reconnect_delay` parameter in the runtime configuration file must be a whole number not less than `_0_`. + +`*TCP_reconnect_delay must not be less than 0, is given*` + +The specified `` for the `TCP_reconnect_delay` parameter in the runtime configuration file must be a whole number not less than `_0_`. + +`*Invalid input as port number given: *` + +The specified `` in the runtime configuration file is cannot be interpreted as a valid port number (e.g. string is given). + +`*Port number must be between 0 and 65535, is given*` + +The specified `` in the runtime configuration file is cannot be interpreted as a valid port number. Port numbers must be in the range 0..65535. + +`*Invalid input as server backlog given: *` + +The specified `` in the runtime configuration file is cannot be interpreted as a valid server backlog number (e.g. string is given). + +`*Cannot accept connection at port*` + +Connection could not be accepted on TCP socket. + +`*Error when reading the received TCP PDU*` + +System error occurred during reading from the TCP socket. + +`*Cannot open socket*` + +Creation of the listener socket failed. + +`*Setsockopt failed*` + +Setting of socket options failed. + +`*Cannot bind to port*` + +Binding of a socket to a port failed. + +`*Cannot listen at port*` + +Listen on the listener socket failed. + +`*getsockname() system call failed on the server socket*` + +The query of the listening port number failed. + +`*AbstractSocket: getnameinfo: *` + +The `getnameinfo` function returned an error. + +`*getaddrinfo: for host service *` + +The `getaddrinfo` function returned an error. + +`*Malformed message: invalid length: . The length should be at least .*` + +The message received contains invalid length information. + +`*Already tried times, giving up*` + +The deadlock counter exceeds the hard coded limit when trying to connect to a server in client mode. When connecting on a socket, sometimes it is unsuccessful. The next try usually solves the problem and the connection will be successfully accepted. The test port retries to connect as a workaround. The number of tries however limited to avoid hanging the test port. + +Different operating systems behave in a different way. This problem is rare on Solaris, Unix and Linux systems, but much more often on Cygwin. + +`*Cannot connect to server*` + +Connection to a server on TCP failed. + +`*Connection was interrupted by the other side*` + +The TCP or SSL connection was refused by the other peer, or broken. + +`*Client Id not specified although not only 1 client exists*` + +It should never show up. + +`*There is no connection alive, use the `ASP_TCP_Connect' before sending anything.*` + +An attempt was made by the test port to send data before setting up any connection. The `open_client_connection` function has to be called before sending any data. + +`*Send system call failed: There is no client connected to the TCP server*` + +A send operation is performed to a non-existing client. + +`*Send system call failed: bytes were sent instead of *` + +The send operation failed. + +`* is not defined in the configuration file*` + +The test port parameter is not defined in the runtime configuration file, although its presence is mandatory (or conditional and the condition is true). + +`*The host name is not valid in the configuration file*` + +The host name specified in the configuration file could not be resolved. + +`*Number of clients<>0 but cannot get first client, programming error*` + +It should never show up. + +`*Index exceeds length of peer list*` + +It should never show up. + +`*Abstract_Socket::get_peer: Client does not exist*` + +It should never show up. + +`*Invalid Client Id is given: *` + +It should never show up. + +`*Peer does not exist*` + +It should never show up. + +`*Set blocking mode failed.*` + +Test port could not set socket option: `O_NONBLOCK` + +== Additional Error Messages In Case SSL Connections Are Used + +Apart from the previously mentioned error messages, the following messages are used in case SSL is used: + +`*No SSL CTX found, SSL not initialized*` + +It should never show up. + +`*Creation of SSL object failed*` + +Creation of the SSL object is failed. + +`*Binding of SSL object to socket failed*` + +The SSL object could not be bound to the TCP socket. + +`*SSL error occurred*` + +A general SSL error occurred. Check the test port logs to see previous error messages showing the real problem. + +`* is not defined in the configuration file although =yes*` + +[source] +: ssl_trustedCAlist_file_name(), : ssl_verifycertificate_name() + +`*No SSL data available for client *` + +It should never show up. + +`*Could not read from /dev/urandom*` + +The read operation on the installed random device is failed. + +`*Could not read from /dev/random*` + +The read operation on the installed random device is failed. + +`*Could not seed the Pseudo Random Number Generator with enough data*` + +As no random devices found, a workaround is used to seed the SSL PRNG. The seeding failed. + +`*SSL method creation failed*` + +The creation of the SSL method object failed. + +`*SSL context creation failed*` + +The creation of the SSL context object failed. + +`*Can't read certificate file*` + +The specified certificate file could not be read. + +`*Can't read key file*` + +The specified private key file could not be read. + +`*Can't read trustedCAlist file*` + +The specified certificate of the trusted CAs file could not be read. + +`*Cipher list restriction failed for *` + +The specified cipher restriction list could not be set. + +`*Activation of SSL session resumption failed on server*` + +The activation of the SSL session resumption on the server failed. + +`*Unknown SSL error code *` + +It should never show up. + += Warning Messages + +== Warning Messages In Case TCP Connections Are Used + +`*Error when reading the received TCP PDU*` + +The received TCP PDU cannot be read. + +`*connect() returned error code EADDRINUSE. Perhaps this is a kernel bug. Trying to connect again.*` + +When connecting on a socket, sometimes it is unsuccessful. The next try usually solves the problem and the connection will be successfully accepted. The test port retries to connect as a workaround. The number of tries however limited to avoid hanging the test port. + +Different operating systems behave in a different way. This problem is rare on Solaris, Unix and Linux systems, but much more often on Cygwin. + +`*Connect() returned error code , trying to connect again (TCP reconnect mode)*` + +When connecting on a socket, sometimes it is unsuccessful and the given error code was returned. The next try usually solves the problem and the connection will be successfully accepted. The test port retries to connect as a workaround. + +`*TCP connection was interrupted by the other side, trying to reconnect again.*` + +The TCP or SSL connection was refused by the other peer, or it was broken. The test port tries to reconnect again. + +`*TCP reconnect successfully finished.*` + +This warning message is given if the reconnection was successful. + +`*Parameter has no meaning if use_connection_ASPs is used.*` + +There is no effect of setting this parameter when `use_connection_ASPs` is set to `_"yes"_`. + +`*Abstract_Socket::remove_client: is the server listening port, can not be removed!*` + +The `client_id` given in the `remove_client` function is currently used as the server’s listening port, it can not be removed. To close the server listening port, use the `close_listen_port` function. + +`*Client has not been removed, programming error*` + +It should never show up. + +`*Sending data on file descriptor .The sending operation would block execution. The size of the outgoing buffer was increased from to bytes.*` + +When the Abstract Socket is used with non-blocking socket, if the sending operation would block, first the size of the sending buffer is increased. This is the first step to avoid TCP deadlock. In the second step the Test Port will try to receive some data. + +`*Sending data on file descriptor .The sending operation would block execution and it is not possible to further increase the size of the outgoing buffer. Trying to process incoming data to avoid deadlock.*` + +When the Abstract Socket is used with non-blocking socket, if the sending operation would block, and the size of the outgoing buffer cannot be increased, the Test Port tries to receive some data to avoid deadlock. + +`*System call fcntl(F_GETFL) failed on file descriptor %d.*` + +`*System call fcntl(F_SETFL) failed on file descriptor %d.*` + +`*Setsockopt failed when trying to open the listen port: *` + +The `setsockopt` function failed. + +`*Cannot bind to port when trying to open the listen port: *` + +The bind system call failed. + +`*Cannot listen at port when trying to open the listen port: *` + +The listen system call failed. + +`*getsockname() system call failed on the server socket when trying to open the listen port: *` + +The getsockname system call failed. + +`*getaddrinfo: for host service *` + +The getaddrinfo system call failed. + +`*getnameinfo() system call failed on the server socket when trying to open the listen port: *` + +The getnameinfo system call failed. + +`*Cannot open socket when trying to open client connection: *` + +The socket system call failed. + +`*Setsockopt failed when trying to open client connection: *` + +The setsockopt system call failed. + +`*Cannot bind to port when trying to open client connection: *` + +The bind system call failed. + +`*Already tried times, giving up when trying to open client connection: *` + +The deadlock counter exceeds the hard coded limit when trying to connect to a server in client mode. When connecting on a socket, sometimes it is unsuccessful. The next try usually solves the problem and the connection will be successfully accepted. The test port retries to connect as a workaround. The number of tries however limited to avoid hanging the test port. + +Different operating systems behave in a different way. This problem is rare on Solaris, Unix and Linux systems, but much more often on Cygwin. + +[[warning_messages_in_case_SSL_connections_are_used]] +== Warning Messages In Case SSL Connections Are Used + +`*Warning: race condition while setting current client object pointer.*` + +The current client object pointer is already set. + +`*Connection from client is refused*` + +The connection from a client is refused in the server. + +`*Connection to server is refused*` + +The connection from the client is refused by the server. + +`*Server did not send a session ID*` + +The SSL server did not send a session ID. + +`*Verification failed*` + +The verification of the other side is failed. The connection will be shut down. + +`*SSL object not found for client *` + +It should never show up. + +`*SSL_Socket::receive_message_on_fd: SSL connection was interrupted by the other side*` + +The TLS/SSL connection has been closed. If the protocol version is SSL 3.0 or TLS 1.0, this warning appears only if a closure alert has occurred in the protocol, i.e. if the connection has been closed cleanly. Note that in this case it does not necessarily indicate that the underlying transport has been closed. + +`*Other side does not have certificate*` + +The other side of the SSL connection does not have a certificate. + +`*Solaris patches to provide random generation devices are not installed*` + +Solaris patches to provide random generation devices are not installed. A workaround will be used to seed the PRNG. + +`*Private key does not match the certificate public key*` + +The private key specified for the test port does not match with the public key. + += Terminology + +*Sockets:* + +The socket is a method for communication between a client program and a server program in a network. A socket is defined as "the endpoint in a connection". Sockets are created and used with a set of programming requests or "function calls" sometimes called the sockets application programming interface (API). The most common socket API is the Berkeley UNIX C language interface for sockets. Sockets can also be used for communication between processes within the same computer. + +*Blocking and non-blocking sockets:* + +Using a blocking socket, some socket operations (send, receive, connect, accept) will block until the operation is finished or an error occurs. Using a non-blocking socket, these operations will never block but return with an error and set `errno` to the appropriate value. + +*OpenSSL:* + +The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, full-featured, and open source toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library. For more information on the OpenSSL project see <<_3, [3]>> + += Abbreviations + +AS:: Abstract Socket + +ASP:: Abstract Service Primitive + +IPv4:: Internet Protocol version 4 + +IPv6:: Internet Protocol version 6 + +PEM:: Privacy Enhanced Mail + +RTE:: Run-Time Environment + +SSL:: Secure Sockets Layer + +SUT:: System Under Test + +TCP:: Transmission Control Protocol + +TLS:: Transport Layer Security + +TTCN-3:: Testing and Test Control Notation version 3 + += References + +[[_1]] +[1] ETSI ES 201 873-1 (2002) + +The Testing and Test Control Notation version 3. Part 1: Core Language + +[[_2]] +[2] User Guide for TITAN TTCN–3 Test Executor + +[[_3]] +[3] OpenSSL toolkit + + http://www.openssl.org diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.pdf b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d34138f4441545ce0db1c76eb49b886cd783eed6 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.pdf @@ -0,0 +1,25084 @@ +%PDF-1.3 +% +1 0 obj +<< /Title (Abstract Socket Test Port for TTCN-3 Toolset with TITAN, Description) +/Author +/Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2) +/Producer +/ModDate (D:20180803135149+02'00') +/CreationDate (D:20180803135149+02'00') +>> +endobj +2 0 obj +<< /Type /Catalog +/Pages 3 0 R +/Names 16 0 R +/Outlines 290 0 R +/PageLabels 353 0 R +/PageMode /UseOutlines +/OpenAction [7 0 R /FitH 842.89] +/ViewerPreferences << /DisplayDocTitle true +>> +>> +endobj +3 0 obj +<< /Type /Pages +/Count 31 +/Kids [7 0 R 10 0 R 12 0 R 14 0 R 32 0 R 40 0 R 47 0 R 56 0 R 64 0 R 68 0 R 70 0 R 73 0 R 78 0 R 81 0 R 87 0 R 92 0 R 95 0 R 109 0 R 113 0 R 117 0 R 123 0 R 129 0 R 132 0 R 137 0 R 139 0 R 142 0 R 144 0 R 148 0 R 150 0 R 153 0 R 158 0 R] +>> +endobj +4 0 obj +<< /Length 2 +>> +stream +q + +endstream +endobj +5 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 4 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +>> +>> +endobj +6 0 obj +<< /Length 834 +>> +stream +q +/DeviceRGB cs +0.6 0.6 0.6 scn +/DeviceRGB CS +0.6 0.6 0.6 SCN + +BT +84.6338 361.6965 Td +/F1.0 27 Tf +[<4162737472> 20.0195 <61637420536f636b> 20.0195 <65742054> 29.7852 <65737420506f727420666f72205454> 20.0195 <434e2d33>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6 0.6 0.6 scn +0.6 0.6 0.6 SCN + +BT +139.9568 327.6765 Td +/F1.0 27 Tf +[<54> 29.7852 <6f6f6c736574207769746820544954> 60.0586 <414e2c204465736372697074696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.0941 0.0941 0.0941 scn +0.0941 0.0941 0.0941 SCN + +BT +469.014 293.2049 Td +/F1.0 13 Tf +<4787626f7220537a616c6169> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +323.2733 263.3914 Td +/F1.0 10.5 Tf +[<56> 60.0586 <657273696f6e20313535312d434e4c20313133203338342c20526576> 69.8242 <2e20412c20323031352d30312d3230>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q + +endstream +endobj +7 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 6 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +>> +>> +>> +endobj +8 0 obj +<< /Type /Font +/BaseFont /3a0e86+NotoSerif +/Subtype /TrueType +/FontDescriptor 355 0 R +/FirstChar 32 +/LastChar 255 +/Widths 357 0 R +/ToUnicode 356 0 R +>> +endobj +9 0 obj +<< /Length 27952 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 782.394 Td +/F2.0 22 Tf +[<54> 29.7852 <61626c65206f6620436f6e74656e7473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 751.856 Td +/F1.0 10.5 Tf +<41626f7574205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +161.0311 751.856 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 751.856 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 751.856 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 733.376 Td +/F1.0 10.5 Tf +<486f7720746f2052656164205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +203.7871 733.376 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 733.376 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 733.376 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 714.896 Td +/F1.0 10.5 Tf +<50726573756d6564204b6e6f776c65646765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +171.7201 714.896 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 714.896 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 714.896 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 696.416 Td +/F1.0 10.5 Tf +<46756e6374696f6e616c697479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +118.2751 696.416 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 696.416 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 696.416 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 677.936 Td +/F1.0 10.5 Tf +[<53> 20.0195 <797374656d20526571756972656d656e7473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +171.7201 677.936 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 677.936 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 677.936 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 659.456 Td +/F1.0 10.5 Tf +<46756e64616d656e74616c20436f6e6365707473> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +177.0646 659.456 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 659.456 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 659.456 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 640.976 Td +/F1.0 10.5 Tf +<4d6f64756c6520537472756374757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +161.0311 640.976 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 640.976 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 640.976 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 622.496 Td +/F1.0 10.5 Tf +<53746172742050726f636564757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +139.6531 622.496 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 622.496 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 622.496 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 604.016 Td +/F1.0 10.5 Tf +<436f6e6e656374696f6e2041535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +161.0311 604.016 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 604.016 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 604.016 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 585.536 Td +/F1.0 10.5 Tf +<536572766572204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +139.6531 585.536 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 585.536 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 585.536 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 567.056 Td +/F1.0 10.5 Tf +<436c69656e74204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +134.3086 567.056 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 567.056 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 567.056 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 548.576 Td +/F1.0 10.5 Tf +<53656e64696e672f526563656976696e67204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +203.7871 548.576 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 548.576 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 548.576 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 530.096 Td +/F1.0 10.5 Tf +<4c6f6767696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +102.2416 530.096 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 530.096 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 530.096 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 511.616 Td +/F1.0 10.5 Tf +<4572726f722048616e646c696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +139.6531 511.616 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 511.616 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 511.616 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 493.136 Td +/F1.0 10.5 Tf +<436c6f73696e6720446f776e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +128.9641 493.136 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 493.136 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 493.136 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 474.656 Td +/F1.0 10.5 Tf +<4950763620537570706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +128.9641 474.656 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 474.656 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 474.656 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 456.176 Td +/F1.0 10.5 Tf +<53534c2046756e6374696f6e616c697479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +150.3421 456.176 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 456.176 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 456.176 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 437.696 Td +/F1.0 10.5 Tf +<436f6d70696c6174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +134.3086 437.696 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 437.696 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 437.696 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 419.216 Td +/F1.0 10.5 Tf +[<41> 20.0195 <757468656e7469636174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +150.3421 419.216 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 419.216 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 419.216 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 400.736 Td +/F1.0 10.5 Tf +[<4f746865722046> 40.0391 <65617475726573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +150.3421 400.736 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 400.736 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 400.736 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 382.256 Td +/F1.0 10.5 Tf +<4c696d69746174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +134.3086 382.256 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 382.256 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 382.256 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 363.776 Td +/F1.0 10.5 Tf +[<5468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +118.2751 363.776 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 363.776 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 363.776 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 345.296 Td +/F1.0 10.5 Tf +<4f76657276696577> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +112.9306 345.296 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 345.296 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 345.296 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 326.816 Td +/F1.0 10.5 Tf +<496e7374616c6c6174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +118.2751 326.816 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 326.816 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 326.816 Td +/F1.0 10.5 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 308.336 Td +/F1.0 10.5 Tf +[<436f6e6669677572> 20.0195 <6174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +134.3086 308.336 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 308.336 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 308.336 Td +/F1.0 10.5 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 289.856 Td +/F1.0 10.5 Tf +[<4162737472> 20.0195 <61637420536f636b> 20.0195 <65742054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e207468652054> 29.7852 <65737420506f727420436f6e6669677572> 20.0195 <6174696f6e2046696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +433.6006 289.856 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 289.856 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 289.856 Td +/F1.0 10.5 Tf +<36> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 271.376 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +81.66 271.376 Td +/F3.0 10.5 Tf +<4162737472616374536f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +155.16 271.376 Td +/F1.0 10.5 Tf +<20415049> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +177.0646 271.376 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 271.376 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 271.376 Td +/F1.0 10.5 Tf +<39> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 252.896 Td +/F1.0 10.5 Tf +[<4d61702f556e6d6170207468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +203.7871 252.896 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 252.896 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 252.896 Td +/F1.0 10.5 Tf +<39> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 234.416 Td +/F1.0 10.5 Tf +[<53657474696e672054> 29.7852 <65737420506f727420506172> 20.0195 <616d6574657273>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +214.4761 234.416 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 234.416 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 234.416 Td +/F1.0 10.5 Tf +<39> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 215.936 Td +/F1.0 10.5 Tf +<4f70656e2061204c697374656e696e6720506f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +181.8841 215.936 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 215.936 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 215.936 Td +/F1.0 10.5 Tf +<3130> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 197.456 Td +/F1.0 10.5 Tf +<436c6f736520746865204c697374656e696e6720506f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +192.5731 197.456 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 197.456 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 197.456 Td +/F1.0 10.5 Tf +<3131> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 178.976 Td +/F1.0 10.5 Tf +<4f70656e206120436c69656e7420436f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +203.2621 178.976 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 178.976 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 178.976 Td +/F1.0 10.5 Tf +<3131> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 160.496 Td +/F1.0 10.5 Tf +<53656e64204d657373616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +144.4726 160.496 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 160.496 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 160.496 Td +/F1.0 10.5 Tf +<3131> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 142.016 Td +/F1.0 10.5 Tf +<436c6f7365206120436c69656e7420436f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +203.2621 142.016 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 142.016 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 142.016 Td +/F1.0 10.5 Tf +<3132> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 123.536 Td +/F1.0 10.5 Tf +[<54> 29.7852 <65737420506f727420506172> 20.0195 <616d65746572204e616d6573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +213.9511 123.536 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 123.536 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 123.536 Td +/F1.0 10.5 Tf +<3132> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 105.056 Td +/F1.0 10.5 Tf +[<506172> 20.0195 <616d657465722041> 20.0195 <63636573736f722046756e6374696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +224.6401 105.056 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 105.056 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 105.056 Td +/F1.0 10.5 Tf +<3133> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 86.576 Td +/F1.0 10.5 Tf +<4c6f6767696e672046756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +165.8506 86.576 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 86.576 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 86.576 Td +/F1.0 10.5 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 68.096 Td +/F1.0 10.5 Tf +<4572726f72205265706f7274696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +155.1616 68.096 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 68.096 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 68.096 Td +/F1.0 10.5 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q + +endstream +endobj +10 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 9 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +>> +>> +/Annots [164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R] +>> +endobj +11 0 obj +<< /Length 15934 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +<5469707320616e6420547269636b73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +128.4391 794.676 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 794.676 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 794.676 Td +/F1.0 10.5 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 776.196 Td +/F1.0 10.5 Tf +<5573616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +91.0276 776.196 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 776.196 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 776.196 Td +/F1.0 10.5 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 757.716 Td +/F1.0 10.5 Tf +[<4465726976696e67207468652054> 29.7852 <65737420506f727420436c617373>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +213.9511 757.716 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 757.716 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 757.716 Td +/F1.0 10.5 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 739.236 Td +/F1.0 10.5 Tf +<496d706c656d656e746174696f6e206f6620746865204c6f676765722046756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +278.0851 739.236 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 739.236 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 739.236 Td +/F1.0 10.5 Tf +<3135> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 720.756 Td +/F1.0 10.5 Tf +[<46756e6374696f6e205472> 20.0195 <616e736c6174696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +187.2286 720.756 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 720.756 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 720.756 Td +/F1.0 10.5 Tf +<3135> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 702.276 Td +/F1.0 10.5 Tf +[<46756e6374696f6e7320666f72204d616e6970756c6174696e672074686520536574206f66204576656e747320666f722057686963682074686520506f72742057> 49.8047 <61697473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +422.3866 702.276 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 702.276 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 702.276 Td +/F1.0 10.5 Tf +<3136> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 683.796 Td +/F1.0 10.5 Tf +<46696e616c205374657073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +128.4391 683.796 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 683.796 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 683.796 Td +/F1.0 10.5 Tf +<3137> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 665.316 Td +/F1.0 10.5 Tf +<5573696e6720> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +90.984 665.316 Td +/F3.0 10.5 Tf +<5454434e5f427566666572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +148.734 665.316 Td +/F1.0 10.5 Tf +[<20696e2054> 29.7852 <65737420506f727473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +213.9511 665.316 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 665.316 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 665.316 Td +/F1.0 10.5 Tf +<3137> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 646.836 Td +/F1.0 10.5 Tf +[<5573696e672053534c206f6e2054> 29.7852 <6f70206f6620612054> 20.0195 <435020436f6e6e656374696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +251.3626 646.836 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 646.836 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 646.836 Td +/F1.0 10.5 Tf +<3137> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 628.356 Td +/F1.0 10.5 Tf +<536572766572204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +139.1281 628.356 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 628.356 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 628.356 Td +/F1.0 10.5 Tf +<3138> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 609.876 Td +/F1.0 10.5 Tf +<436c69656e74204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +133.7836 609.876 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 609.876 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 609.876 Td +/F1.0 10.5 Tf +<3138> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 591.396 Td +/F1.0 10.5 Tf +[<41> 20.0195 <757468656e7469636174696f6e20466c6f77>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +176.5396 591.396 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 591.396 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 591.396 Td +/F1.0 10.5 Tf +<3138> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 572.916 Td +/F1.0 10.5 Tf +[<41> 20.0195 <64617074696e6720446572697665642054> 29.7852 <65737420506f72747320746f20537570706f72742049507636>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +283.4296 572.916 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 572.916 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 572.916 Td +/F1.0 10.5 Tf +<3139> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 554.436 Td +/F1.0 10.5 Tf +<4572726f72204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +128.4391 554.436 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 554.436 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 554.436 Td +/F1.0 10.5 Tf +<3230> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 535.956 Td +/F1.0 10.5 Tf +[<4572726f72204d6573736167657320496e20436173652054> 20.0195 <435020436f6e6e656374696f6e73204172652055736564>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +310.1521 535.956 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 535.956 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 535.956 Td +/F1.0 10.5 Tf +<3230> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 517.476 Td +/F1.0 10.5 Tf +[<41> 20.0195 <64646974696f6e616c204572726f72204d6573736167657320496e20436173652053534c20436f6e6e656374696f6e73204172652055736564>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +368.9416 517.476 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 517.476 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 517.476 Td +/F1.0 10.5 Tf +<3232> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 498.996 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61726e696e67204d65737361676573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +144.4726 498.996 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 498.996 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 498.996 Td +/F1.0 10.5 Tf +<3234> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 480.516 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61726e696e67204d6573736167657320496e20436173652054> 20.0195 <435020436f6e6e656374696f6e73204172652055736564>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +331.5301 480.516 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 480.516 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 480.516 Td +/F1.0 10.5 Tf +<3234> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 462.036 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61726e696e67204d6573736167657320496e20436173652053534c20436f6e6e656374696f6e73204172652055736564>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +326.1856 462.036 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 462.036 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 462.036 Td +/F1.0 10.5 Tf +<3236> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 443.556 Td +/F1.0 10.5 Tf +[<54> 29.7852 <65726d696e6f6c6f6779>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +112.4056 443.556 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 443.556 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 443.556 Td +/F1.0 10.5 Tf +<3237> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 425.076 Td +/F1.0 10.5 Tf +<416262726576696174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +123.0946 425.076 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 425.076 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 425.076 Td +/F1.0 10.5 Tf +<3237> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 406.596 Td +/F1.0 10.5 Tf +<5265666572656e636573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +107.0611 406.596 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 406.596 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 406.596 Td +/F1.0 10.5 Tf +<3238> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q + +endstream +endobj +12 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 11 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +>> +>> +/Annots [242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R] +>> +endobj +13 0 obj +<< /Length 6942 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 782.394 Td +/F2.0 22 Tf +<41626f7574205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 741.146 Td +/F2.0 18 Tf +<486f7720746f2052656164205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.032 Tw + +BT +48.24 713.126 Td +/F1.0 10.5 Tf +[<5468697320697320746865205573657220477569646520666f7220746865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574207465737420706f72742e20546865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574207465737420706f727420697320646576656c6f706564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 697.346 Td +/F1.0 10.5 Tf +[<666f7220746865205454> 20.0195 <434e2d332054> 29.7852 <6f6f6c7365742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 657.506 Td +/F2.0 18 Tf +<50726573756d6564204b6e6f776c65646765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 629.486 Td +/F1.0 10.5 Tf +[<54> 29.7852 <6f2075736520746869732070726f746f636f6c206d6f64756c6520746865206b6e6f776c65646765206f6620746865205454> 20.0195 <434e2d33206c616e677561676520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +383.4546 629.486 Td +/F1.0 10.5 Tf +<5b315d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +396.8631 629.486 Td +/F1.0 10.5 Tf +<20697320657373656e7469616c2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 580.034 Td +/F2.0 27 Tf +<46756e6374696f6e616c697479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 533.054 Td +/F2.0 22 Tf +[<53> 20.0195 <797374656d20526571756972656d656e7473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 503.866 Td +/F1.0 10.5 Tf +[<496e206f7264657220746f2075736520746865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574207465737420706f72742074686520666f6c6c6f77696e672073797374656d20726571756972656d656e7473206d757374206265207361746973666965643a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 476.086 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 476.086 Td +/F1.0 10.5 Tf +[<506c6174666f726d3a20616e> 20.0195 <7920706c6174666f726d20737570706f727465642062> 20.0195 <7920544954> 60.0586 <414e2052> 20.0195 <544520616e64204f70656e53534c>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 454.306 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 454.306 Td +/F1.0 10.5 Tf +[<544954> 60.0586 <414e205454> 20.0195 <434e2d332054> 29.7852 <657374204578656375746f722076657273696f6e205238412028312e382e706c3029206f722068696768657220696e7374616c6c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.5 w +0.9333 0.9333 0.9333 SCN +102.4695 438.49 m +102.4695 414.71 l +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.3451 422.526 Td +/F2.0 10.5 Tf +[<4e4f> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +114.4695 422.526 Td +/F1.0 10.5 Tf +[<54686973204162737472> 20.0195 <61637420536f636b> 20.0195 <65742076657273696f6e206973206e6f7420636f6d70617469626c65207769746820544954> 60.0586 <414e2072656c6561736573206561726c696572207468616e205238412e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9943 Tw + +BT +48.24 390.746 Td +/F1.0 10.5 Tf +[<49662053534c20697320757365642c207468652073616d65204f70656e53534c206d75737420626520696e7374616c6c6564206173207573656420696e20544954> 60.0586 <414e2e2046> 40.0391 <6f7220616e204f70656e53534c20696e7374616c6c6174696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 374.966 Td +/F1.0 10.5 Tf +<67756964652073656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +97.359 374.966 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +110.7675 374.966 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 330.854 Td +/F2.0 22 Tf +<46756e64616d656e74616c20436f6e6365707473> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.9998 Tw + +BT +48.24 301.666 Td +/F1.0 10.5 Tf +[<546865207465737420706f72742065737461626c697368657320636f6e6e656374696f6e206265747765656e20746865205454> 20.0195 <434e2d332074657374206578656375746f7220616e642053555420616e64>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4205 Tw + +BT +48.24 285.886 Td +/F1.0 10.5 Tf +[<7472> 20.0195 <616e736d6974732f7265636569766573206d657373616765732e20546865207472> 20.0195 <616e73706f7274206368616e6e656c2063616e2062652054> 20.0195 <4350206f722053534c2e2054686520636f6e6e65637420616e64206c697374656e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 270.106 Td +/F1.0 10.5 Tf +[<6f706572> 20.0195 <6174696f6e732063616e20626520696e697469617465642066726f6d207468652074657374207375697465207573696e672074686520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +326.5528 270.106 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +426.3028 270.106 Td +/F1.0 10.5 Tf +[<207465737420706f727420706172> 20.0195 <616d657465722e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 230.266 Td +/F2.0 18 Tf +<4d6f64756c6520537472756374757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 202.246 Td +/F1.0 10.5 Tf +[<546865204162737472> 20.0195 <61637420536f636b> 20.0195 <657420636f6d6d6f6e20636f6d706f6e656e7420697320696d706c656d656e74656420696e2074686520666f6c6c6f77696e672066696c65733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 174.466 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 174.466 Td +/F4.0 10.5 Tf +[<4162737472> 20.0195 <6163745f536f636b> 20.0195 <65742e6868>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 152.686 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 152.686 Td +/F4.0 10.5 Tf +[<4162737472> 20.0195 <6163745f536f636b> 20.0195 <65742e6363>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 108.574 Td +/F2.0 22 Tf +<53746172742050726f636564757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +14 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 13 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F4.0 29 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +/Annots [22 0 R 25 0 R] +>> +endobj +15 0 obj +[14 0 R /XYZ 0 841.89 null] +endobj +16 0 obj +<< /Type /Names +/Dests 17 0 R +>> +endobj +17 0 obj +<< /Kids [49 0 R 135 0 R 50 0 R 84 0 R 115 0 R] +>> +endobj +18 0 obj +[14 0 R /XYZ 0 841.89 null] +endobj +19 0 obj +<< /Type /Font +/BaseFont /ace878+NotoSerif-Bold +/Subtype /TrueType +/FontDescriptor 359 0 R +/FirstChar 32 +/LastChar 255 +/Widths 361 0 R +/ToUnicode 360 0 R +>> +endobj +20 0 obj +[14 0 R /XYZ 0 765.17 null] +endobj +21 0 obj +[14 0 R /XYZ 0 681.53 null] +endobj +22 0 obj +<< /Border [0 0 0] +/Dest (_1) +/Subtype /Link +/Rect [383.4546 626.42 396.8631 640.7] +/Type /Annot +>> +endobj +23 0 obj +[14 0 R /XYZ 0 613.67 null] +endobj +24 0 obj +[14 0 R /XYZ 0 561.35 null] +endobj +25 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [97.359 371.9 110.7675 386.18] +/Type /Annot +>> +endobj +26 0 obj +[14 0 R /XYZ 0 359.15 null] +endobj +27 0 obj +<< /Type /Font +/BaseFont /121353+mplus1mn-regular +/Subtype /TrueType +/FontDescriptor 363 0 R +/FirstChar 32 +/LastChar 255 +/Widths 365 0 R +/ToUnicode 364 0 R +>> +endobj +28 0 obj +[14 0 R /XYZ 0 254.29 null] +endobj +29 0 obj +<< /Type /Font +/BaseFont /91a4c8+NotoSerif-Italic +/Subtype /TrueType +/FontDescriptor 367 0 R +/FirstChar 32 +/LastChar 255 +/Widths 369 0 R +/ToUnicode 368 0 R +>> +endobj +30 0 obj +[14 0 R /XYZ 0 136.87 null] +endobj +31 0 obj +<< /Length 9168 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 786.666 Td +/F2.0 18 Tf +<436f6e6e656374696f6e2041535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9875 Tw + +BT +48.24 758.646 Td +/F1.0 10.5 Tf +[<5768656e2063686f6f73696e6720746f2075736520636f6e6e656374696f6e20415350732c20746865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742069732061626c6520746f206f70656e206120736572766572206c697374656e696e6720706f7274>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 742.866 Td +/F1.0 10.5 Tf +[<28616374696e67206c696b> 20.0195 <6520612073657276657229206f7220636c69656e7420636f6e6e656374696f6e73206174207468652073616d652074696d652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 703.026 Td +/F2.0 18 Tf +<536572766572204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4287 Tw + +BT +48.24 675.006 Td +/F1.0 10.5 Tf +[<5768656e20746865207465737420706f7274206973206d61707065642062> 20.0195 <7920544954> 60.0586 <414e2052> 20.0195 <54452c2074686520736572766572206372656174657320612054> 20.0195 <435020736f636b> 20.0195 <657420616e6420737461727473206c697374656e696e67206f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7526 Tw + +BT +48.24 659.226 Td +/F1.0 10.5 Tf +[<69742e20446570656e64696e67206f6e20746865207472> 20.0195 <616e73706f7274206368616e6e656c2073706563696669656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c2069742077696c6c20616363657074>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 643.446 Td +/F1.0 10.5 Tf +[<6569746865722054> 20.0195 <4350206f722053534c20636f6e6e656374696f6e732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 603.606 Td +/F2.0 18 Tf +<436c69656e74204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6167 Tw + +BT +48.24 575.586 Td +/F1.0 10.5 Tf +[<5768656e20746865207465737420706f7274206973206d61707065642062> 20.0195 <7920544954> 60.0586 <414e2052> 20.0195 <54452c2074686520636c69656e74206372656174657320612054> 20.0195 <435020736f636b> 20.0195 <657420616e6420747269657320746f20636f6e6e65637420746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.0954 Tw + +BT +48.24 559.806 Td +/F1.0 10.5 Tf +[<746865207365727665722e20496620746865207472> 20.0195 <616e73706f7274206368616e6e656c2069732053534c2c2074686520636c69656e742073746172747320616e2053534c2068616e647368616b> 20.0195 <65206166746572207468652054> 20.0195 <4350>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5443 Tw + +BT +48.24 544.026 Td +/F1.0 10.5 Tf +[<636f6e6e656374696f6e2069732065737461626c69736865642e204966207468652053534c2068616e647368616b> 20.0195 <65206973207375636365737366756c2c207468652053534c20636f6e6e656374696f6e2069732065737461626c697368656420616e64>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 528.246 Td +/F1.0 10.5 Tf +<74686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.93 528.246 Td +/F3.0 10.5 Tf +<6d6170> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +82.68 528.246 Td +/F1.0 10.5 Tf +[<206f706572> 20.0195 <6174696f6e2069732066696e69736865642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 500.466 Td +/F1.0 10.5 Tf +[<5468652053534c2068616e647368616b> 20.0195 <65206d61> 20.0195 <79206661696c2064756520746f207365766572> 20.0195 <616c20726561736f6e732028652e672eca6e6f2073686172656420636970686572732c20766572696669636174696f6e206661696c7572652c206574632e292e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 456.354 Td +/F2.0 22 Tf +<53656e64696e672f526563656976696e67204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2518 Tw + +BT +48.24 427.166 Td +/F1.0 10.5 Tf +[<4f6e6c79206261736963206f63746574737472696e672073656e64696e6720616e6420726563656976696e672069732068616e646c65642062> 20.0195 <7920746865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742e20546869732066756e6374696f6e616c697479>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.04 Tw + +BT +48.24 411.386 Td +/F1.0 10.5 Tf +[<70726f6261626c79206d75737420626520657874656e64656420696e206f7264657220746f206275696c642061207465737420706f727420666f722074686520646573697265642070726f746f636f6c2e20466972737420746865205454> 20.0195 <434e2d33>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.372 Tw + +BT +48.24 395.606 Td +/F1.0 10.5 Tf +[<6d617070696e67206f6620746865207461726765742070726f746f636f6c206d65737361676573206d75737420626520656c61626f72> 20.0195 <6174656420616e64207468656e20746865206d6573736167652070726f63657373696e67>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 379.826 Td +/F1.0 10.5 Tf +<66756e6374696f6e732063616e20626520646576656c6f7065642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 335.714 Td +/F2.0 22 Tf +<4c6f6767696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4687 Tw + +BT +48.24 306.526 Td +/F1.0 10.5 Tf +<5468652074797065206f6620696e666f726d6174696f6e20746861742077696c6c206265206c6f676765642063616e2062652063617465676f72697a656420696e746f2074776f2067726f7570732e20546865206669727374206f6e65> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4086 Tw + +BT +48.24 290.746 Td +/F1.0 10.5 Tf +<636f6e7369737473206f6620696e666f726d6174696f6e20746861742073686f77732074686520666c6f77206f662074686520696e7465726e616c20657865637574696f6e206f6620746865207465737420706f72742c20652e672eca696d706f7274616e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2202 Tw + +BT +48.24 274.966 Td +/F1.0 10.5 Tf +<6576656e74732c2077686963682066756e6374696f6e20746861742069732063757272656e746c7920657865637574696e67206574632e20546865207365636f6e642067726f7570206465616c7320776974682070726573656e74696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1305 Tw + +BT +48.24 259.186 Td +/F1.0 10.5 Tf +[<76616c7561626c6520646174612c20652e672eca70726573656e74696e672074686520636f6e74656e74206f662061205044552e20546865206c6f6767696e67207072696e746f7574732077696c6c20626520646972656374656420746f207468652052> 20.0195 <5445>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4973 Tw + +BT +48.24 243.406 Td +/F1.0 10.5 Tf +[<6c6f672066696c652e2054686520757365722069732061626c6520746f206465636964652077686574686572206c6f6767696e6720697320746f2074616b> 20.0195 <6520706c616365206f72206e6f742062> 20.0195 <792073657474696e6720617070726f707269617465>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 227.626 Td +/F1.0 10.5 Tf +[<636f6e6669677572> 20.0195 <6174696f6e20646174612e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 183.514 Td +/F2.0 22 Tf +<4572726f722048616e646c696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6416 Tw + +BT +48.24 154.326 Td +/F1.0 10.5 Tf +[<4572726f6e656f7573206265686176696f7220646574656374656420647572696e672072756e74696d6520697320646972656374656420696e746f207468652052> 20.0195 <5445206c6f672066696c652e2054686520666f6c6c6f77696e672074776f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 138.546 Td +/F1.0 10.5 Tf +[<7479706573206f66206d65737361676573206172652074616b> 20.0195 <656e2063617265206f663a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 110.766 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2851 Tw + +BT +66.24 110.766 Td +/F1.0 10.5 Tf +<4572726f72733a20696e666f726d6174696f6e2061626f7574206572726f72732064657465637465642069732070726f76696465642e20496620616e206572726f72206f63637572732074686520657865637574696f6e206f6620746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 94.986 Td +/F1.0 10.5 Tf +[<7465737420636173652077696c6c2073746f7020696d6d6564696174656c79> 89.8438 <2e20546865207465737420706f7274732077696c6c20626520756e6d61707065642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 73.206 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7095 Tw + +BT +66.24 73.206 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61726e696e67733a20696e666f726d6174696f6e2061626f7574207761726e696e67732064657465637465642069732070726f76696465642e2054686520657865637574696f6e20636f6e74696e75657320616674657220746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 57.426 Td +/F1.0 10.5 Tf +<7761726e696e672069732073686f776e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +32 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 31 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +33 0 obj +[32 0 R /XYZ 0 841.89 null] +endobj +34 0 obj +[32 0 R /XYZ 0 727.05 null] +endobj +35 0 obj +[32 0 R /XYZ 0 627.63 null] +endobj +36 0 obj +[32 0 R /XYZ 0 484.65 null] +endobj +37 0 obj +[32 0 R /XYZ 0 364.01 null] +endobj +38 0 obj +[32 0 R /XYZ 0 211.81 null] +endobj +39 0 obj +<< /Length 10742 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 782.394 Td +/F2.0 22 Tf +<436c6f73696e6720446f776e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.8316 Tw + +BT +48.24 753.206 Td +/F1.0 10.5 Tf +<54686520636f6e6e656374696f6e2063616e206265207368757420646f776e2065697468657220706572666f726d696e672074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +3.8316 Tw + +BT +364.6918 753.206 Td +/F3.0 10.5 Tf +<756e6d6170> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.8316 Tw + +BT +390.9418 753.206 Td +/F1.0 10.5 Tf +[<206f706572> 20.0195 <6174696f6e206f6e2074686520706f7274206f72206966>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 737.426 Td +/F1.0 10.5 Tf +[<636f6e6e656374696f6e204153507320617265207573656420776974682074686520617070726f70726961746520415350> 120.1172 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 693.314 Td +/F2.0 22 Tf +<4950763620537570706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4693 Tw + +BT +48.24 664.126 Td +/F1.0 10.5 Tf +[<497420697320706f737369626c6520746f2073656c6563742074686520616464726573732066616d696c79207573656420666f722073657276657220736f636b> 20.0195 <657420616e6420636c69656e7420636f6e6e656374696f6e7320696e20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7381 Tw + +BT +48.24 648.346 Td +/F1.0 10.5 Tf +[<636f6e6669677572> 20.0195 <6174696f6e2066696c65206f7220647572696e672072756e74696d652e2054686520666f6c6c6f77696e6720616464726573732066616d696c6965732061726520737570706f727465643a20495076342c204950763620616e64>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 632.566 Td +/F1.0 10.5 Tf +<554e535045432e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 588.454 Td +/F2.0 22 Tf +<53534c2046756e6374696f6e616c697479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6622 Tw + +BT +48.24 559.266 Td +/F1.0 10.5 Tf +[<546865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742063616e207573652053534c206f722054> 20.0195 <435020617320746865207472> 20.0195 <616e73706f7274206368616e6e656c2e205468652073616d652076657273696f6e206f66204f70656e53534c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 543.486 Td +/F1.0 10.5 Tf +[<6c696272> 20.0195 <617279206d757374206265207573656420617320696e20544954> 60.0586 <414e2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.5602 Tw + +BT +48.24 515.706 Td +/F1.0 10.5 Tf +[<54686520737570706f727465642053534c2f544c532076657273696f6e73206172652064657465726d696e65642062> 20.0195 <79207468652075736564204f70656e53534c206c696272> 20.0195 <617279> 89.8438 <2e20497420697320706f737369626c6520746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 499.926 Td +/F1.0 10.5 Tf +[<64697361626c65206120737065636966696320544c532f53534c2076657273696f6e20696e207468652072756e2074696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 460.086 Td +/F2.0 18 Tf +<436f6d70696c6174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.3605 Tw + +BT +48.24 432.066 Td +/F1.0 10.5 Tf +<546865207573616765206f662053534c20616e64206576656e2074686520636f6d70696c6174696f6e206f66207468652053534c2072656c6174656420636f646520706172747320617265206f7074696f6e616c2e2054686973206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 416.286 Td +/F1.0 10.5 Tf +<626563617573652053534c2072656c6174656420636f64652070617274732063616e6e6f7420626520636f6d70696c656420776974686f757420746865204f70656e53534c20696e7374616c6c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6975 Tw + +BT +48.24 388.506 Td +/F1.0 10.5 Tf +[<54686520636f6d70696c6174696f6e206f662053534c2072656c6174656420636f64652070617274732063616e2062652064697361626c65642062> 20.0195 <79206e6f7420646566696e696e672074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.6975 Tw + +BT +445.6011 388.506 Td +/F3.0 10.5 Tf +<41535f5553455f53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6975 Tw + +BT +498.1011 388.506 Td +/F1.0 10.5 Tf +<206d6163726f20696e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +48.24 372.726 Td +/F1.0 10.5 Tf +<74686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +67.5654 372.726 Td +/F4.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +109.3027 372.726 Td +/F1.0 10.5 Tf +<20647572696e672074686520636f6d70696c6174696f6e2e20496620746865206d6163726f20697320646566696e656420696e2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +386.531 372.726 Td +/F4.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +428.2683 372.726 Td +/F1.0 10.5 Tf +<2c207468652053534c20636f646520706172747320617265> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9115 Tw + +BT +48.24 356.946 Td +/F1.0 10.5 Tf +<636f6d70696c656420746f207468652065786563757461626c65207465737420636f64652e20546865207573616765206f66207468652053534c207468656e2063616e20626520656e61626c65642f64697361626c656420696e20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.5868 Tw + +BT +48.24 341.166 Td +/F1.0 10.5 Tf +[<72756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652e204e61747572> 20.0195 <616c6c79> 89.8438 <2c20746865207465737420706f727420706172> 20.0195 <616d657465722077696c6c2062652069676e6f7265642069662074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.5868 Tw + +BT +494.54 341.166 Td +/F3.0 10.5 Tf +<41535f5553455f53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.5868 Tw + +BT +547.04 341.166 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 325.386 Td +/F1.0 10.5 Tf +<6d6163726f206973206e6f7420646566696e656420647572696e6720636f6d70696c6174696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 285.546 Td +/F2.0 18 Tf +[<41> 20.0195 <757468656e7469636174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7515 Tw + +BT +48.24 257.526 Td +/F1.0 10.5 Tf +[<546865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742070726f766964657320626f746820736572766572207369646520616e6420636c69656e7420736964652061757468656e7469636174696f6e2e205768656e2061757468656e7469636174696e67>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6115 Tw + +BT +48.24 241.746 Td +/F1.0 10.5 Tf +<746865206f7468657220736964652c20612063657274696669636174652069732072657175657374656420616e6420746865206f776e207472757374656420636572746966696361746520617574686f726974696573d5206c6973742069732073656e742e20546865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0653 Tw + +BT +48.24 225.966 Td +/F1.0 10.5 Tf +[<7265636569766564206365727469666963617465206973207665726966696564207768657468657220697420697320612076616c6964206365727469666963617465206f72206e6f742028746865207075626c696320616e642070726976617465206b> 20.0195 <65797320617265>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.9449 Tw + +BT +48.24 210.186 Td +/F1.0 10.5 Tf +<6d61746368696e67292e204e6f20667572746865722061757468656e7469636174696f6e20697320706572666f726d65642028652e672eca7768657468657220686f73746e616d652069732070726573656e7420696e20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 194.406 Td +/F1.0 10.5 Tf +[<6365727469666963617465292e2054686520766572696669636174696f6e2063616e20626520656e61626c65642f64697361626c656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2079 Tw + +BT +48.24 166.626 Td +/F1.0 10.5 Tf +[<496e20736572766572206d6f646520746865207465737420706f72742077696c6c20616c7761> 20.0195 <79732073656e642069747320636572746966696361746520616e64207472757374656420636572746966696361746520617574686f726974696573d5206c69737420746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9488 Tw + +BT +48.24 150.846 Td +/F1.0 10.5 Tf +[<69747320636c69656e74732e20496620766572696669636174696f6e20697320656e61626c656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c20746865207365727665722077696c6c207265717565737420666f722061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8549 Tw + +BT +48.24 135.066 Td +/F1.0 10.5 Tf +<636c69656e74d5732063657274696669636174652e20496e207468697320636173652c2069662074686520636c69656e7420646f6573206e6f742073656e6420612076616c6964206365727469666963617465206f7220646f6573206e6f742073656e642061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0064 Tw + +BT +48.24 119.286 Td +/F1.0 10.5 Tf +<636572746966696361746520617420616c6c2c2074686520636f6e6e656374696f6e2077696c6c20626520726566757365642e2049662074686520766572696669636174696f6e2069732064697361626c65642c2074686520636f6e6e656374696f6e2077696c6c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 103.506 Td +/F1.0 10.5 Tf +<6e6576657220626520726566757365642064756520746f20766572696669636174696f6e206661696c7572652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.0851 Tw + +BT +48.24 75.726 Td +/F1.0 10.5 Tf +[<496e20636c69656e74206d6f646520746865207465737420706f72742077696c6c2073656e642069747320636572746966696361746520746f2074686520736572766572206f6e2074686520736572766572> -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2083 Tw + +BT +48.24 59.946 Td +/F1.0 10.5 Tf +[<766572696669636174696f6e20697320656e61626c656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c2074686520636c69656e742077696c6c2073656e6420697473206f776e2074727573746564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +40 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 39 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F4.0 29 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +41 0 obj +[40 0 R /XYZ 0 841.89 null] +endobj +42 0 obj +[40 0 R /XYZ 0 721.61 null] +endobj +43 0 obj +[40 0 R /XYZ 0 616.75 null] +endobj +44 0 obj +[40 0 R /XYZ 0 484.11 null] +endobj +45 0 obj +[40 0 R /XYZ 0 309.57 null] +endobj +46 0 obj +<< /Length 7462 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +0.2134 Tw + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +[<636572746966696361746520617574686f726974696573d5206c69737420746f207468652073657276657220616e642077696c6c207665726966792074686520736572766572> -29.7852 -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6497 Tw + +BT +48.24 778.896 Td +/F1.0 10.5 Tf +<6365727469666963617465206973206e6f742076616c69642c207468652053534c20636f6e6e656374696f6e2077696c6c206e6f742062652065737461626c69736865642e20496620766572696669636174696f6e2069732064697361626c65642c20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 763.116 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e2077696c6c206e6576657220626520726566757365642064756520746f20766572696669636174696f6e206661696c7572652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0041 Tw + +BT +48.24 735.336 Td +/F1.0 10.5 Tf +[<546865206f776e2063657274696669636174652873292c20746865206f776e2070726976617465206b> 20.0195 <65792066696c652c20746865206f7074696f6e616c2070617373776f72642070726f74656374696e6720746865206f776e2070726976617465>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3485 Tw + +BT +48.24 719.556 Td +/F1.0 10.5 Tf +[<6b> 20.0195 <65792066696c6520616e6420746865207472757374656420636572746966696361746520617574686f726974696573d5206c6973742066696c652063616e2062652073706563696669656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 703.776 Td +/F1.0 10.5 Tf +<66696c652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8244 Tw + +BT +48.24 675.996 Td +/F1.0 10.5 Tf +[<546865207465737420706f72742077696c6c20636865636b2074686520636f6e73697374656e6379206265747765656e20697473206f776e2070726976617465206b> 20.0195 <657920616e6420746865207075626c6963206b> 20.0195 <657920286261736564206f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 660.216 Td +/F1.0 10.5 Tf +[<746865206f776e20636572746966696361746529206175746f6d61746963616c6c79> 89.8438 <2e2049662074686520636865636b206661696c732c2061207761726e696e672069732069737375656420616e6420657865637574696f6e20636f6e74696e7565732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 620.376 Td +/F2.0 18 Tf +[<4f746865722046> 40.0391 <65617475726573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 592.356 Td +/F1.0 10.5 Tf +[<546865207573616765206f662053534c2073657373696f6e20726573756d7074696f6e2063616e20626520656e61626c65642f64697361626c656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 564.576 Td +/F1.0 10.5 Tf +[<54686520616c6c6f77656420636970686572696e67207375697465732063616e206265207265737472696374656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c207365652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8923 Tw + +BT +48.24 536.796 Td +/F1.0 10.5 Tf +<5468652053534c2072652d68616e647368616b696e672072657175657374732061726520616363657074656420616e642070726f6365737365642c20686f77657665722072652d68616e647368616b696e672063616e6e6f74206265> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 521.016 Td +/F1.0 10.5 Tf +<696e697469617465642066726f6d20746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 481.176 Td +/F2.0 18 Tf +<4c696d69746174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 453.156 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 453.156 Td +/F1.0 10.5 Tf +<53534c2072652d68616e647368616b696e672063616e6e6f7420626520696e697469617465642066726f6d20746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 431.376 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0829 Tw + +BT +66.24 431.376 Td +/F1.0 10.5 Tf +[<546865206f776e2063657274696669636174652066696c652873292c20746865206f776e2070726976617465206b> 20.0195 <65792066696c6520616e6420746865207472757374656420636572746966696361746520617574686f726974696573d5206c6973742066696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 415.596 Td +/F1.0 10.5 Tf +<6d75737420626520696e2050454d20666f726d61742e204f7468657220666f726d61747320617265206e6f7420737570706f727465642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 366.144 Td +/F2.0 27 Tf +[<5468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 319.164 Td +/F2.0 22 Tf +<4f76657276696577> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8055 Tw + +BT +48.24 289.976 Td +/F1.0 10.5 Tf +[<546865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574206973206120636f6d6d6f6e20636f6d706f6e656e7420746861742063616e207365727665206173206120626173697320666f72207465737420706f7274732074686174206e6565642054> 20.0195 <4350>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4859 Tw + +BT +48.24 274.196 Td +/F1.0 10.5 Tf +[<636f6e6e656374696f6e732077697468206f7220776974686f75742053534c206f6e2074686520746f702e205468652054> 20.0195 <435020736f636b> 20.0195 <65742063616e206265207573656420656974686572207769746820626c6f636b696e67206f72>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7511 Tw + +BT +48.24 258.416 Td +/F1.0 10.5 Tf +[<6e6f6e2d626c6f636b696e6720736f636b> 20.0195 <65742e20546865204162737472> 20.0195 <61637420536f636b> 20.0195 <657420696d706c656d656e74732062617369632073656e64696e672c20726563656976696e6720616e6420736f636b> 20.0195 <65742068616e646c696e67>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3834 Tw + +BT +48.24 242.636 Td +/F1.0 10.5 Tf +<726f7574696e65732c20667572746865726d6f726520697420737570706f7274732074686520646576656c6f706d656e74206f66207465737420706f72747320746861742063616e20776f726b206173206120636c69656e74206f722061732061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1198 Tw + +BT +48.24 226.856 Td +/F1.0 10.5 Tf +[<7365727665722e2042> 20.0195 <7920657874656e64696e6720746865204162737472> 20.0195 <61637420536f636b> 20.0195 <657420636f6d706f6e656e742077697468206164646974696f6e616c2066756e6374696f6e616c6974792074686520646573697265642074657374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 211.076 Td +/F1.0 10.5 Tf +<706f72742063616e206265206275696c742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 183.296 Td +/F1.0 10.5 Tf +[<536565207468652066756e6374696f6e696e67206f6620746865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742062656c6f773a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +1.7537 Tc + +0.0 Tc + +1.7537 Tc + +0.0 Tc +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +47 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 46 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F2.0 19 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +48 0 obj +[47 0 R /XYZ 0 644.4 null] +endobj +49 0 obj +<< /Limits [(Abstract_Socket_Test_Port_Parameters_in_the_Test_Port_Configuration_File) (_close_a_client_connection)] +/Names [(Abstract_Socket_Test_Port_Parameters_in_the_Test_Port_Configuration_File) 65 0 R (_1) 160 0 R (_2) 161 0 R (_3) 162 0 R (__anchor-top) 15 0 R (_abbreviations) 156 0 R (_about_this_document) 18 0 R (_adapting_derived_test_ports_to_support_ipv6) 130 0 R (_additional_abstract_socket_test_port_parameters_in_the_test_port_configuration_file_if_the_transport_channel_is_ssl) 71 0 R (_additional_error_messages_in_case_ssl_connections_are_used) 140 0 R (_authentication) 45 0 R (_authentication_flow) 126 0 R (_client_mode) 35 0 R (_client_mode_2) 125 0 R (_close_a_client_connection) 89 0 R] +>> +endobj +50 0 obj +<< /Limits [(_how_to_read_this_document) (_overview)] +/Names [(_how_to_read_this_document) 20 0 R (_installation) 57 0 R (_ipv6_support) 42 0 R (_limitations) 51 0 R (_logging) 37 0 R (_logging_functions) 96 0 R (_module_structure) 28 0 R (_open_a_client_connection) 83 0 R (_open_a_listening_port) 79 0 R (_other_features) 48 0 R (_overview) 53 0 R] +>> +endobj +51 0 obj +[47 0 R /XYZ 0 505.2 null] +endobj +52 0 obj +[47 0 R /XYZ 0 399.78 null] +endobj +53 0 obj +[47 0 R /XYZ 0 347.46 null] +endobj +54 0 obj +<< /Type /XObject +/Subtype /Image +/Height 245 +/Width 379 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Length 4940 +/Filter [/FlateDecode] +/DecodeParms [<< /Predictor 15 +/Colors 3 +/BitsPerComponent 8 +/Columns 379 +>>] +>> +stream +x흭ȵ 1z +2܀h4 + l #DiPcU?.Wϣ-}rwߪwťtq@q@q@q@q@q.Pҿ|x#jQ/3Ԣ6t_ +f4EmSE,Wò޲|.}=y!Ԣ;k)9%bWI&]jDkn8KN%K#ԢW;_8Y˒qVsHJTso+=2XNMjQ[GCUswkZ"N22cq@Zrlj&'x{)|o9zv4Em9'H<~lU9Wg=psqgnT15^q@ZԶG2P\^nmm/@858㜗Y}ӸʋkUݔŷD Wy8hR})yФR0I-jC`AZԆK̃& ݗMjQ/3Ԣ6t_ +f4Em--@ +Ip <H A`!Hut8!Mq6AxH8q $8@ +Ip<8)'yqR N@H8q $8@ +Ip<8)'Bx `^t8!{n!H2$BdH vq Zd]P/ވZԆK̃& ݗMjQ/3Ԣ6t_ +f4EmJ$ 99ZV?̋*9G4Em;<EVP֚8nlNVU8hRtGDg,`~B̲_t>koq@ZԦ{8ع fw8c%rS}a NFc7vMjQ/3Ԣ6t_ +f4EmgKp0ukvW'mBa+Gdg^nM+.e8?~V#,˶u[Yvjl"gY992;`Ǿf(iA mÙ>LXёT˹\*,t5[xLf?u`:J6¤泖ލB$"psAD~dC0M3Esұ9̱|tu{i돘138!Oν`9U^c/>[rZɦ֏qgO`H8LJ"ɝ\-R:g~]ګY] x}0|7}~u 1CeBLYU#OMb*+S|; 8A*?gEskm[-68Rvfߚ8AVᬆkȒ_;7QJ5]*+S|; yqFavڌP3[+GíȽN[+չlo|r +#;GdO|rji$:9kw{|sHUW؋w@ 2f Gp5lŹ27Ț?vGẌ́:;\0|{Z;r' 5[ۈD.$N]W؋w@Ėэo\j_l8˦wY^ /F]b.3M&Kv.hpknd}Zh%ںOc%zex$!X]7J۟W&Mw%%zex$8Ϋ4; +_9l؋w@q%՟u-EٲQI,;K[byG*@wң }}4\qYH~ 6wN$=V`yg!=YR1qoT= 8hBzqhb)6y:Sr噗S׫JH\*,qz3?:% ք~qnAqɮF7efN T!#`k;*8_=Ŋ솛79Xj9xpmSGf?2~%qS|*1>Gn㫛Y9˝⻎{G/Wm9VU0E+YM^0 +VU@Z//vljvX¥sLnmjl>rȃ>L;b-Pл{ϝ){a< ej!_ +#gvDtw^B͎c#cȸ[Yfp;n.Dɾ赪}8]uKS~W;d,XqhyWǫ'}Q~jv&2h)%ϭ¥oř@H{pmY&& (Bzs t=W8h9\8B $08BJs)s t=W8h9\8B $0> +stream +q + +1.7537 Tc + +0.0 Tc + +1.7537 Tc + +0.0 Tc +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +1.7537 Tc + +q +284.25 0.0 0.0 183.75 48.24 622.14 cm +/I1 Do +Q + +BT +48.24 625.206 Td +ET + + +0.0 Tc +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 581.094 Td +/F2.0 22 Tf +<496e7374616c6c6174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2902 Tw + +BT +48.24 551.906 Td +/F1.0 10.5 Tf +[<53696e636520746865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574207465737420706f7274206973207573656420617320612070617274206f6620746865205454> 20.0195 <434e2d33207465737420656e7669726f6e6d656e742074686973207265717569726573>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 536.126 Td +/F1.0 10.5 Tf +[<5454> 20.0195 <434e2d332054> 29.7852 <657374204578656375746f7220746f20626520696e7374616c6c6564206265666f726520616e> 20.0195 <79206f706572> 20.0195 <6174696f6e206f6620746865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574207465737420706f72742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6975 Tw + +BT +48.24 508.346 Td +/F1.0 10.5 Tf +[<54686520636f6d70696c6174696f6e206f662053534c2072656c6174656420636f64652070617274732063616e2062652064697361626c65642062> 20.0195 <79206e6f7420646566696e696e672074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.6975 Tw + +BT +445.6011 508.346 Td +/F3.0 10.5 Tf +<41535f5553455f53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6975 Tw + +BT +498.1011 508.346 Td +/F1.0 10.5 Tf +<206d6163726f20696e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 492.566 Td +/F1.0 10.5 Tf +<74686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.93 492.566 Td +/F4.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +108.6673 492.566 Td +/F1.0 10.5 Tf +<20647572696e672074686520636f6d70696c6174696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7126 Tw + +BT +48.24 464.786 Td +/F1.0 10.5 Tf +[<5768656e206275696c64696e67207468652065786563757461626c65207465737420737569746520746865206c696272> 20.0195 <617269657320636f6d70696c656420666f7220746865204f70656e53534c20746f6f6c6b69742028696620746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.9293 Tw + +BT +48.24 449.006 Td +/F3.0 10.5 Tf +<41535f5553455f53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9293 Tw + +BT +100.74 449.006 Td +/F1.0 10.5 Tf +[<206d6163726f20697320646566696e6564292073686f756c6420616c736f206265206c696e6b> 20.0195 <656420696e746f207468652065786563757461626c6520616c6f6e67207769746820746865205454> 20.0195 <434e2d332054> 29.7852 <657374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2678 Tw + +BT +48.24 433.226 Td +/F1.0 10.5 Tf +[<4578656375746f722c20692e652eca746865204f70656e53534c206c696272> 20.0195 <61726965732073686f756c6420626520616464656420746f2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2678 Tw + +BT +371.7029 433.226 Td +/F4.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2678 Tw + +BT +413.4402 433.226 Td +/F1.0 10.5 Tf +[<2067656e6572> 20.0195 <617465642062> 20.0195 <792074686520544954> 60.0586 <414e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4908 Tw + +BT +48.24 417.446 Td +/F1.0 10.5 Tf +<6578656375746f722028736565206578616d706c6520696e2073656374696f6e20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +0.4908 Tw + +BT +216.0478 417.446 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61726e696e67204d6573736167657320696e20636173652053534c20436f6e6e656374696f6e73204172652055736564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4908 Tw + +BT +482.3947 417.446 Td +/F1.0 10.5 Tf +[<292e2054> 29.7852 <6f20636f6d70696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1968 Tw + +BT +48.24 401.666 Td +/F1.0 10.5 Tf +<74686520736f757263652066696c657320796f752077696c6c20616c736f206e65656420746865204f70656e53534c20646576656c6f70657220746f6f6c6b697420776869636820636f6e7461696e7320746865206865616465722066696c6573> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3557 Tw + +BT +48.24 385.886 Td +/F1.0 10.5 Tf +[<757365642062> 20.0195 <792074686520736f757263652e204966205368617265204f626a656374732028>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3557 Tw + +BT +233.9022 385.886 Td +/F4.0 10.5 Tf +<2e736f> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3557 Tw + +BT +247.4157 385.886 Td +/F1.0 10.5 Tf +<2920617265207573656420696e20746865204f70656e53534c20746f6f6c6b69742c20746f2072756e207468652065786563757461626c652c20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 370.106 Td +/F1.0 10.5 Tf +[<70617468206f6620746865204f70656e53534c206c696272> 20.0195 <6172696573206d75737420626520616464656420746f2074686520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +304.5238 370.106 Td +/F3.0 10.5 Tf +<4c445f4c4942524152595f50415448> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +383.2738 370.106 Td +/F1.0 10.5 Tf +<20656e7669726f6e6d656e74207661726961626c652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.5 w +0.9333 0.9333 0.9333 SCN +102.4695 354.29 m +102.4695 298.95 l +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.3451 322.546 Td +/F2.0 10.5 Tf +[<4e4f> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0422 Tw + +BT +114.4695 338.326 Td +/F1.0 10.5 Tf +<496620796f7520617265207573696e6720746865207465737420706f7274206f6e20536f6c617269732c20796f75206861766520746f207365742074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.0422 Tw + +BT +424.047 338.326 Td +/F3.0 10.5 Tf +<504c4154464f524d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0422 Tw + +BT +466.047 338.326 Td +/F1.0 10.5 Tf +<206d6163726f20746f20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2581 Tw + +BT +114.4695 322.546 Td +/F1.0 10.5 Tf +<70726f7065722076616c75652e204974207368616c6c20626520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2581 Tw + +BT +237.3396 322.546 Td +/F5.0 10.5 Tf +<534f4c41524953> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2581 Tw + +BT +274.0896 322.546 Td +/F1.0 10.5 Tf +<20696e2063617365206f6620536f6c617269732036202853756e4f5320352e362920616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2581 Tw + +BT +455.5428 322.546 Td +/F5.0 10.5 Tf +<534f4c4152495338> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2581 Tw + +BT +497.5428 322.546 Td +/F1.0 10.5 Tf +<20696e2063617365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +114.4695 306.766 Td +/F1.0 10.5 Tf +<6f6620536f6c617269732038202853756e4f5320352e38292e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 258.654 Td +/F2.0 22 Tf +[<436f6e6669677572> 20.0195 <6174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2614 Tw + +BT +48.24 229.466 Td +/F1.0 10.5 Tf +[<5468652065786563757461626c6520746573742070726f6772> 20.0195 <616d206265686176696f722069732064657465726d696e656420766961207468652072756e2d74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652e20546869732069732061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9451 Tw + +BT +48.24 213.686 Td +/F1.0 10.5 Tf +<73696d706c6520746578742066696c652c20776869636820636f6e7461696e7320766172696f75732073656374696f6e732028666f72206578616d706c652c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9451 Tw + +BT +376.4517 213.686 Td +/F3.0 10.5 Tf +<5b54455354504f52545f504152414d45544552535d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9451 Tw + +BT +486.7017 213.686 Td +/F1.0 10.5 Tf +<292061667465722065616368> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0496 Tw + +BT +48.24 197.906 Td +/F1.0 10.5 Tf +[<6f746865722e2054686520757375616c20737566666978206f6620636f6e6669677572> 20.0195 <6174696f6e2066696c657320697320>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0496 Tw + +BT +281.348 197.906 Td +/F4.0 10.5 Tf +<2e6366672e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0496 Tw + +BT +300.8675 197.906 Td +/F1.0 10.5 Tf +[<2046> 40.0391 <6f72206675727468657220696e666f726d6174696f6e206f6e2074686520636f6e6669677572> 20.0195 <6174696f6e2066696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 182.126 Td +/F1.0 10.5 Tf +<73656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +66.93 182.126 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +80.3385 182.126 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1061 Tw + +BT +48.24 154.346 Td +/F1.0 10.5 Tf +[<546865206c697374656420706f727420706172> 20.0195 <616d65746572732028>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +0.1061 Tw + +BT +187.6001 154.346 Td +/F1.0 10.5 Tf +[<4162737472> 20.0195 <61637420536f636b> 20.0195 <65742054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e207468652054> 29.7852 <65737420506f727420436f6e6669677572> 20.0195 <6174696f6e2046696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1061 Tw + +BT +543.407 154.346 Td +/F1.0 10.5 Tf +<29> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.5246 Tw + +BT +48.24 138.566 Td +/F1.0 10.5 Tf +[<617265206d616e616765642062> 20.0195 <792064656661756c742062> 20.0195 <7920746865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742e2054686579206861766520746f20626520646566696e6564206f6e6c7920696e20746865205454> 20.0195 <434e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0894 Tw + +BT +48.24 122.786 Td +/F1.0 10.5 Tf +[<636f6e6669677572> 20.0195 <6174696f6e2066696c65732e2054686f7567682c206966204162737472> 20.0195 <61637420536f636b> 20.0195 <6574d57320706172> 20.0195 <616d657465722068616e646c696e67206973206e6f7420617070726f70726961746520666f7220796f7572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7407 Tw + +BT +48.24 107.006 Td +/F1.0 10.5 Tf +<6170706c69636174696f6e2c20796f752063616e2069676e6f726520697420636f6d706c6574656c7920616e642068616e646c6520746865207661726961626c6573206469726563746c792066726f6d20796f757220706f72742e204974206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1341 Tw + +BT +48.24 91.226 Td +/F1.0 10.5 Tf +[<7265636f6d6d656e64656420746f20696d706c656d656e7420796f7572206f776e207465737420706f727420706172> 20.0195 <616d65746572206e616d652070617373696e672066756e6374696f6e7320736f207468617420796f75722074657374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 75.446 Td +/F1.0 10.5 Tf +[<706f72742077696c6c206e6f7420646570656e64206f6e20746865207465737420706f727420706172> 20.0195 <616d65746572206e616d657320696e20746865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +56 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 55 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/XObject << /I1 54 0 R +/Stamp1 288 0 R +>> +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F4.0 29 0 R +/F5.0 59 0 R +>> +>> +/Annots [58 0 R 61 0 R 62 0 R] +>> +endobj +57 0 obj +[56 0 R /XYZ 0 609.39 null] +endobj +58 0 obj +<< /Border [0 0 0] +/Dest (warning_messages_in_case_SSL_connections_are_used) +/Subtype /Link +/Rect [216.0478 414.38 482.3947 428.66] +/Type /Annot +>> +endobj +59 0 obj +<< /Type /Font +/BaseFont /79e08b+mplus1mn-italic +/Subtype /TrueType +/FontDescriptor 371 0 R +/FirstChar 32 +/LastChar 255 +/Widths 373 0 R +/ToUnicode 372 0 R +>> +endobj +60 0 obj +[56 0 R /XYZ 0 286.95 null] +endobj +61 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [66.93 179.06 80.3385 193.34] +/Type /Annot +>> +endobj +62 0 obj +<< /Border [0 0 0] +/Dest (Abstract_Socket_Test_Port_Parameters_in_the_Test_Port_Configuration_File) +/Subtype /Link +/Rect [187.6001 151.28 543.407 165.56] +/Type /Annot +>> +endobj +63 0 obj +<< /Length 18449 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 786.666 Td +/F2.0 18 Tf +[<4162737472> 20.0195 <61637420536f636b> 20.0195 <65742054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e207468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 762.186 Td +/F2.0 18 Tf +[<436f6e6669677572> 20.0195 <6174696f6e2046696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6694 Tw + +BT +48.24 734.166 Td +/F1.0 10.5 Tf +<496e2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.6694 Tw + +BT +83.6142 734.166 Td +/F3.0 10.5 Tf +<5b54455354504f52545f504152414d45544552535d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6694 Tw + +BT +193.8642 734.166 Td +/F1.0 10.5 Tf +[<2073656374696f6e2074686520666f6c6c6f77696e6720706172> 20.0195 <616d65746572732063616e2062652073657420666f7220746865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2056 Tw + +BT +48.24 718.386 Td +/F1.0 10.5 Tf +[<6261736564207465737420706f72742e2054686520706172> 20.0195 <616d65746572206e616d65732061726520636173652d73656e7369746976653b2074686520706172> 20.0195 <616d657465722076616c75657320617265206e6f7420636173652d>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 702.606 Td +/F1.0 10.5 Tf +<73656e7369746976652028692e652e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +115.482 702.606 Td +/F5.0 10.5 Tf +<2259455322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +141.732 702.606 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +147.0765 702.606 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +173.3265 702.606 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +178.671 702.606 Td +/F5.0 10.5 Tf +<2259657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +204.921 702.606 Td +/F1.0 10.5 Tf +<2076616c75657320617265206964656e746963616c292e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 668.106 Td +/F2.0 13 Tf +[<4162737472> 20.0195 <61637420536f636b> 20.0195 <65742054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e207468652054> 29.7852 <65737420506f727420436f6e6669677572> 20.0195 <6174696f6e2046696c65206966>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 650.426 Td +/F2.0 13 Tf +[<746865205472> 20.0195 <616e73706f7274204368616e6e656c2069732054> 20.0195 <43502f4950>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 623.866 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 626.05 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5016 Tw + +BT +66.24 599.866 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207768657468657220746865204162737472> 20.0195 <61637420536f636b> 20.0195 <657420697320636f6e74726f6c6c6564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 584.086 Td +/F1.0 10.5 Tf +[<62> 20.0195 <7920636f6e6e656374696f6e20415350732e205468652064656661756c742076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +269.3938 584.086 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +290.3938 584.086 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2202 Tw + +BT +66.24 556.306 Td +/F1.0 10.5 Tf +<4966207468652076616c756520697320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2202 Tw + +BT +137.2924 556.306 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2202 Tw + +BT +163.5424 556.306 Td +/F1.0 10.5 Tf +[<2c207468652066756e6374696f6e616c6974696573206f6620746865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574206861766520746f20626520636f6e74726f6c6c65642062> 20.0195 <792063616c6c696e6720697473>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +20.1717 Tw + +BT +66.24 540.526 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +20.1717 Tw + +BT +181.74 540.526 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +20.1717 Tw + +BT +207.2563 540.526 Td +/F3.0 10.5 Tf +<6f70656e5f6c697374656e5f706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +20.1717 Tw + +BT +291.2563 540.526 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +20.1717 Tw + +BT +316.7725 540.526 Td +/F3.0 10.5 Tf +<72656d6f76655f636c69656e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +20.1717 Tw + +BT +385.0225 540.526 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +20.1717 Tw + +BT +410.5388 540.526 Td +/F3.0 10.5 Tf +<72656d6f76655f616c6c5f636c69656e7473> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +20.1717 Tw + +BT +505.0388 540.526 Td +/F1.0 10.5 Tf +<20616e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.088 Tw + +BT +66.24 524.746 Td +/F3.0 10.5 Tf +<636c6f73655f6c697374656e5f706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.088 Tw + +BT +155.49 524.746 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e732e20546865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742077696c6c206e6f742063726561746520616e> 20.0195 <7920636f6e6e656374696f6e206f72206c697374656e696e6720706f7274>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9914 Tw + +BT +66.24 508.966 Td +/F1.0 10.5 Tf +<7768656e2063616c6c696e672074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9914 Tw + +BT +157.7786 508.966 Td +/F3.0 10.5 Tf +<6d61705f75736572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9914 Tw + +BT +199.7786 508.966 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2e205573696e67207468697320706172> 20.0195 <616d657465722c206d6f7265207468616e206f6e6520636f6e6e656374696f6e2063616e206265>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.9536 Tw + +BT +66.24 493.186 Td +/F1.0 10.5 Tf +[<6f70656e656420696e20636c69656e74206d6f6465206f706572> 20.0195 <6174696f6e2e20546865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742077696c6c2063616c6c2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.9536 Tw + +BT +449.915 493.186 Td +/F3.0 10.5 Tf +<6c697374656e5f706f72745f6f70656e6564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.9536 Tw + +BT +544.415 493.186 Td +/F1.0 10.5 Tf +<2c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.5865 Tw + +BT +66.24 477.406 Td +/F3.0 10.5 Tf +<636c69656e745f636f6e6e656374696f6e5f6f70656e6564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.5865 Tw + +BT +192.24 477.406 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.5865 Tw + +BT +202.171 477.406 Td +/F3.0 10.5 Tf +<706565725f636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.5865 Tw + +BT +275.671 477.406 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.5865 Tw + +BT +309.393 477.406 Td +/F3.0 10.5 Tf +<706565725f646973636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.5865 Tw + +BT +398.643 477.406 Td +/F1.0 10.5 Tf +<2066756e6374696f6e73206f6620746865207465737420706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3694 Tw + +BT +66.24 461.626 Td +/F1.0 10.5 Tf +[<696d706c656d656e74696e67206974207768656e20636f72726573706f6e64696e67206576656e74732068617070656e2e205468697320616c6c6f7773207465737420706f72747320616e64205454> 20.0195 <434e20636f646520746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 445.846 Td +/F1.0 10.5 Tf +[<6469726563746c792068616e646c652054> 20.0195 <435020636f6e6e656374696f6e20696e6974696174696f6e7320616e64206576656e74732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 418.066 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 420.25 Td +/F3.0 10.5 Tf +<7365727665725f6d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.373 Tw + +BT +66.24 394.066 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207768657468657220746865207465737420706f7274207368616c6c20616374206173206120736572766572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2308 Tw + +BT +66.24 378.286 Td +/F1.0 10.5 Tf +<6f72206120636c69656e742e204966207468652076616c756520697320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2308 Tw + +BT +193.5718 378.286 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2308 Tw + +BT +219.8218 378.286 Td +/F1.0 10.5 Tf +<2c20746865207465737420706f72742077696c6c206163742061732061207365727665722e204966207468652076616c756520697320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2308 Tw + +BT +459.7122 378.286 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2308 Tw + +BT +480.7122 378.286 Td +/F1.0 10.5 Tf +<2c20746865207465737420706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +5.6539 Tw + +BT +66.24 362.506 Td +/F1.0 10.5 Tf +<77696c6c20616374206173206120636c69656e742e205468652064656661756c742076616c756520697320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +5.6539 Tw + +BT +312.0158 362.506 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +5.6539 Tw + +BT +333.0158 362.506 Td +/F1.0 10.5 Tf +[<202e2054686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e67206966>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.6508 Tw + +BT +66.24 346.726 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.6508 Tw + +BT +165.99 346.726 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.6508 Tw + +BT +219.3597 346.726 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.6508 Tw + +BT +245.6097 346.726 Td +/F1.0 10.5 Tf +<20626563617573652074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.6508 Tw + +BT +317.822 346.726 Td +/F3.0 10.5 Tf +<6f70656e5f6c697374656e5f706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.6508 Tw + +BT +401.822 346.726 Td +/F1.0 10.5 Tf +<20696e6974696174657320746865206c697374656e696e67206f6e2061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 330.946 Td +/F1.0 10.5 Tf +<73657276657220706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 303.166 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 305.35 Td +/F3.0 10.5 Tf +<736f636b65745f646562756767696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6769 Tw + +BT +66.24 279.166 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f20656e61626c65206465627567206c6f6767696e672072656c6174656420746f20746865207472> 20.0195 <616e73706f7274>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 263.386 Td +/F1.0 10.5 Tf +[<6368616e6e656c202854> 20.0195 <435020736f636b> 20.0195 <657420616e642053534c206f706572> 20.0195 <6174696f6e732920696e20746865207465737420706f72742e205468652064656661756c742076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +449.6574 263.386 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +470.6574 263.386 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 235.606 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 237.79 Td +/F3.0 10.5 Tf +<68616c745f6f6e5f636f6e6e656374696f6e5f7265736574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4512 Tw + +BT +66.24 211.606 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207768657468657220746865207465737420706f7274207368616c6c2073746f70206f6e206572726f7273>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6674 Tw + +BT +66.24 195.826 Td +/F1.0 10.5 Tf +<6f6363757272656420647572696e6720636f6e6e656374696f6e2073657475702028696e636c7564696e6720636f6e6e656374696f6e207265667573696e67292c2073656e64696e6720616e6420726563656976696e672c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9639 Tw + +BT +66.24 180.046 Td +/F1.0 10.5 Tf +<646973636f6e6e656374696f6e2028696e636c7564696e672074686520646574656374696f6e206f662074686520646973636f6e6e656374696f6e292e205468652076616c756520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9639 Tw + +BT +440.0858 180.046 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9639 Tw + +BT +466.3358 180.046 Td +/F1.0 10.5 Tf +<206d65616e73207468652074657374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2169 Tw + +BT +66.24 164.266 Td +/F1.0 10.5 Tf +<706f72742077696c6c2073746f702c207468652076616c756520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2169 Tw + +BT +187.9905 164.266 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2169 Tw + +BT +208.9905 164.266 Td +/F1.0 10.5 Tf +<206d65616e7320746861742069742077696c6c206e6f742073746f70206f6e2073756368206572726f72732e205468652064656661756c742076616c756520697320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2169 Tw + +BT +526.04 164.266 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2169 Tw + +BT +547.04 164.266 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 148.486 Td +/F1.0 10.5 Tf +<696e20736572766572206d6f646520616e6420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +166.3155 148.486 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +192.5655 148.486 Td +/F1.0 10.5 Tf +<20696e20636c69656e74206d6f64652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +66.24 120.706 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e6720696620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +274.7251 120.706 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +374.4751 120.706 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +443.4969 120.706 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +469.7469 120.706 Td +/F1.0 10.5 Tf +<2c206265636175736520746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 104.926 Td +/F3.0 10.5 Tf +<706565725f646973636f6e6e6563746564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +155.49 104.926 Td +/F1.0 10.5 Tf +<2066756e6374696f6e206f6620746865207465737420706f72742069732063616c6c6564206f6e20746865206576656e742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 77.146 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 79.33 Td +/F3.0 10.5 Tf +<6e61676c696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7149 Tw + +BT +66.24 53.146 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207768657468657220636f6e636174656e6174696f6e206f6363757273206f6e2054> 20.0195 <4350>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<36> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +64 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 63 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F5.0 59 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +65 0 obj +[64 0 R /XYZ 0 841.89 null] +endobj +66 0 obj +[64 0 R /XYZ 0 686.79 null] +endobj +67 0 obj +<< /Length 16555 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +66.24 794.676 Td +/F1.0 10.5 Tf +[<6c61> 20.0195 <7965722e2049662076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +148.4968 794.676 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +174.7468 794.676 Td +/F1.0 10.5 Tf +<2c20636f6e636174656e6174696f6e20697320656e61626c65642e2049662076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +361.4053 794.676 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +382.4053 794.676 Td +/F1.0 10.5 Tf +<2c2069742069732064697361626c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.5 w +0.9333 0.9333 0.9333 SCN +120.4695 778.86 m +120.4695 739.3 l +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +78.3451 755.006 Td +/F2.0 10.5 Tf +[<4e4f> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9668 Tw + +BT +132.4695 762.896 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.9668 Tw + +BT +154.8563 762.896 Td +/F3.0 10.5 Tf +<6e61676c696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9668 Tw + +BT +191.6063 762.896 Td +/F1.0 10.5 Tf +<2073657474696e672069732076616c6964206f6e6c7920666f7220746865206f7574676f696e67206d657373616765732e2054686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.9668 Tw + +BT +460.0683 762.896 Td +/F3.0 10.5 Tf +<6e61676c696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9668 Tw + +BT +496.8183 762.896 Td +/F1.0 10.5 Tf +<20666f7220746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +132.4695 747.116 Td +/F1.0 10.5 Tf +[<696e636f6d696e67206d65737361676573207368616c6c206265207365742062> 20.0195 <79207468652073656e64696e67207061727479> 89.8438 <2e205468652064656661756c742076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +497.4299 747.116 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +518.4299 747.116 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 715.336 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 717.52 Td +/F3.0 10.5 Tf +<72656d6f74655f61646472657373> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2065 Tw + +BT +66.24 691.336 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465722063616e206265207573656420746f20737065636966792074686520736572766572> -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 675.556 Td +/F1.0 10.5 Tf +<7573656420696e20736572766572206d6f64652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +66.24 647.776 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e6720696620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +274.7251 647.776 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +374.4751 647.776 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +443.4969 647.776 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +469.7469 647.776 Td +/F1.0 10.5 Tf +<2c206265636175736520746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 631.996 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +181.74 631.996 Td +/F1.0 10.5 Tf +<2066756e6374696f6e207265636569766573207468652072656d6f746520616e64206f7074696f6e616c6c7920746865206c6f63616c20616464726573732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 604.216 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 606.4 Td +/F3.0 10.5 Tf +<72656d6f74655f706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4814 Tw + +BT +66.24 580.216 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465722063616e206265207573656420746f20737065636966792074686520736572766572> -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 564.436 Td +/F1.0 10.5 Tf +<6e6f74207573656420696e20736572766572206d6f64652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +66.24 536.656 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e6720696620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +274.7251 536.656 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +374.4751 536.656 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +443.4969 536.656 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +469.7469 536.656 Td +/F1.0 10.5 Tf +<2c206265636175736520746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 520.876 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +181.74 520.876 Td +/F1.0 10.5 Tf +<2066756e6374696f6e207265636569766573207468652072656d6f746520616e64206f7074696f6e616c6c7920746865206c6f63616c20616464726573732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 493.096 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 495.28 Td +/F3.0 10.5 Tf +<6c6f63616c5f706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6334 Tw + +BT +66.24 469.096 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465722063616e206265207573656420746f20737065636966792074686520706f72742077686572652074686520736572766572206973206c697374656e696e6720666f7220636f6e6e656374696f6e732e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 453.316 Td +/F1.0 10.5 Tf +<4d616e6461746f727920696e20736572766572206d6f646520616e64206f7074696f6e616c20696e20636c69656e74206d6f64652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 425.536 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465722073657276657320617320612064656661756c7420696620>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +247.6693 425.536 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +347.4193 425.536 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +390.1858 425.536 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +416.4358 425.536 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 397.756 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 399.94 Td +/F3.0 10.5 Tf +<61695f66616d696c79> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.316 Tw + +BT +66.24 373.756 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465722063616e206265207573656420746f20737065636966792074686520616464726573732066616d696c7920746f20757365207768656e206f70656e696e67206c697374656e696e6720706f727473206f72>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0646 Tw + +BT +66.24 357.976 Td +/F1.0 10.5 Tf +<6372656174696e6720636c69656e7420636f6e6e656374696f6e732e204966206974732076616c75652069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.0646 Tw + +BT +301.9481 357.976 Td +/F5.0 10.5 Tf +<224950763422> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0646 Tw + +BT +333.4481 357.976 Td +/F1.0 10.5 Tf +<206f7220> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.0646 Tw + +BT +350.0204 357.976 Td +/F5.0 10.5 Tf +<2241465f494e455422> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0646 Tw + +BT +397.2704 357.976 Td +/F1.0 10.5 Tf +<206f6e6c792049507634206164647265737365732061726520757365642e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.631 Tw + +BT +66.24 342.196 Td +/F1.0 10.5 Tf +<49662069742069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.631 Tw + +BT +129.6543 342.196 Td +/F5.0 10.5 Tf +<224950763622> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.631 Tw + +BT +161.1543 342.196 Td +/F1.0 10.5 Tf +<206f7220> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.631 Tw + +BT +178.8593 342.196 Td +/F5.0 10.5 Tf +<2241465f494e45543622> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.631 Tw + +BT +231.3593 342.196 Td +/F1.0 10.5 Tf +<206f6e6c79204950763620636f6e6e656374696f6e732061726520616c6c6f7765642e205468652076616c75657320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.631 Tw + +BT +472.0795 342.196 Td +/F5.0 10.5 Tf +<6022554e535045432260> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.631 Tw + +BT +524.5795 342.196 Td +/F1.0 10.5 Tf +<20616e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.0174 Tw + +BT +66.24 326.416 Td +/F3.0 10.5 Tf +<2241465f554e5350454322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0174 Tw + +BT +123.99 326.416 Td +/F1.0 10.5 Tf +<2063616e20626520757365642069662074686520616464726573732066616d696c79206973206e6f74207370656369666965642e2054686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.0174 Tw + +BT +406.9102 326.416 Td +/F5.0 10.5 Tf +<22554e5350454322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0174 Tw + +BT +448.9102 326.416 Td +/F1.0 10.5 Tf +<2076616c756520616c6c6f7773207573696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0689 Tw + +BT +66.24 310.636 Td +/F1.0 10.5 Tf +<4950763420616e64204950763620616464726573736573206174207468652073616d652074696d652e205468652073656c656374696f6e206973206d616465206175746f6d61746963616c6c7920646570656e64696e67206f6e20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 294.856 Td +/F1.0 10.5 Tf +<61637475616c2076616c7565206f6620746865206c6f63616c20616e642072656d6f7465206164647265737365732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 267.076 Td +/F1.0 10.5 Tf +[<5468697320706172> 20.0195 <616d65746572206973206f7074696f6e616c2e205468652064656661756c742076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +303.8968 267.076 Td +/F5.0 10.5 Tf +<2241465f554e5350454322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +361.6468 267.076 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 239.296 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 241.48 Td +/F3.0 10.5 Tf +<7365727665725f6261636b6c6f67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2175 Tw + +BT +66.24 215.296 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465722063616e206265207573656420746f207370656369667920746865206e756d626572206f6620616c6c6f7765642070656e64696e6720287175657565642920636f6e6e656374696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1006 Tw + +BT +66.24 199.516 Td +/F1.0 10.5 Tf +<7265717565737473206f6e2074686520706f72742074686520736572766572206c697374656e732e204974206973206f7074696f6e616c20696e20736572766572206d6f646520616e64206e6f74207573656420696e20636c69656e74206d6f64652e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 183.736 Td +/F1.0 10.5 Tf +<5468652064656661756c742076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +166.851 183.736 Td +/F5.0 10.5 Tf +<223122> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +182.601 183.736 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 155.956 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 158.14 Td +/F3.0 10.5 Tf +<5443505f7265636f6e6e6563745f617474656d707473> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2749 Tw + +BT +66.24 131.956 Td +/F1.0 10.5 Tf +[<5468697320706172> 20.0195 <616d657465722063616e206265207573656420746f207370656369667920746865206d6178696d756d206e756d626572206f662074696d65732074686520636f6e6e656374696f6e206973>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 116.176 Td +/F1.0 10.5 Tf +[<617474656d7074656420746f2062652065737461626c697368656420696e2054> 20.0195 <4350207265636f6e6e656374206d6f64652e205468652064656661756c742076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +427.4398 116.176 Td +/F5.0 10.5 Tf +<223522> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +443.1898 116.176 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +66.24 88.396 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e6720696620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +274.7251 88.396 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +374.4751 88.396 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +443.4969 88.396 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +469.7469 88.396 Td +/F1.0 10.5 Tf +<2c206265636175736520746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1027 Tw + +BT +66.24 72.616 Td +/F3.0 10.5 Tf +<706565725f646973636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1027 Tw + +BT +155.49 72.616 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2069732063616c6c6564207768656e20746865206576656e742068617070656e732c20616e64206974d57320757020746f20746865207465737420706f7274206f72205454> 20.0195 <434e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 56.836 Td +/F1.0 10.5 Tf +<636f646520686f7720746f20636f6e74696e75652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<37> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +68 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 67 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F5.0 59 0 R +/F2.0 19 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +69 0 obj +<< /Length 13835 +>> +stream +q + +-0.5 Tc +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +56.8805 793.926 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 796.11 Td +/F3.0 10.5 Tf +<5443505f7265636f6e6e6563745f64656c6179> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8156 Tw + +BT +66.24 769.926 Td +/F1.0 10.5 Tf +[<5468697320706172> 20.0195 <616d657465722063616e206265207573656420746f2073706563696679207468652074696d652028696e207365636f6e64732920746865207465737420706f7274207761697473206265747765656e20746f2054> 20.0195 <4350>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 754.146 Td +/F1.0 10.5 Tf +<7265636f6e6e656374696f6e20617474656d70742e205468652064656661756c742076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +279.8625 754.146 Td +/F5.0 10.5 Tf +<223122> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +295.6125 754.146 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +66.24 726.366 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e6720696620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +274.7251 726.366 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +374.4751 726.366 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +443.4969 726.366 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +469.7469 726.366 Td +/F1.0 10.5 Tf +<2c206265636175736520746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1027 Tw + +BT +66.24 710.586 Td +/F3.0 10.5 Tf +<706565725f646973636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1027 Tw + +BT +155.49 710.586 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2069732063616c6c6564207768656e20746865206576656e742068617070656e732c20616e64206974d57320757020746f20746865207465737420706f7274206f72205454> 20.0195 <434e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 694.806 Td +/F1.0 10.5 Tf +<636f646520686f7720746f20636f6e74696e75652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 667.026 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 669.21 Td +/F3.0 10.5 Tf +<636c69656e745f5443505f7265636f6e6e656374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3739 Tw + +BT +66.24 643.026 Td +/F1.0 10.5 Tf +[<496620746865207465737420706f727420697320696e20636c69656e74206d6f646520616e642074686520636f6e6e656374696f6e2077617320696e7465727275707465642062> 20.0195 <7920746865206f7468657220736964652c20697420747269657320746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 627.246 Td +/F1.0 10.5 Tf +<7265636f6e6e65637420616761696e2e205468652064656661756c742076616c75652069732060606e6f27272e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +66.24 599.466 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e6720696620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +274.7251 599.466 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +374.4751 599.466 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +443.4969 599.466 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +469.7469 599.466 Td +/F1.0 10.5 Tf +<2c206265636175736520746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1027 Tw + +BT +66.24 583.686 Td +/F3.0 10.5 Tf +<706565725f646973636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1027 Tw + +BT +155.49 583.686 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2069732063616c6c6564207768656e20746865206576656e742068617070656e732c20616e64206974d57320757020746f20746865207465737420706f7274206f72205454> 20.0195 <434e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 567.906 Td +/F1.0 10.5 Tf +<636f646520686f7720746f20636f6e74696e75652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 540.126 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 542.31 Td +/F3.0 10.5 Tf +<7573655f6e6f6e5f626c6f636b696e675f736f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5441 Tw + +BT +66.24 516.126 Td +/F1.0 10.5 Tf +[<5468697320706172> 20.0195 <616d657465722063616e206265207573656420746f20737065636966792077686574686572207468652054> 29.7852 <65737420506f7274207368616c6c2075736520626c6f636b696e67206f72206e6f6e2d626c6f636b696e67>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3068 Tw + +BT +66.24 500.346 Td +/F1.0 10.5 Tf +[<54> 20.0195 <435020736f636b> 20.0195 <65742e205573696e67207468697320706172> 20.0195 <616d657465722c2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.3068 Tw + +BT +255.033 500.346 Td +/F3.0 10.5 Tf +<73656e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3068 Tw + +BT +276.033 500.346 Td +/F1.0 10.5 Tf +[<205454> 20.0195 <434e2d33206f706572> 20.0195 <6174696f6e2077696c6c20626c6f636b20756e74696c2074686520646174612069732073656e742c20627574>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 484.566 Td +/F1.0 10.5 Tf +[<616e20616c676f726974686d20697320696d706c656d656e74656420746f2061766f69642054> 20.0195 <435020646561646c6f636b2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 456.786 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c207468652064656661756c742076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +298.6993 456.786 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +319.6993 456.786 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 416.286 Td +/F2.0 13 Tf +[<41> 20.0195 <64646974696f6e616c204162737472> 20.0195 <61637420536f636b> 20.0195 <65742054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e207468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 398.606 Td +/F2.0 13 Tf +[<436f6e6669677572> 20.0195 <6174696f6e2046696c6520696620746865205472> 20.0195 <616e73706f7274204368616e6e656c2069732053534c>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 372.046 Td +/F1.0 10.5 Tf +[<546865736520706172> 20.0195 <616d657465727320617661696c61626c65206f6e6c7920696620>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +223.3168 372.046 Td +/F3.0 10.5 Tf +<41535f5553455f53534c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +275.8168 372.046 Td +/F1.0 10.5 Tf +<206d6163726f20697320646566696e656420647572696e6720636f6d70696c6174696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 344.266 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 346.45 Td +/F3.0 10.5 Tf +<73736c5f7573655f73736c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5944 Tw + +BT +66.24 320.266 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207768657468657220746f207573652053534c206f6e2074686520746f70206f66207468652054> 20.0195 <4350>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 304.486 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e206f72206e6f742e205468652064656661756c742076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +260.595 304.486 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +281.595 304.486 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 276.706 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 278.89 Td +/F3.0 10.5 Tf +<73736c5f7665726966795f6365727469666963617465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.642 Tw + +BT +66.24 252.706 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2074656c6c20746865207465737420706f7274207768657468657220746f20636865636b20746865206365727469666963617465>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.042 Tw + +BT +66.24 236.926 Td +/F1.0 10.5 Tf +<6f6620746865206f7468657220736964652e20496620697420697320646566696e656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.042 Tw + +BT +232.9368 236.926 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.042 Tw + +BT +259.1868 236.926 Td +/F1.0 10.5 Tf +<2c20746865207465737420706f72742077696c6c20717565727920616e6420636865636b207468652063657274696669636174652e20496620746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2606 Tw + +BT +66.24 221.146 Td +/F1.0 10.5 Tf +[<6365727469666963617465206973206e6f742076616c69642028692e652eca746865207075626c696320616e642070726976617465206b> 20.0195 <65797320646f206e6f74206d61746368292c2069742077696c6c206578697420776974682061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.403 Tw + +BT +66.24 205.366 Td +/F1.0 10.5 Tf +<636f72726573706f6e64696e67206572726f72206d6573736167652e20496620697420697320646566696e656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.403 Tw + +BT +293.3095 205.366 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.403 Tw + +BT +314.3095 205.366 Td +/F1.0 10.5 Tf +<2c20746865207465737420706f72742077696c6c206e6f7420636865636b207468652076616c6964697479206f6620746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 189.586 Td +/F1.0 10.5 Tf +<63657274696669636174652e205468652064656661756c742076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +222.5745 189.586 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +243.5745 189.586 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 161.806 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 163.99 Td +/F3.0 10.5 Tf +<73736c5f7573655f73657373696f6e5f726573756d7074696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.6276 Tw + +BT +66.24 137.806 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207768657468657220746f207573652f737570706f72742053534c2073657373696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 122.026 Td +/F1.0 10.5 Tf +<726573756d7074696f6e73206f72206e6f742e205468652064656661756c742076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +268.0815 122.026 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +294.3315 122.026 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 94.246 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 96.43 Td +/F3.0 10.5 Tf +<73736c5f63657274696669636174655f636861696e5f66696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2569 Tw + +BT +66.24 70.246 Td +/F1.0 10.5 Tf +<49742073706563696669657320612050454d20656e636f6465642066696c65d5732070617468206f6e207468652066696c652073797374656d20636f6e7461696e696e672074686520636572746966696361746520636861696e2e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4658 Tw + +BT +66.24 54.466 Td +/F1.0 10.5 Tf +[<4d616e6461746f727920696e20736572766572206d6f646520616e64206f7074696f6e616c20696e20636c69656e74206d6f64652e204e6f746520746861742074686520736572766572206d61> 20.0195 <79207265717569726520636c69656e74>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<38> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +70 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 69 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +/F5.0 59 0 R +/F2.0 19 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +71 0 obj +[70 0 R /XYZ 0 434.97 null] +endobj +72 0 obj +<< /Length 9906 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +66.24 794.676 Td +/F1.0 10.5 Tf +<61757468656e7469636174696f6e2e20496e20746869732063617365206e6f20636f6e6e656374696f6e2063616e2062652065737461626c697368656420776974686f7574206120636c69656e742063657274696669636174652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 766.896 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 769.08 Td +/F3.0 10.5 Tf +<73736c5f707269766174655f6b65795f66696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4033 Tw + +BT +66.24 742.896 Td +/F1.0 10.5 Tf +[<49742073706563696669657320612050454d20656e636f6465642066696c65d5732070617468206f6e207468652066696c652073797374656d20636f6e7461696e696e672074686520736572766572> -29.7852 20.0195 <412070726976617465206b> 20.0195 <6579> 89.8438 <2e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 727.116 Td +/F1.0 10.5 Tf +<4d616e6461746f727920696e20736572766572206d6f646520616e64206f7074696f6e616c20696e20636c69656e74206d6f64652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 699.336 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 701.52 Td +/F3.0 10.5 Tf +<73736c5f707269766174655f6b65795f70617373776f7264> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9265 Tw + +BT +66.24 675.336 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207468652070617373776f72642070726f74656374696e67207468652070726976617465206b> 20.0195 <6579>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 659.556 Td +/F1.0 10.5 Tf +<66696c652e204966206e6f7420646566696e65642c207468652053534c20746f6f6c6b69742077696c6c2061736b20666f722069742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 631.776 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 633.96 Td +/F3.0 10.5 Tf +<73736c5f7472757374656443416c6973745f66696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2628 Tw + +BT +66.24 607.776 Td +/F1.0 10.5 Tf +<49742073706563696669657320612050454d20656e636f6465642066696c65d5732070617468206f6e207468652066696c652073797374656d20636f6e7461696e696e672074686520636572746966696361746573206f66207468652074727573746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +5.4992 Tw + +BT +66.24 591.996 Td +/F1.0 10.5 Tf +<434120617574686f72697469657320746f207573652e204d616e6461746f727920696e20736572766572206d6f64652c20616e64206d616e6461746f727920696e20636c69656e74206d6f6465206966> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 576.216 Td +/F3.0 10.5 Tf +<73736c5f7665726966795f63657274696669636174653d2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +213.24 576.216 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 548.436 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 550.62 Td +/F3.0 10.5 Tf +<73736c5f616c6c6f7765645f636970686572735f6c697374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0022 Tw + +BT +66.24 524.436 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f20737065636966792074686520616c6c6f77656420636970686572206c6973742e205468652076616c756520697320706173736564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 508.656 Td +/F1.0 10.5 Tf +<6469726563746c7920746f207468652053534c20746f6f6c6b69742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 480.876 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 480.876 Td +/F3.0 10.5 Tf +<73736c5f64697361626c655f53534c7632> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 465.096 Td +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 465.096 Td +/F3.0 10.5 Tf +<73736c5f64697361626c655f53534c7633> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 449.316 Td +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 449.316 Td +/F3.0 10.5 Tf +<73736c5f64697361626c655f544c537631> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 433.536 Td +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 433.536 Td +/F3.0 10.5 Tf +<73736c5f64697361626c655f544c5376315f31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 417.756 Td +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 417.756 Td +/F3.0 10.5 Tf +<73736c5f64697361626c655f544c5376315f32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1716 Tw + +BT +66.24 389.976 Td +/F1.0 10.5 Tf +[<546865207573616765206f6620612073706563696669632053534c2f544c532076657273696f6e2063616e2062652064697361626c65642062> 20.0195 <792073657474696e672074686520706172> 20.0195 <616d6574657220746f20>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1716 Tw + +BT +483.8054 389.976 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1716 Tw + +BT +510.0554 389.976 Td +/F1.0 10.5 Tf +<2e20506c65617365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 374.196 Td +/F1.0 10.5 Tf +[<6e6f746520746861742074686520617661696c61626c652053534c2f544c532076657273696f6e732061726520646570656e6473206f66207468652075736564204f70656e53534c206c696272> 20.0195 <617279> 89.8438 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 324.084 Td +/F2.0 22 Tf +<54686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +95.474 324.084 Td +/F3.0 22 Tf +<4162737472616374536f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +249.474 324.084 Td +/F2.0 22 Tf +<20415049> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 294.896 Td +/F1.0 10.5 Tf +<496e207468652064657269766564207465737420706f72742074686520666f6c6c6f77696e672066756e6374696f6e732063616e20626520757365643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 255.056 Td +/F2.0 18 Tf +[<4d61702f556e6d6170207468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 227.036 Td +/F1.0 10.5 Tf +<496e2074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +80.2755 227.036 Td +/F3.0 10.5 Tf +<757365725f6d6170> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +122.2755 227.036 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +146.8245 227.036 Td +/F3.0 10.5 Tf +<757365725f756e6d6170> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +199.3245 227.036 Td +/F1.0 10.5 Tf +<2066756e6374696f6e73206f66207468652064657269766564207465737420706f72742074686573652066756e6374696f6e732073686f756c642062652063616c6c65643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 211.22 m +543.04 211.22 l +545.2491 211.22 547.04 209.4291 547.04 207.22 c +547.04 149.0 l +547.04 146.7909 545.2491 145.0 543.04 145.0 c +52.24 145.0 l +50.0309 145.0 48.24 146.7909 48.24 149.0 c +48.24 207.22 l +48.24 209.4291 50.0309 211.22 52.24 211.22 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 211.22 m +543.04 211.22 l +545.2491 211.22 547.04 209.4291 547.04 207.22 c +547.04 149.0 l +547.04 146.7909 545.2491 145.0 543.04 145.0 c +52.24 145.0 l +50.0309 145.0 48.24 146.7909 48.24 149.0 c +48.24 207.22 l +48.24 209.4291 50.0309 211.22 52.24 211.22 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 188.395 Td +/F3.0 11 Tf +<766f6964206d61705f7573657228293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 158.915 Td +/F3.0 11 Tf +<766f696420756e6d61705f7573657228293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 108.976 Td +/F2.0 18 Tf +[<53657474696e672054> 29.7852 <65737420506f727420506172> 20.0195 <616d6574657273>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 92.92 m +543.04 92.92 l +545.2491 92.92 547.04 91.1291 547.04 88.92 c +547.04 60.18 l +547.04 57.9709 545.2491 56.18 543.04 56.18 c +52.24 56.18 l +50.0309 56.18 48.24 57.9709 48.24 60.18 c +48.24 88.92 l +48.24 91.1291 50.0309 92.92 52.24 92.92 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 92.92 m +543.04 92.92 l +545.2491 92.92 547.04 91.1291 547.04 88.92 c +547.04 60.18 l +547.04 57.9709 545.2491 56.18 543.04 56.18 c +52.24 56.18 l +50.0309 56.18 48.24 57.9709 48.24 60.18 c +48.24 88.92 l +48.24 91.1291 50.0309 92.92 52.24 92.92 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 70.095 Td +/F3.0 11 Tf +<626f6f6c20706172616d657465725f73657428636f6e73742063686172205f5f706172616d657465725f6e616d652c20636f6e73742063686172205f5f706172616d657465725f76616c7565293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<39> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +73 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 72 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +/F5.0 59 0 R +/F2.0 19 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +74 0 obj +[73 0 R /XYZ 0 352.38 null] +endobj +75 0 obj +[73 0 R /XYZ 0 279.08 null] +endobj +76 0 obj +[73 0 R /XYZ 0 133.0 null] +endobj +77 0 obj +<< /Length 14771 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +3.5652 Tw + +BT +48.24 793.926 Td +/F1.0 10.5 Tf +<43616c6c20746869732066756e6374696f6e20696e2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +3.5652 Tw + +BT +185.3883 793.926 Td +/F3.0 10.5 Tf +<7365745f706172616d65746572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.5652 Tw + +BT +253.6383 793.926 Td +/F1.0 10.5 Tf +<2066756e6374696f6e206f66207468652064657269766564207465737420706f727420746f2073657420746865207465737420706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 778.146 Td +/F1.0 10.5 Tf +[<706172> 20.0195 <616d6574657273206f66204162737472> 20.0195 <616374536f636b> 20.0195 <65742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 738.306 Td +/F2.0 18 Tf +<4f70656e2061204c697374656e696e6720506f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 710.286 Td +/F1.0 10.5 Tf +[<54> 29.7852 <6f206f70656e20612073657276657220736f636b> 20.0195 <65742063616c6c2074686520666f6c6c6f77696e672066756e6374696f6e3a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 694.47 m +543.04 694.47 l +545.2491 694.47 547.04 692.6791 547.04 690.47 c +547.04 661.73 l +547.04 659.5209 545.2491 657.73 543.04 657.73 c +52.24 657.73 l +50.0309 657.73 48.24 659.5209 48.24 661.73 c +48.24 690.47 l +48.24 692.6791 50.0309 694.47 52.24 694.47 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 694.47 m +543.04 694.47 l +545.2491 694.47 547.04 692.6791 547.04 690.47 c +547.04 661.73 l +547.04 659.5209 545.2491 657.73 543.04 657.73 c +52.24 657.73 l +50.0309 657.73 48.24 659.5209 48.24 661.73 c +48.24 690.47 l +48.24 692.6791 50.0309 694.47 52.24 694.47 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 671.645 Td +/F3.0 11 Tf +<696e74206f70656e5f6c697374656e5f706f727428636f6e737420636861722a206c6f63616c486f73746e616d652c20636f6e737420636861722a206c6f63616c53657276696365293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0253 Tw + +BT +48.24 633.766 Td +/F1.0 10.5 Tf +[<546869732066756e6374696f6e20737570706f72747320626f7468204950763420616e642049507636206164647265737365732e2054686520706172> 20.0195 <616d6574657220>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.0253 Tw + +BT +402.3994 633.766 Td +/F3.0 10.5 Tf +<6c6f63616c486f73746e616d65> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0253 Tw + +BT +470.6494 633.766 Td +/F1.0 10.5 Tf +<2073686f756c642073706563696679> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3266 Tw + +BT +48.24 617.986 Td +/F1.0 10.5 Tf +[<746865206c6f63616c20686f73746e616d652e2049742063616e20626520746865206e616d65206f662074686520686f7374206f7220616e20495020616464726573732e2054686520706172> 20.0195 <616d6574657220>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.3266 Tw + +BT +484.04 617.986 Td +/F3.0 10.5 Tf +<6c6f63616c53657276696365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3266 Tw + +BT +547.04 617.986 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1462 Tw + +BT +48.24 602.206 Td +/F1.0 10.5 Tf +[<73686f756c64206265206120737472696e6720636f6e7461696e696e672074686520706f7274206e756d6265722e204f6e65206f66207468652074776f20706172> 20.0195 <616d65746572732063616e20626520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1462 Tw + +BT +457.9595 602.206 Td +/F5.0 10.5 Tf +<4e554c4c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1462 Tw + +BT +478.9595 602.206 Td +/F1.0 10.5 Tf +<2c206d65616e696e6720> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1462 Tw + +BT +531.29 602.206 Td +/F5.0 10.5 Tf +<414e59> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0393 Tw + +BT +48.24 586.426 Td +/F1.0 10.5 Tf +[<666f72207468617420706172> 20.0195 <616d657465722e2054686520616464726573732066616d696c79207573656420697320737065636966696564206569746865722062> 20.0195 <792074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.0393 Tw + +BT +419.3997 586.426 Td +/F3.0 10.5 Tf +<61695f66616d696c795f6e616d652829> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0393 Tw + +BT +503.3997 586.426 Td +/F1.0 10.5 Tf +<2074657374706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 570.646 Td +/F1.0 10.5 Tf +[<706172> 20.0195 <616d65746572206f72207365742062> 20.0195 <79207468652066756e6374696f6e20>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +212.8376 570.646 Td +/F3.0 10.5 Tf +<7365745f61695f66616d696c7928696e7429> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +307.3376 570.646 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 542.866 Td +/F1.0 10.5 Tf +<54686520666f6c6c6f77696e672066756e6374696f6e206f6e6c7920737570706f72747320495076343a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 517.27 Td +/F3.0 10.5 Tf +<696e74206f70656e5f6c697374656e5f706f727428636f6e73742073747275637420736f636b616464725f696e2026206c6f63616c41646472293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.5 w +0.9333 0.9333 0.9333 SCN +102.4695 503.05 m +102.4695 463.49 l +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.3451 479.196 Td +/F2.0 10.5 Tf +[<4e4f> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6899 Tw + +BT +114.4695 487.086 Td +/F1.0 10.5 Tf +[<546869732066756e6374696f6e20697320646570726563617465642e204974206973206b> 20.0195 <65707420666f7220636f6d7061746962696c69747920776974682070726576696f75732076657273696f6e73206f66>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +114.4695 471.306 Td +/F1.0 10.5 Tf +<7465737420706f72747320746861742075736520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +205.9245 471.306 Td +/F3.0 10.5 Tf +<4162737472616374536f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.5416 Tw + +BT +48.24 439.526 Td +/F1.0 10.5 Tf +<41667465722063616c6c696e672074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.5416 Tw + +BT +144.8777 439.526 Td +/F3.0 10.5 Tf +<6f70656e5f6c697374656e5f706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.5416 Tw + +BT +228.8777 439.526 Td +/F1.0 10.5 Tf +<2066756e6374696f6e2c207468652066756e6374696f6e207669727475616c20766f696420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.5416 Tw + +BT +431.54 439.526 Td +/F3.0 10.5 Tf +<6c697374656e5f706f72745f6f70656e656428696e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.09 Tw + +BT +48.24 423.746 Td +/F3.0 10.5 Tf +<706f72745f6e756d62657229> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.09 Tw + +BT +111.24 423.746 Td +/F1.0 10.5 Tf +<2069732063616c6c6564206175746f6d61746963616c6c79207769746820746865206c697374656e696e6720706f7274206e756d6265722c206f7220> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.09 Tw + +BT +422.7383 423.746 Td +/F5.0 10.5 Tf +<2d31> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.09 Tw + +BT +433.2383 423.746 Td +/F1.0 10.5 Tf +<20696620746865206f70656e696e67206f6620746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4982 Tw + +BT +48.24 407.966 Td +/F1.0 10.5 Tf +<6c697374656e696e6720706f7274206661696c65642e20546869732066756e6374696f6e2063616e206265206f76657272696464656e20696e207468652064657269766564207465737420706f727420746f20696d706c656d656e74207370656369666963> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4061 Tw + +BT +48.24 392.186 Td +/F1.0 10.5 Tf +<6265686176696f7220646570656e64696e67206f6e20746865206c697374656e20726573756c742e20546869732063616e2c20666f72206578616d706c652cca63616c6c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4061 Tw + +BT +387.6289 392.186 Td +/F3.0 10.5 Tf +<696e636f6d696e675f6d657373616765> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4061 Tw + +BT +471.6289 392.186 Td +/F1.0 10.5 Tf +[<20746f2067656e6572> 20.0195 <61746520616e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 376.406 Td +/F1.0 10.5 Tf +<696e636f6d696e6720> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +97.989 376.406 Td +/F3.0 10.5 Tf +<4c697374656e526573756c74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +160.989 376.406 Td +/F1.0 10.5 Tf +<206d65737361676520696e20746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6548 Tw + +BT +48.24 348.626 Td +/F1.0 10.5 Tf +<53756273657175656e742063616c6c73206f66207468652066756e6374696f6e20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.6548 Tw + +BT +214.0017 348.626 Td +/F3.0 10.5 Tf +<6f70656e5f6c697374656e5f706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6548 Tw + +BT +298.0017 348.626 Td +/F1.0 10.5 Tf +<20726573756c747320696e20636c6f73696e67207468652070726576696f7573206c697374656e696e6720706f727420616e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 332.846 Td +/F1.0 10.5 Tf +[<6f70656e696e672061206e6577206f6e652e2054686973206d65616e732074686174206f6e6c79206f6e652073657276657220706f727420697320737570706f727465642062> 20.0195 <7920>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +414.2173 332.846 Td +/F3.0 10.5 Tf +<4162737472616374536f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +487.7173 332.846 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4448 Tw + +BT +48.24 305.066 Td +/F1.0 10.5 Tf +<5768656e206120636c69656e7420636f6e6e6563747320746f20746865206c697374656e696e6720706f72742074686520666f6c6c6f77696e672066756e6374696f6e73206172652063616c6c656420746f206e6f74696679207468652064657269766564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 289.286 Td +/F1.0 10.5 Tf +<7465737420706f72742061626f757420746865206e657720636c69656e7420636f6e6e656374696f6e3a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 273.47 m +543.04 273.47 l +545.2491 273.47 547.04 271.6791 547.04 269.47 c +547.04 225.99 l +547.04 223.7809 545.2491 221.99 543.04 221.99 c +52.24 221.99 l +50.0309 221.99 48.24 223.7809 48.24 225.99 c +48.24 269.47 l +48.24 271.6791 50.0309 273.47 52.24 273.47 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 273.47 m +543.04 273.47 l +545.2491 273.47 547.04 271.6791 547.04 269.47 c +547.04 225.99 l +547.04 223.7809 545.2491 221.99 543.04 221.99 c +52.24 221.99 l +50.0309 221.99 48.24 223.7809 48.24 225.99 c +48.24 269.47 l +48.24 271.6791 50.0309 273.47 52.24 273.47 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 250.645 Td +/F3.0 11 Tf +<7669727475616c20766f696420706565725f636f6e6e656374656428696e7420636c69656e745f69642c20636f6e73742063686172202a20686f73742c20636f6e737420696e7420706f727429> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 235.905 Td +/F3.0 11 Tf +<7669727475616c20766f696420706565725f636f6e6e656374656428696e7420636c69656e745f69642c20736f636b616464725f696e262072656d6f74655f61646472293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8263 Tw + +BT +48.24 198.026 Td +/F1.0 10.5 Tf +<4f6e6c79206f6e65206f662074686573652066756e6374696f6e732073686f756c64206265206f76657272696464656e20696e207468652064657269766564207465737420706f72742e204e6f74652c207468617420746865207365636f6e64206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 182.246 Td +/F1.0 10.5 Tf +[<6f62736f6c6574652e204974206973206b> 20.0195 <65707420666f72206261636b7761726420636f6d7061746962696c697479206f6e6c79> 89.8438 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 154.466 Td +/F1.0 10.5 Tf +<53696d696c61722066756e6374696f6e7320666f7220636c69656e7420646973636f6e6e656374733a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 138.65 m +543.04 138.65 l +545.2491 138.65 547.04 136.8591 547.04 134.65 c +547.04 91.17 l +547.04 88.9609 545.2491 87.17 543.04 87.17 c +52.24 87.17 l +50.0309 87.17 48.24 88.9609 48.24 91.17 c +48.24 134.65 l +48.24 136.8591 50.0309 138.65 52.24 138.65 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 138.65 m +543.04 138.65 l +545.2491 138.65 547.04 136.8591 547.04 134.65 c +547.04 91.17 l +547.04 88.9609 545.2491 87.17 543.04 87.17 c +52.24 87.17 l +50.0309 87.17 48.24 88.9609 48.24 91.17 c +48.24 134.65 l +48.24 136.8591 50.0309 138.65 52.24 138.65 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 115.825 Td +/F3.0 11 Tf +<7669727475616c20766f696420706565725f646973636f6e6e656374656428696e7420636c69656e745f6964293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 101.085 Td +/F3.0 11 Tf +<7669727475616c20766f696420706565725f68616c665f636c6f73656428696e7420636c69656e745f6964293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.886 Tw + +BT +48.24 63.206 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.886 Tw + +BT +70.546 63.206 Td +/F3.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.886 Tw + +BT +117.796 63.206 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d657465722073706563696669657320776869636820636c69656e742068617320646973636f6e6e65637465642f68616c6620636c6f7365642e2054686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.886 Tw + +BT +463.04 63.206 Td +/F3.0 10.5 Tf +<706565725f68616c665f636c6f736564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.886 Tw + +BT +547.04 63.206 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3130> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +78 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 77 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +/F2.0 19 0 R +/F5.0 59 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +79 0 obj +[78 0 R /XYZ 0 762.33 null] +endobj +80 0 obj +<< /Length 11453 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +1.6303 Tw + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +[<66756e6374696f6e2069732063616c6c6564207768656e2074686520636c69656e7420636c6f7365732074686520736f636b> 20.0195 <657420666f722077726974696e672c207768696c6520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.6303 Tw + +BT +411.3743 794.676 Td +/F3.0 10.5 Tf +<706565725f646973636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6303 Tw + +BT +500.6243 794.676 Td +/F1.0 10.5 Tf +<2069732063616c6c6564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 778.896 Td +/F1.0 10.5 Tf +<7768656e2074686520636c69656e7420697320646973636f6e6e65637465642e20426f74682066756e6374696f6e732063616e206265206f76657272696464656e20696e207468652064657269766564207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 739.056 Td +/F2.0 18 Tf +<436c6f736520746865204c697374656e696e6720506f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 713.22 Td +/F3.0 10.5 Tf +<766f696420636c6f73655f6c697374656e5f706f72742829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 687.036 Td +/F1.0 10.5 Tf +<546869732066756e6374696f6e20636c6f73657320746865206c697374656e696e6720706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 647.196 Td +/F2.0 18 Tf +<4f70656e206120436c69656e7420436f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 631.14 m +543.04 631.14 l +545.2491 631.14 547.04 629.3491 547.04 627.14 c +547.04 583.66 l +547.04 581.4509 545.2491 579.66 543.04 579.66 c +52.24 579.66 l +50.0309 579.66 48.24 581.4509 48.24 583.66 c +48.24 627.14 l +48.24 629.3491 50.0309 631.14 52.24 631.14 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 631.14 m +543.04 631.14 l +545.2491 631.14 547.04 629.3491 547.04 627.14 c +547.04 583.66 l +547.04 581.4509 545.2491 579.66 543.04 579.66 c +52.24 579.66 l +50.0309 579.66 48.24 581.4509 48.24 583.66 c +48.24 627.14 l +48.24 629.3491 50.0309 631.14 52.24 631.14 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 608.315 Td +/F3.0 11 Tf +<696e74206f70656e5f636c69656e745f636f6e6e656374696f6e28636f6e737420636861722a2072656d6f7465486f73746e616d652c20636f6e737420636861722a2072656d6f7465536572766963652c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 593.575 Td +/F3.0 11 Tf +<636f6e737420636861722a206c6f63616c486f73746e616d652c20636f6e737420636861722a206c6f63616c53657276696365293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3227 Tw + +BT +48.24 555.696 Td +/F1.0 10.5 Tf +<546869732066756e6374696f6e206372656174657320616e2049507634206f72204950763620636f6e6e656374696f6e2066726f6d20746865206c6f63616c206164647265737320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.3227 Tw + +BT +410.54 555.696 Td +/F3.0 10.5 Tf +<6c6f63616c486f73746e616d652f6c6f63616c53657276696365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3227 Tw + +BT +547.04 555.696 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 539.916 Td +/F1.0 10.5 Tf +<746f207468652072656d6f7465206164647265737320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +159.498 539.916 Td +/F3.0 10.5 Tf +<72656d6f7465486f73746e616d652f72656d6f746553657276696365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +306.498 539.916 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 512.136 Td +/F1.0 10.5 Tf +<496620> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +58.6875 512.136 Td +/F3.0 10.5 Tf +<6c6f63616c486f73746e616d65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +126.9375 512.136 Td +/F1.0 10.5 Tf +<206f7220> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +143.3805 512.136 Td +/F3.0 10.5 Tf +<6c6f63616c53657276696365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +206.3805 512.136 Td +/F1.0 10.5 Tf +<20697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +219.9045 512.136 Td +/F5.0 10.5 Tf +<4e554c4c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +240.9045 512.136 Td +/F1.0 10.5 Tf +[<2c2069742077696c6c2062652061737369676e6564206175746f6d61746963616c6c79> 89.8438 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9131 Tw + +BT +48.24 484.356 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465727320666f72207468652072656d6f746520616464726573732063616e6e6f7420626520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9131 Tw + +BT +313.4236 484.356 Td +/F5.0 10.5 Tf +<4e554c4c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9131 Tw + +BT +334.4236 484.356 Td +/F1.0 10.5 Tf +[<2e20546865206c6f63616c206f722072656d6f7465207365727669636520706172> 20.0195 <616d6574657273>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8503 Tw + +BT +48.24 468.576 Td +/F1.0 10.5 Tf +<73686f756c64206265206e756d6265727320696e20737472696e6720666f726d61742c207768696c6520746865206164647265737365732073686f756c64206265206e616d6573206f722049502061646472657373657320696e2049507634> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 452.796 Td +/F1.0 10.5 Tf +<6f72204950763620666f726d61742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 425.016 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +69.66 425.016 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +185.16 425.016 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2061626f7665206d616b> 20.0195 <65732074686520666f6c6c6f77696e672066756e6374696f6e206f62736f6c6574653a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 409.2 m +543.04 409.2 l +545.2491 409.2 547.04 407.4091 547.04 405.2 c +547.04 361.72 l +547.04 359.5109 545.2491 357.72 543.04 357.72 c +52.24 357.72 l +50.0309 357.72 48.24 359.5109 48.24 361.72 c +48.24 405.2 l +48.24 407.4091 50.0309 409.2 52.24 409.2 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 409.2 m +543.04 409.2 l +545.2491 409.2 547.04 407.4091 547.04 405.2 c +547.04 361.72 l +547.04 359.5109 545.2491 357.72 543.04 357.72 c +52.24 357.72 l +50.0309 357.72 48.24 359.5109 48.24 361.72 c +48.24 405.2 l +48.24 407.4091 50.0309 409.2 52.24 409.2 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 386.375 Td +/F3.0 11 Tf +<696e74206f70656e5f636c69656e745f636f6e6e656374696f6e28636f6e73742073747275637420736f636b616464725f696e2026206e65775f72656d6f74655f616464722c20636f6e737420737472756374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 371.635 Td +/F3.0 11 Tf +<736f636b616464725f696e2026206e65775f6c6f63616c5f6164647229> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4779 Tw + +BT +48.24 333.756 Td +/F1.0 10.5 Tf +[<4974206973206b> 20.0195 <65707420666f72206261636b7761726420636f6d7061746962696c69747920666f722064657269766564207465737420706f72747320746861742077657265206e6f74206164617074656420746f207468652049507636>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 317.976 Td +/F1.0 10.5 Tf +<737570706f7274696e672066756e6374696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7521 Tw + +BT +48.24 290.196 Td +/F1.0 10.5 Tf +<41667465722063616c6c696e672074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.7521 Tw + +BT +136.5093 290.196 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7521 Tw + +BT +252.0093 290.196 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2c204162737472> 20.0195 <616374536f636b> 20.0195 <65742063616c6c73206175746f6d61746963616c6c79207468652066756e6374696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5712 Tw + +BT +48.24 274.416 Td +/F3.0 10.5 Tf +<7669727475616c20766f696420636c69656e745f636f6e6e656374696f6e5f6f70656e656428696e7420636c69656e745f696429> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5712 Tw + +BT +322.9535 274.416 Td +/F1.0 10.5 Tf +<20746f20696e666f726d20746865207465737420706f72742061626f75742074686520726573756c742e20546865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5586 Tw + +BT +48.24 258.636 Td +/F3.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5586 Tw + +BT +95.49 258.636 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d657465722069732073657420746f20746865206964206f662074686520636c69656e742c206f7220>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5586 Tw + +BT +309.3453 258.636 Td +/F5.0 10.5 Tf +<2d31> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5586 Tw + +BT +319.8453 258.636 Td +/F1.0 10.5 Tf +<2069662074686520636f6e6e656374696f6e20636f756c64206e6f742062652065737461626c697368656420746f> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 242.856 Td +/F1.0 10.5 Tf +<7468652072656d6f746520616464726573732e20546869732066756e6374696f6e2063616e206265206f76657272696464656e20696e207468652064657269766564207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 203.016 Td +/F2.0 18 Tf +<53656e64204d657373616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 186.96 m +543.04 186.96 l +545.2491 186.96 547.04 185.1691 547.04 182.96 c +547.04 139.48 l +547.04 137.2709 545.2491 135.48 543.04 135.48 c +52.24 135.48 l +50.0309 135.48 48.24 137.2709 48.24 139.48 c +48.24 182.96 l +48.24 185.1691 50.0309 186.96 52.24 186.96 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 186.96 m +543.04 186.96 l +545.2491 186.96 547.04 185.1691 547.04 182.96 c +547.04 139.48 l +547.04 137.2709 545.2491 135.48 543.04 135.48 c +52.24 135.48 l +50.0309 135.48 48.24 137.2709 48.24 139.48 c +48.24 182.96 l +48.24 185.1691 50.0309 186.96 52.24 186.96 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 164.135 Td +/F3.0 11 Tf +<766f69642073656e645f6f7574676f696e6728636f6e737420756e7369676e656420636861722a206d6573736167655f6275666665722c20696e74206c656e6774682c20696e7420636c69656e745f6964203d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 149.395 Td +/F3.0 11 Tf +<2d31293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 111.516 Td +/F1.0 10.5 Tf +<5769746820746869732066756e6374696f6e2061206d6573736167652063616e2062652073656e7420746f207468652073706563696669656420636c69656e742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3131> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +81 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 80 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +/F2.0 19 0 R +/F5.0 59 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +82 0 obj +[81 0 R /XYZ 0 763.08 null] +endobj +83 0 obj +[81 0 R /XYZ 0 671.22 null] +endobj +84 0 obj +<< /Limits [(_parameter_accessor_functions) (_the_abstractsocket_api)] +/Names [(_parameter_accessor_functions) 93 0 R (_presumed_knowledge) 21 0 R (_references) 159 0 R (_send_message) 85 0 R (_server_mode) 34 0 R (_server_mode_2) 124 0 R (_setting_test_port_parameters) 76 0 R (_ssl_functionality) 43 0 R (_start_procedure) 30 0 R (_system_requirements) 24 0 R (_terminology) 154 0 R (_test_port_parameter_names) 90 0 R (_the_abstractsocket_api) 74 0 R] +>> +endobj +85 0 obj +[81 0 R /XYZ 0 227.04 null] +endobj +86 0 obj +<< /Length 8865 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 792.006 Td +/F2.0 13 Tf +[<54> 29.7852 <6f20526563656976652061204d657373616765>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 765.446 Td +/F1.0 10.5 Tf +<5768656e2061206d6573736167652069732072656365697665642c2074686520666f6c6c6f77696e672066756e6374696f6e2069732063616c6c6564206175746f6d61746963616c6c793a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 749.63 m +543.04 749.63 l +545.2491 749.63 547.04 747.8391 547.04 745.63 c +547.04 702.15 l +547.04 699.9409 545.2491 698.15 543.04 698.15 c +52.24 698.15 l +50.0309 698.15 48.24 699.9409 48.24 702.15 c +48.24 745.63 l +48.24 747.8391 50.0309 749.63 52.24 749.63 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 749.63 m +543.04 749.63 l +545.2491 749.63 547.04 747.8391 547.04 745.63 c +547.04 702.15 l +547.04 699.9409 545.2491 698.15 543.04 698.15 c +52.24 698.15 l +50.0309 698.15 48.24 699.9409 48.24 702.15 c +48.24 745.63 l +48.24 747.8391 50.0309 749.63 52.24 749.63 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 726.805 Td +/F3.0 11 Tf +<7669727475616c20766f6964206d6573736167655f696e636f6d696e6728636f6e737420756e7369676e656420636861722a206d6573736167655f6275666665722c20696e74206c656e6774682c20696e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 712.065 Td +/F3.0 11 Tf +<636c69656e745f6964203d202d3129> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1243 Tw + +BT +48.24 674.186 Td +/F1.0 10.5 Tf +[<546869732066756e6374696f6e206d757374206265206f76657272696464656e20696e207468652064657269766564207465737420706f72742e2054> 29.7852 <6f2067656e6572> 20.0195 <61746520616e20696e636f6d696e67205454> 20.0195 <434e33206d6573736167652c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 658.406 Td +/F1.0 10.5 Tf +<746865207465737420706f7274207368616c6c2063616c6c2074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +176.76 658.406 Td +/F3.0 10.5 Tf +<696e636f6d696e675f6d657373616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +260.76 658.406 Td +/F1.0 10.5 Tf +<2066756e6374696f6e206f662074686520546974616e204150492077697468696e20746869732066756e6374696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5936 Tw + +BT +48.24 630.626 Td +/F1.0 10.5 Tf +[<496e206f72646572207468617420746869732066756e6374696f6e20636f756c642062652063616c6c6564206175746f6d61746963616c6c79> 89.8438 <2c207468652064657269766564207465737420706f7274207368616c6c20646566696e65207468657365>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 614.846 Td +/F1.0 10.5 Tf +<66756e6374696f6e733a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 599.03 m +543.04 599.03 l +545.2491 599.03 547.04 597.2391 547.04 595.03 c +547.04 536.81 l +547.04 534.6009 545.2491 532.81 543.04 532.81 c +52.24 532.81 l +50.0309 532.81 48.24 534.6009 48.24 536.81 c +48.24 595.03 l +48.24 597.2391 50.0309 599.03 52.24 599.03 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 599.03 m +543.04 599.03 l +545.2491 599.03 547.04 597.2391 547.04 595.03 c +547.04 536.81 l +547.04 534.6009 545.2491 532.81 543.04 532.81 c +52.24 532.81 l +50.0309 532.81 48.24 534.6009 48.24 536.81 c +48.24 595.03 l +48.24 597.2391 50.0309 599.03 52.24 599.03 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 576.205 Td +/F3.0 11 Tf +<7669727475616c20766f69642048616e646c65725f496e7374616c6c28636f6e73742066645f7365742a20726561645f6664732c20636f6e73742066645f7365742a2077726974655f6664732c20636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 561.465 Td +/F3.0 11 Tf +<66645f7365742a206572726f725f6664732c20646f75626c652063616c6c5f696e74657276616c293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 546.725 Td +/F3.0 11 Tf +<7669727475616c20766f69642048616e646c65725f556e696e7374616c6c28293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 508.846 Td +/F1.0 10.5 Tf +<496e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +61.5855 508.846 Td +/F3.0 10.5 Tf +<48616e646c65725f496e7374616c6c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +140.3355 508.846 Td +/F1.0 10.5 Tf +<2074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +161.745 508.846 Td +/F3.0 10.5 Tf +<496e7374616c6c5f48616e646c6572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +240.495 508.846 Td +/F1.0 10.5 Tf +<20546974616e204150492066756e6374696f6e2069732063616c6c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 481.066 Td +/F1.0 10.5 Tf +<416c736f20696e2074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +103.9425 481.066 Td +/F3.0 10.5 Tf +<4576656e745f48616e646c6572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +172.1925 481.066 Td +/F1.0 10.5 Tf +<20546974616e204150492066756e6374696f6e2c207468652066756e6374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 465.25 m +543.04 465.25 l +545.2491 465.25 547.04 463.4591 547.04 461.25 c +547.04 417.77 l +547.04 415.5609 545.2491 413.77 543.04 413.77 c +52.24 413.77 l +50.0309 413.77 48.24 415.5609 48.24 417.77 c +48.24 461.25 l +48.24 463.4591 50.0309 465.25 52.24 465.25 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 465.25 m +543.04 465.25 l +545.2491 465.25 547.04 463.4591 547.04 461.25 c +547.04 417.77 l +547.04 415.5609 545.2491 413.77 543.04 413.77 c +52.24 413.77 l +50.0309 413.77 48.24 415.5609 48.24 417.77 c +48.24 461.25 l +48.24 463.4591 50.0309 465.25 52.24 465.25 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 442.425 Td +/F3.0 11 Tf +<766f69642048616e646c655f4576656e7428636f6e73742066645f736574202a726561645f6664732c20636f6e73742066645f736574205f5f77726974655f6664732c20636f6e73742066645f736574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 427.685 Td +/F3.0 11 Tf +<5f5f6572726f725f6664732c20646f75626c652074696d655f73696e63655f6c6173745f63616c6c29> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 389.806 Td +/F1.0 10.5 Tf +<69732063616c6c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 349.966 Td +/F2.0 18 Tf +<436c6f7365206120436c69656e7420436f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 333.91 m +543.04 333.91 l +545.2491 333.91 547.04 332.1191 547.04 329.91 c +547.04 286.43 l +547.04 284.2209 545.2491 282.43 543.04 282.43 c +52.24 282.43 l +50.0309 282.43 48.24 284.2209 48.24 286.43 c +48.24 329.91 l +48.24 332.1191 50.0309 333.91 52.24 333.91 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 333.91 m +543.04 333.91 l +545.2491 333.91 547.04 332.1191 547.04 329.91 c +547.04 286.43 l +547.04 284.2209 545.2491 282.43 543.04 282.43 c +52.24 282.43 l +50.0309 282.43 48.24 284.2209 48.24 286.43 c +48.24 329.91 l +48.24 332.1191 50.0309 333.91 52.24 333.91 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 311.085 Td +/F3.0 11 Tf +<7669727475616c20766f69642072656d6f76655f636c69656e7428696e7420636c69656e745f6964293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 296.345 Td +/F3.0 11 Tf +<7669727475616c20766f69642072656d6f76655f616c6c5f636c69656e747328293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4062 Tw + +BT +48.24 258.466 Td +/F1.0 10.5 Tf +<54686520666972737420636c6f7365732074686520636f6e6e656374696f6e20666f72206120676976656e20636c69656e7420746865207365636f6e642066756e6374696f6e20636c6f7365732074686520636f6e6e656374696f6e206f6620616c6c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 242.686 Td +/F1.0 10.5 Tf +<636c69656e74732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 202.846 Td +/F2.0 18 Tf +[<54> 29.7852 <65737420506f727420506172> 20.0195 <616d65746572204e616d6573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7461 Tw + +BT +48.24 174.826 Td +/F1.0 10.5 Tf +[<5468652064656661756c74204162737472> 20.0195 <616374536f636b> 20.0195 <6574207465737420706f727420706172> 20.0195 <616d65746572206e616d65732063616e206265207265646566696e656420696e207468652064657269766564207465737420706f72742062> 20.0195 <79>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 159.046 Td +/F1.0 10.5 Tf +<6f766572726964696e672074686520617070726f7072696174652066756e6374696f6e2062656c6f773a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3132> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +87 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 86 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +88 0 obj +[87 0 R /XYZ 0 841.89 null] +endobj +89 0 obj +[87 0 R /XYZ 0 373.99 null] +endobj +90 0 obj +[87 0 R /XYZ 0 226.87 null] +endobj +91 0 obj +<< /Length 9880 +>> +stream +q +q +/DeviceRGB cs +0.9608 0.9608 0.9608 scn +52.24 805.89 m +543.04 805.89 l +545.2491 805.89 547.04 804.0991 547.04 801.89 c +547.04 493.09 l +547.04 490.8809 545.2491 489.09 543.04 489.09 c +52.24 489.09 l +50.0309 489.09 48.24 490.8809 48.24 493.09 c +48.24 801.89 l +48.24 804.0991 50.0309 805.89 52.24 805.89 c +h +f +/DeviceRGB CS +0.8 0.8 0.8 SCN +0.75 w +52.24 805.89 m +543.04 805.89 l +545.2491 805.89 547.04 804.0991 547.04 801.89 c +547.04 493.09 l +547.04 490.8809 545.2491 489.09 543.04 489.09 c +52.24 489.09 l +50.0309 489.09 48.24 490.8809 48.24 493.09 c +48.24 801.89 l +48.24 804.0991 50.0309 805.89 52.24 805.89 c +h +S +Q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +59.24 783.065 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a206c6f63616c5f706f72745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 768.325 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2072656d6f74655f616464726573735f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 753.585 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a206c6f63616c5f616464726573735f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 738.845 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2072656d6f74655f706f72745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 724.105 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2061695f66616d696c795f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 709.365 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a207573655f636f6e6e656374696f6e5f415350735f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 694.625 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2068616c745f6f6e5f636f6e6e656374696f6e5f72657365745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 679.885 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a20636c69656e745f5443505f7265636f6e6e6563745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 665.145 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a205443505f7265636f6e6e6563745f617474656d7074735f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 650.405 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a205443505f7265636f6e6e6563745f64656c61795f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 635.665 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a207365727665725f6d6f64655f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 620.925 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a20736f636b65745f646562756767696e675f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 606.185 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a206e61676c696e675f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 591.445 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a207573655f6e6f6e5f626c6f636b696e675f736f636b65745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 576.705 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a207365727665725f6261636b6c6f675f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 561.965 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2073736c5f64697361626c655f53534c763228293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 547.225 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2073736c5f64697361626c655f53534c763328293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 532.485 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2073736c5f64697361626c655f544c53763128293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 517.745 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2073736c5f64697361626c655f544c5376315f3128293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 503.005 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2073736c5f64697361626c655f544c5376315f3228293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 453.066 Td +/F2.0 18 Tf +[<506172> 20.0195 <616d657465722041> 20.0195 <63636573736f722046756e6374696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 425.046 Td +/F1.0 10.5 Tf +[<54686520666f6c6c6f77696e672066756e6374696f6e732063616e2062652075736520746f206765742f73657420746865204162737472> 20.0195 <616374536f636b> 20.0195 <657420706172> 20.0195 <616d65746572733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 409.23 m +543.04 409.23 l +545.2491 409.23 547.04 407.4391 547.04 405.23 c +547.04 66.95 l +547.04 64.7409 545.2491 62.95 543.04 62.95 c +52.24 62.95 l +50.0309 62.95 48.24 64.7409 48.24 66.95 c +48.24 405.23 l +48.24 407.4391 50.0309 409.23 52.24 409.23 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 409.23 m +543.04 409.23 l +545.2491 409.23 547.04 407.4391 547.04 405.23 c +547.04 66.95 l +547.04 64.7409 545.2491 62.95 543.04 62.95 c +52.24 62.95 l +50.0309 62.95 48.24 64.7409 48.24 66.95 c +48.24 405.23 l +48.24 407.4391 50.0309 409.23 52.24 409.23 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 386.405 Td +/F3.0 11 Tf +<626f6f6c206765745f6e61676c696e67282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 371.665 Td +/F3.0 11 Tf +<626f6f6c206765745f7573655f6e6f6e5f626c6f636b696e675f736f636b6574282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 356.925 Td +/F3.0 11 Tf +<626f6f6c206765745f7365727665725f6d6f6465282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 342.185 Td +/F3.0 11 Tf +<626f6f6c206765745f736f636b65745f646562756767696e67282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 327.445 Td +/F3.0 11 Tf +<626f6f6c206765745f68616c745f6f6e5f636f6e6e656374696f6e5f7265736574282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 312.705 Td +/F3.0 11 Tf +<626f6f6c206765745f7573655f636f6e6e656374696f6e5f41535073282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 297.965 Td +/F3.0 11 Tf +<626f6f6c206765745f68616e646c655f68616c665f636c6f7365282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 283.225 Td +/F3.0 11 Tf +<696e74207365745f6e6f6e5f626c6f636b5f6d6f646528696e742066642c20626f6f6c20656e61626c655f6e6f6e626c6f636b293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 268.485 Td +/F3.0 11 Tf +<626f6f6c20696e6372656173655f73656e645f62756666657228696e742066642c20696e7420266f6c645f73697a652c20696e7426206e65775f73697a65293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 253.745 Td +/F3.0 11 Tf +<636f6e737420636861722a206765745f6c6f63616c5f686f73745f6e616d652829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 239.005 Td +/F3.0 11 Tf +<636f6e737420756e7369676e656420696e74206765745f6c6f63616c5f706f72745f6e756d6265722829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 224.265 Td +/F3.0 11 Tf +<636f6e737420636861722a206765745f72656d6f74655f686f73745f6e616d652829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 209.525 Td +/F3.0 11 Tf +<636f6e737420756e7369676e656420696e74206765745f72656d6f74655f706f72745f6e756d6265722829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 194.785 Td +/F3.0 11 Tf +<636f6e737420696e7426206765745f61695f66616d696c79282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 180.045 Td +/F3.0 11 Tf +<766f6964207365745f61695f66616d696c7928696e7420706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 165.305 Td +/F3.0 11 Tf +<626f6f6c206765745f7474636e5f6275666665725f75736572636f6e74726f6c282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 150.565 Td +/F3.0 11 Tf +<766f6964207365745f6e61676c696e6728626f6f6c20706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 135.825 Td +/F3.0 11 Tf +<766f6964207365745f7365727665725f6d6f646528626f6f6c20706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 121.085 Td +/F3.0 11 Tf +<766f6964207365745f68616e646c655f68616c665f636c6f736528626f6f6c20706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 106.345 Td +/F3.0 11 Tf +<766f6964207365745f736f636b65745f646562756767696e6728626f6f6c20706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 91.605 Td +/F3.0 11 Tf +<766f6964207365745f68616c745f6f6e5f636f6e6e656374696f6e5f726573657428626f6f6c20706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 76.865 Td +/F3.0 11 Tf +<766f6964207365745f7474636e5f6275666665725f75736572636f6e74726f6c28626f6f6c20706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3133> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +92 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 91 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F3.0 27 0 R +/F2.0 19 0 R +/F1.0 8 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +93 0 obj +[92 0 R /XYZ 0 477.09 null] +endobj +94 0 obj +<< /Length 12747 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 786.666 Td +/F2.0 18 Tf +<4c6f6767696e672046756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 758.646 Td +/F1.0 10.5 Tf +[<54686520666f6c6c6f77696e672066756e6374696f6e73206c6f67206120676976656e206d65737361676520696e20646966666572656e74207761> 20.0195 <79733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 742.83 m +543.04 742.83 l +545.2491 742.83 547.04 741.0391 547.04 738.83 c +547.04 665.87 l +547.04 663.6609 545.2491 661.87 543.04 661.87 c +52.24 661.87 l +50.0309 661.87 48.24 663.6609 48.24 665.87 c +48.24 738.83 l +48.24 741.0391 50.0309 742.83 52.24 742.83 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 742.83 m +543.04 742.83 l +545.2491 742.83 547.04 741.0391 547.04 738.83 c +547.04 665.87 l +547.04 663.6609 545.2491 661.87 543.04 661.87 c +52.24 661.87 l +50.0309 661.87 48.24 663.6609 48.24 665.87 c +48.24 738.83 l +48.24 741.0391 50.0309 742.83 52.24 742.83 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 720.005 Td +/F3.0 11 Tf +<766f6964206c6f675f646562756728636f6e73742063686172202a666d742c20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +235.24 720.005 Td +/F6.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +246.24 720.005 Td +/F3.0 11 Tf +<2920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 705.265 Td +/F3.0 11 Tf +<766f6964206c6f675f7761726e696e6728636f6e73742063686172202a666d742c20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +246.24 705.265 Td +/F6.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +257.24 705.265 Td +/F3.0 11 Tf +<2920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 690.525 Td +/F3.0 11 Tf +<766f6964206c6f675f6572726f7228636f6e73742063686172202a666d742c20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +235.24 690.525 Td +/F6.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +246.24 690.525 Td +/F3.0 11 Tf +<2920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 675.785 Td +/F3.0 11 Tf +<766f6964206c6f675f68657828636f6e73742063686172205f5f70726f6d70742c20636f6e737420756e7369676e65642063686172205f5f6d73672c2073697a655f74206c656e6774682920636f6e73743b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 625.846 Td +/F2.0 18 Tf +<4572726f72205265706f7274696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 609.79 m +543.04 609.79 l +545.2491 609.79 547.04 607.9991 547.04 605.79 c +547.04 562.31 l +547.04 560.1009 545.2491 558.31 543.04 558.31 c +52.24 558.31 l +50.0309 558.31 48.24 560.1009 48.24 562.31 c +48.24 605.79 l +48.24 607.9991 50.0309 609.79 52.24 609.79 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 609.79 m +543.04 609.79 l +545.2491 609.79 547.04 607.9991 547.04 605.79 c +547.04 562.31 l +547.04 560.1009 545.2491 558.31 543.04 558.31 c +52.24 558.31 l +50.0309 558.31 48.24 560.1009 48.24 562.31 c +48.24 605.79 l +48.24 607.9991 50.0309 609.79 52.24 609.79 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 586.965 Td +/F3.0 11 Tf +<7669727475616c20766f6964207265706f72745f6572726f7228696e7420636c69656e745f69642c20696e74206d73675f6c656e6774682c20696e742073656e745f6c656e6774682c20636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 572.225 Td +/F3.0 11 Tf +<756e7369676e656420636861722a206d73672c20636f6e737420636861722a206572726f725f74657874293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7049 Tw + +BT +48.24 534.346 Td +/F1.0 10.5 Tf +[<546869732066756e6374696f6e2069732063616c6c6564206175746f6d61746963616c6c7920696620616e206572726f72206f636375727320647572696e672073656e64206f706572> 20.0195 <6174696f6e20696e20>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.7049 Tw + +BT +470.915 534.346 Td +/F3.0 10.5 Tf +<4162737472616374536f636b6574> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7049 Tw + +BT +544.415 534.346 Td +/F1.0 10.5 Tf +<2e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7792 Tw + +BT +48.24 518.566 Td +/F1.0 10.5 Tf +<546869732066756e6374696f6e2063616e206265206f76657272696464656e20696e207468652064657269766564207465737420706f727420746f206f76657272696465207468652064656661756c74206572726f72207265706f7274696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4386 Tw + +BT +48.24 502.786 Td +/F1.0 10.5 Tf +<6265686176696f72206f6620> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4386 Tw + +BT +109.5341 502.786 Td +/F3.0 10.5 Tf +<4162737472616374536f636b6574> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4386 Tw + +BT +183.0341 502.786 Td +/F1.0 10.5 Tf +<2c2077686963682069732063616c6c696e672074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4386 Tw + +BT +289.723 502.786 Td +/F3.0 10.5 Tf +<6c6f675f6572726f72> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4386 Tw + +BT +336.973 502.786 Td +/F1.0 10.5 Tf +<2066756e6374696f6e2e20546869732066756e6374696f6e2063616e20616c736f2062652063616c6c6564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 487.006 Td +/F1.0 10.5 Tf +[<62> 20.0195 <79207468652064657269766564207465737420706f727420746f20696e69746961746520746865206572726f72207265706f7274696e67206d656368616e69736d2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 437.554 Td +/F2.0 27 Tf +<5469707320616e6420547269636b73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 390.574 Td +/F2.0 22 Tf +<5573616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 361.386 Td +/F1.0 10.5 Tf +<496e206f7264657220746f206275696c642061207465737420706f7274206261736564206f6e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +233.9745 361.386 Td +/F3.0 10.5 Tf +<41627374726163745f536f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +312.7245 361.386 Td +/F1.0 10.5 Tf +<2074686520666f6c6c6f77696e67207374657073206d75737420626520636f6d706c657465643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +52.6765 333.606 Td +/F1.0 10.5 Tf +<312e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 333.606 Td +/F1.0 10.5 Tf +<4465726976696e6720746865207465737420706f727420636c617373202873656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +224.202 333.606 Td +/F1.0 10.5 Tf +[<4465726976696e67207468652054> 29.7852 <65737420506f727420436c617373>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +360.7148 333.606 Td +/F1.0 10.5 Tf +<29> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +52.6765 311.826 Td +/F1.0 10.5 Tf +<322e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 311.826 Td +/F1.0 10.5 Tf +<496d706c656d656e746174696f6e206f6620746865206c6f676765722066756e6374696f6e73206966206e6565646564202873656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +336.3315 311.826 Td +/F1.0 10.5 Tf +<496d706c656d656e746174696f6e206f6620746865204c6f676765722046756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +537.816 311.826 Td +/F1.0 10.5 Tf +<29> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +52.6765 290.046 Td +/F1.0 10.5 Tf +<332e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 290.046 Td +/F1.0 10.5 Tf +[<46756e6374696f6e207472> 20.0195 <616e736c6174696f6e73202873656520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +198.2668 290.046 Td +/F1.0 10.5 Tf +[<46756e6374696f6e205472> 20.0195 <616e736c6174696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +307.9811 290.046 Td +/F1.0 10.5 Tf +<29> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +52.6765 268.266 Td +/F1.0 10.5 Tf +<342e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7629 Tw + +BT +66.24 268.266 Td +/F1.0 10.5 Tf +<496e7374616c6c696e67207468652068616e646c657273202873656520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +1.7629 Tw + +BT +211.3034 268.266 Td +/F1.0 10.5 Tf +<46756e6374696f6e7320666f72204d616e6970756c6174696e672074686520536574206f66204576656e747320666f722057686963682074686520506f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +66.24 252.486 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61697473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +94.3821 252.486 Td +/F1.0 10.5 Tf +<29> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +52.6765 230.706 Td +/F1.0 10.5 Tf +<352e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 230.706 Td +/F1.0 10.5 Tf +<46696e616c207374657073202873656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +144.6855 230.706 Td +/F1.0 10.5 Tf +<46696e616c205374657073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +199.0545 230.706 Td +/F1.0 10.5 Tf +<29> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 202.926 Td +/F1.0 10.5 Tf +<5468657365207374657073206172652064697363757373656420696e2064657461696c20696e2074686520666f6c6c6f77696e672073756273656374696f6e732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 163.086 Td +/F2.0 18 Tf +[<4465726976696e67207468652054> 29.7852 <65737420506f727420436c617373>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0264 Tw + +BT +48.24 135.066 Td +/F1.0 10.5 Tf +<496e686572697420796f7572207465737420706f727420636c6173732062657369646520746865207465737420706f7274206261736520616c736f2066726f6d2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.0264 Tw + +BT +388.532 135.066 Td +/F3.0 10.5 Tf +<41627374726163745f536f636b6574> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0264 Tw + +BT +467.282 135.066 Td +/F1.0 10.5 Tf +<20636c6173732c20696620796f7520646f> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7049 Tw + +BT +48.24 119.286 Td +/F1.0 10.5 Tf +<6e6f742077616e7420746f207573652053534c20617420616c6c2e20496620796f7520706c616e20746f207573652053534c2c20696e686572697420746865207465737420706f72742066726f6d2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.7049 Tw + +BT +450.6472 119.286 Td +/F3.0 10.5 Tf +<53534c5f536f636b6574> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7049 Tw + +BT +503.1472 119.286 Td +/F1.0 10.5 Tf +<20636c6173732e20496e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9214 Tw + +BT +48.24 103.506 Td +/F1.0 10.5 Tf +[<6361736520796f75722053534c20696d706c656d656e746174696f6e206973206a757374206f7074696f6e616c2c20796f75206861766520746f206d616b> 20.0195 <652073757265207468617420697420697320706f737369626c6520746f2064697361626c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5492 Tw + +BT +48.24 87.726 Td +/F1.0 10.5 Tf +<53534c2072656c6174656420636f646520706172747320617420636f6d70696c652074696d652e20496e207468652041532069662074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.5492 Tw + +BT +339.3578 87.726 Td +/F3.0 10.5 Tf +<41535f5553455f53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5492 Tw + +BT +391.8578 87.726 Td +/F1.0 10.5 Tf +<206d6163726f20697320646566696e65642c207468656e2053534c206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 71.946 Td +/F1.0 10.5 Tf +<656e61626c65642c206f74686572776973652064697361626c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +95 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 94 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F6.0 97 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +/Annots [101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R] +>> +endobj +96 0 obj +[95 0 R /XYZ 0 841.89 null] +endobj +97 0 obj +<< /Type /Font +/BaseFont /781c87+mplus-1p-regular +/Subtype /TrueType +/FontDescriptor 375 0 R +/FirstChar 32 +/LastChar 255 +/Widths 377 0 R +/ToUnicode 376 0 R +>> +endobj +98 0 obj +[95 0 R /XYZ 0 649.87 null] +endobj +99 0 obj +[95 0 R /XYZ 0 471.19 null] +endobj +100 0 obj +[95 0 R /XYZ 0 418.87 null] +endobj +101 0 obj +<< /Border [0 0 0] +/Dest (deriving_the_test_port_class) +/Subtype /Link +/Rect [224.202 330.54 360.7148 344.82] +/Type /Annot +>> +endobj +102 0 obj +<< /Border [0 0 0] +/Dest (implementation_of_the_logger_functions) +/Subtype /Link +/Rect [336.3315 308.76 537.816 323.04] +/Type /Annot +>> +endobj +103 0 obj +<< /Border [0 0 0] +/Dest (function_translations) +/Subtype /Link +/Rect [198.2668 286.98 307.9811 301.26] +/Type /Annot +>> +endobj +104 0 obj +<< /Border [0 0 0] +/Dest (functions_for_manipulating_the_set_of_events_for_which_the_port_waits) +/Subtype /Link +/Rect [211.3034 265.2 547.04 279.48] +/Type /Annot +>> +endobj +105 0 obj +<< /Border [0 0 0] +/Dest (functions_for_manipulating_the_set_of_events_for_which_the_port_waits) +/Subtype /Link +/Rect [66.24 249.42 94.3821 263.7] +/Type /Annot +>> +endobj +106 0 obj +<< /Border [0 0 0] +/Dest (final_steps) +/Subtype /Link +/Rect [144.6855 227.64 199.0545 241.92] +/Type /Annot +>> +endobj +107 0 obj +[95 0 R /XYZ 0 187.11 null] +endobj +108 0 obj +<< /Length 19936 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +<4578616d706c653a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 778.86 m +543.04 778.86 l +545.2491 778.86 547.04 777.0691 547.04 774.86 c +547.04 687.16 l +547.04 684.9509 545.2491 683.16 543.04 683.16 c +52.24 683.16 l +50.0309 683.16 48.24 684.9509 48.24 687.16 c +48.24 774.86 l +48.24 777.0691 50.0309 778.86 52.24 778.86 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 778.86 m +543.04 778.86 l +545.2491 778.86 547.04 777.0691 547.04 774.86 c +547.04 687.16 l +547.04 684.9509 545.2491 683.16 543.04 683.16 c +52.24 683.16 l +50.0309 683.16 48.24 684.9509 48.24 687.16 c +48.24 774.86 l +48.24 777.0691 50.0309 778.86 52.24 778.86 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 756.035 Td +/F3.0 11 Tf +<2369666465662041535f5553455f53534c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 741.295 Td +/F3.0 11 Tf +<636c617373206d79706f72745f5f5054203a207075626c69632053534c5f536f636b65742c207075626c6963206d79706f72745f5f50545f42415345207b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 726.555 Td +/F3.0 11 Tf +<23656c7365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 711.815 Td +/F3.0 11 Tf +<636c617373206d79706f72745f5f5054203a207075626c69632041627374726163745f536f636b65742c207075626c6963206d79706f72745f5f50545f42415345207b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 697.075 Td +/F3.0 11 Tf +<23656e646966> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 647.136 Td +/F2.0 18 Tf +<496d706c656d656e746174696f6e206f6620746865204c6f676765722046756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9598 Tw + +BT +48.24 619.116 Td +/F1.0 10.5 Tf +<496d706c656d656e742074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9598 Tw + +BT +128.6416 619.116 Td +/F3.0 10.5 Tf +<6c6f675f6465627567> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9598 Tw + +BT +175.8916 619.116 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9598 Tw + +BT +183.1959 619.116 Td +/F3.0 10.5 Tf +<6c6f675f6572726f72> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9598 Tw + +BT +230.4459 619.116 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9598 Tw + +BT +237.7502 619.116 Td +/F3.0 10.5 Tf +<6c6f675f7761726e696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9598 Tw + +BT +295.5002 619.116 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9598 Tw + +BT +323.9688 619.116 Td +/F3.0 10.5 Tf +<6c6f675f686578> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9598 Tw + +BT +360.7188 619.116 Td +/F1.0 10.5 Tf +<207669727475616c2066756e6374696f6e7320696620796f75206e656564206f74686572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 603.336 Td +/F1.0 10.5 Tf +<696d706c656d656e746174696f6e207468616e207468652064656661756c742e2028746865792063616e20626520656d70747920696d706c656d656e746174696f6e73206966206c6f6767696e67206973206e6f74206e656564656429> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 567.24 99.76 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +148.0 567.24 399.04 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 546.96 99.76 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +148.0 546.96 399.04 20.28 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +48.24 526.68 99.76 20.28 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +148.0 526.68 399.04 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 506.4 99.76 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +148.0 506.4 399.04 20.28 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +48.24 486.12 99.76 20.28 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +148.0 486.12 399.04 20.28 re +f +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 587.52 m +148.0 587.52 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 567.24 m +148.0 567.24 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 587.77 m +48.24 566.615 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 587.77 m +148.0 566.615 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +51.24 573.306 Td +/F2.0 10.5 Tf +<46756e6374696f6e> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 587.52 m +547.04 587.52 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +148.0 567.24 m +547.04 567.24 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 587.77 m +148.0 566.615 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 587.77 m +547.04 566.615 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +151.0 573.306 Td +/F2.0 10.5 Tf +<4465736372697074696f6e> Tj +ET + +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 567.24 m +148.0 567.24 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 546.96 m +148.0 546.96 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 567.865 m +48.24 546.71 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 567.865 m +148.0 546.71 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 555.21 Td +/F3.0 10.5 Tf +<6c6f675f6465627567> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +148.0 567.24 m +547.04 567.24 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 546.96 m +547.04 546.96 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 567.865 m +148.0 546.71 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 567.865 m +547.04 546.71 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +151.0 553.026 Td +/F1.0 10.5 Tf +<646f6573207468652064656275672d6c6f6767696e67> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 546.96 m +148.0 546.96 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 526.68 m +148.0 526.68 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 547.21 m +48.24 526.43 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 547.21 m +148.0 526.43 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 534.93 Td +/F3.0 10.5 Tf +<6c6f675f686578> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 546.96 m +547.04 546.96 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 526.68 m +547.04 526.68 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 547.21 m +148.0 526.43 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 547.21 m +547.04 526.43 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +151.0 532.746 Td +/F1.0 10.5 Tf +<646f657320746865206c6f6767696e67206f6620746865206d65737361676520636f6e74656e7420696e2068657820666f726d6174> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 526.68 m +148.0 526.68 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 506.4 m +148.0 506.4 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 526.93 m +48.24 506.15 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 526.93 m +148.0 506.15 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 514.65 Td +/F3.0 10.5 Tf +<6c6f675f7761726e696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 526.68 m +547.04 526.68 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 506.4 m +547.04 506.4 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 526.93 m +148.0 506.15 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 526.93 m +547.04 506.15 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +151.0 512.466 Td +/F1.0 10.5 Tf +<646f657320746865206c6f6767696e67206f66207761726e696e67206d65737361676573> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 506.4 m +148.0 506.4 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 486.12 m +148.0 486.12 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 506.65 m +48.24 485.87 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 506.65 m +148.0 485.87 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 494.37 Td +/F3.0 10.5 Tf +<6c6f675f6572726f72> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 506.4 m +547.04 506.4 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 486.12 m +547.04 486.12 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 506.65 m +148.0 485.87 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 506.65 m +547.04 485.87 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +151.0 492.186 Td +/F1.0 10.5 Tf +[<697320657870656374696e6720746865207465737420706f727420746f2073746f7020776974682061205454> 20.0195 <434e5f455252> 20.0195 <4f52>] TJ +ET + +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4445 Tw + +BT +48.24 462.156 Td +/F1.0 10.5 Tf +[<59> 69.8242 <6f752063616e2075736520746865206c6f676765722066756e6374696f6e7320696d706c656d656e74656420696e207468652041532e20496e2074686973206361736520796f75206861766520746f2063616c6c20746865204153>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1842 Tw + +BT +48.24 446.376 Td +/F1.0 10.5 Tf +[<636f6e7374727563746f72207769746820796f7572207465737420706f7274207479706520616e64206e616d652e20496e2074686973207761> 20.0195 <79207468652041532077696c6c206c6f67206d6573736167657320616374696e67206c696b> 20.0195 <6520796f7572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 430.596 Td +/F1.0 10.5 Tf +<7465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 390.756 Td +/F2.0 18 Tf +[<46756e6374696f6e205472> 20.0195 <616e736c6174696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4647 Tw + +BT +48.24 362.736 Td +/F1.0 10.5 Tf +[<5472> 20.0195 <616e736c6174652074686520706f7274d5732066756e6374696f6e7320746f2074686520736f636b> 20.0195 <6574d5732066756e6374696f6e732e2042> 20.0195 <79207472> 20.0195 <616e736c6174696e67207765206d65616e20612066756e6374696f6e2063616c6c2077697468>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 346.956 Td +/F1.0 10.5 Tf +[<756e6368616e67656420706172> 20.0195 <616d6574657273206c696b> 20.0195 <6520746869733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 331.14 m +543.04 331.14 l +545.2491 331.14 547.04 329.3491 547.04 327.14 c +547.04 254.18 l +547.04 251.9709 545.2491 250.18 543.04 250.18 c +52.24 250.18 l +50.0309 250.18 48.24 251.9709 48.24 254.18 c +48.24 327.14 l +48.24 329.3491 50.0309 331.14 52.24 331.14 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 331.14 m +543.04 331.14 l +545.2491 331.14 547.04 329.3491 547.04 327.14 c +547.04 254.18 l +547.04 251.9709 545.2491 250.18 543.04 250.18 c +52.24 250.18 l +50.0309 250.18 48.24 251.9709 48.24 254.18 c +48.24 327.14 l +48.24 329.3491 50.0309 331.14 52.24 331.14 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 308.315 Td +/F3.0 11 Tf +<766f6964206d79706f72745f5f50543a3a7365745f706172616d6574657228636f6e73742063686172202a706172616d657465725f6e616d652c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 293.575 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 278.835 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 264.095 Td +/F3.0 11 Tf +<7d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 226.216 Td +/F1.0 10.5 Tf +[<546865206c697374206f662066756e6374696f6e7320746f206265207472> 20.0195 <616e736c617465643a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 190.12 249.4 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +297.64 190.12 249.4 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 172.675 249.4 17.445 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +297.64 172.675 249.4 17.445 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +48.24 155.23 249.4 17.445 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +297.64 155.23 249.4 17.445 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 137.785 249.4 17.445 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +297.64 137.785 249.4 17.445 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +48.24 120.34 249.4 17.445 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +297.64 120.34 249.4 17.445 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 102.895 249.4 17.445 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +297.64 102.895 249.4 17.445 re +f +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 210.4 m +297.64 210.4 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 190.12 m +297.64 190.12 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 210.65 m +48.24 189.495 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 210.65 m +297.64 189.495 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +51.24 196.186 Td +/F2.0 10.5 Tf +<506f72742066756e6374696f6e733a> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 210.4 m +547.04 210.4 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +297.64 190.12 m +547.04 190.12 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 210.65 m +297.64 189.495 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 210.65 m +547.04 189.495 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +300.64 196.186 Td +/F2.0 10.5 Tf +[<536f636b> 20.0195 <65742066756e6374696f6e733a>] TJ +ET + +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 190.12 m +297.64 190.12 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 172.675 m +297.64 172.675 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 190.745 m +48.24 172.425 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 190.745 m +297.64 172.425 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 178.09 Td +/F3.0 10.5 Tf +<7365745f706172616d65746572> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +297.64 190.12 m +547.04 190.12 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 172.675 m +547.04 172.675 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 190.745 m +297.64 172.425 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 190.745 m +547.04 172.425 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +300.64 178.09 Td +/F3.0 10.5 Tf +<706172616d657465725f736574> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 172.675 m +297.64 172.675 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 155.23 m +297.64 155.23 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 172.925 m +48.24 154.98 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 172.925 m +297.64 154.98 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 160.645 Td +/F3.0 10.5 Tf +<48616e646c655f46645f4576656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 172.675 m +547.04 172.675 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 155.23 m +547.04 155.23 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 172.925 m +297.64 154.98 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 172.925 m +547.04 154.98 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +300.64 160.645 Td +/F3.0 10.5 Tf +<48616e646c655f536f636b65745f4576656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 155.23 m +297.64 155.23 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 137.785 m +297.64 137.785 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 155.48 m +48.24 137.535 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 155.48 m +297.64 137.535 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 143.2 Td +/F3.0 10.5 Tf +<48616e646c655f54696d656f7574> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 155.23 m +547.04 155.23 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 137.785 m +547.04 137.785 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 155.48 m +297.64 137.535 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 155.48 m +547.04 137.535 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +300.64 143.2 Td +/F3.0 10.5 Tf +<48616e646c655f54696d656f75745f4576656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 137.785 m +297.64 137.785 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 120.34 m +297.64 120.34 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 138.035 m +48.24 120.09 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 138.035 m +297.64 120.09 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 125.755 Td +/F3.0 10.5 Tf +<757365725f6d6170> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 137.785 m +547.04 137.785 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 120.34 m +547.04 120.34 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 138.035 m +297.64 120.09 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 138.035 m +547.04 120.09 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +300.64 125.755 Td +/F3.0 10.5 Tf +<6d61705f75736572> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 120.34 m +297.64 120.34 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 102.895 m +297.64 102.895 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 120.59 m +48.24 102.645 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 120.59 m +297.64 102.645 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 108.31 Td +/F3.0 10.5 Tf +<757365725f756e6d6170> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 120.34 m +547.04 120.34 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 102.895 m +547.04 102.895 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 120.59 m +297.64 102.645 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 120.59 m +547.04 102.645 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +300.64 108.31 Td +/F3.0 10.5 Tf +<756e6d61705f75736572> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5478 Tw + +BT +48.24 78.931 Td +/F1.0 10.5 Tf +<496620796f75206d69676874206e656564206f746865722066756e6374696f6e7320616c736f20746f20626520706572666f726d656420647572696e6720> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5478 Tw + +BT +367.7224 78.931 Td +/F3.0 10.5 Tf +<6d6170> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5478 Tw + +BT +383.4724 78.931 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5478 Tw + +BT +389.3648 78.931 Td +/F3.0 10.5 Tf +<756e6d6170> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5478 Tw + +BT +415.6148 78.931 Td +/F1.0 10.5 Tf +<206f7220> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5478 Tw + +BT +433.1534 78.931 Td +/F3.0 10.5 Tf +<7365745f706172616d65746572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5478 Tw + +BT +501.4034 78.931 Td +/F1.0 10.5 Tf +<2c20796f752063616e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 63.151 Td +/F1.0 10.5 Tf +[<616464207468656d2072696768742061667465722074686520736f636b> 20.0195 <6574d5732066756e6374696f6e2063616c6c732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3135> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +109 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 108 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +/F2.0 19 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +110 0 obj +[109 0 R /XYZ 0 671.16 null] +endobj +111 0 obj +[109 0 R /XYZ 0 414.78 null] +endobj +112 0 obj +<< /Length 9550 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 793.926 Td +/F1.0 10.5 Tf +<4578616d706c653a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 778.11 m +543.04 778.11 l +545.2491 778.11 547.04 776.3191 547.04 774.11 c +547.04 597.97 l +547.04 595.7609 545.2491 593.97 543.04 593.97 c +52.24 593.97 l +50.0309 593.97 48.24 595.7609 48.24 597.97 c +48.24 774.11 l +48.24 776.3191 50.0309 778.11 52.24 778.11 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 778.11 m +543.04 778.11 l +545.2491 778.11 547.04 776.3191 547.04 774.11 c +547.04 597.97 l +547.04 595.7609 545.2491 593.97 543.04 593.97 c +52.24 593.97 l +50.0309 593.97 48.24 595.7609 48.24 597.97 c +48.24 774.11 l +48.24 776.3191 50.0309 778.11 52.24 778.11 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 755.285 Td +/F3.0 11 Tf +<766f6964206d79706f72745f5f50543a3a7365745f706172616d6574657228636f6e73742063686172202a706172616d657465725f6e616d652c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 740.545 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 725.805 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 711.065 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 696.325 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 681.585 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 666.845 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 652.105 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 637.365 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 622.625 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 607.885 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6989 Tw + +BT +48.24 570.006 Td +/F1.0 10.5 Tf +[<546865207472> 20.0195 <616e736c6174696f6e206f662074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.6989 Tw + +BT +165.3904 570.006 Td +/F3.0 10.5 Tf +<6f7574676f696e675f73656e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6989 Tw + +BT +233.6404 570.006 Td +/F1.0 10.5 Tf +<20746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.6989 Tw + +BT +252.2317 570.006 Td +/F3.0 10.5 Tf +<73656e645f6f7574676f696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6989 Tw + +BT +320.4817 570.006 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e206e6565647320736f6d6520706172> 20.0195 <616d6574657220666f726d617474696e67>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +7.4527 Tw + +BT +48.24 554.226 Td +/F1.0 10.5 Tf +<73696e63652074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +7.4527 Tw + +BT +110.1959 554.226 Td +/F3.0 10.5 Tf +<6f7574676f696e675f73656e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +7.4527 Tw + +BT +178.4459 554.226 Td +/F1.0 10.5 Tf +[<2068617320706172> 20.0195 <616d657465727320696e686572697465642066726f6d20796f7572205454> 20.0195 <434e2d3320737472756374757265732c207768696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.1356 Tw + +BT +48.24 538.446 Td +/F3.0 10.5 Tf +<41627374726163745f536f636b6574> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.1356 Tw + +BT +126.99 538.446 Td +/F6.0 10.5 Tf + Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.1356 Tw + +BT +130.014 538.446 Td +/F3.0 10.5 Tf +<7320606f7574676f696e675f73656e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.1356 Tw + +BT +218.1496 538.446 Td +/F1.0 10.5 Tf +[<2068617320706172> 20.0195 <616d657465727320617320>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.1356 Tw + +BT +330.9977 538.446 Td +/F3.0 10.5 Tf +<28636861722a206d6573736167652c20696e74206d6573736167654c656e6774682c20696e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 522.666 Td +/F3.0 10.5 Tf +<636c69656e745f696429> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +100.74 522.666 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +5.7831 Tw + +BT +48.24 494.886 Td +/F1.0 10.5 Tf +<5468652073616d65206170706c69657320666f722074686520696e636f6d696e672066756e6374696f6e2063616c6c7320776865726520796f75206861766520746f20777269746520796f7572206f776e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 479.106 Td +/F3.0 10.5 Tf +<6d6573736167655f696e636f6d696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +132.24 479.106 Td +/F1.0 10.5 Tf +<20746f20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +147.4335 479.106 Td +/F3.0 10.5 Tf +<696e636f6d696e675f6d657373616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +231.4335 479.106 Td +/F1.0 10.5 Tf +[<207472> 20.0195 <616e736c6174696f6e2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 451.326 Td +/F1.0 10.5 Tf +<4578616d706c653a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 435.51 m +543.04 435.51 l +545.2491 435.51 547.04 433.7191 547.04 431.51 c +547.04 270.11 l +547.04 267.9009 545.2491 266.11 543.04 266.11 c +52.24 266.11 l +50.0309 266.11 48.24 267.9009 48.24 270.11 c +48.24 431.51 l +48.24 433.7191 50.0309 435.51 52.24 435.51 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 435.51 m +543.04 435.51 l +545.2491 435.51 547.04 433.7191 547.04 431.51 c +547.04 270.11 l +547.04 267.9009 545.2491 266.11 543.04 266.11 c +52.24 266.11 l +50.0309 266.11 48.24 267.9009 48.24 270.11 c +48.24 431.51 l +48.24 433.7191 50.0309 435.51 52.24 435.51 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 412.685 Td +/F3.0 11 Tf +<766f6964206d79706f72745f5f50543a3a6f7574676f696e675f73656e6428636f6e7374205454434e335f5f537472756374757265262073656e645f70617229> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 397.945 Td +/F3.0 11 Tf +<7b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 383.205 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 368.465 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 353.725 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 338.985 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 324.245 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 309.505 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 294.765 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 280.025 Td +/F3.0 11 Tf +<7d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 230.086 Td +/F2.0 18 Tf +<46756e6374696f6e7320666f72204d616e6970756c6174696e672074686520536574206f66204576656e747320666f72> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 205.606 Td +/F2.0 18 Tf +[<57686963682074686520506f72742057> 49.8047 <61697473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 177.586 Td +/F1.0 10.5 Tf +[<41> 20.0195 <64642074686520666f6c6c6f77696e6720287669727475616c29206d656d6265722066756e6374696f6e7320746f20796f757220706f72742028636c61737320646566696e6974696f6e2920756e6368616e6765643a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3136> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +113 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 112 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +/F6.0 97 0 R +/F2.0 19 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +114 0 obj +[113 0 R /XYZ 0 254.11 null] +endobj +115 0 obj +<< /Limits [(_the_test_port) (warning_messages_in_case_SSL_connections_are_used)] +/Names [(_the_test_port) 52 0 R (_tips_and_tricks) 99 0 R (_to_receive_a_message) 88 0 R (_usage) 100 0 R (_using_ssl_on_top_of_a_tcp_connection) 121 0 R (_warning_messages) 145 0 R (_warning_messages_in_case_tcp_connections_are_used) 146 0 R (abstract-socket-test-port-parameters-in-the-test-port-configuration-file-if-the-transport-channel-is-tcp-ip) 66 0 R (deriving_the_test_port_class) 107 0 R (final_steps) 118 0 R (function_translations) 111 0 R (functions_for_manipulating_the_set_of_events_for_which_the_port_waits) 114 0 R (implementation_of_the_logger_functions) 110 0 R (map-unmap-the-test-port) 75 0 R (sending-receiving-messages) 36 0 R (using-ttcn-buffer-in-test-ports) 119 0 R (warning_messages_in_case_SSL_connections_are_used) 151 0 R] +>> +endobj +116 0 obj +<< /Length 12325 +>> +stream +q +q +/DeviceRGB cs +0.9608 0.9608 0.9608 scn +52.24 805.89 m +543.04 805.89 l +545.2491 805.89 547.04 804.0991 547.04 801.89 c +547.04 640.49 l +547.04 638.2809 545.2491 636.49 543.04 636.49 c +52.24 636.49 l +50.0309 636.49 48.24 638.2809 48.24 640.49 c +48.24 801.89 l +48.24 804.0991 50.0309 805.89 52.24 805.89 c +h +f +/DeviceRGB CS +0.8 0.8 0.8 SCN +0.75 w +52.24 805.89 m +543.04 805.89 l +545.2491 805.89 547.04 804.0991 547.04 801.89 c +547.04 640.49 l +547.04 638.2809 545.2491 636.49 543.04 636.49 c +52.24 636.49 l +50.0309 636.49 48.24 638.2809 48.24 640.49 c +48.24 801.89 l +48.24 804.0991 50.0309 805.89 52.24 805.89 c +h +S +Q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +59.24 783.065 Td +/F3.0 11 Tf +<766f6964204164645f46645f526561645f48616e646c657228696e7420666429207b2048616e646c65725f4164645f46645f52656164286664293b207d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 768.325 Td +/F3.0 11 Tf +<766f6964204164645f46645f57726974655f48616e646c657228696e7420666429207b2048616e646c65725f4164645f46645f5772697465286664293b207d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 753.585 Td +/F3.0 11 Tf +<766f69642052656d6f76655f46645f526561645f48616e646c657228696e7420666429207b2048616e646c65725f52656d6f76655f46645f52656164286664293b207d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 738.845 Td +/F3.0 11 Tf +<766f69642052656d6f76655f46645f57726974655f48616e646c657228696e7420666429207b2048616e646c65725f52656d6f76655f46645f5772697465286664293b207d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 724.105 Td +/F3.0 11 Tf +<766f69642052656d6f76655f46645f416c6c5f48616e646c65727328696e7420666429207b2048616e646c65725f52656d6f76655f4664286664293b207d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 709.365 Td +/F3.0 11 Tf +<766f69642048616e646c65725f556e696e7374616c6c2829207b20556e696e7374616c6c5f48616e646c657228293b207d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 694.625 Td +/F3.0 11 Tf +<766f69642054696d65725f5365745f48616e646c657228646f75626c652063616c6c5f696e74657276616c2c20626f6f6c65616e2069735f74696d656f7574203d20545255452c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 679.885 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 665.145 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 650.405 Td +/F3.0 11 Tf +<7d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.5 w +0.9333 0.9333 0.9333 SCN +102.4695 624.49 m +102.4695 553.37 l +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.3451 584.856 Td +/F2.0 10.5 Tf +[<4e4f> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.5694 Tw + +BT +114.4695 608.526 Td +/F1.0 10.5 Tf +[<5468657365206d656d6265722066756e6374696f6e732061726520726571756972656420616e6420757365642062> 20.0195 <79204162737472> 20.0195 <61637420536f636b> 20.0195 <65742e205468657920617265>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6658 Tw + +BT +114.4695 592.746 Td +/F1.0 10.5 Tf +[<646566696e656420696e204162737472> 20.0195 <61637420536f636b> 20.0195 <6574206173207669727475616c20616e642061726520746f206265206f76657272696464656e20696e207468652064657363656e64616e74>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4769 Tw + +BT +114.4695 576.966 Td +/F1.0 10.5 Tf +[<54> 29.7852 <65737420506f727420636c6173732e20546865792061726520696d706c656d656e74656420696e20746865202854> 29.7852 <65737420506f72742920636c61737320646566696e6974696f6e206f6e6c7920666f7220746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +114.4695 561.186 Td +/F1.0 10.5 Tf +[<73616b> 20.0195 <65206f662073696d706c6963697479> 89.8438 <2e29>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 517.346 Td +/F2.0 18 Tf +<46696e616c205374657073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8102 Tw + +BT +48.24 489.326 Td +/F1.0 10.5 Tf +[<46696e616c6c79> 89.8438 <2c207468652066756e6374696f6e20646566696e6974696f6e73206d75737420626520616464656420746f20746865206865616465722066696c65206163636f7264696e676c79> 89.8438 <2e205468656e2c20796f7520617265207265616479>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 473.546 Td +/F1.0 10.5 Tf +<746f20676f20616865616420616e6420646576656c6f7020796f7572207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 429.434 Td +/F2.0 22 Tf +<5573696e6720> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +115.802 429.434 Td +/F3.0 22 Tf +<5454434e5f427566666572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +236.802 429.434 Td +/F2.0 22 Tf +[<20696e2054> 29.7852 <65737420506f727473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.79 Tw + +BT +48.24 400.246 Td +/F1.0 10.5 Tf +[<546865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742075736573206120>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.79 Tw + +BT +186.0646 400.246 Td +/F3.0 10.5 Tf +<5454434e5f427566666572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.79 Tw + +BT +243.8146 400.246 Td +/F1.0 10.5 Tf +<20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +0.79 Tw + +BT +247.3241 400.246 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.79 Tw + +BT +260.7326 400.246 Td +/F1.0 10.5 Tf +<20746f2073746f726520696e636f6d696e67206d65737361676520706f7274696f6e732e20496620746865207465737420706f727420616c736f> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 384.466 Td +/F1.0 10.5 Tf +[<776f756c64206c696b> 20.0195 <6520746f2073746f726520696e636f6d696e67206d657373616765732c20686572652069732061206465736372697074696f6e20686f7720746f20646f20746861743a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2799 Tw + +BT +48.24 356.686 Td +/F1.0 10.5 Tf +<546865207465737420706f72742063616e206163636573732074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2799 Tw + +BT +188.9497 356.686 Td +/F3.0 10.5 Tf +<5454434e5f427566666572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2799 Tw + +BT +246.6997 356.686 Td +/F1.0 10.5 Tf +<207769746820> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2799 Tw + +BT +275.4415 356.686 Td +/F3.0 10.5 Tf +<6765745f627566666572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2799 Tw + +BT +327.9415 356.686 Td +/F1.0 10.5 Tf +[<282920616e642063616e206f706572> 20.0195 <617465206f6e2069742e20496620746865207465737420706f72742075736573>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5545 Tw + +BT +48.24 340.906 Td +/F1.0 10.5 Tf +<7468652062756666657220746f2073746f726520646174612c206974206d757374207365742074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5545 Tw + +BT +246.5145 340.906 Td +/F3.0 10.5 Tf +<7474636e5f6275666665725f75736572636f6e74726f6c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5545 Tw + +BT +367.2645 340.906 Td +/F1.0 10.5 Tf +<207661726961626c6520746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5545 Tw + +BT +428.3265 340.906 Td +/F5.0 10.5 Tf +<74727565> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5545 Tw + +BT +449.3265 340.906 Td +/F1.0 10.5 Tf +<2c20736f2074686174207468652041532077696c6c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 325.126 Td +/F1.0 10.5 Tf +<6e6f7420636c656172207468652062756666657220636f6e74656e742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 297.346 Td +/F1.0 10.5 Tf +[<496e2074686973206361736520746865207465737420706f72742063616e20757365207468652062756666657220696e2074686520666f6c6c6f77696e67207761> 20.0195 <79733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 269.566 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 269.566 Td +/F3.0 10.5 Tf +<6765745f627566666572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +118.74 269.566 Td +/F1.0 10.5 Tf +<282920746f2066657463682074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +187.62 269.566 Td +/F3.0 10.5 Tf +<5454434e5f427566666572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +245.37 269.566 Td +/F1.0 10.5 Tf +<206173736f63696174656420776974682074686520636c69656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 247.786 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 247.786 Td +/F1.0 10.5 Tf +[<4f7074696f6e616c6c79206d6f6469667920636f6e74656e743b206f72207761697420666f7220636f6d706c65746520544c> 49.8047 <56>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 226.006 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2893 Tw + +BT +66.24 226.006 Td +/F1.0 10.5 Tf +[<4f6e63652061206d65737361676520706f7274696f6e2069732073656e7420746f20746865205454> 20.0195 <434e2d3320746573742073756974652c20637574207468652073656e74206d6573736167652066726f6d2074686520627566666572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4943 Tw + +BT +66.24 210.226 Td +/F1.0 10.5 Tf +<62656361757365207468652041532077696c6c206e6f7420646f20746861742e20496e206361736520746865207465737420706f72742073696d706c792070617373656420746865206d65737361676520746f207468652074657374207375697465> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.234 Tw + +BT +66.24 194.446 Td +/F1.0 10.5 Tf +[<616e642075736573206e6f2073746f72> 20.0195 <616765206f662069742028652e672eca54> 20.0195 <43502054> 29.7852 <65737420506f7274292c2069742063616e206c6561766520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.234 Tw + +BT +349.421 194.446 Td +/F3.0 10.5 Tf +<7474636e5f6275666665725f75736572636f6e74726f6c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.234 Tw + +BT +470.171 194.446 Td +/F1.0 10.5 Tf +<20696e2066616c736520287768696368> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 178.666 Td +/F1.0 10.5 Tf +[<6973207468652064656661756c742076616c75652920736f2074686174207468652041532077696c6c2074616b> 20.0195 <652063617265206f662062756666657220636c65616e7570732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 134.554 Td +/F2.0 22 Tf +[<5573696e672053534c206f6e2054> 29.7852 <6f70206f6620612054> 20.0195 <435020436f6e6e656374696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1766 Tw + +BT +48.24 105.366 Td +/F1.0 10.5 Tf +[<53534c2063616e2062652075736564206f6e20746f70206f66207468652054> 20.0195 <435020636f6e6e656374696f6e2e205468652061757468656e7469636174696f6e206d6f64652063616e20626520636f6e666967757265642076696120612074657374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 89.586 Td +/F1.0 10.5 Tf +[<706f727420706172> 20.0195 <616d657465722e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3137> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +117 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 116 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F3.0 27 0 R +/F2.0 19 0 R +/F1.0 8 0 R +/F5.0 59 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +/Annots [120 0 R] +>> +endobj +118 0 obj +[117 0 R /XYZ 0 541.37 null] +endobj +119 0 obj +[117 0 R /XYZ 0 457.73 null] +endobj +120 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [247.3241 397.18 260.7326 411.46] +/Type /Annot +>> +endobj +121 0 obj +[117 0 R /XYZ 0 162.85 null] +endobj +122 0 obj +<< /Length 13988 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 786.666 Td +/F2.0 18 Tf +<536572766572204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1326 Tw + +BT +48.24 758.646 Td +/F1.0 10.5 Tf +[<496e20736572766572206d6f64652c20666972737420612054> 20.0195 <435020736f636b> 20.0195 <657420697320637265617465642e20546865207365727665722073746172747320746f206c697374656e206f6e207468697320706f7274202875706f6e20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.3173 Tw + +BT +48.24 742.866 Td +/F3.0 10.5 Tf +<757365725f6d6170> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3173 Tw + +BT +90.24 742.866 Td +/F1.0 10.5 Tf +[<2829206f706572> 20.0195 <6174696f6e206f7220696e2063617365206f6620636f6e6e656374696f6e20415350732c2063616c6c696e672074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.3173 Tw + +BT +360.5324 742.866 Td +/F3.0 10.5 Tf +<6f70656e5f6c697374656e5f706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3173 Tw + +BT +444.5324 742.866 Td +/F1.0 10.5 Tf +[<2829206f706572> 20.0195 <6174696f6e292e204f6e63652061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6174 Tw + +BT +48.24 727.086 Td +/F1.0 10.5 Tf +[<54> 20.0195 <435020636f6e6e65637420726571756573742069732072656365697665642c207468652054> 20.0195 <435020636f6e6e656374696f6e206973207365742075702e2041667465722074686973207468652053534c2068616e647368616b> 20.0195 <6520626567696e732e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3796 Tw + +BT +48.24 711.306 Td +/F1.0 10.5 Tf +[<5468652053534c206973206d617070656420746f207468652066696c652064657363726970746f72206f66207468652054> 20.0195 <435020736f636b> 20.0195 <65742e205468652042494f2c20776869636820697320616e20492f4f206162737472> 20.0195 <616374696f6e2074686174>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6741 Tw + +BT +48.24 695.526 Td +/F1.0 10.5 Tf +[<6869646573206d616e> 20.0195 <79206f662074686520756e6465726c79696e6720492f4f2064657461696c732066726f6d20616e206170706c69636174696f6e2c206973206175746f6d61746963616c6c7920637265617465642062> 20.0195 <79204f70656e53534c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3726 Tw + +BT +48.24 679.746 Td +/F1.0 10.5 Tf +[<696e6865726974696e67207468652063686172> 20.0195 <6163746572697374696373206f662074686520736f636b> 20.0195 <657420286e6f6e2d626c6f636b696e67206d6f6465292e205468652042494f20697320636f6d706c6574656c79207472> 20.0195 <616e73706172656e742e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7048 Tw + +BT +48.24 663.966 Td +/F1.0 10.5 Tf +[<5468652073657276657220616c7761> 20.0195 <79732073656e64732069747320636572746966696361746520746f2074686520636c69656e742e20496620636f6e6669677572656420736f2c20746865207365727665722077696c6c207265717565737420746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8587 Tw + +BT +48.24 648.186 Td +/F1.0 10.5 Tf +<6365727469666963617465206f662074686520636c69656e7420616e6420636865636b20696620697420697320612076616c69642063657274696669636174652e204966206e6f742c207468652053534c20636f6e6e656374696f6e20697320726566757365642e204966> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3686 Tw + +BT +48.24 632.406 Td +/F1.0 10.5 Tf +<636f6e66696775726564206e6f7420746f20766572696679207468652063657274696669636174652c20746865207365727665722077696c6c206e6f7420726571756573742069742066726f6d2074686520636c69656e7420616e64207468652053534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6836 Tw + +BT +48.24 616.626 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e2069732061636365707465642e204966207573616765206f66207468652053534c2073657373696f6e20726573756d7074696f6e20697320656e61626c656420616e642074686520636c69656e742072656665727320746f2061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5616 Tw + +BT +48.24 600.846 Td +/F1.0 10.5 Tf +<70726576696f75732053534c2073657373696f6e2c20746865207365727665722077696c6c206163636570742069742c20756e6c657373206974206973206e6f7420666f756e6420696e207468652053534c20636f6e746578742063616368652e204f6e6365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.795 Tw + +BT +48.24 585.066 Td +/F1.0 10.5 Tf +<74686520636f6e6e656374696f6e206973206e65676f7469617465642c20646174612063616e2062652073656e742f72656365697665642e205468652053534c20636f6e6e656374696f6e206973207368757420646f776e207573696e6720616e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.2702 Tw + +BT +48.24 569.286 Td +/F3.0 10.5 Tf +<756e6d6170> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2702 Tw + +BT +74.49 569.286 Td +/F1.0 10.5 Tf +[<2829206f706572> 20.0195 <6174696f6e2e205468652073687574646f776e2070726f6365737320646f6573206e6f7420666f6c6c6f7720746865207374616e646172643a20746865207365727665722073696d706c79207368757473>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 553.506 Td +/F1.0 10.5 Tf +[<646f776e20616e6420646f6573206e6f742065787065637420616e> 20.0195 <792061636b6e6f776c656467656d656e742066726f6d2074686520636c69656e742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.9681 Tw + +BT +48.24 525.726 Td +/F1.0 10.5 Tf +<436c69656e747320636f6e6e656374656420746f2074686520736572766572206172652064697374696e6775697368656420776974682074686569722066696c652064657363726970746f72206e756d626572732e205768656e2061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 509.946 Td +/F1.0 10.5 Tf +<6d6573736167652069732072656365697665642c207468652066696c652064657363726970746f72206e756d62657220697320616c736f207061737365642c20736f2074686520636c69656e742063616e206265206964656e7469666965642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 470.106 Td +/F2.0 18 Tf +<436c69656e74204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1444 Tw + +BT +48.24 442.086 Td +/F1.0 10.5 Tf +[<496e20636c69656e74206d6f64652c20666972737420612054> 20.0195 <435020636f6e6e656374696f6e2069732072657175657374656420746f2074686520736572766572202875706f6e2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1444 Tw + +BT +419.431 442.086 Td +/F3.0 10.5 Tf +<757365725f6d6170> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1444 Tw + +BT +461.431 442.086 Td +/F1.0 10.5 Tf +[<2829206f706572> 20.0195 <6174696f6e206f7220696e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1412 Tw + +BT +48.24 426.306 Td +/F1.0 10.5 Tf +<63617365206f6620636f6e6e656374696f6e20415350732c2063616c6c696e672074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1412 Tw + +BT +228.3115 426.306 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1412 Tw + +BT +343.8115 426.306 Td +/F1.0 10.5 Tf +[<2829206f706572> 20.0195 <6174696f6e292e204f6e63652069742069732061636365707465642c207468652053534c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5224 Tw + +BT +48.24 410.526 Td +/F1.0 10.5 Tf +<656e64706f696e7420697320637265617465642e20496620636f6e6669677572656420736f2c2074686520636c69656e7420747269657320746f20757365207468652053534c2073657373696f6e2049642066726f6d207468652070726576696f7573> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2135 Tw + +BT +48.24 394.746 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e2c20696620617661696c61626c652028652e672eca6974206973206e6f742074686520666972737420636f6e6e656374696f6e292e204966206e6f2053534c2073657373696f6e20496420697320617661696c61626c652c206f7220746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0185 Tw + +BT +48.24 378.966 Td +/F1.0 10.5 Tf +[<73657276657220646f6573206e6f74206163636570742069742c20612066756c6c2068616e647368616b> 20.0195 <6520697320706572666f726d65642e20496620636f6e6669677572656420736f2c20746865206365727469666963617465206f6620746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0631 Tw + +BT +48.24 363.186 Td +/F1.0 10.5 Tf +[<7365727665722069732076657269666965642e2049662074686520766572696669636174696f6e206661696c732c207468652053534c20636f6e6e656374696f6e20697320696e7465727275707465642062> 20.0195 <792074686520636c69656e742e204966206e6f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4371 Tw + +BT +48.24 347.406 Td +/F1.0 10.5 Tf +<766572696669636174696f6e2072657175697265642c20746865207265636569766564206365727469666963617465206973207374696c6c2076657269666965642c20686f77657665722074686520726573756c7420646f6573206e6f742061666665637420746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 331.626 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e206576656e2074686f756768206974206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 291.786 Td +/F2.0 18 Tf +[<41> 20.0195 <757468656e7469636174696f6e20466c6f77>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 263.766 Td +/F1.0 10.5 Tf +[<496e2073756d6d617279> 89.8438 <2c207468652061757468656e7469636174696f6e20697320646f6e65206163636f7264696e6720746f207468697320666c6f773a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 235.986 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 235.986 Td +/F1.0 10.5 Tf +[<73736c2068616e647368616b> 20.0195 <6520626567696e7320286e657720636c69656e7420747269657320746f20636f6e6e65637429>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 214.206 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.61 Tw + +BT +66.24 214.206 Td +/F3.0 10.5 Tf +<7669727475616c20696e742073736c5f7665726966795f6365727469666963617465735f61745f68616e647368616b6528696e74207072657665726966795f6f6b2c20583530395f53544f52455f435458202a73736c5f63747829> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.61 Tw + +BT +547.04 214.206 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 198.426 Td +/F1.0 10.5 Tf +[<69732063616c6c65642e20447572696e6720746869732068616e647368616b> 20.0195 <6520796f752063616e20706572666f726d206164646974696f6e616c2061757468656e7469636174696f6e2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 176.646 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6971 Tw + +BT +66.24 176.646 Td +/F1.0 10.5 Tf +[<49662074686520636f6e6e656374696f6e2069732061636365707465642c207468652053534c2068616e647368616b> 20.0195 <652069732066696e697368656420616e642053534c2069732065737461626c69736865642e204e6f7720746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.7308 Tw + +BT +66.24 160.866 Td +/F1.0 10.5 Tf +<66756e6374696f6e207669727475616c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.7308 Tw + +BT +157.3705 160.866 Td +/F3.0 10.5 Tf +<626f6f6c2073736c5f7665726966795f636572746966696361746573> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.7308 Tw + +BT +309.1013 160.866 Td +/F1.0 10.5 Tf +[<28292069732063616c6c656420776865726520796f75206d61> 20.0195 <7920706572666f726d206f74686572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 145.086 Td +/F1.0 10.5 Tf +<61757468656e7469636174696f6e20696620796f752077616e742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5779 Tw + +BT +48.24 117.306 Td +/F3.0 10.5 Tf +<73736c5f7665726966795f636572746966696361746573> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5779 Tw + +BT +168.99 117.306 Td +/F1.0 10.5 Tf +[<28292069732061207669727475616c2066756e6374696f6e2e2049742069732063616c6c6564206166746572207468652053534c20636f6e6e656374696f6e2069732075702e2054> 29.7852 <65737420706f727473>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.496 Tw + +BT +48.24 101.526 Td +/F1.0 10.5 Tf +[<6d61> 20.0195 <792075736520697420746f20636865636b206f746865722070656572> -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1331 Tw + +BT +48.24 85.746 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e20697320636c6f7365642e20496e2063617365206f6620636c69656e74206d6f64652c20746865207465737420706f7274206578697473207769746820616e206572726f722028> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1331 Tw + +BT +432.8034 85.746 Td +/F7.0 10.5 Tf +<766572696669636174696f6e5f6572726f72> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1331 Tw + +BT +527.3034 85.746 Td +/F1.0 10.5 Tf +<292e20496e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 69.966 Td +/F1.0 10.5 Tf +[<736572766572206d6f646520746865207465737420706f7274206a7573742072656d6f76657320636c69656e7420646174612c20627574206b> 20.0195 <656570732072756e6e696e672e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3138> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +123 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 122 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F7.0 127 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +124 0 obj +[123 0 R /XYZ 0 841.89 null] +endobj +125 0 obj +[123 0 R /XYZ 0 494.13 null] +endobj +126 0 obj +[123 0 R /XYZ 0 315.81 null] +endobj +127 0 obj +<< /Type /Font +/BaseFont /d420e1+mplus1mn-bold +/Subtype /TrueType +/FontDescriptor 379 0 R +/FirstChar 32 +/LastChar 255 +/Widths 381 0 R +/ToUnicode 380 0 R +>> +endobj +128 0 obj +<< /Length 10422 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 782.394 Td +/F2.0 22 Tf +[<41> 20.0195 <64617074696e6720446572697665642054> 29.7852 <65737420506f72747320746f20537570706f72742049507636>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 753.206 Td +/F1.0 10.5 Tf +[<44657269766564207465737420706f7274732073686f756c64206265207570646174656420696e2074686520666f6c6c6f77696e67207761> 20.0195 <7920746f20737570706f7274204950763420616e6420495076363a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 725.426 Td +/F1.0 10.5 Tf +<416c6c2063616c6c73206f662066756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 709.61 m +543.04 709.61 l +545.2491 709.61 547.04 707.8191 547.04 705.61 c +547.04 662.13 l +547.04 659.9209 545.2491 658.13 543.04 658.13 c +52.24 658.13 l +50.0309 658.13 48.24 659.9209 48.24 662.13 c +48.24 705.61 l +48.24 707.8191 50.0309 709.61 52.24 709.61 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 709.61 m +543.04 709.61 l +545.2491 709.61 547.04 707.8191 547.04 705.61 c +547.04 662.13 l +547.04 659.9209 545.2491 658.13 543.04 658.13 c +52.24 658.13 l +50.0309 658.13 48.24 659.9209 48.24 662.13 c +48.24 705.61 l +48.24 707.8191 50.0309 709.61 52.24 709.61 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 686.785 Td +/F3.0 11 Tf +<636f6e73742073747275637420736f636b616464725f696e2026206765745f72656d6f74655f616464722829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 672.045 Td +/F3.0 11 Tf +<636f6e73742073747275637420736f636b616464725f696e2026206765745f6c6f63616c5f616464722829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 634.166 Td +/F1.0 10.5 Tf +[<73686f756c642062652072656d6f7665642e20546865792063616e206265207265706c616365642062> 20.0195 <792063616c6c696e672074686573652066756e6374696f6e733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 618.35 m +543.04 618.35 l +545.2491 618.35 547.04 616.5591 547.04 614.35 c +547.04 541.39 l +547.04 539.1809 545.2491 537.39 543.04 537.39 c +52.24 537.39 l +50.0309 537.39 48.24 539.1809 48.24 541.39 c +48.24 614.35 l +48.24 616.5591 50.0309 618.35 52.24 618.35 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 618.35 m +543.04 618.35 l +545.2491 618.35 547.04 616.5591 547.04 614.35 c +547.04 541.39 l +547.04 539.1809 545.2491 537.39 543.04 537.39 c +52.24 537.39 l +50.0309 537.39 48.24 539.1809 48.24 541.39 c +48.24 614.35 l +48.24 616.5591 50.0309 618.35 52.24 618.35 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 595.525 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a206c6f63616c5f706f72745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 580.785 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a206c6f63616c5f616464726573735f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 566.045 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2072656d6f74655f706f72745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 551.305 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2072656d6f74655f616464726573735f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7796 Tw + +BT +48.24 513.426 Td +/F1.0 10.5 Tf +<5468652066756e6374696f6e20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.7796 Tw + +BT +116.2853 513.426 Td +/F3.0 10.5 Tf +<696e74206f70656e5f6c697374656e5f706f727428636f6e73742073747275637420736f636b616464725f696e2026206c6f63616c41646472293b> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7796 Tw + +BT +429.9335 513.426 Td +/F1.0 10.5 Tf +<20646f6573206e6f7420737570706f727420495076362e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 497.646 Td +/F1.0 10.5 Tf +<5468652066756e6374696f6e2062656c6f772073686f756c64206265207573656420696e73746561643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 472.05 Td +/F3.0 10.5 Tf +<696e74206f70656e5f6c697374656e5f706f727428636f6e737420636861722a206c6f63616c486f73746e616d652c20636f6e737420636861722a206c6f63616c536572766963656e616d65293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 445.866 Td +/F1.0 10.5 Tf +<5468652073616d652068617320746f20626520646f6e6520666f722074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +209.6985 445.866 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +325.1985 445.866 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2e205265706c61636520616e> 20.0195 <792063616c6c206f66207468652066756e6374696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 430.05 m +543.04 430.05 l +545.2491 430.05 547.04 428.2591 547.04 426.05 c +547.04 382.57 l +547.04 380.3609 545.2491 378.57 543.04 378.57 c +52.24 378.57 l +50.0309 378.57 48.24 380.3609 48.24 382.57 c +48.24 426.05 l +48.24 428.2591 50.0309 430.05 52.24 430.05 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 430.05 m +543.04 430.05 l +545.2491 430.05 547.04 428.2591 547.04 426.05 c +547.04 382.57 l +547.04 380.3609 545.2491 378.57 543.04 378.57 c +52.24 378.57 l +50.0309 378.57 48.24 380.3609 48.24 382.57 c +48.24 426.05 l +48.24 428.2591 50.0309 430.05 52.24 430.05 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 407.225 Td +/F3.0 11 Tf +<696e74206f70656e5f636c69656e745f636f6e6e656374696f6e28636f6e73742073747275637420736f636b616464725f696e2026206e65775f72656d6f74655f616464722c20636f6e737420737472756374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 392.485 Td +/F3.0 11 Tf +<736f636b616464725f696e2026206e65775f6c6f63616c5f6164647229> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 354.606 Td +/F1.0 10.5 Tf +<77697468207468652066756e6374696f6e3a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 338.79 m +543.04 338.79 l +545.2491 338.79 547.04 336.9991 547.04 334.79 c +547.04 291.31 l +547.04 289.1009 545.2491 287.31 543.04 287.31 c +52.24 287.31 l +50.0309 287.31 48.24 289.1009 48.24 291.31 c +48.24 334.79 l +48.24 336.9991 50.0309 338.79 52.24 338.79 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 338.79 m +543.04 338.79 l +545.2491 338.79 547.04 336.9991 547.04 334.79 c +547.04 291.31 l +547.04 289.1009 545.2491 287.31 543.04 287.31 c +52.24 287.31 l +50.0309 287.31 48.24 289.1009 48.24 291.31 c +48.24 334.79 l +48.24 336.9991 50.0309 338.79 52.24 338.79 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 315.965 Td +/F3.0 11 Tf +<696e74206f70656e5f636c69656e745f636f6e6e656374696f6e28636f6e737420636861722a2072656d6f7465486f73746e616d652c20636f6e737420636861722a2072656d6f7465536572766963652c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 301.225 Td +/F3.0 11 Tf +<636f6e737420636861722a206c6f63616c486f73746e616d652c20636f6e737420636861722a206c6f63616c53657276696365293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 263.346 Td +/F1.0 10.5 Tf +<49662074686520666f6c6c6f77696e672063616c6c6261636b2066756e6374696f6e206973206f76657272696464656e20696e207468652064657269766564207465737420706f72743a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 247.53 m +543.04 247.53 l +545.2491 247.53 547.04 245.7391 547.04 243.53 c +547.04 214.79 l +547.04 212.5809 545.2491 210.79 543.04 210.79 c +52.24 210.79 l +50.0309 210.79 48.24 212.5809 48.24 214.79 c +48.24 243.53 l +48.24 245.7391 50.0309 247.53 52.24 247.53 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 247.53 m +543.04 247.53 l +545.2491 247.53 547.04 245.7391 547.04 243.53 c +547.04 214.79 l +547.04 212.5809 545.2491 210.79 543.04 210.79 c +52.24 210.79 l +50.0309 210.79 48.24 212.5809 48.24 214.79 c +48.24 243.53 l +48.24 245.7391 50.0309 247.53 52.24 247.53 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 224.705 Td +/F3.0 11 Tf +<7669727475616c20766f696420706565725f636f6e6e656374656428696e7420636c69656e745f69642c20736f636b616464725f696e262072656d6f74655f61646472293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 186.826 Td +/F1.0 10.5 Tf +<69742073686f756c642062652072656d6f76656420616e642074686520666f6c6c6f77696e672066756e6374696f6e2073686f756c64206265206f76657272696464656e20696e73746561643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 171.01 m +543.04 171.01 l +545.2491 171.01 547.04 169.2191 547.04 167.01 c +547.04 138.27 l +547.04 136.0609 545.2491 134.27 543.04 134.27 c +52.24 134.27 l +50.0309 134.27 48.24 136.0609 48.24 138.27 c +48.24 167.01 l +48.24 169.2191 50.0309 171.01 52.24 171.01 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 171.01 m +543.04 171.01 l +545.2491 171.01 547.04 169.2191 547.04 167.01 c +547.04 138.27 l +547.04 136.0609 545.2491 134.27 543.04 134.27 c +52.24 134.27 l +50.0309 134.27 48.24 136.0609 48.24 138.27 c +48.24 167.01 l +48.24 169.2191 50.0309 171.01 52.24 171.01 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 148.185 Td +/F3.0 11 Tf +<7669727475616c20766f696420706565725f636f6e6e656374656428696e7420636c69656e745f69642c20636f6e73742063686172202a20686f73742c20636f6e737420696e7420706f727429> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 110.306 Td +/F1.0 10.5 Tf +<54686520666f6c6c6f77696e672066756e6374696f6e2073686f756c64206e6f7420626520757365643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 84.71 Td +/F3.0 10.5 Tf +<766f6964206765745f686f73745f696428636f6e737420636861722a20686f73744e616d652c2073747275637420736f636b616464725f696e202a6164647229> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 58.526 Td +/F1.0 10.5 Tf +[<54686520736f636b> 20.0195 <6574204150492066756e6374696f6e20>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +168.9583 58.526 Td +/F3.0 10.5 Tf +<67657461646472696e666f> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +226.7083 58.526 Td +/F1.0 10.5 Tf +<2073686f756c64206265207573656420696e73746561642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3139> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +129 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 128 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +130 0 obj +[129 0 R /XYZ 0 841.89 null] +endobj +131 0 obj +<< /Length 11030 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 777.054 Td +/F2.0 27 Tf +<4572726f72204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 730.074 Td +/F2.0 22 Tf +[<4572726f72204d6573736167657320496e20436173652054> 20.0195 <435020436f6e6e656374696f6e7320417265>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 700.154 Td +/F2.0 22 Tf +<55736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 673.15 Td +/F7.0 10.5 Tf +<506172616d657465722076616c7565203c76616c75653e206e6f74207265636f676e697a656420666f7220706172616d65746572203c6e616d653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 646.966 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +116.9625 646.966 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +153.7125 646.966 Td +/F1.0 10.5 Tf +[<20696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c65206973206e6f74207265636f676e697a656420666f722074686520706172> 20.0195 <616d65746572203c6e616d653e2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 621.37 Td +/F7.0 10.5 Tf +<496e76616c696420696e707574206173205443505f7265636f6e6e6563745f617474656d70747320636f756e74657220676976656e3a203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 595.186 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +116.9625 595.186 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +153.7125 595.186 Td +/F1.0 10.5 Tf +[<20696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c65206d757374206265206120706f7369746976652077686f6c65206e756d6265722e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 569.59 Td +/F7.0 10.5 Tf +<5443505f7265636f6e6e6563745f617474656d707473206d7573742062652067726561746572207468616e20302c203c76616c75653e20697320676976656e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9291 Tw + +BT +48.24 543.406 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.9291 Tw + +BT +118.8206 543.406 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9291 Tw + +BT +155.5706 543.406 Td +/F1.0 10.5 Tf +<20666f7220> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.9291 Tw + +BT +177.7462 543.406 Td +/F3.0 10.5 Tf +<5443505f7265636f6e6e6563745f617474656d707473> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9291 Tw + +BT +293.2462 543.406 Td +/F1.0 10.5 Tf +[<20696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c65206d7573742062652067726561746572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 527.626 Td +/F1.0 10.5 Tf +<7468616e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +73.986 527.626 Td +/F5.0 10.5 Tf +<30> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +79.236 527.626 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 502.03 Td +/F7.0 10.5 Tf +<496e76616c696420696e707574206173205443505f7265636f6e6e6563745f64656c617920676976656e3a203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5493 Tw + +BT +48.24 475.846 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5493 Tw + +BT +118.0612 475.846 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5493 Tw + +BT +154.8112 475.846 Td +/F1.0 10.5 Tf +<20666f722074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5493 Tw + +BT +195.4666 475.846 Td +/F3.0 10.5 Tf +<5443505f7265636f6e6e6563745f64656c6179> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5493 Tw + +BT +295.2166 475.846 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d6574657220696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c65206d757374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 460.066 Td +/F1.0 10.5 Tf +<626520612077686f6c65206e756d626572206e6f74206c657373207468616e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +214.098 460.066 Td +/F5.0 10.5 Tf +<30> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +219.348 460.066 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 434.47 Td +/F7.0 10.5 Tf +<5443505f7265636f6e6e6563745f64656c6179206d757374206e6f74206265206c657373207468616e20302c203c76616c75653e20697320676976656e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5493 Tw + +BT +48.24 408.286 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5493 Tw + +BT +118.0612 408.286 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5493 Tw + +BT +154.8112 408.286 Td +/F1.0 10.5 Tf +<20666f722074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5493 Tw + +BT +195.4666 408.286 Td +/F3.0 10.5 Tf +<5443505f7265636f6e6e6563745f64656c6179> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5493 Tw + +BT +295.2166 408.286 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d6574657220696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c65206d757374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 392.506 Td +/F1.0 10.5 Tf +<626520612077686f6c65206e756d626572206e6f74206c657373207468616e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +214.098 392.506 Td +/F5.0 10.5 Tf +<30> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +219.348 392.506 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 366.91 Td +/F7.0 10.5 Tf +<496e76616c696420696e70757420617320706f7274206e756d62657220676976656e3a203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1642 Tw + +BT +48.24 340.726 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.1642 Tw + +BT +121.291 340.726 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1642 Tw + +BT +158.041 340.726 Td +/F1.0 10.5 Tf +[<20696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652069732063616e6e6f7420626520696e74657270726574656420617320612076616c696420706f7274>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 324.946 Td +/F1.0 10.5 Tf +<6e756d6265722028652e672eca737472696e6720697320676976656e292e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 299.35 Td +/F7.0 10.5 Tf +<506f7274206e756d626572206d757374206265206265747765656e203020616e642036353533352c203c76616c75653e20697320676976656e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1642 Tw + +BT +48.24 273.166 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.1642 Tw + +BT +121.291 273.166 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1642 Tw + +BT +158.041 273.166 Td +/F1.0 10.5 Tf +[<20696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652069732063616e6e6f7420626520696e74657270726574656420617320612076616c696420706f7274>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 257.386 Td +/F1.0 10.5 Tf +[<6e756d6265722e20506f7274206e756d62657273206d75737420626520696e207468652072> 20.0195 <616e676520302e2e36353533352e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 231.79 Td +/F7.0 10.5 Tf +<496e76616c696420696e70757420617320736572766572206261636b6c6f6720676976656e3a203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4439 Tw + +BT +48.24 205.606 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.4439 Tw + +BT +119.8504 205.606 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4439 Tw + +BT +156.6004 205.606 Td +/F1.0 10.5 Tf +[<20696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652069732063616e6e6f7420626520696e74657270726574656420617320612076616c696420736572766572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 189.826 Td +/F1.0 10.5 Tf +<6261636b6c6f67206e756d6265722028652e672eca737472696e6720697320676976656e292e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 164.23 Td +/F7.0 10.5 Tf +<43616e6e6f742061636365707420636f6e6e656374696f6e20617420706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 138.046 Td +/F1.0 10.5 Tf +[<436f6e6e656374696f6e20636f756c64206e6f74206265206163636570746564206f6e2054> 20.0195 <435020736f636b> 20.0195 <65742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 112.45 Td +/F7.0 10.5 Tf +<4572726f72207768656e2072656164696e67207468652072656365697665642054435020504455> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 86.266 Td +/F1.0 10.5 Tf +[<53> 20.0195 <797374656d206572726f72206f6363757272656420647572696e672072656164696e672066726f6d207468652054> 20.0195 <435020736f636b> 20.0195 <65742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 60.67 Td +/F7.0 10.5 Tf +<43616e6e6f74206f70656e20736f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3230> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +132 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 131 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F7.0 127 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F5.0 59 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +133 0 obj +[132 0 R /XYZ 0 841.89 null] +endobj +134 0 obj +[132 0 R /XYZ 0 758.37 null] +endobj +135 0 obj +<< /Limits [(_close_the_listening_port) (_fundamental_concepts)] +/Names [(_close_the_listening_port) 82 0 R (_closing_down) 41 0 R (_compilation) 44 0 R (_configuration) 60 0 R (_connection_asps) 33 0 R (_error_handling) 38 0 R (_error_messages) 133 0 R (_error_messages_in_case_tcp_connections_are_used) 134 0 R (_error_reporting) 98 0 R (_functionality) 23 0 R (_fundamental_concepts) 26 0 R] +>> +endobj +136 0 obj +<< /Length 8000 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 793.926 Td +/F1.0 10.5 Tf +[<4372656174696f6e206f6620746865206c697374656e657220736f636b> 20.0195 <6574206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 768.33 Td +/F7.0 10.5 Tf +<536574736f636b6f7074206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 742.146 Td +/F1.0 10.5 Tf +[<53657474696e67206f6620736f636b> 20.0195 <6574206f7074696f6e73206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 716.55 Td +/F7.0 10.5 Tf +<43616e6e6f742062696e6420746f20706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 690.366 Td +/F1.0 10.5 Tf +[<42696e64696e67206f66206120736f636b> 20.0195 <657420746f206120706f7274206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 664.77 Td +/F7.0 10.5 Tf +<43616e6e6f74206c697374656e20617420706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 638.586 Td +/F1.0 10.5 Tf +[<4c697374656e206f6e20746865206c697374656e657220736f636b> 20.0195 <6574206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 612.99 Td +/F7.0 10.5 Tf +<676574736f636b6e616d6528292073797374656d2063616c6c206661696c6564206f6e207468652073657276657220736f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 586.806 Td +/F1.0 10.5 Tf +<546865207175657279206f6620746865206c697374656e696e6720706f7274206e756d626572206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 561.21 Td +/F7.0 10.5 Tf +<4162737472616374536f636b65743a206765746e616d65696e666f3a203c6572726f723e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 535.026 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +69.66 535.026 Td +/F3.0 10.5 Tf +<6765746e616d65696e666f> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +127.41 535.026 Td +/F1.0 10.5 Tf +<2066756e6374696f6e2072657475726e656420616e206572726f722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 509.43 Td +/F7.0 10.5 Tf +<67657461646472696e666f3a203c6572726f72746578743e20666f7220686f7374203c686f73743e2073657276696365203c736572766963653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 483.246 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +69.66 483.246 Td +/F3.0 10.5 Tf +<67657461646472696e666f> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +127.41 483.246 Td +/F1.0 10.5 Tf +<2066756e6374696f6e2072657475726e656420616e206572726f722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 457.65 Td +/F7.0 10.5 Tf +<4d616c666f726d6564206d6573736167653a20696e76616c6964206c656e6774683a203c6c656e6774683e2e20546865206c656e6774682073686f756c64206265206174206c65617374203c6c656e6768743e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 431.466 Td +/F1.0 10.5 Tf +<546865206d65737361676520726563656976656420636f6e7461696e7320696e76616c6964206c656e67746820696e666f726d6174696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 405.87 Td +/F7.0 10.5 Tf +<416c7265616479207472696564203c76616c75653e2074696d65732c20676976696e67207570> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7015 Tw + +BT +48.24 379.686 Td +/F1.0 10.5 Tf +<54686520646561646c6f636b20636f756e746572206578636565647320746865206861726420636f646564206c696d6974207768656e20747279696e6720746f20636f6e6e65637420746f20612073657276657220696e20636c69656e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0722 Tw + +BT +48.24 363.906 Td +/F1.0 10.5 Tf +[<6d6f64652e205768656e20636f6e6e656374696e67206f6e206120736f636b> 20.0195 <65742c20736f6d6574696d657320697420697320756e7375636365737366756c2e20546865206e6578742074727920757375616c6c7920736f6c76657320746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0942 Tw + +BT +48.24 348.126 Td +/F1.0 10.5 Tf +<70726f626c656d20616e642074686520636f6e6e656374696f6e2077696c6c206265207375636365737366756c6c792061636365707465642e20546865207465737420706f7274207265747269657320746f20636f6e6e6563742061732061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 332.346 Td +/F1.0 10.5 Tf +<776f726b61726f756e642e20546865206e756d626572206f6620747269657320686f7765766572206c696d6974656420746f2061766f69642068616e67696e6720746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3914 Tw + +BT +48.24 304.566 Td +/F1.0 10.5 Tf +[<446966666572656e74206f706572> 20.0195 <6174696e672073797374656d732062656861766520696e206120646966666572656e74207761> 20.0195 <79> 89.8438 <2e20546869732070726f626c656d2069732072> 20.0195 <617265206f6e20536f6c617269732c20556e697820616e64>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 288.786 Td +/F1.0 10.5 Tf +<4c696e75782073797374656d732c20627574206d756368206d6f7265206f6674656e206f6e2043796777696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 263.19 Td +/F7.0 10.5 Tf +<43616e6e6f7420636f6e6e65637420746f20736572766572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 237.006 Td +/F1.0 10.5 Tf +[<436f6e6e656374696f6e20746f206120736572766572206f6e2054> 20.0195 <4350206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 211.41 Td +/F7.0 10.5 Tf +<436f6e6e656374696f6e2077617320696e74657272757074656420627920746865206f746865722073696465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 185.226 Td +/F1.0 10.5 Tf +[<5468652054> 20.0195 <4350206f722053534c20636f6e6e656374696f6e2077617320726566757365642062> 20.0195 <7920746865206f7468657220706565722c206f722062726f6b> 20.0195 <656e2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 159.63 Td +/F7.0 10.5 Tf +<436c69656e74204964206e6f742073706563696669656420616c74686f756768206e6f74206f6e6c79203120636c69656e7420657869737473> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 133.446 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 107.85 Td +/F7.0 10.5 Tf +<5468657265206973206e6f20636f6e6e656374696f6e20616c6976652c207573652074686520604153505f5443505f436f6e6e65637427206265666f72652073656e64696e6720616e797468696e672e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6289 Tw + +BT +48.24 81.666 Td +/F1.0 10.5 Tf +[<416e20617474656d707420776173206d6164652062> 20.0195 <7920746865207465737420706f727420746f2073656e642064617461206265666f72652073657474696e6720757020616e> 20.0195 <7920636f6e6e656374696f6e2e20546865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 65.886 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +163.74 65.886 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2068617320746f2062652063616c6c6564206265666f72652073656e64696e6720616e> 20.0195 <7920646174612e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3231> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +137 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 136 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F7.0 127 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +138 0 obj +<< /Length 6355 +>> +stream +q +/DeviceRGB cs +0.6941 0.1294 0.2745 scn +/DeviceRGB CS +0.6941 0.1294 0.2745 SCN + +BT +48.24 796.86 Td +/F7.0 10.5 Tf +<53656e642073797374656d2063616c6c206661696c65643a205468657265206973206e6f20636c69656e7420636f6e6e656374656420746f207468652054435020736572766572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 770.676 Td +/F1.0 10.5 Tf +[<412073656e64206f706572> 20.0195 <6174696f6e20697320706572666f726d656420746f2061206e6f6e2d6578697374696e6720636c69656e742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 745.08 Td +/F7.0 10.5 Tf +<53656e642073797374656d2063616c6c206661696c65643a203c76616c75653e20627974657320776572652073656e7420696e7374656164206f66203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 718.896 Td +/F1.0 10.5 Tf +[<5468652073656e64206f706572> 20.0195 <6174696f6e206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 693.3 Td +/F7.0 10.5 Tf +<3c6e616d653e206973206e6f7420646566696e656420696e2074686520636f6e66696775726174696f6e2066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.6864 Tw + +BT +48.24 667.116 Td +/F1.0 10.5 Tf +[<546865207465737420706f727420706172> 20.0195 <616d65746572203c6e616d653e206973206e6f7420646566696e656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c20616c74686f75676820697473>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 651.336 Td +/F1.0 10.5 Tf +<70726573656e6365206973206d616e6461746f727920286f7220636f6e646974696f6e616c20616e642074686520636f6e646974696f6e2069732074727565292e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 625.74 Td +/F7.0 10.5 Tf +<54686520686f7374206e616d65203c6e616d653e206973206e6f742076616c696420696e2074686520636f6e66696775726174696f6e2066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 599.556 Td +/F1.0 10.5 Tf +[<54686520686f7374206e616d652073706563696669656420696e2074686520636f6e6669677572> 20.0195 <6174696f6e2066696c6520636f756c64206e6f74206265207265736f6c7665642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 573.96 Td +/F7.0 10.5 Tf +<4e756d626572206f6620636c69656e74733c3e30206275742063616e6e6f742067657420666972737420636c69656e742c2070726f6772616d6d696e67206572726f72> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 547.776 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 522.18 Td +/F7.0 10.5 Tf +<496e646578203c76616c75653e2065786365656473206c656e677468206f662070656572206c697374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 495.996 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 470.4 Td +/F7.0 10.5 Tf +<41627374726163745f536f636b65743a3a6765745f706565723a20436c69656e74203c76616c75653e20646f6573206e6f74206578697374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 444.216 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 418.62 Td +/F7.0 10.5 Tf +<496e76616c696420436c69656e7420496420697320676976656e3a203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 392.436 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 366.84 Td +/F7.0 10.5 Tf +<50656572203c76616c75653e20646f6573206e6f74206578697374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 340.656 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 315.06 Td +/F7.0 10.5 Tf +<53657420626c6f636b696e67206d6f6465206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 288.876 Td +/F1.0 10.5 Tf +[<54> 29.7852 <65737420706f727420636f756c64206e6f742073657420736f636b> 20.0195 <6574206f7074696f6e3a20>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +233.2941 288.876 Td +/F3.0 10.5 Tf +<4f5f4e4f4e424c4f434b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 244.764 Td +/F2.0 22 Tf +[<41> 20.0195 <64646974696f6e616c204572726f72204d6573736167657320496e20436173652053534c>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 214.844 Td +/F2.0 22 Tf +<436f6e6e656374696f6e73204172652055736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6193 Tw + +BT +48.24 185.656 Td +/F1.0 10.5 Tf +<41706172742066726f6d207468652070726576696f75736c79206d656e74696f6e6564206572726f72206d657373616765732c2074686520666f6c6c6f77696e67206d6573736167657320617265207573656420696e20636173652053534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 169.876 Td +/F1.0 10.5 Tf +<697320757365643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 144.28 Td +/F7.0 10.5 Tf +<4e6f2053534c2043545820666f756e642c2053534c206e6f7420696e697469616c697a6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 118.096 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 92.5 Td +/F7.0 10.5 Tf +<4372656174696f6e206f662053534c206f626a656374206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 66.316 Td +/F1.0 10.5 Tf +<4372656174696f6e206f66207468652053534c206f626a656374206973206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3232> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +139 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 138 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F7.0 127 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F2.0 19 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +140 0 obj +[139 0 R /XYZ 0 273.06 null] +endobj +141 0 obj +<< /Length 7793 +>> +stream +q +/DeviceRGB cs +0.6941 0.1294 0.2745 scn +/DeviceRGB CS +0.6941 0.1294 0.2745 SCN + +BT +48.24 796.86 Td +/F7.0 10.5 Tf +<42696e64696e67206f662053534c206f626a65637420746f20736f636b6574206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 770.676 Td +/F1.0 10.5 Tf +[<5468652053534c206f626a65637420636f756c64206e6f7420626520626f756e6420746f207468652054> 20.0195 <435020736f636b> 20.0195 <65742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 745.08 Td +/F7.0 10.5 Tf +<53534c206572726f72206f63637572726564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7782 Tw + +BT +48.24 718.896 Td +/F1.0 10.5 Tf +[<412067656e6572> 20.0195 <616c2053534c206572726f72206f636375727265642e20436865636b20746865207465737420706f7274206c6f677320746f207365652070726576696f7573206572726f72206d657373616765732073686f77696e6720746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 703.116 Td +/F1.0 10.5 Tf +<7265616c2070726f626c656d2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 677.52 Td +/F7.0 10.5 Tf +<3c6e616d653e206973206e6f7420646566696e656420696e2074686520636f6e66696775726174696f6e2066696c6520616c74686f756768203c76616c75653e3d796573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 663.3 m +543.04 663.3 l +545.2491 663.3 547.04 661.5091 547.04 659.3 c +547.04 630.56 l +547.04 628.3509 545.2491 626.56 543.04 626.56 c +52.24 626.56 l +50.0309 626.56 48.24 628.3509 48.24 630.56 c +48.24 659.3 l +48.24 661.5091 50.0309 663.3 52.24 663.3 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 663.3 m +543.04 663.3 l +545.2491 663.3 547.04 661.5091 547.04 659.3 c +547.04 630.56 l +547.04 628.3509 545.2491 626.56 543.04 626.56 c +52.24 626.56 l +50.0309 626.56 48.24 628.3509 48.24 630.56 c +48.24 659.3 l +48.24 661.5091 50.0309 663.3 52.24 663.3 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 640.475 Td +/F3.0 11 Tf +<3c6e616d653e3a2073736c5f7472757374656443416c6973745f66696c655f6e616d6528292c203c76616c75653e3a2073736c5f76657269667963657274696669636174655f6e616d652829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 604.78 Td +/F7.0 10.5 Tf +<4e6f2053534c206461746120617661696c61626c6520666f7220636c69656e74203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 578.596 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 553.0 Td +/F7.0 10.5 Tf +<436f756c64206e6f7420726561642066726f6d202f6465762f7572616e646f6d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 526.816 Td +/F1.0 10.5 Tf +[<5468652072656164206f706572> 20.0195 <6174696f6e206f6e2074686520696e7374616c6c65642072> 20.0195 <616e646f6d20646576696365206973206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 501.22 Td +/F7.0 10.5 Tf +<436f756c64206e6f7420726561642066726f6d202f6465762f72616e646f6d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 475.036 Td +/F1.0 10.5 Tf +[<5468652072656164206f706572> 20.0195 <6174696f6e206f6e2074686520696e7374616c6c65642072> 20.0195 <616e646f6d20646576696365206973206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 449.44 Td +/F7.0 10.5 Tf +<436f756c64206e6f742073656564207468652050736575646f2052616e646f6d204e756d6265722047656e657261746f72207769746820656e6f7567682064617461> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 423.256 Td +/F1.0 10.5 Tf +[<4173206e6f2072> 20.0195 <616e646f6d206465766963657320666f756e642c206120776f726b61726f756e64206973207573656420746f2073656564207468652053534c2050524e472e205468652073656564696e67206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 397.66 Td +/F7.0 10.5 Tf +<53534c206d6574686f64206372656174696f6e206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 371.476 Td +/F1.0 10.5 Tf +<546865206372656174696f6e206f66207468652053534c206d6574686f64206f626a656374206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 345.88 Td +/F7.0 10.5 Tf +<53534c20636f6e74657874206372656174696f6e206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 319.696 Td +/F1.0 10.5 Tf +<546865206372656174696f6e206f66207468652053534c20636f6e74657874206f626a656374206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 294.1 Td +/F7.0 10.5 Tf +<43616e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +63.99 294.1 Td +/F6.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +67.014 294.1 Td +/F7.0 10.5 Tf +<7420726561642063657274696669636174652066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 267.916 Td +/F1.0 10.5 Tf +<546865207370656369666965642063657274696669636174652066696c6520636f756c64206e6f7420626520726561642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 242.32 Td +/F7.0 10.5 Tf +<43616e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +63.99 242.32 Td +/F6.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +67.014 242.32 Td +/F7.0 10.5 Tf +<742072656164206b65792066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 216.136 Td +/F1.0 10.5 Tf +[<546865207370656369666965642070726976617465206b> 20.0195 <65792066696c6520636f756c64206e6f7420626520726561642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 190.54 Td +/F7.0 10.5 Tf +<43616e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +63.99 190.54 Td +/F6.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +67.014 190.54 Td +/F7.0 10.5 Tf +<742072656164207472757374656443416c6973742066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 164.356 Td +/F1.0 10.5 Tf +<54686520737065636966696564206365727469666963617465206f66207468652074727573746564204341732066696c6520636f756c64206e6f7420626520726561642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 138.76 Td +/F7.0 10.5 Tf +<436970686572206c697374207265737472696374696f6e206661696c656420666f72203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 112.576 Td +/F1.0 10.5 Tf +<5468652073706563696669656420636970686572207265737472696374696f6e206c69737420636f756c64206e6f74206265207365742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 86.98 Td +/F7.0 10.5 Tf +<41637469766174696f6e206f662053534c2073657373696f6e20726573756d7074696f6e206661696c6564206f6e20736572766572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 60.796 Td +/F1.0 10.5 Tf +<5468652061637469766174696f6e206f66207468652053534c2073657373696f6e20726573756d7074696f6e206f6e2074686520736572766572206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3233> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +142 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 141 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F7.0 127 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F6.0 97 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +143 0 obj +<< /Length 9230 +>> +stream +q +/DeviceRGB cs +0.6941 0.1294 0.2745 scn +/DeviceRGB CS +0.6941 0.1294 0.2745 SCN + +BT +48.24 796.11 Td +/F7.0 10.5 Tf +<556e6b6e6f776e2053534c206572726f7220636f6465203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 769.926 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 720.474 Td +/F2.0 27 Tf +[<57> 49.8047 <61726e696e67204d65737361676573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 673.494 Td +/F2.0 22 Tf +[<57> 49.8047 <61726e696e67204d6573736167657320496e20436173652054> 20.0195 <435020436f6e6e656374696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 643.574 Td +/F2.0 22 Tf +<4172652055736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 616.57 Td +/F7.0 10.5 Tf +<4572726f72207768656e2072656164696e67207468652072656365697665642054435020504455> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 590.386 Td +/F1.0 10.5 Tf +[<5468652072656365697665642054> 20.0195 <4350205044552063616e6e6f7420626520726561642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.4269 Tw + +BT +48.24 564.79 Td +/F7.0 10.5 Tf +<636f6e6e65637428292072657475726e6564206572726f7220636f6465204541444452494e5553452e205065726861707320746869732069732061206b65726e656c206275672e20547279696e6720746f20636f6e6e656374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 551.845 Td +/F7.0 10.5 Tf +<616761696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2714 Tw + +BT +48.24 525.661 Td +/F1.0 10.5 Tf +[<5768656e20636f6e6e656374696e67206f6e206120736f636b> 20.0195 <65742c20736f6d6574696d657320697420697320756e7375636365737366756c2e20546865206e6578742074727920757375616c6c7920736f6c766573207468652070726f626c656d>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5668 Tw + +BT +48.24 509.881 Td +/F1.0 10.5 Tf +<616e642074686520636f6e6e656374696f6e2077696c6c206265207375636365737366756c6c792061636365707465642e20546865207465737420706f7274207265747269657320746f20636f6e6e656374206173206120776f726b61726f756e642e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 494.101 Td +/F1.0 10.5 Tf +<546865206e756d626572206f6620747269657320686f7765766572206c696d6974656420746f2061766f69642068616e67696e6720746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3914 Tw + +BT +48.24 466.321 Td +/F1.0 10.5 Tf +[<446966666572656e74206f706572> 20.0195 <6174696e672073797374656d732062656861766520696e206120646966666572656e74207761> 20.0195 <79> 89.8438 <2e20546869732070726f626c656d2069732072> 20.0195 <617265206f6e20536f6c617269732c20556e697820616e64>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 450.541 Td +/F1.0 10.5 Tf +<4c696e75782073797374656d732c20627574206d756368206d6f7265206f6674656e206f6e2043796777696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 424.945 Td +/F7.0 10.5 Tf +<436f6e6e65637428292072657475726e6564206572726f7220636f6465203c76616c75653e2c20747279696e6720746f20636f6e6e65637420616761696e2028544350207265636f6e6e656374206d6f646529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5521 Tw + +BT +48.24 398.761 Td +/F1.0 10.5 Tf +[<5768656e20636f6e6e656374696e67206f6e206120736f636b> 20.0195 <65742c20736f6d6574696d657320697420697320756e7375636365737366756c20616e642074686520676976656e206572726f7220636f6465207761732072657475726e65642e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8496 Tw + +BT +48.24 382.981 Td +/F1.0 10.5 Tf +<546865206e6578742074727920757375616c6c7920736f6c766573207468652070726f626c656d20616e642074686520636f6e6e656374696f6e2077696c6c206265207375636365737366756c6c792061636365707465642e205468652074657374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 367.201 Td +/F1.0 10.5 Tf +<706f7274207265747269657320746f20636f6e6e656374206173206120776f726b61726f756e642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 341.605 Td +/F7.0 10.5 Tf +<54435020636f6e6e656374696f6e2077617320696e74657272757074656420627920746865206f7468657220736964652c20747279696e6720746f207265636f6e6e65637420616761696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1251 Tw + +BT +48.24 315.421 Td +/F1.0 10.5 Tf +[<5468652054> 20.0195 <4350206f722053534c20636f6e6e656374696f6e2077617320726566757365642062> 20.0195 <7920746865206f7468657220706565722c206f72206974207761732062726f6b> 20.0195 <656e2e20546865207465737420706f727420747269657320746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 299.641 Td +/F1.0 10.5 Tf +<7265636f6e6e65637420616761696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 274.045 Td +/F7.0 10.5 Tf +<544350207265636f6e6e656374207375636365737366756c6c792066696e69736865642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 247.861 Td +/F1.0 10.5 Tf +<54686973207761726e696e67206d65737361676520697320676976656e20696620746865207265636f6e6e656374696f6e20776173207375636365737366756c2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 222.265 Td +/F7.0 10.5 Tf +<506172616d65746572203c6e616d653e20686173206e6f206d65616e696e67206966207573655f636f6e6e656374696f6e5f4153507320697320757365642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 196.081 Td +/F1.0 10.5 Tf +[<5468657265206973206e6f20656666656374206f662073657474696e67207468697320706172> 20.0195 <616d65746572207768656e20>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +293.4778 196.081 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +393.2278 196.081 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +435.9943 196.081 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +462.2443 196.081 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 170.485 Td +/F7.0 10.5 Tf +<41627374726163745f536f636b65743a3a72656d6f76655f636c69656e743a203c76616c75653e2069732074686520736572766572206c697374656e696e6720706f72742c2063616e206e6f742062652072656d6f76656421> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6111 Tw + +BT +48.24 144.301 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.6111 Tw + +BT +70.2711 144.301 Td +/F3.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6111 Tw + +BT +117.5211 144.301 Td +/F1.0 10.5 Tf +<20676976656e20696e2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.6111 Tw + +BT +184.4039 144.301 Td +/F3.0 10.5 Tf +<72656d6f76655f636c69656e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6111 Tw + +BT +252.6539 144.301 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2069732063757272656e746c7920757365642061732074686520736572766572> -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 128.521 Td +/F1.0 10.5 Tf +[<63616e206e6f742062652072656d6f7665642e2054> 29.7852 <6f20636c6f73652074686520736572766572206c697374656e696e6720706f72742c207573652074686520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +359.4413 128.521 Td +/F3.0 10.5 Tf +<636c6f73655f6c697374656e5f706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +448.6913 128.521 Td +/F1.0 10.5 Tf +<2066756e6374696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 102.925 Td +/F7.0 10.5 Tf +<436c69656e74203c76616c75653e20686173206e6f74206265656e2072656d6f7665642c2070726f6772616d6d696e67206572726f72> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 76.741 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.8792 Tw + +BT +48.24 51.145 Td +/F7.0 10.5 Tf +<53656e64696e672064617461206f6e2066696c652064657363726970746f72203c76616c75653e2e5468652073656e64696e67206f7065726174696f6e20776f756c6420626c6f636b20657865637574696f6e2e205468652073697a65> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3234> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +144 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 143 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F7.0 127 0 R +/F1.0 8 0 R +/F2.0 19 0 R +/F3.0 27 0 R +/F5.0 59 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +145 0 obj +[144 0 R /XYZ 0 754.11 null] +endobj +146 0 obj +[144 0 R /XYZ 0 701.79 null] +endobj +147 0 obj +<< /Length 8421 +>> +stream +q +/DeviceRGB cs +0.6941 0.1294 0.2745 scn +/DeviceRGB CS +0.6941 0.1294 0.2745 SCN + +BT +48.24 796.86 Td +/F7.0 10.5 Tf +<6f6620746865206f7574676f696e67206275666665722077617320696e637265617365642066726f6d203c6f6c645f76616c75653e20746f203c6e65775f76616c75653e2062797465732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0536 Tw + +BT +48.24 770.676 Td +/F1.0 10.5 Tf +[<5768656e20746865204162737472> 20.0195 <61637420536f636b> 20.0195 <657420697320757365642077697468206e6f6e2d626c6f636b696e6720736f636b> 20.0195 <65742c206966207468652073656e64696e67206f706572> 20.0195 <6174696f6e20776f756c6420626c6f636b2c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9731 Tw + +BT +48.24 754.896 Td +/F1.0 10.5 Tf +[<6669727374207468652073697a65206f66207468652073656e64696e672062756666657220697320696e637265617365642e205468697320697320746865206669727374207374657020746f2061766f69642054> 20.0195 <435020646561646c6f636b2e20496e20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 739.116 Td +/F1.0 10.5 Tf +[<7365636f6e642073746570207468652054> 29.7852 <65737420506f72742077696c6c2074727920746f207265636569766520736f6d6520646174612e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.8115 Tw + +BT +48.24 713.52 Td +/F7.0 10.5 Tf +<53656e64696e672064617461206f6e2066696c652064657363726970746f72203c76616c75653e2e5468652073656e64696e67206f7065726174696f6e20776f756c6420626c6f636b20657865637574696f6e20616e64206974206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.1286 Tw + +BT +48.24 700.575 Td +/F7.0 10.5 Tf +<6e6f7420706f737369626c6520746f206675727468657220696e637265617365207468652073697a65206f6620746865206f7574676f696e67206275666665722e20547279696e6720746f2070726f6365737320696e636f6d696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 687.63 Td +/F7.0 10.5 Tf +<6461746120746f2061766f696420646561646c6f636b2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0536 Tw + +BT +48.24 661.446 Td +/F1.0 10.5 Tf +[<5768656e20746865204162737472> 20.0195 <61637420536f636b> 20.0195 <657420697320757365642077697468206e6f6e2d626c6f636b696e6720736f636b> 20.0195 <65742c206966207468652073656e64696e67206f706572> 20.0195 <6174696f6e20776f756c6420626c6f636b2c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7353 Tw + +BT +48.24 645.666 Td +/F1.0 10.5 Tf +[<616e64207468652073697a65206f6620746865206f7574676f696e67206275666665722063616e6e6f7420626520696e637265617365642c207468652054> 29.7852 <65737420506f727420747269657320746f207265636569766520736f6d65206461746120746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 629.886 Td +/F1.0 10.5 Tf +<61766f696420646561646c6f636b2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 604.29 Td +/F7.0 10.5 Tf +<53797374656d2063616c6c2066636e746c28465f474554464c29206661696c6564206f6e2066696c652064657363726970746f722025642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 580.29 Td +/F7.0 10.5 Tf +<53797374656d2063616c6c2066636e746c28465f534554464c29206661696c6564206f6e2066696c652064657363726970746f722025642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 556.29 Td +/F7.0 10.5 Tf +<536574736f636b6f7074206661696c6564207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a203c706f72743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 530.106 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +69.66 530.106 Td +/F3.0 10.5 Tf +<736574736f636b6f7074> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +122.16 530.106 Td +/F1.0 10.5 Tf +<2066756e6374696f6e206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 504.51 Td +/F7.0 10.5 Tf +<43616e6e6f742062696e6420746f20706f7274207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a203c706f72743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 478.326 Td +/F1.0 10.5 Tf +<5468652062696e642073797374656d2063616c6c206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 452.73 Td +/F7.0 10.5 Tf +<43616e6e6f74206c697374656e20617420706f7274207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a203c706f72743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 426.546 Td +/F1.0 10.5 Tf +<546865206c697374656e2073797374656d2063616c6c206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.8786 Tw + +BT +48.24 400.95 Td +/F7.0 10.5 Tf +<676574736f636b6e616d6528292073797374656d2063616c6c206661696c6564206f6e207468652073657276657220736f636b6574207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 388.005 Td +/F7.0 10.5 Tf +<3c706f72743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 361.821 Td +/F1.0 10.5 Tf +<54686520676574736f636b6e616d652073797374656d2063616c6c206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 336.225 Td +/F7.0 10.5 Tf +<67657461646472696e666f3a203c6572726f72746578723e20666f7220686f7374203c686f73743e2073657276696365203c736572766963653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 310.041 Td +/F1.0 10.5 Tf +<5468652067657461646472696e666f2073797374656d2063616c6c206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.8786 Tw + +BT +48.24 284.445 Td +/F7.0 10.5 Tf +<6765746e616d65696e666f28292073797374656d2063616c6c206661696c6564206f6e207468652073657276657220736f636b6574207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 271.5 Td +/F7.0 10.5 Tf +<3c706f72743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 245.316 Td +/F1.0 10.5 Tf +<546865206765746e616d65696e666f2073797374656d2063616c6c206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 219.72 Td +/F7.0 10.5 Tf +<43616e6e6f74206f70656e20736f636b6574207768656e20747279696e6720746f206f70656e20636c69656e7420636f6e6e656374696f6e3a203c6572726f72746578743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 193.536 Td +/F1.0 10.5 Tf +[<54686520736f636b> 20.0195 <65742073797374656d2063616c6c206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 167.94 Td +/F7.0 10.5 Tf +<536574736f636b6f7074206661696c6564207768656e20747279696e6720746f206f70656e20636c69656e7420636f6e6e656374696f6e3a203c6572726f726d6573736167653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 141.756 Td +/F1.0 10.5 Tf +[<54686520736574736f636b> 20.0195 <6f70742073797374656d2063616c6c206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 116.16 Td +/F7.0 10.5 Tf +<43616e6e6f742062696e6420746f20706f7274207768656e20747279696e6720746f206f70656e20636c69656e7420636f6e6e656374696f6e3a203c6572726f72746578743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 89.976 Td +/F1.0 10.5 Tf +<5468652062696e642073797374656d2063616c6c206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 64.38 Td +/F7.0 10.5 Tf +<416c7265616479207472696564203c6e3e2074696d65732c20676976696e67207570207768656e20747279696e6720746f206f70656e20636c69656e7420636f6e6e656374696f6e3a203c6572726f72746578743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3235> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +148 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 147 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F7.0 127 0 R +/F1.0 8 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +149 0 obj +<< /Length 7665 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +1.7015 Tw + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +<54686520646561646c6f636b20636f756e746572206578636565647320746865206861726420636f646564206c696d6974207768656e20747279696e6720746f20636f6e6e65637420746f20612073657276657220696e20636c69656e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0722 Tw + +BT +48.24 778.896 Td +/F1.0 10.5 Tf +[<6d6f64652e205768656e20636f6e6e656374696e67206f6e206120736f636b> 20.0195 <65742c20736f6d6574696d657320697420697320756e7375636365737366756c2e20546865206e6578742074727920757375616c6c7920736f6c76657320746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0942 Tw + +BT +48.24 763.116 Td +/F1.0 10.5 Tf +<70726f626c656d20616e642074686520636f6e6e656374696f6e2077696c6c206265207375636365737366756c6c792061636365707465642e20546865207465737420706f7274207265747269657320746f20636f6e6e6563742061732061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 747.336 Td +/F1.0 10.5 Tf +<776f726b61726f756e642e20546865206e756d626572206f6620747269657320686f7765766572206c696d6974656420746f2061766f69642068616e67696e6720746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3914 Tw + +BT +48.24 719.556 Td +/F1.0 10.5 Tf +[<446966666572656e74206f706572> 20.0195 <6174696e672073797374656d732062656861766520696e206120646966666572656e74207761> 20.0195 <79> 89.8438 <2e20546869732070726f626c656d2069732072> 20.0195 <617265206f6e20536f6c617269732c20556e697820616e64>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 703.776 Td +/F1.0 10.5 Tf +<4c696e75782073797374656d732c20627574206d756368206d6f7265206f6674656e206f6e2043796777696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 659.664 Td +/F2.0 22 Tf +[<57> 49.8047 <61726e696e67204d6573736167657320496e20436173652053534c20436f6e6e656374696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 629.744 Td +/F2.0 22 Tf +<4172652055736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 602.74 Td +/F7.0 10.5 Tf +<5761726e696e673a207261636520636f6e646974696f6e207768696c652073657474696e672063757272656e7420636c69656e74206f626a65637420706f696e7465722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 576.556 Td +/F1.0 10.5 Tf +<5468652063757272656e7420636c69656e74206f626a65637420706f696e74657220697320616c7265616479207365742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 550.96 Td +/F7.0 10.5 Tf +<436f6e6e656374696f6e2066726f6d20636c69656e74203c76616c75653e2069732072656675736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 524.776 Td +/F1.0 10.5 Tf +<54686520636f6e6e656374696f6e2066726f6d206120636c69656e74206973207265667573656420696e20746865207365727665722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 499.18 Td +/F7.0 10.5 Tf +<436f6e6e656374696f6e20746f207365727665722069732072656675736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 472.996 Td +/F1.0 10.5 Tf +[<54686520636f6e6e656374696f6e2066726f6d2074686520636c69656e7420697320726566757365642062> 20.0195 <7920746865207365727665722e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 447.4 Td +/F7.0 10.5 Tf +<53657276657220646964206e6f742073656e6420612073657373696f6e204944> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 421.216 Td +/F1.0 10.5 Tf +<5468652053534c2073657276657220646964206e6f742073656e6420612073657373696f6e2049442e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 395.62 Td +/F7.0 10.5 Tf +<566572696669636174696f6e206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 369.436 Td +/F1.0 10.5 Tf +<54686520766572696669636174696f6e206f6620746865206f746865722073696465206973206661696c65642e2054686520636f6e6e656374696f6e2077696c6c206265207368757420646f776e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 343.84 Td +/F7.0 10.5 Tf +<53534c206f626a656374206e6f7420666f756e6420666f7220636c69656e74203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 317.656 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 292.06 Td +/F7.0 10.5 Tf +<53534c5f536f636b65743a3a726563656976655f6d6573736167655f6f6e5f66643a2053534c20636f6e6e656374696f6e2077617320696e74657272757074656420627920746865206f746865722073696465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7244 Tw + +BT +48.24 265.876 Td +/F1.0 10.5 Tf +<54686520544c532f53534c20636f6e6e656374696f6e20686173206265656e20636c6f7365642e204966207468652070726f746f636f6c2076657273696f6e2069732053534c20332e30206f7220544c5320312e302c2074686973207761726e696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1929 Tw + +BT +48.24 250.096 Td +/F1.0 10.5 Tf +<61707065617273206f6e6c79206966206120636c6f7375726520616c65727420686173206f6363757272656420696e207468652070726f746f636f6c2c20692e652eca69662074686520636f6e6e656374696f6e20686173206265656e20636c6f736564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1041 Tw + +BT +48.24 234.316 Td +/F1.0 10.5 Tf +[<636c65616e6c79> 89.8438 <2e204e6f7465207468617420696e2074686973206361736520697420646f6573206e6f74206e65636573736172696c7920696e64696361746520746861742074686520756e6465726c79696e67207472> 20.0195 <616e73706f727420686173206265656e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 218.536 Td +/F1.0 10.5 Tf +<636c6f7365642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 192.94 Td +/F7.0 10.5 Tf +<4f74686572207369646520646f6573206e6f742068617665206365727469666963617465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 166.756 Td +/F1.0 10.5 Tf +<546865206f746865722073696465206f66207468652053534c20636f6e6e656374696f6e20646f6573206e6f74206861766520612063657274696669636174652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 141.16 Td +/F7.0 10.5 Tf +<536f6c61726973207061746368657320746f2070726f766964652072616e646f6d2067656e65726174696f6e206465766963657320617265206e6f7420696e7374616c6c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3944 Tw + +BT +48.24 114.976 Td +/F1.0 10.5 Tf +[<536f6c61726973207061746368657320746f2070726f766964652072> 20.0195 <616e646f6d2067656e6572> 20.0195 <6174696f6e206465766963657320617265206e6f7420696e7374616c6c65642e204120776f726b61726f756e642077696c6c2062652075736564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 99.196 Td +/F1.0 10.5 Tf +<746f2073656564207468652050524e472e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 73.6 Td +/F7.0 10.5 Tf +<50726976617465206b657920646f6573206e6f74206d6174636820746865206365727469666963617465207075626c6963206b6579> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3236> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +150 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 149 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F2.0 19 0 R +/F7.0 127 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +151 0 obj +[150 0 R /XYZ 0 687.96 null] +endobj +152 0 obj +<< /Length 7686 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +[<5468652070726976617465206b> 20.0195 <65792073706563696669656420666f7220746865207465737420706f727420646f6573206e6f74206d61746368207769746820746865207075626c6963206b> 20.0195 <6579> 89.8438 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 745.224 Td +/F2.0 27 Tf +[<54> 29.7852 <65726d696e6f6c6f6779>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 714.576 Td +/F2.0 10.5 Tf +[<536f636b> 20.0195 <6574733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4108 Tw + +BT +48.24 698.796 Td +/F1.0 10.5 Tf +[<54686520736f636b> 20.0195 <65742069732061206d6574686f6420666f7220636f6d6d756e69636174696f6e206265747765656e206120636c69656e742070726f6772> 20.0195 <616d20616e642061207365727665722070726f6772> 20.0195 <616d20696e2061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4106 Tw + +BT +48.24 683.016 Td +/F1.0 10.5 Tf +[<6e6574776f726b2e204120736f636b> 20.0195 <657420697320646566696e6564206173202274686520656e64706f696e7420696e206120636f6e6e656374696f6e> 40.0391 <222e20536f636b> 20.0195 <65747320617265206372656174656420616e64207573656420776974682061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +5.2202 Tw + +BT +48.24 667.236 Td +/F1.0 10.5 Tf +[<736574206f662070726f6772> 20.0195 <616d6d696e67207265717565737473206f72202266756e6374696f6e2063616c6c732220736f6d6574696d65732063616c6c65642074686520736f636b> 20.0195 <657473206170706c69636174696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.0739 Tw + +BT +48.24 651.456 Td +/F1.0 10.5 Tf +[<70726f6772> 20.0195 <616d6d696e6720696e746572666163652028415049292e20546865206d6f737420636f6d6d6f6e20736f636b> 20.0195 <65742041504920697320746865204265726b> 20.0195 <656c657920554e49582043206c616e6775616765>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.658 Tw + +BT +48.24 635.676 Td +/F1.0 10.5 Tf +[<696e7465726661636520666f7220736f636b> 20.0195 <6574732e20536f636b> 20.0195 <6574732063616e20616c736f206265207573656420666f7220636f6d6d756e69636174696f6e206265747765656e2070726f6365737365732077697468696e20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 619.896 Td +/F1.0 10.5 Tf +<73616d6520636f6d70757465722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 592.116 Td +/F2.0 10.5 Tf +[<426c6f636b696e6720616e64206e6f6e2d626c6f636b696e6720736f636b> 20.0195 <6574733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5219 Tw + +BT +48.24 576.336 Td +/F1.0 10.5 Tf +[<5573696e67206120626c6f636b696e6720736f636b> 20.0195 <65742c20736f6d6520736f636b> 20.0195 <6574206f706572> 20.0195 <6174696f6e73202873656e642c20726563656976652c20636f6e6e6563742c20616363657074292077696c6c20626c6f636b20756e74696c20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1886 Tw + +BT +48.24 560.556 Td +/F1.0 10.5 Tf +[<6f706572> 20.0195 <6174696f6e2069732066696e6973686564206f7220616e206572726f72206f63637572732e205573696e672061206e6f6e2d626c6f636b696e6720736f636b> 20.0195 <65742c207468657365206f706572> 20.0195 <6174696f6e732077696c6c206e65766572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 544.776 Td +/F1.0 10.5 Tf +<626c6f636b206275742072657475726e207769746820616e206572726f7220616e642073657420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +241.5555 544.776 Td +/F3.0 10.5 Tf +<6572726e6f> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +267.8055 544.776 Td +/F1.0 10.5 Tf +<20746f2074686520617070726f7072696174652076616c75652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 516.996 Td +/F2.0 10.5 Tf +<4f70656e53534c3a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9081 Tw + +BT +48.24 501.216 Td +/F1.0 10.5 Tf +[<546865204f70656e53534c2050726f6a656374206973206120636f6c6c61626f72> 20.0195 <6174697665206566666f727420746f20646576656c6f70206120726f627573742c20636f6d6d65726369616c2d6772> 20.0195 <6164652c2066756c6c2d66656174757265642c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4408 Tw + +BT +48.24 485.436 Td +/F1.0 10.5 Tf +[<616e64206f70656e20736f7572636520746f6f6c6b697420696d706c656d656e74696e67207468652053656375726520536f636b> 20.0195 <657473204c61> 20.0195 <796572202853534c2076322f76332920616e64205472> 20.0195 <616e73706f7274204c61> 20.0195 <796572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2266 Tw + +BT +48.24 469.656 Td +/F1.0 10.5 Tf +[<53656375726974792028544c53207631292070726f746f636f6c732061732077656c6c20617320612066756c6c2d737472656e6774682067656e6572> 20.0195 <616c20707572706f73652063727970746f6772> 20.0195 <617068> 20.0195 <79206c696272> 20.0195 <617279> 89.8438 <2e2046> 40.0391 <6f72>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 453.876 Td +/F1.0 10.5 Tf +<6d6f726520696e666f726d6174696f6e206f6e20746865204f70656e53534c2070726f6a6563742073656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +278.8935 453.876 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 404.424 Td +/F2.0 27 Tf +<416262726576696174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 373.776 Td +/F2.0 10.5 Tf +<4153> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 354.996 Td +/F1.0 10.5 Tf +[<4162737472> 20.0195 <61637420536f636b> 20.0195 <6574>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 327.216 Td +/F2.0 10.5 Tf +<415350> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 308.436 Td +/F1.0 10.5 Tf +[<4162737472> 20.0195 <6163742053657276696365205072696d6974697665>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 280.656 Td +/F2.0 10.5 Tf +<49507634> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 261.876 Td +/F1.0 10.5 Tf +<496e7465726e65742050726f746f636f6c2076657273696f6e2034> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 234.096 Td +/F2.0 10.5 Tf +<49507636> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 215.316 Td +/F1.0 10.5 Tf +<496e7465726e65742050726f746f636f6c2076657273696f6e2036> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 187.536 Td +/F2.0 10.5 Tf +<50454d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 168.756 Td +/F1.0 10.5 Tf +<5072697661637920456e68616e636564204d61696c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 140.976 Td +/F2.0 10.5 Tf +[<52> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 122.196 Td +/F1.0 10.5 Tf +<52756e2d54696d6520456e7669726f6e6d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 94.416 Td +/F2.0 10.5 Tf +<53534c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 75.636 Td +/F1.0 10.5 Tf +[<53656375726520536f636b> 20.0195 <657473204c61> 20.0195 <796572>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3237> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +153 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 152 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F2.0 19 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +/Annots [155 0 R] +>> +endobj +154 0 obj +[153 0 R /XYZ 0 778.86 null] +endobj +155 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [278.8935 450.81 292.302 465.09] +/Type /Annot +>> +endobj +156 0 obj +[153 0 R /XYZ 0 438.06 null] +endobj +157 0 obj +<< /Length 2665 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 793.926 Td +/F2.0 10.5 Tf +<535554> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 775.146 Td +/F1.0 10.5 Tf +[<53> 20.0195 <797374656d20556e6465722054> 29.7852 <657374>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 747.366 Td +/F2.0 10.5 Tf +[<54> 20.0195 <4350>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 728.586 Td +/F1.0 10.5 Tf +[<5472> 20.0195 <616e736d697373696f6e20436f6e74726f6c2050726f746f636f6c>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 700.806 Td +/F2.0 10.5 Tf +<544c53> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 682.026 Td +/F1.0 10.5 Tf +[<5472> 20.0195 <616e73706f7274204c61> 20.0195 <796572205365637572697479>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 654.246 Td +/F2.0 10.5 Tf +[<5454> 20.0195 <434e2d33>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 635.466 Td +/F1.0 10.5 Tf +[<54> 29.7852 <657374696e6720616e642054> 29.7852 <65737420436f6e74726f6c204e6f746174696f6e2076657273696f6e2033>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 586.014 Td +/F2.0 27 Tf +<5265666572656e636573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 555.366 Td +/F1.0 10.5 Tf +<5b315d204554534920455320323031203837332d3120283230303229> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 539.586 Td +/F1.0 10.5 Tf +[<5468652054> 29.7852 <657374696e6720616e642054> 29.7852 <65737420436f6e74726f6c204e6f746174696f6e2076657273696f6e20332e205061727420313a20436f7265204c616e6775616765>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 511.806 Td +/F1.0 10.5 Tf +[<5b325d205573657220477569646520666f7220544954> 60.0586 <414e205454> 20.0195 <434ed0332054> 29.7852 <657374204578656375746f72>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 484.026 Td +/F1.0 10.5 Tf +<5b335d204f70656e53534c20746f6f6c6b6974> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 468.246 Td +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +48.24 468.246 Td +/F1.0 10.5 Tf +[<687474703a2f2f777777> 69.8242 <2e6f70656e73736c2e6f7267>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3238> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +158 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 157 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +/Annots [163 0 R] +>> +endobj +159 0 obj +[158 0 R /XYZ 0 619.65 null] +endobj +160 0 obj +[158 0 R /XYZ 0 567.33 null] +endobj +161 0 obj +[158 0 R /XYZ 0 523.77 null] +endobj +162 0 obj +[158 0 R /XYZ 0 495.99 null] +endobj +163 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (http://www.openssl.org) +>> +/Subtype /Link +/Rect [48.24 465.18 163.6788 479.46] +/Type /Annot +>> +endobj +164 0 obj +<< /Border [0 0 0] +/Dest (_about_this_document) +/Subtype /Link +/Rect [48.24 748.79 156.6105 763.07] +/Type /Annot +>> +endobj +165 0 obj +<< /Border [0 0 0] +/Dest (_about_this_document) +/Subtype /Link +/Rect [541.1705 748.79 547.04 763.07] +/Type /Annot +>> +endobj +166 0 obj +<< /Border [0 0 0] +/Dest (_how_to_read_this_document) +/Subtype /Link +/Rect [60.24 730.31 201.801 744.59] +/Type /Annot +>> +endobj +167 0 obj +<< /Border [0 0 0] +/Dest (_how_to_read_this_document) +/Subtype /Link +/Rect [541.1705 730.31 547.04 744.59] +/Type /Annot +>> +endobj +168 0 obj +<< /Border [0 0 0] +/Dest (_presumed_knowledge) +/Subtype /Link +/Rect [60.24 711.83 169.02 726.11] +/Type /Annot +>> +endobj +169 0 obj +<< /Border [0 0 0] +/Dest (_presumed_knowledge) +/Subtype /Link +/Rect [541.1705 711.83 547.04 726.11] +/Type /Annot +>> +endobj +170 0 obj +<< /Border [0 0 0] +/Dest (_functionality) +/Subtype /Link +/Rect [48.24 693.35 115.02 707.63] +/Type /Annot +>> +endobj +171 0 obj +<< /Border [0 0 0] +/Dest (_functionality) +/Subtype /Link +/Rect [541.1705 693.35 547.04 707.63] +/Type /Annot +>> +endobj +172 0 obj +<< /Border [0 0 0] +/Dest (_system_requirements) +/Subtype /Link +/Rect [60.24 674.87 168.5683 689.15] +/Type /Annot +>> +endobj +173 0 obj +<< /Border [0 0 0] +/Dest (_system_requirements) +/Subtype /Link +/Rect [541.1705 674.87 547.04 689.15] +/Type /Annot +>> +endobj +174 0 obj +<< /Border [0 0 0] +/Dest (_fundamental_concepts) +/Subtype /Link +/Rect [60.24 656.39 174.984 670.67] +/Type /Annot +>> +endobj +175 0 obj +<< /Border [0 0 0] +/Dest (_fundamental_concepts) +/Subtype /Link +/Rect [541.1705 656.39 547.04 670.67] +/Type /Annot +>> +endobj +176 0 obj +<< /Border [0 0 0] +/Dest (_module_structure) +/Subtype /Link +/Rect [72.24 637.91 159.9045 652.19] +/Type /Annot +>> +endobj +177 0 obj +<< /Border [0 0 0] +/Dest (_module_structure) +/Subtype /Link +/Rect [541.1705 637.91 547.04 652.19] +/Type /Annot +>> +endobj +178 0 obj +<< /Border [0 0 0] +/Dest (_start_procedure) +/Subtype /Link +/Rect [60.24 619.43 138.6855 633.71] +/Type /Annot +>> +endobj +179 0 obj +<< /Border [0 0 0] +/Dest (_start_procedure) +/Subtype /Link +/Rect [541.1705 619.43 547.04 633.71] +/Type /Annot +>> +endobj +180 0 obj +<< /Border [0 0 0] +/Dest (_connection_asps) +/Subtype /Link +/Rect [72.24 600.95 155.841 615.23] +/Type /Annot +>> +endobj +181 0 obj +<< /Border [0 0 0] +/Dest (_connection_asps) +/Subtype /Link +/Rect [541.1705 600.95 547.04 615.23] +/Type /Annot +>> +endobj +182 0 obj +<< /Border [0 0 0] +/Dest (_server_mode) +/Subtype /Link +/Rect [72.24 582.47 135.8175 596.75] +/Type /Annot +>> +endobj +183 0 obj +<< /Border [0 0 0] +/Dest (_server_mode) +/Subtype /Link +/Rect [541.1705 582.47 547.04 596.75] +/Type /Annot +>> +endobj +184 0 obj +<< /Border [0 0 0] +/Dest (_client_mode) +/Subtype /Link +/Rect [72.24 563.99 132.0375 578.27] +/Type /Annot +>> +endobj +185 0 obj +<< /Border [0 0 0] +/Dest (_client_mode) +/Subtype /Link +/Rect [541.1705 563.99 547.04 578.27] +/Type /Annot +>> +endobj +186 0 obj +<< /Border [0 0 0] +/Dest (sending-receiving-messages) +/Subtype /Link +/Rect [60.24 545.51 201.591 559.79] +/Type /Annot +>> +endobj +187 0 obj +<< /Border [0 0 0] +/Dest (sending-receiving-messages) +/Subtype /Link +/Rect [541.1705 545.51 547.04 559.79] +/Type /Annot +>> +endobj +188 0 obj +<< /Border [0 0 0] +/Dest (_logging) +/Subtype /Link +/Rect [60.24 527.03 99.909 541.31] +/Type /Annot +>> +endobj +189 0 obj +<< /Border [0 0 0] +/Dest (_logging) +/Subtype /Link +/Rect [541.1705 527.03 547.04 541.31] +/Type /Annot +>> +endobj +190 0 obj +<< /Border [0 0 0] +/Dest (_error_handling) +/Subtype /Link +/Rect [60.24 508.55 136.848 522.83] +/Type /Annot +>> +endobj +191 0 obj +<< /Border [0 0 0] +/Dest (_error_handling) +/Subtype /Link +/Rect [541.1705 508.55 547.04 522.83] +/Type /Annot +>> +endobj +192 0 obj +<< /Border [0 0 0] +/Dest (_closing_down) +/Subtype /Link +/Rect [60.24 490.07 128.721 504.35] +/Type /Annot +>> +endobj +193 0 obj +<< /Border [0 0 0] +/Dest (_closing_down) +/Subtype /Link +/Rect [541.1705 490.07 547.04 504.35] +/Type /Annot +>> +endobj +194 0 obj +<< /Border [0 0 0] +/Dest (_ipv6_support) +/Subtype /Link +/Rect [60.24 471.59 125.0355 485.87] +/Type /Annot +>> +endobj +195 0 obj +<< /Border [0 0 0] +/Dest (_ipv6_support) +/Subtype /Link +/Rect [541.1705 471.59 547.04 485.87] +/Type /Annot +>> +endobj +196 0 obj +<< /Border [0 0 0] +/Dest (_ssl_functionality) +/Subtype /Link +/Rect [60.24 453.11 147.684 467.39] +/Type /Annot +>> +endobj +197 0 obj +<< /Border [0 0 0] +/Dest (_ssl_functionality) +/Subtype /Link +/Rect [541.1705 453.11 547.04 467.39] +/Type /Annot +>> +endobj +198 0 obj +<< /Border [0 0 0] +/Dest (_compilation) +/Subtype /Link +/Rect [72.24 434.63 133.4655 448.91] +/Type /Annot +>> +endobj +199 0 obj +<< /Border [0 0 0] +/Dest (_compilation) +/Subtype /Link +/Rect [541.1705 434.63 547.04 448.91] +/Type /Annot +>> +endobj +200 0 obj +<< /Border [0 0 0] +/Dest (_authentication) +/Subtype /Link +/Rect [72.24 416.15 146.8213 430.43] +/Type /Annot +>> +endobj +201 0 obj +<< /Border [0 0 0] +/Dest (_authentication) +/Subtype /Link +/Rect [541.1705 416.15 547.04 430.43] +/Type /Annot +>> +endobj +202 0 obj +<< /Border [0 0 0] +/Dest (_other_features) +/Subtype /Link +/Rect [72.24 397.67 146.6006 411.95] +/Type /Annot +>> +endobj +203 0 obj +<< /Border [0 0 0] +/Dest (_other_features) +/Subtype /Link +/Rect [541.1705 397.67 547.04 411.95] +/Type /Annot +>> +endobj +204 0 obj +<< /Border [0 0 0] +/Dest (_limitations) +/Subtype /Link +/Rect [72.24 379.19 129.6015 393.47] +/Type /Annot +>> +endobj +205 0 obj +<< /Border [0 0 0] +/Dest (_limitations) +/Subtype /Link +/Rect [541.1705 379.19 547.04 393.47] +/Type /Annot +>> +endobj +206 0 obj +<< /Border [0 0 0] +/Dest (_the_test_port) +/Subtype /Link +/Rect [48.24 360.71 113.5838 374.99] +/Type /Annot +>> +endobj +207 0 obj +<< /Border [0 0 0] +/Dest (_the_test_port) +/Subtype /Link +/Rect [541.1705 360.71 547.04 374.99] +/Type /Annot +>> +endobj +208 0 obj +<< /Border [0 0 0] +/Dest (_overview) +/Subtype /Link +/Rect [60.24 342.23 108.7605 356.51] +/Type /Annot +>> +endobj +209 0 obj +<< /Border [0 0 0] +/Dest (_overview) +/Subtype /Link +/Rect [541.1705 342.23 547.04 356.51] +/Type /Annot +>> +endobj +210 0 obj +<< /Border [0 0 0] +/Dest (_installation) +/Subtype /Link +/Rect [60.24 323.75 117.486 338.03] +/Type /Annot +>> +endobj +211 0 obj +<< /Border [0 0 0] +/Dest (_installation) +/Subtype /Link +/Rect [541.1705 323.75 547.04 338.03] +/Type /Annot +>> +endobj +212 0 obj +<< /Border [0 0 0] +/Dest (_configuration) +/Subtype /Link +/Rect [60.24 305.27 129.5503 319.55] +/Type /Annot +>> +endobj +213 0 obj +<< /Border [0 0 0] +/Dest (_configuration) +/Subtype /Link +/Rect [541.1705 305.27 547.04 319.55] +/Type /Annot +>> +endobj +214 0 obj +<< /Border [0 0 0] +/Dest (Abstract_Socket_Test_Port_Parameters_in_the_Test_Port_Configuration_File) +/Subtype /Link +/Rect [72.24 286.79 426.9862 301.07] +/Type /Annot +>> +endobj +215 0 obj +<< /Border [0 0 0] +/Dest (Abstract_Socket_Test_Port_Parameters_in_the_Test_Port_Configuration_File) +/Subtype /Link +/Rect [541.1705 286.79 547.04 301.07] +/Type /Annot +>> +endobj +216 0 obj +<< /Border [0 0 0] +/Dest (_the_abstractsocket_api) +/Subtype /Link +/Rect [60.24 268.31 81.66 282.59] +/Type /Annot +>> +endobj +217 0 obj +<< /Border [0 0 0] +/Dest (_the_abstractsocket_api) +/Subtype /Link +/Rect [81.66 269.906 155.16 280.406] +/Type /Annot +>> +endobj +218 0 obj +<< /Border [0 0 0] +/Dest (_the_abstractsocket_api) +/Subtype /Link +/Rect [155.16 268.31 175.4775 282.59] +/Type /Annot +>> +endobj +219 0 obj +<< /Border [0 0 0] +/Dest (_the_abstractsocket_api) +/Subtype /Link +/Rect [541.1705 268.31 547.04 282.59] +/Type /Annot +>> +endobj +220 0 obj +<< /Border [0 0 0] +/Dest (map-unmap-the-test-port) +/Subtype /Link +/Rect [72.24 249.83 199.3133 264.11] +/Type /Annot +>> +endobj +221 0 obj +<< /Border [0 0 0] +/Dest (map-unmap-the-test-port) +/Subtype /Link +/Rect [541.1705 249.83 547.04 264.11] +/Type /Annot +>> +endobj +222 0 obj +<< /Border [0 0 0] +/Dest (_setting_test_port_parameters) +/Subtype /Link +/Rect [72.24 231.35 213.4881 245.63] +/Type /Annot +>> +endobj +223 0 obj +<< /Border [0 0 0] +/Dest (_setting_test_port_parameters) +/Subtype /Link +/Rect [541.1705 231.35 547.04 245.63] +/Type /Annot +>> +endobj +224 0 obj +<< /Border [0 0 0] +/Dest (_open_a_listening_port) +/Subtype /Link +/Rect [72.24 212.87 180.4425 227.15] +/Type /Annot +>> +endobj +225 0 obj +<< /Border [0 0 0] +/Dest (_open_a_listening_port) +/Subtype /Link +/Rect [535.301 212.87 547.04 227.15] +/Type /Annot +>> +endobj +226 0 obj +<< /Border [0 0 0] +/Dest (_close_the_listening_port) +/Subtype /Link +/Rect [72.24 194.39 189.9975 208.67] +/Type /Annot +>> +endobj +227 0 obj +<< /Border [0 0 0] +/Dest (_close_the_listening_port) +/Subtype /Link +/Rect [535.301 194.39 547.04 208.67] +/Type /Annot +>> +endobj +228 0 obj +<< /Border [0 0 0] +/Dest (_open_a_client_connection) +/Subtype /Link +/Rect [72.24 175.91 198.744 190.19] +/Type /Annot +>> +endobj +229 0 obj +<< /Border [0 0 0] +/Dest (_open_a_client_connection) +/Subtype /Link +/Rect [535.301 175.91 547.04 190.19] +/Type /Annot +>> +endobj +230 0 obj +<< /Border [0 0 0] +/Dest (_send_message) +/Subtype /Link +/Rect [72.24 157.43 141.582 171.71] +/Type /Annot +>> +endobj +231 0 obj +<< /Border [0 0 0] +/Dest (_send_message) +/Subtype /Link +/Rect [535.301 157.43 547.04 171.71] +/Type /Annot +>> +endobj +232 0 obj +<< /Border [0 0 0] +/Dest (_close_a_client_connection) +/Subtype /Link +/Rect [72.24 138.95 198.2295 153.23] +/Type /Annot +>> +endobj +233 0 obj +<< /Border [0 0 0] +/Dest (_close_a_client_connection) +/Subtype /Link +/Rect [535.301 138.95 547.04 153.23] +/Type /Annot +>> +endobj +234 0 obj +<< /Border [0 0 0] +/Dest (_test_port_parameter_names) +/Subtype /Link +/Rect [72.24 120.47 208.4481 134.75] +/Type /Annot +>> +endobj +235 0 obj +<< /Border [0 0 0] +/Dest (_test_port_parameter_names) +/Subtype /Link +/Rect [535.301 120.47 547.04 134.75] +/Type /Annot +>> +endobj +236 0 obj +<< /Border [0 0 0] +/Dest (_parameter_accessor_functions) +/Subtype /Link +/Rect [72.24 101.99 223.3556 116.27] +/Type /Annot +>> +endobj +237 0 obj +<< /Border [0 0 0] +/Dest (_parameter_accessor_functions) +/Subtype /Link +/Rect [535.301 101.99 547.04 116.27] +/Type /Annot +>> +endobj +238 0 obj +<< /Border [0 0 0] +/Dest (_logging_functions) +/Subtype /Link +/Rect [72.24 83.51 164.0205 97.79] +/Type /Annot +>> +endobj +239 0 obj +<< /Border [0 0 0] +/Dest (_logging_functions) +/Subtype /Link +/Rect [535.301 83.51 547.04 97.79] +/Type /Annot +>> +endobj +240 0 obj +<< /Border [0 0 0] +/Dest (_error_reporting) +/Subtype /Link +/Rect [72.24 65.03 151.7985 79.31] +/Type /Annot +>> +endobj +241 0 obj +<< /Border [0 0 0] +/Dest (_error_reporting) +/Subtype /Link +/Rect [535.301 65.03 547.04 79.31] +/Type /Annot +>> +endobj +242 0 obj +<< /Border [0 0 0] +/Dest (_tips_and_tricks) +/Subtype /Link +/Rect [48.24 791.61 124.491 805.89] +/Type /Annot +>> +endobj +243 0 obj +<< /Border [0 0 0] +/Dest (_tips_and_tricks) +/Subtype /Link +/Rect [535.301 791.61 547.04 805.89] +/Type /Annot +>> +endobj +244 0 obj +<< /Border [0 0 0] +/Dest (_usage) +/Subtype /Link +/Rect [60.24 773.13 89.661 787.41] +/Type /Annot +>> +endobj +245 0 obj +<< /Border [0 0 0] +/Dest (_usage) +/Subtype /Link +/Rect [535.301 773.13 547.04 787.41] +/Type /Annot +>> +endobj +246 0 obj +<< /Border [0 0 0] +/Dest (deriving_the_test_port_class) +/Subtype /Link +/Rect [72.24 754.65 208.7528 768.93] +/Type /Annot +>> +endobj +247 0 obj +<< /Border [0 0 0] +/Dest (deriving_the_test_port_class) +/Subtype /Link +/Rect [535.301 754.65 547.04 768.93] +/Type /Annot +>> +endobj +248 0 obj +<< /Border [0 0 0] +/Dest (implementation_of_the_logger_functions) +/Subtype /Link +/Rect [72.24 736.17 273.7245 750.45] +/Type /Annot +>> +endobj +249 0 obj +<< /Border [0 0 0] +/Dest (implementation_of_the_logger_functions) +/Subtype /Link +/Rect [535.301 736.17 547.04 750.45] +/Type /Annot +>> +endobj +250 0 obj +<< /Border [0 0 0] +/Dest (function_translations) +/Subtype /Link +/Rect [72.24 717.69 181.9543 731.97] +/Type /Annot +>> +endobj +251 0 obj +<< /Border [0 0 0] +/Dest (function_translations) +/Subtype /Link +/Rect [535.301 717.69 547.04 731.97] +/Type /Annot +>> +endobj +252 0 obj +<< /Border [0 0 0] +/Dest (functions_for_manipulating_the_set_of_events_for_which_the_port_waits) +/Subtype /Link +/Rect [72.24 699.21 421.2096 713.49] +/Type /Annot +>> +endobj +253 0 obj +<< /Border [0 0 0] +/Dest (functions_for_manipulating_the_set_of_events_for_which_the_port_waits) +/Subtype /Link +/Rect [535.301 699.21 547.04 713.49] +/Type /Annot +>> +endobj +254 0 obj +<< /Border [0 0 0] +/Dest (final_steps) +/Subtype /Link +/Rect [72.24 680.73 126.609 695.01] +/Type /Annot +>> +endobj +255 0 obj +<< /Border [0 0 0] +/Dest (final_steps) +/Subtype /Link +/Rect [535.301 680.73 547.04 695.01] +/Type /Annot +>> +endobj +256 0 obj +<< /Border [0 0 0] +/Dest (using-ttcn-buffer-in-test-ports) +/Subtype /Link +/Rect [60.24 662.25 90.984 676.53] +/Type /Annot +>> +endobj +257 0 obj +<< /Border [0 0 0] +/Dest (using-ttcn-buffer-in-test-ports) +/Subtype /Link +/Rect [90.984 663.846 148.734 674.346] +/Type /Annot +>> +endobj +258 0 obj +<< /Border [0 0 0] +/Dest (using-ttcn-buffer-in-test-ports) +/Subtype /Link +/Rect [148.734 662.25 212.9543 676.53] +/Type /Annot +>> +endobj +259 0 obj +<< /Border [0 0 0] +/Dest (using-ttcn-buffer-in-test-ports) +/Subtype /Link +/Rect [535.301 662.25 547.04 676.53] +/Type /Annot +>> +endobj +260 0 obj +<< /Border [0 0 0] +/Dest (_using_ssl_on_top_of_a_tcp_connection) +/Subtype /Link +/Rect [60.24 643.77 248.2131 658.05] +/Type /Annot +>> +endobj +261 0 obj +<< /Border [0 0 0] +/Dest (_using_ssl_on_top_of_a_tcp_connection) +/Subtype /Link +/Rect [535.301 643.77 547.04 658.05] +/Type /Annot +>> +endobj +262 0 obj +<< /Border [0 0 0] +/Dest (_server_mode_2) +/Subtype /Link +/Rect [72.24 625.29 135.8175 639.57] +/Type /Annot +>> +endobj +263 0 obj +<< /Border [0 0 0] +/Dest (_server_mode_2) +/Subtype /Link +/Rect [535.301 625.29 547.04 639.57] +/Type /Annot +>> +endobj +264 0 obj +<< /Border [0 0 0] +/Dest (_client_mode_2) +/Subtype /Link +/Rect [72.24 606.81 132.0375 621.09] +/Type /Annot +>> +endobj +265 0 obj +<< /Border [0 0 0] +/Dest (_client_mode_2) +/Subtype /Link +/Rect [535.301 606.81 547.04 621.09] +/Type /Annot +>> +endobj +266 0 obj +<< /Border [0 0 0] +/Dest (_authentication_flow) +/Subtype /Link +/Rect [72.24 588.33 174.0793 602.61] +/Type /Annot +>> +endobj +267 0 obj +<< /Border [0 0 0] +/Dest (_authentication_flow) +/Subtype /Link +/Rect [535.301 588.33 547.04 602.61] +/Type /Annot +>> +endobj +268 0 obj +<< /Border [0 0 0] +/Dest (_adapting_derived_test_ports_to_support_ipv6) +/Subtype /Link +/Rect [60.24 569.85 279.4401 584.13] +/Type /Annot +>> +endobj +269 0 obj +<< /Border [0 0 0] +/Dest (_adapting_derived_test_ports_to_support_ipv6) +/Subtype /Link +/Rect [535.301 569.85 547.04 584.13] +/Type /Annot +>> +endobj +270 0 obj +<< /Border [0 0 0] +/Dest (_error_messages) +/Subtype /Link +/Rect [48.24 551.37 125.226 565.65] +/Type /Annot +>> +endobj +271 0 obj +<< /Border [0 0 0] +/Dest (_error_messages) +/Subtype /Link +/Rect [535.301 551.37 547.04 565.65] +/Type /Annot +>> +endobj +272 0 obj +<< /Border [0 0 0] +/Dest (_error_messages_in_case_tcp_connections_are_used) +/Subtype /Link +/Rect [60.24 532.89 309.5623 547.17] +/Type /Annot +>> +endobj +273 0 obj +<< /Border [0 0 0] +/Dest (_error_messages_in_case_tcp_connections_are_used) +/Subtype /Link +/Rect [535.301 532.89 547.04 547.17] +/Type /Annot +>> +endobj +274 0 obj +<< /Border [0 0 0] +/Dest (_additional_error_messages_in_case_ssl_connections_are_used) +/Subtype /Link +/Rect [60.24 514.41 363.6793 528.69] +/Type /Annot +>> +endobj +275 0 obj +<< /Border [0 0 0] +/Dest (_additional_error_messages_in_case_ssl_connections_are_used) +/Subtype /Link +/Rect [535.301 514.41 547.04 528.69] +/Type /Annot +>> +endobj +276 0 obj +<< /Border [0 0 0] +/Dest (_warning_messages) +/Subtype /Link +/Rect [48.24 495.93 141.6396 510.21] +/Type /Annot +>> +endobj +277 0 obj +<< /Border [0 0 0] +/Dest (_warning_messages) +/Subtype /Link +/Rect [535.301 495.93 547.04 510.21] +/Type /Annot +>> +endobj +278 0 obj +<< /Border [0 0 0] +/Dest (_warning_messages_in_case_tcp_connections_are_used) +/Subtype /Link +/Rect [60.24 477.45 325.9758 491.73] +/Type /Annot +>> +endobj +279 0 obj +<< /Border [0 0 0] +/Dest (_warning_messages_in_case_tcp_connections_are_used) +/Subtype /Link +/Rect [535.301 477.45 547.04 491.73] +/Type /Annot +>> +endobj +280 0 obj +<< /Border [0 0 0] +/Dest (warning_messages_in_case_SSL_connections_are_used) +/Subtype /Link +/Rect [60.24 458.97 324.9261 473.25] +/Type /Annot +>> +endobj +281 0 obj +<< /Border [0 0 0] +/Dest (warning_messages_in_case_SSL_connections_are_used) +/Subtype /Link +/Rect [535.301 458.97 547.04 473.25] +/Type /Annot +>> +endobj +282 0 obj +<< /Border [0 0 0] +/Dest (_terminology) +/Subtype /Link +/Rect [48.24 440.49 111.8933 454.77] +/Type /Annot +>> +endobj +283 0 obj +<< /Border [0 0 0] +/Dest (_terminology) +/Subtype /Link +/Rect [535.301 440.49 547.04 454.77] +/Type /Annot +>> +endobj +284 0 obj +<< /Border [0 0 0] +/Dest (_abbreviations) +/Subtype /Link +/Rect [48.24 422.01 119.0205 436.29] +/Type /Annot +>> +endobj +285 0 obj +<< /Border [0 0 0] +/Dest (_abbreviations) +/Subtype /Link +/Rect [535.301 422.01 547.04 436.29] +/Type /Annot +>> +endobj +286 0 obj +<< /Border [0 0 0] +/Dest (_references) +/Subtype /Link +/Rect [48.24 403.53 103.0815 417.81] +/Type /Annot +>> +endobj +287 0 obj +<< /Border [0 0 0] +/Dest (_references) +/Subtype /Link +/Rect [535.301 403.53 547.04 417.81] +/Type /Annot +>> +endobj +288 0 obj +<< /Type /XObject +/Subtype /Form +/BBox [0 0 595.28 841.89] +/Length 162 +>> +stream +q +/DeviceRGB cs +0.0 0.0 0.0 scn +/DeviceRGB CS +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +q +0.25 w +/DeviceRGB CS +0.8667 0.8667 0.8667 SCN +48.24 30.0 m +547.04 30.0 l +S +Q +Q + +endstream +endobj +289 0 obj +<< /Type /XObject +/Subtype /Form +/BBox [0 0 595.28 841.89] +/Length 162 +>> +stream +q +/DeviceRGB cs +0.0 0.0 0.0 scn +/DeviceRGB CS +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +q +0.25 w +/DeviceRGB CS +0.8667 0.8667 0.8667 SCN +48.24 30.0 m +547.04 30.0 l +S +Q +Q + +endstream +endobj +290 0 obj +<< /Type /Outlines +/Count 62 +/First 291 0 R +/Last 352 0 R +>> +endobj +291 0 obj +<< /Title +/Parent 290 0 R +/Count 0 +/Next 292 0 R +/Dest [7 0 R /XYZ 0 841.89 null] +>> +endobj +292 0 obj +<< /Title +/Parent 290 0 R +/Count 0 +/Next 293 0 R +/Prev 291 0 R +/Dest [10 0 R /XYZ 0 841.89 null] +>> +endobj +293 0 obj +<< /Title +/Parent 290 0 R +/Count 2 +/First 294 0 R +/Last 295 0 R +/Next 296 0 R +/Prev 292 0 R +/Dest [14 0 R /XYZ 0 841.89 null] +>> +endobj +294 0 obj +<< /Title +/Parent 293 0 R +/Count 0 +/Next 295 0 R +/Dest [14 0 R /XYZ 0 765.17 null] +>> +endobj +295 0 obj +<< /Title +/Parent 293 0 R +/Count 0 +/Prev 294 0 R +/Dest [14 0 R /XYZ 0 681.53 null] +>> +endobj +296 0 obj +<< /Title +/Parent 290 0 R +/Count 17 +/First 297 0 R +/Last 309 0 R +/Next 314 0 R +/Prev 293 0 R +/Dest [14 0 R /XYZ 0 613.67 null] +>> +endobj +297 0 obj +<< /Title +/Parent 296 0 R +/Count 0 +/Next 298 0 R +/Dest [14 0 R /XYZ 0 561.35 null] +>> +endobj +298 0 obj +<< /Title +/Parent 296 0 R +/Count 1 +/First 299 0 R +/Last 299 0 R +/Next 300 0 R +/Prev 297 0 R +/Dest [14 0 R /XYZ 0 359.15 null] +>> +endobj +299 0 obj +<< /Title +/Parent 298 0 R +/Count 0 +/Dest [14 0 R /XYZ 0 254.29 null] +>> +endobj +300 0 obj +<< /Title +/Parent 296 0 R +/Count 3 +/First 301 0 R +/Last 303 0 R +/Next 304 0 R +/Prev 298 0 R +/Dest [14 0 R /XYZ 0 136.87 null] +>> +endobj +301 0 obj +<< /Title +/Parent 300 0 R +/Count 0 +/Next 302 0 R +/Dest [32 0 R /XYZ 0 841.89 null] +>> +endobj +302 0 obj +<< /Title +/Parent 300 0 R +/Count 0 +/Next 303 0 R +/Prev 301 0 R +/Dest [32 0 R /XYZ 0 727.05 null] +>> +endobj +303 0 obj +<< /Title +/Parent 300 0 R +/Count 0 +/Prev 302 0 R +/Dest [32 0 R /XYZ 0 627.63 null] +>> +endobj +304 0 obj +<< /Title +/Parent 296 0 R +/Count 0 +/Next 305 0 R +/Prev 300 0 R +/Dest [32 0 R /XYZ 0 484.65 null] +>> +endobj +305 0 obj +<< /Title +/Parent 296 0 R +/Count 0 +/Next 306 0 R +/Prev 304 0 R +/Dest [32 0 R /XYZ 0 364.01 null] +>> +endobj +306 0 obj +<< /Title +/Parent 296 0 R +/Count 0 +/Next 307 0 R +/Prev 305 0 R +/Dest [32 0 R /XYZ 0 211.81 null] +>> +endobj +307 0 obj +<< /Title +/Parent 296 0 R +/Count 0 +/Next 308 0 R +/Prev 306 0 R +/Dest [40 0 R /XYZ 0 841.89 null] +>> +endobj +308 0 obj +<< /Title +/Parent 296 0 R +/Count 0 +/Next 309 0 R +/Prev 307 0 R +/Dest [40 0 R /XYZ 0 721.61 null] +>> +endobj +309 0 obj +<< /Title +/Parent 296 0 R +/Count 4 +/First 310 0 R +/Last 313 0 R +/Prev 308 0 R +/Dest [40 0 R /XYZ 0 616.75 null] +>> +endobj +310 0 obj +<< /Title +/Parent 309 0 R +/Count 0 +/Next 311 0 R +/Dest [40 0 R /XYZ 0 484.11 null] +>> +endobj +311 0 obj +<< /Title +/Parent 309 0 R +/Count 0 +/Next 312 0 R +/Prev 310 0 R +/Dest [40 0 R /XYZ 0 309.57 null] +>> +endobj +312 0 obj +<< /Title +/Parent 309 0 R +/Count 0 +/Next 313 0 R +/Prev 311 0 R +/Dest [47 0 R /XYZ 0 644.4 null] +>> +endobj +313 0 obj +<< /Title +/Parent 309 0 R +/Count 0 +/Prev 312 0 R +/Dest [47 0 R /XYZ 0 505.2 null] +>> +endobj +314 0 obj +<< /Title +/Parent 290 0 R +/Count 16 +/First 315 0 R +/Last 319 0 R +/Next 331 0 R +/Prev 296 0 R +/Dest [47 0 R /XYZ 0 399.78 null] +>> +endobj +315 0 obj +<< /Title +/Parent 314 0 R +/Count 0 +/Next 316 0 R +/Dest [47 0 R /XYZ 0 347.46 null] +>> +endobj +316 0 obj +<< /Title +/Parent 314 0 R +/Count 0 +/Next 317 0 R +/Prev 315 0 R +/Dest [56 0 R /XYZ 0 609.39 null] +>> +endobj +317 0 obj +<< /Title +/Parent 314 0 R +/Count 1 +/First 318 0 R +/Last 318 0 R +/Next 319 0 R +/Prev 316 0 R +/Dest [56 0 R /XYZ 0 286.95 null] +>> +endobj +318 0 obj +<< /Title +/Parent 317 0 R +/Count 0 +/Dest [64 0 R /XYZ 0 841.89 null] +>> +endobj +319 0 obj +<< /Title +/Parent 314 0 R +/Count 11 +/First 320 0 R +/Last 330 0 R +/Prev 317 0 R +/Dest [73 0 R /XYZ 0 352.38 null] +>> +endobj +320 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 321 0 R +/Dest [73 0 R /XYZ 0 279.08 null] +>> +endobj +321 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 322 0 R +/Prev 320 0 R +/Dest [73 0 R /XYZ 0 133.0 null] +>> +endobj +322 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 323 0 R +/Prev 321 0 R +/Dest [78 0 R /XYZ 0 762.33 null] +>> +endobj +323 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 324 0 R +/Prev 322 0 R +/Dest [81 0 R /XYZ 0 763.08 null] +>> +endobj +324 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 325 0 R +/Prev 323 0 R +/Dest [81 0 R /XYZ 0 671.22 null] +>> +endobj +325 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 326 0 R +/Prev 324 0 R +/Dest [81 0 R /XYZ 0 227.04 null] +>> +endobj +326 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 327 0 R +/Prev 325 0 R +/Dest [87 0 R /XYZ 0 373.99 null] +>> +endobj +327 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 328 0 R +/Prev 326 0 R +/Dest [87 0 R /XYZ 0 226.87 null] +>> +endobj +328 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 329 0 R +/Prev 327 0 R +/Dest [92 0 R /XYZ 0 477.09 null] +>> +endobj +329 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 330 0 R +/Prev 328 0 R +/Dest [95 0 R /XYZ 0 841.89 null] +>> +endobj +330 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Prev 329 0 R +/Dest [95 0 R /XYZ 0 649.87 null] +>> +endobj +331 0 obj +<< /Title +/Parent 290 0 R +/Count 12 +/First 332 0 R +/Last 343 0 R +/Next 344 0 R +/Prev 314 0 R +/Dest [95 0 R /XYZ 0 471.19 null] +>> +endobj +332 0 obj +<< /Title +/Parent 331 0 R +/Count 5 +/First 333 0 R +/Last 337 0 R +/Next 338 0 R +/Dest [95 0 R /XYZ 0 418.87 null] +>> +endobj +333 0 obj +<< /Title +/Parent 332 0 R +/Count 0 +/Next 334 0 R +/Dest [95 0 R /XYZ 0 187.11 null] +>> +endobj +334 0 obj +<< /Title +/Parent 332 0 R +/Count 0 +/Next 335 0 R +/Prev 333 0 R +/Dest [109 0 R /XYZ 0 671.16 null] +>> +endobj +335 0 obj +<< /Title +/Parent 332 0 R +/Count 0 +/Next 336 0 R +/Prev 334 0 R +/Dest [109 0 R /XYZ 0 414.78 null] +>> +endobj +336 0 obj +<< /Title +/Parent 332 0 R +/Count 0 +/Next 337 0 R +/Prev 335 0 R +/Dest [113 0 R /XYZ 0 254.11 null] +>> +endobj +337 0 obj +<< /Title +/Parent 332 0 R +/Count 0 +/Prev 336 0 R +/Dest [117 0 R /XYZ 0 541.37 null] +>> +endobj +338 0 obj +<< /Title +/Parent 331 0 R +/Count 0 +/Next 339 0 R +/Prev 332 0 R +/Dest [117 0 R /XYZ 0 457.73 null] +>> +endobj +339 0 obj +<< /Title +/Parent 331 0 R +/Count 3 +/First 340 0 R +/Last 342 0 R +/Next 343 0 R +/Prev 338 0 R +/Dest [117 0 R /XYZ 0 162.85 null] +>> +endobj +340 0 obj +<< /Title +/Parent 339 0 R +/Count 0 +/Next 341 0 R +/Dest [123 0 R /XYZ 0 841.89 null] +>> +endobj +341 0 obj +<< /Title +/Parent 339 0 R +/Count 0 +/Next 342 0 R +/Prev 340 0 R +/Dest [123 0 R /XYZ 0 494.13 null] +>> +endobj +342 0 obj +<< /Title +/Parent 339 0 R +/Count 0 +/Prev 341 0 R +/Dest [123 0 R /XYZ 0 315.81 null] +>> +endobj +343 0 obj +<< /Title +/Parent 331 0 R +/Count 0 +/Prev 339 0 R +/Dest [129 0 R /XYZ 0 841.89 null] +>> +endobj +344 0 obj +<< /Title +/Parent 290 0 R +/Count 2 +/First 345 0 R +/Last 346 0 R +/Next 347 0 R +/Prev 331 0 R +/Dest [132 0 R /XYZ 0 841.89 null] +>> +endobj +345 0 obj +<< /Title +/Parent 344 0 R +/Count 0 +/Next 346 0 R +/Dest [132 0 R /XYZ 0 758.37 null] +>> +endobj +346 0 obj +<< /Title +/Parent 344 0 R +/Count 0 +/Prev 345 0 R +/Dest [139 0 R /XYZ 0 273.06 null] +>> +endobj +347 0 obj +<< /Title +/Parent 290 0 R +/Count 2 +/First 348 0 R +/Last 349 0 R +/Next 350 0 R +/Prev 344 0 R +/Dest [144 0 R /XYZ 0 754.11 null] +>> +endobj +348 0 obj +<< /Title +/Parent 347 0 R +/Count 0 +/Next 349 0 R +/Dest [144 0 R /XYZ 0 701.79 null] +>> +endobj +349 0 obj +<< /Title +/Parent 347 0 R +/Count 0 +/Prev 348 0 R +/Dest [150 0 R /XYZ 0 687.96 null] +>> +endobj +350 0 obj +<< /Title +/Parent 290 0 R +/Count 0 +/Next 351 0 R +/Prev 347 0 R +/Dest [153 0 R /XYZ 0 778.86 null] +>> +endobj +351 0 obj +<< /Title +/Parent 290 0 R +/Count 0 +/Next 352 0 R +/Prev 350 0 R +/Dest [153 0 R /XYZ 0 438.06 null] +>> +endobj +352 0 obj +<< /Title +/Parent 290 0 R +/Count 0 +/Prev 351 0 R +/Dest [158 0 R /XYZ 0 619.65 null] +>> +endobj +353 0 obj +<< /Nums [0 << /P (i) +>> 1 << /P (ii) +>> 2 << /P (iii) +>> 3 << /P (1) +>> 4 << /P (2) +>> 5 << /P (3) +>> 6 << /P (4) +>> 7 << /P (5) +>> 8 << /P (6) +>> 9 << /P (7) +>> 10 << /P (8) +>> 11 << /P (9) +>> 12 << /P (10) +>> 13 << /P (11) +>> 14 << /P (12) +>> 15 << /P (13) +>> 16 << /P (14) +>> 17 << /P (15) +>> 18 << /P (16) +>> 19 << /P (17) +>> 20 << /P (18) +>> 21 << /P (19) +>> 22 << /P (20) +>> 23 << /P (21) +>> 24 << /P (22) +>> 25 << /P (23) +>> 26 << /P (24) +>> 27 << /P (25) +>> 28 << /P (26) +>> 29 << /P (27) +>> 30 << /P (28) +>>] +>> +endobj +354 0 obj +<< /Length1 13108 +/Length 8295 +/Filter [/FlateDecode] +>> +stream +xz X[es @Y !@I/e+[ZJ)K(-Z;VUgԪvlvqUǿόuq׿;˭gz>-9{sF qD"&tf Ń%fBwG{~)L=Ʀw '=5CCwJ'wM< +c4Y_N_wO$#_n"B|'kʂ1r(E#9!.!Ċ,OP(Tj ɆdL5g- +2̲g;"!ץ6 +]Xvq^1+9O]Pdx<mQ{2rðf-O-1`mVfe@:\^ }RU}%Kl()GzGGs:FST|hۑ{ Y(2eŮu'Ț}c3JB$k+ޱ, F6gd4NV8jb'#Mzʨ}g&kM.(V{vѱ|!q~ hodsЙc&]naFKe6t dơTp$[8)#GG&x*du=1qrxIy;6k%UENa,O Зe$q豞їUnye:0ȰtZM}_ F?9Pku1X/0>0xQω%QM k3\&HZȵvJ.˜ҌQZ^l&p{.kdI^O1k>2Li, 3nAXmZo?/¶W[Qn[yb +kc x]jKɍ%'ksg5mN^.6Qk{Ej,$y6sЭEVoƪ&8!KEJksζF;Npw2mDoTIb\hrܛTh~NU~[;leQ=tl(p@uizKxYlmVXiRrWּF]\pj@n>;lANNhByE)Ggule>zB6@Wer#E`2TO%W+!un=@]'W<3O+İd63C[b.l*24b҂BGjAI2tj ~UT.C\d78Dd/+Bi 0Ӗ]5:զ]o?ؾRm*ˆb~Tֽ o]dc0٥_S1XG]ʀd{UuW  +e9+E }PKJ[QJBnG3wwTO(Dqх'/~y[m: R[WuϏd{@66CQ,}k%ȍ#2,/ڵb30q:n0L%w{O +M'>yg }-_BjYq('2-,(8s +ǢdlP" }_ V/"e&i>ܿQ2nˬ, +XWdҥ,SvAR~l]̾,/K&_tyt r%0t&7Ժӵ^NtH}~09*{Yj"o<܁tSߗwuT}OON>ݛ/'k7GF.??-s_lYA(/˅\M~uaZ;='1ƶldݡ:N﫥X$[LS8llsJPllǁ"nRϣ?}U12Yu/C7}<|ngŷ]S`/='&>wgkuIf(glqLF .v+&tL\a ںʈM("!ic24kǫD`&eJ֏`ǁ#$ۣAWH}@yxHwn۷#عI!xmO]mL9i ;S2YKTX. SWab.T0&az= Ql?R+QWV&-aCu4|UB7q("rX}(7fA d Sr-S}čQ0J2 c/|.pݨ2'bOD t xQIyszq~ՊĮ(Jy7 ߱U?% rs`ni(+uH,$؂WC-()52-IfF{9B?DcE\:>Z~բ$ҹzB@ +$ ?'r by4sg3}8UgɆX}sO.GEEJJ26ƅyWkU3C' z"\: }@Ҧ*&Q/%D=%PjBw>gLMWЧ!7lwL(Tq|tR^}`i>$̀,}>LQ]oGR$hmzަ >]},n_гk-8>ɩdψ!yabCK[,$ߠ?!rE@o!rR^gn|nˊ$66(e$&Du!!94. I ۆKY ި_ 8 / [)[f*_7[z*TeBqFɯ(,bEVcSԪE \J_I>}Gnq$-eT`Dnijc'G i9?m☽CpHl_{ +;;b%m~vۃiF˷]~ԇ$dovT|Es *5Q__"+l +=h堂;8*~6/w%tE^dz~5PI*+jV*,K.+#Z|v#(@^ij#. +r3:.Ov k*2lgM'"{[ .%a 2_\x웋s;lw2S"?MH~ eVӲ[` n<٥Wm/Q%=hu1ÝGL"N|;SILOQ-Yb\Xi)Q ECβVZ + JWNMIgXkR0HgBwfgRh))ҤzV&AXΪk {/ivYFZXQfMu?7Tz2cbR:Yx">nfQgyzCAΖެ Is_JgLEˢgZku90& ^"OP8ŭ:o/LP94qAC큞HI|tQ'J2ތ7h NG/I!Vy%s03 Pk}ϵA¹& ?ؚ+ム󝖃oV!M(TIXO 񓒡Jeg`mv\kCɺbr=+ bMZB|Z"Q'ilj#tN&TQQ*[2U nSaX#ڴ1.[͂Xfb/YoY 6A:ly{Adn/* sy9,r qڦ/=]kiL;~bxi"MKqą#Lu$8ސQ|}A{fu5r,U`9ҫo\* {pĺ lS]s^YEJv-#+luw,!ە݅-Nyذ#'>̔r7 Tؙm< &W ]'3 -KM̆mV9O1W-/k@v `~4f7c?Smٹ_c>Ib"G|aH0e/?#3}[TT26#&:-_7Q?fhcp}}K+΍hvgU͋3Ku=@ +~'W1w(Uz͝Y wAdMRZA yKSVEK&BZvW{ɇu X郎HBnU0==@ +? xyZ 4jFU(A^lv^NIniVCL" YٱQl1ѓ !.E)nDzYR& *uиv $Aїҥ4U)*\<&OZ[j͍bˠJ\ư2ojcĩ1).{,oܐ\\0 +ʸtĐMXma$n' rr&/H}!Wgh,Jӳ͋(=nG!4{Cqy!$}!pn0uQLJL JA#H>GJr8YqsfsƋU+]#ވ"~!H|GI$?2%2;.r!Fm"ua^1Q1w2;KX]tT{q>RɄN1Nk'|đK !.G11pK04̢N81N8pcpt1׈*G|?Sܨpށ"Wᶢ: ~48ۇJp.vd⼆ԜH̩DtK*G y֗q #U)2!+1p/ })y\ R3ETJC;Xg'DP':>ğP#75it ]UMտ&v bk:c? W(|gh@D$8APmY!u cؼ"}+h G*7Bi'6Xp G(yc?@mQR'%!v-X #Ji(v7oQx9 \}nyc1* j +CQ Euh3G P4-ZP+jCuh^Fy36[lQYE)bQp'CVxh@<|h@B'amoIahB,SHy<pihbWORhhdwy>J@RbWJ%Cмu +G"|$'蕷Ud^h> +哭hd! GNǡy!JTy!j*KÃCӚ,[f"lhFG5̥)McT}Pm,u !4 f2 (<hhG`.(jG__~jùh}Rh'XpWjbF3IA4h60cAYF(fu<6Spl뛑'L-[33\K ; "Ɇo3h8,AƯ'G4pɇfc8AH&˿FɅ%qtlKY 2:g!R_33>4<> ߧլ #[ +Mk2C,AciPlo#0CyVko2ȊNXHʚ4< + T,@cUv~ O1ҍ5DyΝвXS3}Áuw*)`C5ýS IPh Е ͲfYl[J?Н +IckX??}&fpcak,AhŔfSIY]SAza\-@ydjs0ude,w <-&H>~scwg(+~mC @ +endstream +endobj +355 0 obj +<< /Type /FontDescriptor +/FontName /3a0e86+NotoSerif +/FontFile2 354 0 R +/FontBBox [-212 -250 1246 1047] +/Flags 6 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 1068 +/Descent -292 +/CapHeight 1462 +/XHeight 1098 +>> +endobj +356 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +357 0 obj +[259 1000 408 1000 1000 1000 1000 220 346 346 1000 1000 250 310 250 288 559 559 559 559 559 559 559 559 559 559 286 286 559 1000 559 1000 1000 705 653 613 727 623 589 713 792 367 1000 700 623 937 763 742 604 1000 655 543 612 716 674 1046 660 625 1000 359 1000 359 1000 458 577 562 613 492 613 535 369 538 634 319 299 584 310 944 645 577 613 613 471 451 352 634 579 861 578 564 511 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 562 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 361 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 259 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 250 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +358 0 obj +<< /Length1 9744 +/Length 6315 +/Filter [/FlateDecode] +>> +stream +xZ{xוwf$˲-[dz˲%[dCOF0–X$a yѐPB Ih6MnM6ل|ۥ_Zگeaόd=ss9w#Ȏ8h?c y!,lx~x!H?솧fNAh=< [GR.s5ih۟< 폠7Tq~P^)WA7 ~l!=F ^Rᒋ/l1&ed~Jj (S,ARYV6|FS5ZsjoNe%NB_?>~-\1sOfO^#J + X +)VNG\[ 3._!%! $%ɜF9vV_ԱfԾq=۫W]ZL>?}isk yKXe7U9ub5wVOu/ V;S+K)꺻{ C̜#vp^AYH Ӑ2,Q`}X]B2 - +KF>h}ψZ{F\aMx7-[ȟ̶l\~_VתLBT: +r Ɗ&Q)H ˒}塺Ux;NLn߯?4ʽkʒ +- k}5~v@!MF }/bdž6 rko}0G++{ؓq3DLdDȽp.i[*U4 +|i{o0m +Ph ;o +]LJIŦqc5V7@ VV"e[7FLz.%3Fi:l[`\RΓ(mb__sgߊ&LΜ7+k"-Mz`ٲ^o6v'n\pl8n06nK&fzjO_^} +'ҴW]W!- V +ڣ-]Iuڊ#obǰ1}Jʮp;OO70ex; ɑaRZbTɀK!#!e\4H}O;vfj8۱8ɑU/O`=V^_L%z5NrLъjZ0Px8z[Pj1ȂoW×iYGGoO s#PS6NfLt9p/MiV?cf\aN9q\-3c*Ƨ|sg7!FM42;Wz{\ t 4?ר&nF{b$Au#$d nYiWkdkzugV_͋?,`Cy[qLA\q h~l%r 249< \QFEj04/Wԫ፵l\Ui7fW0 +&x{'@RZOQD#߰AnΧ=kP +JT|}+tiܨ.Ƈ#ԷSq~>d2,/2]?fA6 O]kHƋ BTtNUb,եԂ. ˲詴b,+ՒىZAV $ g$8-o}Wz+5<GYbz(&^~y71jAdӂd)s/_  sN2tm]׷Cx`]߶.qyoF J^xKwg.sg3yE6v5L@^_{/[&RK@3g`g`Ѽ&OQz^o9}] )8L tlj5c,v`Irc5EI<< ¸-` NU^TT˫1Ԥqbn';/['* S7eFz~艫Hm^ܷ}Pc5B}=j +ЅYOF܇lƪNKA㐯ZSmg"GG2S[tȁuGw :J,v[q{_W6rwS/uVEijnnh(0,v1`s~X)ҌI?kY=Z+j#4VX^TX܃wSh\z1K ~~t@#um"s.t3lk۶}r& tk6,0 u]ڟ 9OMZkg򴍓-&Y!&R*Hw&oIdU +KeLW9H"KI\RҪЯ}N/d֢T/*|i)R%Ps|uB8UF" + o~ꢪ ؝ªh\6*'7 ?nD\_%Fd9/xθ'>XZ^XTW%vL=2QWZ]ã74J]>Γ;qQw>*?%.nuY!wl&_~f~NN8ga_gbEMZebn7ߙjoI I3=fAniB^X8$E +O<9)_],w«WG?]$QFi K}D4Xl5;csІQ}׾W+e"fODīo?YP[imm:6jQʒzyGŧMw۪LU/1peCUV-ȜX>< GϱSLYF kEa +K&q _{X\s6X$+gmJ~pA-f6\8$FeDS΋\94 gTpC~fb5Τ,e}0}-_6NU="%"}q G[ +ZgӚݶGw}V3rc3 E{1-q-8nFi}啢#2fd|,/皝>6j^Kfrj+70k8Q DƄ7 RZonea4\NTߨk$@&jOA4']hLEOh4y4$~'9^oYVaUh*4٭7|Oy%W>0Mv]jU4E saL$\%Ҩm3 @{߮ūxKl O`o"F*vmEp8E#sШܞzC]o8jwnaa 5\B D[ÝIiB4+Dy-+w +5Z.qzhx唟d.eRJR~ZV'[v6NTKIa&Tzm=7^mx\ZX57yX +FCN$ҕ^cn=Ϯ dx@Io` W7c%.Ycmt$tg-C$ $ XQ_yc r%j9 jc>V,ܡ5 -qeAw[VʾJ‘}2e +2-%m=o-K'|U&Ey k}Få= `t5Dy`m;7V\~$߉^%@|;Jg(d 5H_m~cGNǼͯhɜeeN){pH }mj,_cH!~EimFTĹx&xD}d)Cܮ'f)Grn V +:Zux˯kvjV5,jw#1w>v +o84dpbp2*N .W{%xW̘+(DY;&:,ner*[;\PY y-;Sǰd7/[e +Q(+g?}?`0?4fgQd#]Nk1iR* R3GSbdVuvC{Ndl*u͞k WSx̀W̩GJ}-I +hN [iHTWxK< K_KmW{F5;]sv):PK525M3,WrW߱~=Jו[,|Jtp_I6/,x&}+G-NyR4O.sbkJjp|'ISUdJѩ!6iz>G$J'w,2yWV4{ ;LX^jU]HU@qVh7!p0_3E:7l)ݰvIliRS+B2op[\S݊ +_ +/HyhAnuY^.,GZcu\79*GZ.з4V˝f.= ]|a@ +$_LƑЅPm u$fPeZZ[ʺac5T&_Fԗ +"^.ND@@n`+RG5FZy>l,o[;5W#lYts8ܫ3fi>"GlF P|+# &r8qVsp%%M=!ܓTRS))oHUt %pw#YKp!O kMp ;N"s!5o )BZʍKC}d52R "-qi99? d&wׄ!;#} J n\=w!fnO- ?V@'Pzq'Mqʈ9ȁ3>W DCDܨDwހLuuH8n[3ì9@h wYb1HHQ.!=2*B$b$;@sCET գԈP3jA ں +D+Q7ZVVS.^s6V+ -FGr] 9(~RBN" aBN 9qnBN!%.L9 oL9 _sߑNB+' }&%d$&dO&|d# 9O%)HI\KSP9u?dWB +Ʉ< Y y! PU P&6irdhxZ9TuP$j뷪"UskJ +On XQ q M44#ah6C(j@cA-*0SSl+ 0 kKl: O [ĠW zu=F`u,2_ FXMoؐʢzlqv3Vğ17P$ +endstream +endobj +359 0 obj +<< /Type /FontDescriptor +/FontName /ace878+NotoSerif-Bold +/FontFile2 358 0 R +/FontBBox [-212 -250 1306 1058] +/Flags 6 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 1068 +/Descent -292 +/CapHeight 1462 +/XHeight 1098 +>> +endobj +360 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +361 0 obj +[259 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 310 1000 288 1000 1000 1000 559 559 1000 559 1000 1000 1000 304 1000 1000 1000 1000 1000 1000 752 671 667 767 652 621 1000 818 400 1000 733 653 952 788 787 638 1000 707 585 652 747 1000 1066 1000 1000 1000 1000 1000 1000 1000 1000 1000 599 648 526 648 570 407 560 666 352 1000 636 352 985 666 612 645 647 522 487 404 666 605 855 1000 579 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +362 0 obj +<< /Length1 7188 +/Length 4926 +/Filter [/FlateDecode] +>> +stream +xY tU~U !ImYH('@TT*TR @H,f3 DdTHt+2(b gCӎ=AFmt9}H}Lϙy{{ ZP:6IF"{))hBH;޶?Iwf_WBI1tuu6R侶A܍ZںLoq|j [A(&!Q< '>x;[:CMWA;NfAHG-C(QP0X#"BH$R$[0ߜSAǛ8\K.dzxTZ%RQUbr'?3(ÁW,$ Y|GVqJ)7_+0ǽ$pq<2"x?{ft;GG]yz>FSEb|w_G݀]>(kh\qN].Fx ρ_DMQImCQz+4?ds^؆-GQrrx$kH?79EѬ-IG+Lh}$z`j; +Ç->SPF@f@Rr'F=^_iezbb[ c$Tc 5p/)Q"R̤ftBⳅ% y +9 x^j|2='KT?8qΑ*.!5rS8qА=eTкM+\166 +6[UZ5AnΏ9\xxt:gz_CT\^ V?Ǿ]$EN/Q\ k).LJY-$5q{=Y7pt gayߓɩ>l<>>p;Zp]pq&JŖa +hw]d4@1ɹ;EOP~@(P3_ w" '4gg{A,Xӄwa|;QVrGkN nu7句Ŏ_LyQ@>)|VR=c.iGZ%j|UU9*ͪEtŚʑlky& y]ȿ̗Ѷw=%93woѐ+T&ӱj=aN'>G<*)Ya~\׋:;y tq N)&XT`X3SYۖ+k]יu ]ئ5lEsNN +(Nyg74L|\\Zt} 67$Zm\pĶMRp\<Ÿ5b"L=c CI՞ŋ4[_Őp2&P4xNXJ"R}K6wm0fS\ş:;Q*4FI&i3s4PH4wr>'j}*gb窼8%HnNkA/8R#c75vwtm|7N{O{I!~*|GS̤rKUEwnb5YV+\Ex4O|$ϝ6 +qoPV^5^Fm` +þT Oܙd9IK Cܝ6>@`g?SlLI]*׿gOSiس';읋:#}X'ئBm"3lmUW~&S̢qshFq]J ۷٣a/v=q88΍#pл }aW +;ܘf%7tbL/69ti8J +&ֲ)W^~k̪/((AoF ^w1A g #澈@DnG1t]Eo=;W,~OD줊!1rED"GQ_t\tQ4-^.n/EV ӄU Mv]"HvɤdZkKJOJ?ޒIdOCCtv5WA@ 2(SBu(YPAB)$ M90FPV M\P{{((& #u<]䘄ysa\%0db$>Y䋗;D (0w2Nހ.P6&$$qهgyw0kD`D:(Jj1K$Zޚ G( -CcDY(Y!cQ.ʃ3hBŨX P _| *@`fԂAh ,N]3%qb1V=~q {sL'(mEh9Eȏ~+Q$( ahah1v [v8a&0$0"U-s8#) 4& Ik_5eeh뫭,-  nԉxP@?Ԃ`w-xJN1~*~_GhouQ0jr:;,m_iad5TK5GWN PH |) dqn?qhfgdY쀰 pٜd6e97;: 箑Lnظ<1<0:ޱn=g<П + Q` ]3dro==[=> oX J> +endobj +364 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +365 0 obj +[500 1000 500 500 1000 1000 500 1000 500 500 500 1000 500 500 500 500 500 500 500 500 1000 500 1000 1000 1000 500 500 500 500 500 500 1000 1000 500 500 500 500 500 500 1000 500 500 1000 500 500 500 500 500 500 1000 500 500 500 500 1000 500 500 500 1000 500 1000 500 1000 500 500 500 500 500 500 500 500 500 500 500 1000 500 500 500 500 500 500 1000 500 500 500 500 500 500 500 500 500 500 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +366 0 obj +<< /Length1 4412 +/Length 2871 +/Filter [/FlateDecode] +>> +stream +xV{XTespQ.3$aRd' G"< 3fX3Tb7}t7bhjم'+J"\4Kk)}ϙ<=3Ϲ|~;/tPF3"=DR?|@9A]ڈk&;݁nBEݣ8Vz! -)3f\|g SpT4)7ù?)HW'Q_#J?KNKwf*BnjH,Zb?sd P$y)#F|pv[a|E:j anS)c3Jg5eL&#H֑mwңeth׵?,cV|'Q靌.+26%ȩ#9"mzsl6ȇ_, $`CiA'#ULSU!:> 'jӃZ{@__q$/P>͸Z[dHgƖ5bwR#Jm,BvZpY+DE e܊p3F-'2bczs2K 1ZF~y恎ǟj#cv~ǯz/Nzݲ[Gw|۲rV1+rSZ$JOHJI-HJA'-fꯚG"6B tv~o\,aM0{7'Ow/sm$[öJf(SmA*IHcM.CzKRKFі뙙Tq  wwWk/ +Ϭ@Gj培@ݔ)&}i}?NZz@9 X1Zt'XcTϡԺ`Hb}oYSݗvdߘdu[n?I_@tuD!E^—m{-JC +ZyRY(K*pY@/M$ ڧcӬb7@;e3cLeֆ7JO]qG!kõ5ugk+{/s)ѽ&3"3#t{NHݜL7ڸ̽;fl约b+1v`~M)j:sȴ`b#SDK|)Ƅj߿YO/ &- 'D{2UƙOuO[[`W1#EYTg+$j.1'ٷsԄߔ3b ՆjE7)P8ft.S^ Ym=ɪS%EMIBRQ{ޡ&4+%k]uʯJNze={Hra]=vաXil"N,7$)KScJ-O +ht=gGD>wS"=\T,>ʧIG95-ZV·o?;cM/m}ohYb޺oymo:y]Mҿ"ObfhL*Jt7ov#-ozl{qk$r3k-v &,:zz z9@`Q<5ԮZ3tg(y*6PA +j֣U TR<1!fο0Q]l~Bw`o7xa;ԉqJ ~}N#>׶K4$g@]]I>POS@+(FRql7!7Iܜ_RÄ!T O_b_a_!ΣC?U:Z{I^p@.AB +ŰJзIA 쑠GD3A V@ 82N7eF'dh2IH"2HR% +H d\ q>]5*!e<b(d*^CAKx(L.a`xTS/x8$23)W:)c_/c@PEx3˳yo S3|ohtjldK)?[;|u>pA8!!PN; 8#`,DYze_9@x>eӀU<*V05\`{@us .O^`#AЀ βɓV^K_bs.N5f'̏SF,̀3[38O[RE1Irl9ܜo׏=\[9(C:$S} 1^o‘{9{9R H*:˝8ty_2ma֍MfqJscų(S72@i4:Arλ^#* L<{h8/O y/^96FyŊlD4׹WH\Un?b(SewxfO6!La1Ð',f&ryҫX',=S>3Ta#'i`} Ơ~cqav4QFH5 }j ~D1+/W.p$l3a553C#|9xAS!=iM +endstream +endobj +367 0 obj +<< /Type /FontDescriptor +/FontName /91a4c8+NotoSerif-Italic +/FontFile2 366 0 R +/FontBBox [-254 -250 1238 1047] +/Flags 70 +/StemV 0 +/ItalicAngle -12.0 +/Ascent 1068 +/Descent -292 +/CapHeight 1462 +/XHeight 1098 +>> +endobj +368 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +369 0 obj +[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 250 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 705 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 937 1000 1000 1000 1000 1000 543 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 458 1000 579 562 486 1000 493 317 556 599 304 1000 568 304 1000 1000 574 1000 1000 467 463 368 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +370 0 obj +<< /Length1 4388 +/Length 3021 +/Filter [/FlateDecode] +>> +stream +xkP\;/ ra ' ky@<XX4u Cq! dt?[LH"7<6so]JB֔h8 +&C+ ; [7qϷuJ$$)]3\6w.ԿoBTxv ?y qKJvţ_"YCYH +IMSFC||Ԓu+lؘb_t_~  G_;'p`X\ H0Z +GiiЍC&L#/&JQTmKO1(P6# *?yRwͬF.͝dz4r <)=JpC ά4n +_0d^2/*ĐTBT3uNp`i==6$NI{8+߲>41pm:mL\N/h p$jBj<5MUFzVm}`/m(Wĸ#(9'U"tMald%q(qTЌ&UPtvoؔ)4UыE Xf_z"R8:nG]DXm/YcLN56=#Nۜ}=6֖yvnlcD@[u{t]- ]0WQ=_؉>g\%b5BzUWٍQz}x19Uh3hEIfu #8B۽섧n%lvzq$ʸδAeE>!I5tVP:gB:3Iy\ṮNp)G8Wk Hiv09齹9zݴ4g2vi m,f<tz; O)* +q#j+E'B-"rLmT(!xY'+F͔n)={C/X+Ӓe8RXG5LFZrc -8V` !Q~ +/>hey>&Ӑ(OB BL4WWp!(ͮtn֔;o.@a}ҍ#7ޯsJg{G{H,%͗ZQ n j/o lkmikJ[=EβFg{nPsKO=_s8,*F3U)),Qui4*m:j wKuh {룆? 5!&9FrΡtniעuJ# 8-^> Y~ n82o4"$5B+W nu6+# JoCP5QlX^Z+`! [[< 7z7w]HJT8ˬc|6ݫć4M]2 gU%6[YSe>k)zQzBms99qڧuuՏWS!C`hp+Թu bڄ?pӪփ:N!]6@mwjmmzWm[v4tSΔ05&OM#o Z]u޲:&zw^cwuchӣ1 u˗Jq}rjZsRU){]J 3֎cJGjkj]&(#pwucflO8#cr7rK!m8NpLCR4!&&RQ!# KD5cl5!kF1d=F/cH:GI+6$X?5<_ۊK<Ʀ#U+1%mdu1Fm#',R124'M(-&މPYr^Gq,6 3LqcZ--<)_Eւʩ siѲb}TOԠ2a^Whjzxb/;K1!=2aIJe>4 b33EE22N['fCaȤl OYT`QܝFӸE~p}+Az9Ðr=rKO};/nqXg +wc(äELhx$pgĴ@``gD-!H4-ba_l%7Acʹ`毋&H->0XD<ɋv X3c5 +ο$ b/z@ŚX88zx\YE%*"&yuË\^1f#HgRGO1kidߕI6Eb<op}FiF|oxB: =H1 Ț*e zZÀLMh͎m,,עҡ7GС&!"𑦈d + ,bKV1B="l#{jDdy@ċ|BO_xjje1 Q?}~j8Pלp~q]hÊ.YD, ٹfٵ +endstream +endobj +371 0 obj +<< /Type /FontDescriptor +/FontName /79e08b+mplus1mn-italic +/FontFile2 370 0 R +/FontBBox [0 -230 1000 860] +/Flags 4 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 860 +/Descent -140 +/CapHeight 860 +/XHeight 0 +>> +endobj +372 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +373 0 obj +[1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 1000 500 500 1000 1000 500 500 500 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 500 1000 500 500 1000 1000 500 1000 1000 500 1000 500 500 500 1000 500 500 500 500 1000 1000 1000 500 1000 1000 1000 1000 1000 500 500 1000 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 500 500 1000 1000 500 500 500 500 500 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +374 0 obj +<< /Length1 2328 +/Length 1338 +/Filter [/FlateDecode] +>> +stream +xU_lSUν78$"zovbA6a˽d*` Hn !Ɯ<7ƐAF  ܞ-D_m{~}_: KbB#- fi"lBlv#Lw{7LLXٺ4Mq:*b:8K$O?<TB'[Eŗ r+>* x:vٲ<وy{;/a+wJ}sC7CEV8im>Z~T;:)C/,~}J)C_uoO<>w0K!ŕy:aŹG{'Wi) z +"6yo$H1⳵܂8>+I,I`Gq!x B)$-.Vᰧ$ȧ?X9W!x>u4{pߋo'*p/x$zPiS=mK~|֐]ٵ>' §$vKoɞ-OOTDG|;ɦtf_0B l2L8L@@{8v@0 ChA}?96-[3lY81)Ť&dd4]MMD;h7] qbйr,_i2&\QI{Y :RcRULi<ڱ F𨌗dUе+)څuwZcf+Ji펼e!"Z,]AyqkTО9_@vXZjm4V#Ϸ!Ҿ8p{Ӊ0w,9`1O|14XkW̍5L`1h`?f2PiccrL#-6d I@اdmd&My4 fG_Ͱ0o`c{`ϫ5֙Oo'g:=3:fi&J.S-LNx똆2>2~iñ,FWXQ̰L kj᠂5NFc̏tNQ~2爐C-,'XcJ{n)Jpp ԇj mVS Q\PXa4lOuT9jB B7_pf섇h؄:[MU$C.+w>d5cGQƍ=8dƸ7sP9RuC炋'lŸtS iOҰ +endstream +endobj +375 0 obj +<< /Type /FontDescriptor +/FontName /781c87+mplus-1p-regular +/FontFile2 374 0 R +/FontBBox [-109 -288 1403 1075] +/Flags 4 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 860 +/Descent -140 +/CapHeight 860 +/XHeight 0 +>> +endobj +376 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +377 0 obj +[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 288 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +378 0 obj +<< /Length1 6468 +/Length 4546 +/Filter [/FlateDecode] +>> +stream +xXyTTW߭ +vA_ՃVD U K(J޶f1=̴Ѵc2T1۶s:=v:8I3m2v'1Nxw{tN pwwz=B|EtK6+)SBlã[MՄhSfĦ]i + vG?B?&Dw +ߧto +Cb[549l2ψG£UF1PHnB'4=`8r'ǀG9?<04ػqfBP& O`+2 +i$z^L, Dա`iAbYHHrJj"™-|zUڞ8f/p8]n,)ZZ\RPY_gCYԳΠjTȩn>͠f==袈a F#],ѓd>#<,Va2PyBLKb]jĞ.l#}Na0t4\ +E;}0E'\!̛ <ňTi5 xkb^_yEX+ iHQ&i=;:IԚ,=|+[dήV{ɉ:uIq={]hK2x?r:󕀌qՁ66%FޑxƓ [hXNG)]<ՒºZS̙ Yi8('O@ ^7pddneA:jשKO4J7Y+)By^Ey8d4Lp9v:lvzA%c#AyAM88|ǚi^UtwӺmMY[U&k(o"IGTJ5hR4U!㫌dFтufӛaϵem[rB7`Wk ])?_l/l\*i|6 +l/=Ia z9Z( epg9_R{yzY<~l="w1/Jz73"U%bh}穈MDZeSgjvJ^dƩ rJgf.Y]MX D&̈́d0k%嗀ifnע]olշUjxيlyۙR3_Ζ͇ +h D3Egj& +ǎ:.W[p<ƃEI]1}pX)˅"F 1%,j;zC/TB?.6'J|{F3 Bp*Զz1awi1WEu vQ `qtPzC-*^Z0J1R(YiqQÊ,nSݬmgihh 5<4x+h(q +<<3;b%'HN)<4|Ct/AM7Z`ϊU V~^Iŏ;h8L !a҅`Ŝ^`fu0XVvt+{r1:. I.#mG?wCu=oޒ]8R]ʳpT׸Qhfq+'o>r|T N<,_->4ֽ2dwt \R.PV{Ǵ@E83ܿ'+ff)i +jKmvj֥x.}[:?dL1dez"-ulMZ=6|>YZ.a3mq>]@4 Q$x 3Q*-)]vN*|x\$\Bs˱ya%RAJPenY0FBYQc/^*暄$cn!(b]̫5hvޅ-GrbF`q|qELh?-,jxNvoxT"{5R]k 5d 4I.[]KV:B^ >ݳa7/mNf!t m  ИQVr|υݩpI0 _WčWEPc. +wB{?"39v}{hjoYSl(VY^ K8w71$i '֤%XL1 p0و!_%:;, nid!{Y&& ܧf;uFejtaůW ۇTSs'gff25=`|PC_ٺG/e;ÅXZ*1ܠorQЉ(Z&GTw1-ֽ:VSϚx5H8$MMX(=b6`uI&9D'D8 +gwӍ=F/kSFWlTW\UT*BeG9<e*:bkQעbTOVPjF:QmSRw&Jb3`; s#¶)ljaǗu/blqJٱd:?6[iid".c1جZH/iZ>2}[$Ͻ 3K#a 2D.vf.nT+*16vާS82-pGcQk er:.s ҮtBY~wdNܣ}~*o1%Fi aUJ;FuK$IX.Bt3~f`Ŕ.,F=H>)@L'qBڥ oJREVeV-YE㵉H3i%md5~H;YC:ZQsXD@Yu */:,SNQme-+ 5ו31zE]^WaL kdXRۖ7.=RP5j*EFIl&cd= xfH/ơ]8#9WI ڈCkm fHH* #$T1:܇E+U&F#7+$jn$ط~rdC$q B&G} +=3m~_t(͟oek  qBt|#HT v>#?X3G@{NL5{?8;>:9gE[Nm0o9N"DRt|"!g^9\WB$G:q}=-TTt mt6@*Uj#NvR# b!$Bl,nGj6"(_Kw%D{lL$.Zm}")kDز=f޼_ɿ $#6ɼ9Tm /ċhGT-s::#aԶťK6[g̳q(2V\DiFTpcd9<%>'0FN1#b,g"j4ǭૺ8?#A03榸SU7ŋx)CJԏ-DʂċJ&)4nZҴʲE]󜿶9 +ZO)m07Pn-SMtR` |кoj¶m^f>~JvAYEԞ`8=#n{Pz"+e>i<&z+N8DHR0>/-h,ϧc:ƪL7ύ +endstream +endobj +379 0 obj +<< /Type /FontDescriptor +/FontName /d420e1+mplus1mn-bold +/FontFile2 378 0 R +/FontBBox [0 -230 1000 860] +/Flags 4 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 860 +/Descent -140 +/CapHeight 860 +/XHeight 0 +>> +endobj +380 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +381 0 obj +[500 500 1000 1000 1000 500 1000 500 500 500 1000 1000 500 1000 500 500 500 500 1000 500 1000 500 500 1000 1000 1000 500 1000 500 500 500 1000 1000 500 500 500 500 500 500 500 1000 500 1000 1000 500 500 500 500 500 1000 500 500 500 500 500 500 500 1000 1000 1000 1000 1000 1000 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 1000 500 500 500 500 500 500 500 500 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +xref +0 382 +0000000000 65535 f +0000000015 00000 n +0000000381 00000 n +0000000585 00000 n +0000000867 00000 n +0000000918 00000 n +0000001190 00000 n +0000002075 00000 n +0000002371 00000 n +0000002538 00000 n +0000030543 00000 n +0000031500 00000 n +0000047488 00000 n +0000048177 00000 n +0000055172 00000 n +0000055564 00000 n +0000055608 00000 n +0000055657 00000 n +0000055724 00000 n +0000055768 00000 n +0000055941 00000 n +0000055985 00000 n +0000056029 00000 n +0000056145 00000 n +0000056189 00000 n +0000056233 00000 n +0000056347 00000 n +0000056391 00000 n +0000056566 00000 n +0000056610 00000 n +0000056785 00000 n +0000056829 00000 n +0000066050 00000 n +0000066405 00000 n +0000066449 00000 n +0000066493 00000 n +0000066537 00000 n +0000066581 00000 n +0000066625 00000 n +0000066669 00000 n +0000077465 00000 n +0000077833 00000 n +0000077877 00000 n +0000077921 00000 n +0000077965 00000 n +0000078009 00000 n +0000078053 00000 n +0000085568 00000 n +0000085910 00000 n +0000085953 00000 n +0000086686 00000 n +0000087056 00000 n +0000087099 00000 n +0000087143 00000 n +0000087187 00000 n +0000092378 00000 n +0000104537 00000 n +0000104960 00000 n +0000105004 00000 n +0000105168 00000 n +0000105342 00000 n +0000105386 00000 n +0000105499 00000 n +0000105685 00000 n +0000124188 00000 n +0000124556 00000 n +0000124600 00000 n +0000124644 00000 n +0000141253 00000 n +0000141621 00000 n +0000155510 00000 n +0000155878 00000 n +0000155922 00000 n +0000165881 00000 n +0000166249 00000 n +0000166293 00000 n +0000166337 00000 n +0000166380 00000 n +0000181205 00000 n +0000181573 00000 n +0000181617 00000 n +0000193124 00000 n +0000193492 00000 n +0000193536 00000 n +0000193580 00000 n +0000194054 00000 n +0000194098 00000 n +0000203016 00000 n +0000203371 00000 n +0000203415 00000 n +0000203459 00000 n +0000203503 00000 n +0000213436 00000 n +0000213791 00000 n +0000213835 00000 n +0000226636 00000 n +0000227062 00000 n +0000227106 00000 n +0000227281 00000 n +0000227325 00000 n +0000227369 00000 n +0000227414 00000 n +0000227557 00000 n +0000227710 00000 n +0000227847 00000 n +0000228029 00000 n +0000228209 00000 n +0000228336 00000 n +0000228381 00000 n +0000248372 00000 n +0000248729 00000 n +0000248775 00000 n +0000248821 00000 n +0000258425 00000 n +0000258795 00000 n +0000258841 00000 n +0000259697 00000 n +0000272077 00000 n +0000272465 00000 n +0000272511 00000 n +0000272557 00000 n +0000272675 00000 n +0000272721 00000 n +0000286764 00000 n +0000287135 00000 n +0000287181 00000 n +0000287227 00000 n +0000287273 00000 n +0000287446 00000 n +0000297923 00000 n +0000298280 00000 n +0000298326 00000 n +0000309411 00000 n +0000309795 00000 n +0000309841 00000 n +0000309887 00000 n +0000310302 00000 n +0000318356 00000 n +0000318714 00000 n +0000325123 00000 n +0000325494 00000 n +0000325540 00000 n +0000333387 00000 n +0000333758 00000 n +0000343042 00000 n +0000343426 00000 n +0000343472 00000 n +0000343518 00000 n +0000351993 00000 n +0000352351 00000 n +0000360070 00000 n +0000360428 00000 n +0000360474 00000 n +0000368214 00000 n +0000368589 00000 n +0000368635 00000 n +0000368752 00000 n +0000368798 00000 n +0000371517 00000 n +0000371879 00000 n +0000371925 00000 n +0000371971 00000 n +0000372017 00000 n +0000372063 00000 n +0000372228 00000 n +0000372361 00000 n +0000372495 00000 n +0000372633 00000 n +0000372773 00000 n +0000372903 00000 n +0000373036 00000 n +0000373161 00000 n +0000373289 00000 n +0000373422 00000 n +0000373556 00000 n +0000373689 00000 n +0000373824 00000 n +0000373954 00000 n +0000374085 00000 n +0000374214 00000 n +0000374344 00000 n +0000374472 00000 n +0000374602 00000 n +0000374727 00000 n +0000374853 00000 n +0000374978 00000 n +0000375104 00000 n +0000375242 00000 n +0000375382 00000 n +0000375501 00000 n +0000375623 00000 n +0000375750 00000 n +0000375879 00000 n +0000376004 00000 n +0000376131 00000 n +0000376257 00000 n +0000376384 00000 n +0000376514 00000 n +0000376646 00000 n +0000376771 00000 n +0000376897 00000 n +0000377025 00000 n +0000377154 00000 n +0000377282 00000 n +0000377411 00000 n +0000377536 00000 n +0000377662 00000 n +0000377789 00000 n +0000377917 00000 n +0000378039 00000 n +0000378162 00000 n +0000378287 00000 n +0000378414 00000 n +0000378541 00000 n +0000378669 00000 n +0000378854 00000 n +0000379040 00000 n +0000379173 00000 n +0000379309 00000 n +0000379446 00000 n +0000379583 00000 n +0000379719 00000 n +0000379856 00000 n +0000379998 00000 n +0000380141 00000 n +0000380276 00000 n +0000380411 00000 n +0000380549 00000 n +0000380687 00000 n +0000380824 00000 n +0000380962 00000 n +0000381087 00000 n +0000381213 00000 n +0000381352 00000 n +0000381491 00000 n +0000381630 00000 n +0000381769 00000 n +0000381911 00000 n +0000382053 00000 n +0000382182 00000 n +0000382311 00000 n +0000382438 00000 n +0000382565 00000 n +0000382693 00000 n +0000382822 00000 n +0000382939 00000 n +0000383058 00000 n +0000383199 00000 n +0000383340 00000 n +0000383491 00000 n +0000383642 00000 n +0000383776 00000 n +0000383910 00000 n +0000384092 00000 n +0000384274 00000 n +0000384397 00000 n +0000384521 00000 n +0000384663 00000 n +0000384809 00000 n +0000384955 00000 n +0000385099 00000 n +0000385249 00000 n +0000385399 00000 n +0000385526 00000 n +0000385653 00000 n +0000385780 00000 n +0000385907 00000 n +0000386040 00000 n +0000386173 00000 n +0000386330 00000 n +0000386487 00000 n +0000386614 00000 n +0000386742 00000 n +0000386903 00000 n +0000387064 00000 n +0000387236 00000 n +0000387408 00000 n +0000387538 00000 n +0000387668 00000 n +0000387831 00000 n +0000387994 00000 n +0000388156 00000 n +0000388318 00000 n +0000388443 00000 n +0000388568 00000 n +0000388695 00000 n +0000388822 00000 n +0000388946 00000 n +0000389070 00000 n +0000389341 00000 n +0000389612 00000 n +0000389690 00000 n +0000390071 00000 n +0000390263 00000 n +0000390492 00000 n +0000390702 00000 n +0000390884 00000 n +0000391090 00000 n +0000391276 00000 n +0000391509 00000 n +0000391669 00000 n +0000391882 00000 n +0000392052 00000 n +0000392220 00000 n +0000392374 00000 n +0000392602 00000 n +0000392754 00000 n +0000392934 00000 n +0000393106 00000 n +0000393278 00000 n +0000393485 00000 n +0000393639 00000 n +0000393819 00000 n +0000393998 00000 n +0000394151 00000 n +0000394357 00000 n +0000394499 00000 n +0000394671 00000 n +0000394876 00000 n +0000395260 00000 n +0000395488 00000 n +0000395690 00000 n +0000395925 00000 n +0000396133 00000 n +0000396353 00000 n +0000396573 00000 n +0000396745 00000 n +0000396969 00000 n +0000397193 00000 n +0000397429 00000 n +0000397621 00000 n +0000397791 00000 n +0000398005 00000 n +0000398164 00000 n +0000398386 00000 n +0000398663 00000 n +0000398872 00000 n +0000399273 00000 n +0000399428 00000 n +0000399677 00000 n +0000399975 00000 n +0000400130 00000 n +0000400299 00000 n +0000400486 00000 n +0000400769 00000 n +0000400979 00000 n +0000401278 00000 n +0000401621 00000 n +0000401839 00000 n +0000402146 00000 n +0000402453 00000 n +0000402622 00000 n +0000402799 00000 n +0000402950 00000 n +0000403489 00000 n +0000411876 00000 n +0000412092 00000 n +0000413455 00000 n +0000414514 00000 n +0000420920 00000 n +0000421141 00000 n +0000422504 00000 n +0000423595 00000 n +0000428612 00000 n +0000428826 00000 n +0000430189 00000 n +0000431254 00000 n +0000434216 00000 n +0000434442 00000 n +0000435805 00000 n +0000436925 00000 n +0000440037 00000 n +0000440250 00000 n +0000441613 00000 n +0000442719 00000 n +0000444148 00000 n +0000444366 00000 n +0000445729 00000 n +0000446867 00000 n +0000451504 00000 n +0000451715 00000 n +0000453078 00000 n +trailer +<< /Size 382 +/Root 2 0 R +/Info 1 0 R +>> +startxref +454152 +%%EOF diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_PRI.doc b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_PRI.doc new file mode 100644 index 0000000000000000000000000000000000000000..c03c6eecc4ba9b02ca29734c9029be87a83712f2 Binary files /dev/null and b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_PRI.doc differ diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/change.log b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/change.log new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/images/Abstract socket.png b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/images/Abstract socket.png new file mode 100644 index 0000000000000000000000000000000000000000..d862a0e0c83fbc824c812ea63bf9ef0a7d1052f1 Binary files /dev/null and b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/images/Abstract socket.png differ diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.cc b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.cc new file mode 100644 index 0000000000000000000000000000000000000000..fcff30b43db4aa08cefb7d655fcab59d0fc309ec --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.cc @@ -0,0 +1,2821 @@ +/****************************************************************************** +* Copyright (c) 2000-2019 Ericsson Telecom AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v2.0 +* which accompanies this distribution, and is available at +* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html +* +* Contributors: +* Zoltan Bibo - initial implementation and initial documentation +* Gergely Futo +* Oliver Ferenc Czerman +* Balasko Jeno +* Zoltan Bibo +* Eduard Czimbalmos +* Kulcsár Endre +* Gabor Szalai +* Jozsef Gyurusi +* Csöndes Tibor +* Zoltan Jasz +******************************************************************************/ +// +// File: Abstract_Socket.cc +// Description: Abstract_Socket implementation file +// Rev: R9B +// Prodnr: CNL 113 384 +// + +#include "Abstract_Socket.hh" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if defined SOLARIS8 +# include +#endif + + +#define AS_TCP_CHUNCK_SIZE 4096 +#define AS_SSL_CHUNCK_SIZE 16384 +// Used for the 'address already in use' bug workaround +#define AS_DEADLOCK_COUNTER 16 +// character buffer length to store temporary SSL informations, 256 is usually enough +#define SSL_CHARBUF_LENGTH 256 +// number of bytes to read from the random devices +#define SSL_PRNG_LENGTH 1024 + +#ifndef NI_MAXHOST +#define NI_MAXHOST 1024 +#endif +#ifndef NI_MAXSERV +#define NI_MAXSERV 32 +#endif + +/******************************** + ** PacketHeaderDescr + ** used for fragmentation and concatenation + ** of fixed format messages + *********************************/ + +unsigned long PacketHeaderDescr::Get_Message_Length(const unsigned char* buff) const +{ + unsigned long m_length = 0; + for (unsigned long i = 0; i < nr_bytes_in_length; i++) { + unsigned long shift_count = + byte_order == Header_MSB ? nr_bytes_in_length - 1 - i : i; + m_length |= buff[length_offset + i] << (8 * shift_count); + } + m_length *= length_multiplier; + if (value_offset < 0 && (long)m_length < -value_offset) return 0; + else return m_length + value_offset; +} + + +//////////////////////////////////////////////////////////////////////// +///// Default log functions +//////////////////////////////////////////////////////////////////////// +void Abstract_Socket::log_debug(const char *fmt, ...) const +{ + if (socket_debugging) { + TTCN_Logger::begin_event(TTCN_DEBUG); + if (test_port_type != NULL && test_port_name != NULL) + TTCN_Logger::log_event("%s test port (%s): ", test_port_type, + test_port_name); + else TTCN_Logger::log_event_str("Abstract socket: "); + va_list args; + va_start(args, fmt); + TTCN_Logger::log_event_va_list(fmt, args); + va_end(args); + TTCN_Logger::end_event(); + } +} + +void Abstract_Socket::log_warning(const char *fmt, ...) const +{ + TTCN_Logger::begin_event(TTCN_WARNING); + if (test_port_type != NULL && test_port_name != NULL) + TTCN_Logger::log_event("%s test port (%s): warning: ", test_port_type, + test_port_name); + else TTCN_Logger::log_event_str("Abstract socket: warning: "); + va_list args; + va_start(args, fmt); + TTCN_Logger::log_event_va_list(fmt, args); + va_end(args); + TTCN_Logger::end_event(); +} + + +void Abstract_Socket::log_error(const char *fmt, ...) const +{ + va_list args; + va_start(args, fmt); + char *error_str = mprintf_va_list(fmt, args); + va_end(args); + try { + if (test_port_type != NULL && test_port_name != NULL) + TTCN_error("%s test port (%s): %s", test_port_type, test_port_name, + error_str); + else TTCN_error("Abstract socket: %s", error_str); + } catch (...) { + Free(error_str); + throw; + } + Free(error_str); +} + +void Abstract_Socket::log_hex(const char *prompt, const unsigned char *msg, + size_t length) const +{ + if (socket_debugging) { + TTCN_Logger::begin_event(TTCN_DEBUG); + if (test_port_type != NULL && test_port_name != NULL) + TTCN_Logger::log_event("%s test port (%s): ", test_port_type, + test_port_name); + else TTCN_Logger::log_event_str("Abstract socket: "); + if (prompt != NULL) TTCN_Logger::log_event_str(prompt); + TTCN_Logger::log_event("Size: %lu, Msg:", (unsigned long)length); + for (size_t i = 0; i < length; i++) TTCN_Logger::log_event(" %02x", msg[i]); + TTCN_Logger::end_event(); + } +} + + +/******************************** + ** Abstract_Socket + ** abstract base type for TCP socket handling + *********************************/ + +Abstract_Socket::Abstract_Socket() { + server_mode=false; + socket_debugging=false; + nagling=false; + use_non_blocking_socket=false; + halt_on_connection_reset=true; + halt_on_connection_reset_set=false; + client_TCP_reconnect=false; + TCP_reconnect_attempts=5; + TCP_reconnect_delay=1; + listen_fd=-1; + memset(&remoteAddr, 0, sizeof(remoteAddr)); + memset(&localAddr, 0, sizeof(localAddr)); + server_backlog=1; + peer_list_length=0; + local_host_name = NULL; + local_port_number = 0; + remote_host_name = NULL; + remote_port_number = 0; + ai_family = AF_UNSPEC; // default: Auto + test_port_type=NULL; + test_port_name=NULL; + ttcn_buffer_usercontrol=false; + use_connection_ASPs=false; + handle_half_close = false; + peer_list_root = NULL; +} + +Abstract_Socket::Abstract_Socket(const char *tp_type, const char *tp_name) { + server_mode=false; + socket_debugging=false; + nagling=false; + use_non_blocking_socket=false; + halt_on_connection_reset=true; + halt_on_connection_reset_set=false; + client_TCP_reconnect=false; + TCP_reconnect_attempts=5; + TCP_reconnect_delay=1; + listen_fd=-1; + memset(&remoteAddr, 0, sizeof(remoteAddr)); + memset(&localAddr, 0, sizeof(localAddr)); + server_backlog=1; + peer_list_length=0; + local_host_name = NULL; + local_port_number = 0; + remote_host_name = NULL; + remote_port_number = 0; + ai_family = AF_UNSPEC; // default: Auto + test_port_type=tp_type; + test_port_name=tp_name; + ttcn_buffer_usercontrol=false; + use_connection_ASPs=false; + handle_half_close = false; + peer_list_root = NULL; +} + +Abstract_Socket::~Abstract_Socket() { + peer_list_reset_peer(); + Free(local_host_name); + Free(remote_host_name); +} + +bool Abstract_Socket::parameter_set(const char *parameter_name, + const char *parameter_value) +{ + log_debug("entering Abstract_Socket::parameter_set(%s, %s)", parameter_name, parameter_value); + + if (strcmp(parameter_name, socket_debugging_name()) == 0) { + if (strcasecmp(parameter_value,"yes")==0) socket_debugging = true; + else if (strcasecmp(parameter_value,"no")==0) socket_debugging = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, socket_debugging_name()); + } else if (strcmp(parameter_name, server_mode_name()) == 0) { + if (strcasecmp(parameter_value,"yes")==0) server_mode = true; + else if (strcasecmp(parameter_value,"no")==0) server_mode = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, server_mode_name()); + } else if (strcmp(parameter_name, use_connection_ASPs_name()) == 0) { + if (strcasecmp(parameter_value,"yes")==0) use_connection_ASPs = true; + else if (strcasecmp(parameter_value,"no")==0) use_connection_ASPs = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, use_connection_ASPs_name()); + } else if (strcmp(parameter_name, halt_on_connection_reset_name()) == 0) { + halt_on_connection_reset_set=true; + if (strcasecmp(parameter_value,"yes")==0) halt_on_connection_reset = true; + else if (strcasecmp(parameter_value,"no")==0) halt_on_connection_reset = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, halt_on_connection_reset_name()); + } else if (strcmp(parameter_name, client_TCP_reconnect_name()) == 0) { + if (strcasecmp(parameter_value,"yes")==0) client_TCP_reconnect = true; + else if (strcasecmp(parameter_value,"no")==0) client_TCP_reconnect = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, client_TCP_reconnect_name()); + } else if (strcmp(parameter_name, TCP_reconnect_attempts_name()) == 0) { + if (sscanf(parameter_value, "%d", &TCP_reconnect_attempts)!=1) log_error("Invalid input as TCP_reconnect_attempts counter given: %s", parameter_value); + if (TCP_reconnect_attempts<=0) log_error("TCP_reconnect_attempts must be greater than 0, %d is given", TCP_reconnect_attempts); + } else if (strcmp(parameter_name, TCP_reconnect_delay_name()) == 0) { + if (sscanf(parameter_value, "%d", &TCP_reconnect_delay)!=1) log_error("Invalid input as TCP_reconnect_delay given: %s", parameter_value); + if (TCP_reconnect_delay<0) log_error("TCP_reconnect_delay must not be less than 0, %d is given", TCP_reconnect_delay); + } else if(strcmp(parameter_name, remote_address_name()) == 0){ + Free(remote_host_name); + remote_host_name = mcopystr(parameter_value); + } else if(strcmp(parameter_name, local_address_name()) == 0){ // only for backward compatibility + Free(local_host_name); + local_host_name = mcopystr(parameter_value); + } else if(strcmp(parameter_name, remote_port_name()) == 0){ + int a; + if (sscanf(parameter_value, "%d", &a)!=1) log_error("Invalid input as port number given: %s", parameter_value); + if (a>65535 || a<0){ log_error("Port number must be between 0 and 65535, %d is given", remote_port_number);} + else {remote_port_number=a;} + } else if(strcmp(parameter_name, ai_family_name()) == 0){ + if (strcasecmp(parameter_value,"IPv6")==0 || strcasecmp(parameter_value,"AF_INET6")==0) ai_family = AF_INET6; + else if (strcasecmp(parameter_value,"IPv4")==0 || strcasecmp(parameter_value,"AF_INET")==0) ai_family = AF_INET; + else if (strcasecmp(parameter_value,"UNSPEC")==0 || strcasecmp(parameter_value,"AF_UNSPEC")==0) ai_family = AF_UNSPEC; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ai_family_name()); + } else if(strcmp(parameter_name, local_port_name()) == 0){ + int a; + if (sscanf(parameter_value, "%d", &a)!=1) log_error("Invalid input as port number given: %s", parameter_value); + if (a>65535 || a<0) {log_error("Port number must be between 0 and 65535, %d is given", local_port_number);} + else {local_port_number=a;} + } else if (strcmp(parameter_name, nagling_name()) == 0) { + if (strcasecmp(parameter_value,"yes")==0) nagling = true; + else if (strcasecmp(parameter_value,"no")==0) nagling = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, nagling_name()); + } else if (strcmp(parameter_name, use_non_blocking_socket_name()) == 0){ + if (strcasecmp(parameter_value, "yes") == 0) use_non_blocking_socket = true; + else if (strcasecmp(parameter_value, "no") == 0) use_non_blocking_socket = false; + } else if (strcmp(parameter_name, server_backlog_name()) == 0) { + if (sscanf(parameter_value, "%d", &server_backlog)!=1) log_error("Invalid input as server backlog given: %s", parameter_value); + } else { + log_debug("leaving Abstract_Socket::parameter_set(%s, %s)", parameter_name, parameter_value); + return false; + } + + log_debug("leaving Abstract_Socket::parameter_set(%s, %s)", parameter_name, parameter_value); + return true; +} + +void Abstract_Socket::Handle_Socket_Event(int fd, boolean is_readable, boolean is_writable, boolean is_error) +{ + log_debug("entering Abstract_Socket::Handle_Socket_Event(): fd: %d%s%s%s", fd, + is_readable ? " readable" : "", is_writable ? " writable" : "", is_error ? " error" : ""); + + if (fd != listen_fd /* on server the connection requests are handled after the user messages */ + && peer_list_root[fd] != NULL && (is_readable || is_writable) + && get_peer(fd)->reading_state != STATE_DONT_RECEIVE) { + log_debug("receiving data"); + int messageLength = receive_message_on_fd(fd); + if (messageLength == 0) { // peer disconnected + as_client_struct * client_data = get_peer(fd); + log_debug("Abstract_Socket::Handle_Socket_Event(). Client %d closed connection.", fd); + switch (client_data->reading_state) { + case STATE_BLOCK_FOR_SENDING: + log_debug("Abstract_Socket::Handle_Socket_Event(): state is STATE_BLOCK_FOR_SENDING, don't close connection."); + Remove_Fd_Read_Handler(fd); + client_data->reading_state = STATE_DONT_CLOSE; + log_debug("Abstract_Socket::Handle_Socket_Event(): setting socket state to STATE_DONT_CLOSE"); + break; + case STATE_DONT_CLOSE: + log_debug("Abstract_Socket::Handle_Socket_Event(): state is STATE_DONT_CLOSE, don't close connection."); + break; + default: + if((client_data->tcp_state == CLOSE_WAIT) || (client_data->tcp_state == FIN_WAIT)) { + remove_client(fd); + peer_disconnected(fd); + } else { + if(shutdown(fd, SHUT_RD) != 0) { + if(errno == ENOTCONN) { + errno = 0; + } else { + log_error("shutdown(SHUT_RD) system call failed"); + } + } + client_data->tcp_state = CLOSE_WAIT; + Remove_Fd_Read_Handler(fd); + peer_half_closed(fd); + } + } // switch (client_data->reading_state) + } else if (messageLength > 0) { + as_client_struct *client_data=get_peer(fd); + if (socket_debugging) { + struct sockaddr_storage clientAddr = client_data->clientAddr; +#ifdef WIN32 + log_debug("Message received from address %s:%d", inet_ntoa(((struct sockaddr_in*)&clientAddr)->sin_addr), ntohs(((struct sockaddr_in *)&clientAddr)->sin_port)); +#else + char hname[NI_MAXHOST]; + char sname[NI_MAXSERV]; +#if defined LINUX || defined FREEBSD || defined SOLARIS8 + socklen_t +#else /* SOLARIS or WIN32 */ + int +#endif + clientAddrlen = client_data->clientAddrlen; + int error = getnameinfo((struct sockaddr *)&clientAddr, clientAddrlen, + hname, sizeof (hname), sname, sizeof (sname), NI_NUMERICHOST|NI_NUMERICSERV); + if (error) log_error("AbstractSocket: getnameinfo 2: %s\n", gai_strerror(error)); + log_debug("Message received from address (addr) %s/%s", hname, sname); +#endif + } + log_hex("Message received, buffer content: ", get_buffer(fd)->get_data(), get_buffer(fd)->get_len()); + handle_message(fd); + } /* else if (messageLength == -2) => + used in case of SSL: means that reading would bloc. + in this case I stop receiving message on the file descriptor */ + } // if ... (not new connection request) + + if (fd == listen_fd && is_readable) { + // new connection request arrived + log_debug("waiting for accept"); + // receiving new connection on the TCP server + struct sockaddr_storage clientAddr; + +#if defined LINUX || defined FREEBSD || defined SOLARIS8 + socklen_t +#else /* SOLARIS or WIN32 */ + int +#endif + clientAddrlen = sizeof(clientAddr); +#if defined LINUX || defined FREEBSD || defined SOLARIS8 + int newclient_fd = accept(listen_fd, (struct sockaddr *) &clientAddr, (socklen_t*)&clientAddrlen); +#else + int newclient_fd = accept(listen_fd, (struct sockaddr *) &clientAddr, (int*)&clientAddrlen); +#endif + if(newclient_fd < 0) log_error("Cannot accept connection at port"); + + as_client_struct *client_data=peer_list_add_peer(newclient_fd); + Add_Fd_Read_Handler(newclient_fd); // Done here - as in case of error: remove_client expects the handler as added + log_debug("Abstract_Socket::Handle_Socket_Event(). Handler set to other fd %d", newclient_fd); + client_data->fd_buff = new TTCN_Buffer; + client_data->clientAddr = clientAddr; + client_data->clientAddrlen = clientAddrlen; + client_data->tcp_state = ESTABLISHED; + client_data->reading_state = STATE_NORMAL; + if (add_user_data(newclient_fd)) { + char hname[NI_MAXHOST]; + int clientPort = 0; +#ifdef WIN32 + clientPort=ntohs(((struct sockaddr_in *)&clientAddr)->sin_port); + char* tmp=inet_ntoa(((struct sockaddr_in*)&clientAddr)->sin_addr); + strcpy(hname,tmp); +#else + int error; + char sname[NI_MAXSERV]; + error = getnameinfo((struct sockaddr *)&clientAddr, clientAddrlen, + hname, sizeof (hname), sname, sizeof (sname), NI_NUMERICHOST|NI_NUMERICSERV); + if (error) { + log_error("AbstractSocket: getnameinfo: %s\n", + gai_strerror(error)); + } + clientPort = atoi(sname); +#endif + log_debug("Client %d connected from address %s/%d", newclient_fd, hname, clientPort); + peer_connected(newclient_fd, hname, clientPort); + peer_connected(newclient_fd, *((struct sockaddr_in *)&clientAddr)); /* calling deprecated function also */ + log_debug("Handle_Socket_Event updated with client %d ", newclient_fd); + + if (set_non_block_mode(newclient_fd, use_non_blocking_socket) < 0) { + log_error("Set blocking mode failed."); + } + + } else { + remove_client(newclient_fd); + peer_disconnected(newclient_fd); + } + } // if (fd == listen_fd && is_readable) + + log_debug("leaving Abstract_Socket::Handle_Socket_Event()"); +} + +int Abstract_Socket::receive_message_on_fd(int client_id) +{ + as_client_struct * client_data = get_peer(client_id); + TTCN_Buffer* recv_tb = client_data->fd_buff; + unsigned char *end_ptr; + size_t end_len=AS_TCP_CHUNCK_SIZE; + recv_tb->get_end(end_ptr, end_len); + int messageLength = recv(client_id, (char *)end_ptr, end_len, 0); + if (messageLength==0) return messageLength; // peer disconnected + else if (messageLength < 0) { + log_warning("Error when reading the received TCP PDU: %s", strerror(errno)); + errno = 0; + return 0; + } + recv_tb->increase_length(messageLength); + return messageLength; +} + +int Abstract_Socket::send_message_on_fd(int client_id, const unsigned char* send_par, int message_length) +{ + get_peer(client_id); + return send(client_id, (const char *)send_par, message_length, 0); +} + + +//Tthe EAGAIN errno value set by the send operation means that +//the sending operation would block. +//First I try to increase the length of the sending buffer (increase_send_buffer()). +//If the outgoing buffer cannot be increased, the block_for_sending function will +//be called. This function will block until the file descriptor given as its argument +//is ready to write. While the block for sending operation calls the Event_Handler, +//states must be used to indicate that the Event_Handler is called when the +//execution is blocking. +//STATE_BLOCK_FOR_SENDING: the block for sending operation has been called +//STATE_DONT_CLOSE: if the other side close the connection before the block_for_sending +// operation returns, in the Event_Handler the connection +// must not be closed and the block_for_sending must return before we can +// close the connection. This state means that the other side closed the connection +// during the block_for_sending operation +//STATE_NORMAL: normal state +int Abstract_Socket::send_message_on_nonblocking_fd(int client_id, + const unsigned char* send_par, + int length){ + + log_debug("entering Abstract_Socket::" + "send_message_on_nonblocking_fd(id: %d)", client_id); + as_client_struct * client_data = get_peer(client_id); + int sent_len = 0; + while(sent_len < length){ + int ret; + log_debug("Abstract_Socket::send_message_on_nonblocking_fd(id: %d): new iteration", client_id); + if (client_data->reading_state == STATE_DONT_CLOSE){ + goto client_closed_connection; + } else ret = send(client_id, send_par + sent_len, length - sent_len, 0); + + if (ret > 0) sent_len+=ret; + else{ + switch(errno){ + case EINTR:{ //signal: do nothing, try again + errno = 0; + break; + } + case EPIPE:{ //client closed connection + goto client_closed_connection; + } + case EAGAIN:{ // the output buffer is full: + //try to increase it if possible + errno = 0; + int old_bufsize, new_bufsize; + + if (increase_send_buffer( + client_id, old_bufsize, new_bufsize)) { + log_warning("Sending data on on file descriptor %d", + client_id); + log_warning("The sending operation would" + "block execution. The size of the " + "outgoing buffer was increased from %d to " + "%d bytes.",old_bufsize, + new_bufsize); + } else { + log_warning("Sending data on file descriptor %d", + client_id); + log_warning("The sending operation would block " + "execution and it is not possible to " + "further increase the size of the " + "outgoing buffer. Trying to process incoming" + "data to avoid deadlock."); + log_debug("Abstract_Socket::" + "send_message_on_nonblocking_fd():" + " setting socket state to " + "STATE_BLOCK_FOR_SENDING"); + client_data->reading_state = STATE_BLOCK_FOR_SENDING; + TTCN_Snapshot::block_for_sending(client_id); + } + break; + } + default:{ + log_debug("Abstract_Socket::" + "send_message_on_nonblocking_fd(): " + "setting socket state to STATE_NORMAL"); + client_data->reading_state = STATE_NORMAL; + log_debug("leaving Abstract_Socket::" + "send_message_on_nonblocking_fd(id: %d)" + " with error", client_id); + return -1; + } + } //end of switch + }//end of else + } //end of while + + log_debug("Abstract_Socket::send_message_on_nonblocking_fd():" + "setting socket state to STATE_NORMAL"); + client_data->reading_state = STATE_NORMAL; + log_debug("leaving Abstract_Socket::" + "send_message_on_nonblocking_fd(id: %d)", client_id); + return sent_len; + +client_closed_connection: + log_debug("Abstract_Socket::send_message_on_nonblocking_fd(): setting socket state to STATE_NORMAL"); + client_data->reading_state = STATE_NORMAL; + log_debug("leaving Abstract_Socket::" + "send_message_on_nonblocking_fd(id: %d)", client_id); + errno = EPIPE; + return -1; +} + +const PacketHeaderDescr* Abstract_Socket::Get_Header_Descriptor() const +{ + return NULL; +} + +void Abstract_Socket::peer_connected(int /*client_id*/, sockaddr_in& /*remote_addr*/) +{ +} + +void Abstract_Socket::handle_message(int client_id) +{ + const PacketHeaderDescr* head_descr = Get_Header_Descriptor(); + as_client_struct * client_data = get_peer(client_id); + TTCN_Buffer *recv_tb = client_data->fd_buff; + + if(!head_descr){ + message_incoming(recv_tb->get_data(), recv_tb->get_len(), client_id); + if (!ttcn_buffer_usercontrol) recv_tb->clear(); + } else { + recv_tb->rewind(); + unsigned long valid_header_length = head_descr->Get_Valid_Header_Length(); + while (recv_tb->get_len() > 0) { + if ((unsigned long)recv_tb->get_len() < valid_header_length) { + // this is a message without a valid header + // recv_tb->handle_fragment(); + return; + } + unsigned long message_length = + head_descr->Get_Message_Length(recv_tb->get_data()); + if (message_length < valid_header_length) { + // this is a message with a malformed length + log_error("Malformed message: invalid length: %lu. The length should " + "be at least %lu.", message_length, valid_header_length); + } + if((unsigned long)recv_tb->get_len() < message_length){ + // this is a fragmented message with a valid header + // recv_tb->handle_fragment(); + return; + } + // this a valid message + message_incoming(recv_tb->get_data(), message_length, client_id); + if (!ttcn_buffer_usercontrol) { + recv_tb->set_pos(message_length); + recv_tb->cut(); + } + } + } + log_debug("leaving Abstract_Socket::handle_message()"); +} + +void Abstract_Socket::map_user() +{ + log_debug("entering Abstract_Socket::map_user()"); +#if defined SOLARIS8 + sigignore(SIGPIPE); +#endif + if(!use_connection_ASPs) + { + // If halt_on_connection_reset is not set explicitly + // set it to the default value: true on clients, false on servers + if (!halt_on_connection_reset_set) { + if (local_port_number != 0) halt_on_connection_reset=false; + else halt_on_connection_reset=true; + } + } + + all_mandatory_configparameters_present(); + + char remotePort[6]; + char localPort[6]; + sprintf(localPort, "%u", local_port_number); + sprintf(remotePort, "%u", remote_port_number); + + if(!use_connection_ASPs) + { + if(server_mode) { + //open_listen_port(localAddr); + open_listen_port(local_host_name,(char*)&localPort); + } else { + //open_client_connection(remoteAddr, localAddr); + open_client_connection(remote_host_name,(char*)&remotePort,local_host_name,(char*)&localPort); + } + } + + log_debug("leaving Abstract_Socket::map_user()"); +} + +int Abstract_Socket::open_listen_port(const struct sockaddr_in & new_local_addr) +{ +#ifndef WIN32 + log_debug("**** DEPRECATED FUNCTION CALLED: Abstract_Socket::open_listen_port(const struct sockaddr_in & new_local_addr)." + " USE Abstract_Socket::open_listen_port(const char* localHostname, const char* localServicename) INSTEAD! ****"); +#endif + log_debug("Local address: %s:%d", inet_ntoa(new_local_addr.sin_addr), ntohs(new_local_addr.sin_port)); + + close_listen_port(); + + listen_fd = socket(AF_INET, SOCK_STREAM, 0); + if(listen_fd<0) { + if(use_connection_ASPs) + { + log_warning("Cannot open socket when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot open socket"); + } + + if(!nagling) { + int on = 1; + setsockopt(listen_fd, IPPROTO_TCP, TCP_NODELAY, (const char*)&on, sizeof(on)); + } + int val = 1; + if(setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&val, sizeof(val)) < 0) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("Setsockopt failed when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + return -1; + } + else log_error("Setsockopt failed"); + } + + int rc = 0; + + log_debug("Bind to port..."); + rc = bind(listen_fd, (const struct sockaddr *)&new_local_addr, sizeof(new_local_addr)); + if(rc<0) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("Cannot bind to port when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot bind to port"); + } + log_debug("Bind successful on server."); + + rc = listen(listen_fd, server_backlog); + if(rc<0) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("Cannot listen at port when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot listen at port"); + } + + // to avoid dead-locks and make possible + // handling of multiple clients "accept" is placed in the Event_Handler + +#if defined LINUX || defined FREEBSD || defined SOLARIS8 + socklen_t +#else /* SOLARIS or WIN32 */ + int +#endif + addr_len = sizeof(new_local_addr); + if (getsockname(listen_fd, (struct sockaddr*)&new_local_addr, &addr_len)) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("getsockname() system call failed on the server socket when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + return -1; + } + else log_error("getsockname() system call failed on the server socket"); + } + log_debug("Listen successful on server port %d", ntohs(new_local_addr.sin_port)); + + Add_Fd_Read_Handler(listen_fd); // Done here - after all error checks: as closed fd should not be left added + log_debug("Abstract_Socket::open_listen_port(): Handler set to socket fd %d", listen_fd); + + //localAddr = new_local_addr; + + if(use_connection_ASPs) + listen_port_opened(ntohs(new_local_addr.sin_port)); + + return new_local_addr.sin_port; +} + +int Abstract_Socket::open_listen_port(const char* localHostname, const char* localServicename) { + log_debug("Local address: %s/%s", (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); + +#ifdef WIN32 + struct sockaddr_in new_local_addr; + memset(&new_local_addr, 0, sizeof(new_local_addr)); + if(localHostname!=NULL){ + get_host_id(localHostname,&new_local_addr); + } + if(localServicename!=NULL){ + new_local_addr.sin_port=htons(atoi(localServicename)); + } + return open_listen_port(new_local_addr); +#else + close_listen_port(); + + struct addrinfo *aip; + struct addrinfo hints; + int sock_opt; + int error; + + /* Set up a socket to listen for connections. */ + bzero(&hints, sizeof (hints)); + hints.ai_flags = /*AI_ALL|*/AI_ADDRCONFIG|AI_PASSIVE; + hints.ai_socktype = SOCK_STREAM; + hints.ai_family = ai_family; + + error = getaddrinfo(localHostname, localServicename, &hints, &aip); + if (error != 0) { + if(use_connection_ASPs) + { + log_warning("getaddrinfo: %s for host %s service %s", gai_strerror(error), + (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); + listen_port_opened(-1); + return -1; + } + else log_error("getaddrinfo: %s for host %s service %s", gai_strerror(error), + (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); + } + + struct addrinfo *res; + if (socket_debugging) { + /* count the returned addresses: */ + int counter = 0; + for (res = aip; res != NULL; res = res->ai_next,++counter) {}; + log_debug("Number of local addresses: %d\n", counter); + } + + + for (res = aip; res != NULL; res = res->ai_next) { + listen_fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + log_debug("Waiting for connection via: %s\n", + ((res->ai_family==AF_INET)?"IPv4": + ((res->ai_family==AF_INET6)?"IPv6":"unknown"))); + if (listen_fd == -1) { + if(use_connection_ASPs) + { + log_warning("Cannot open socket when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + freeaddrinfo(aip); + return -1; + } + else log_error("Cannot open socket"); + } + + /* Tell the system to allow local addresses to be reused. */ + sock_opt = 1; + if (setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, (void *)&sock_opt, + sizeof (sock_opt)) == -1) { + + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("Setsockopt failed when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + freeaddrinfo(aip); + return -1; + } + else log_error("Setsockopt failed"); + } + + if(!nagling) { + int on = 1; + setsockopt(listen_fd, IPPROTO_TCP, TCP_NODELAY, (const char*)&on, sizeof(on)); + } + + log_debug("Bind to port..."); + if (bind(listen_fd, res->ai_addr, res->ai_addrlen) == -1) { + error = errno; // save it for the warning message + close(listen_fd); + listen_fd = -1; + log_debug("Cannot bind to port when trying to open the listen port: %s", strerror(errno)); + errno = 0; + continue; + } + log_debug("Bind successful on server."); + break; + } + if (res==NULL) { + if(use_connection_ASPs) + { + log_warning("Cannot bind to port when trying to open the listen port: %s", strerror(error)); + listen_port_opened(-1); + error = 0; + freeaddrinfo(aip); + return -1; + } + else log_error("Cannot bind to port"); + } + + if (listen(listen_fd, server_backlog) == -1) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("Cannot listen at port when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + freeaddrinfo(aip); + return -1; + } + else log_error("Cannot listen at port"); + } + + + // to avoid dead-locks and make possible + // handling of multiple clients "accept" is placed in Handle_Socket_Event + + // to determine the local address: + if (getsockname(listen_fd, res->ai_addr, &res->ai_addrlen)) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("getsockname() system call failed on the server socket when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + freeaddrinfo(aip); + return -1; + } + else log_error("getsockname() system call failed on the server socket"); + } + char hname[NI_MAXHOST]; + char sname[NI_MAXSERV]; +/* error = getnameinfo(res->ai_addr, res->ai_addrlen, + hname, sizeof (hname), sname, sizeof (sname), NI_NUMERICSERV); + if (error) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("getnameinfo() system call failed on the server socket when trying to open the listen port: %s", gai_strerror(error)); + listen_port_opened(-1); + freeaddrinfo(aip); + return -1; + } + else log_error("getsockname() system call failed on the server socket"); + } else { + log_debug("Listening on (name): %s/%s\n", + hname, sname); + }*/ + error = getnameinfo(res->ai_addr, res->ai_addrlen, + hname, sizeof (hname), sname, sizeof (sname), NI_NUMERICHOST|NI_NUMERICSERV); + if (error) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("getnameinfo() system call failed on the server socket when trying to open the listen port: %s", gai_strerror(error)); + listen_port_opened(-1); + freeaddrinfo(aip); + return -1; + } + else log_error("getsockname() system call failed on the server socket"); + } else { + log_debug("Listening on (addr): %s/%s\n", + hname, sname); + } + + Add_Fd_Read_Handler(listen_fd); // Done here - after all error checks: as closed fd should not be left added + log_debug("Abstract_Socket::open_listen_port(): Handler set to socket fd %d", listen_fd); + + log_debug("new_local_addr Addr family: %s\n", + ((res->ai_addr->sa_family==AF_INET)?"IPv4": + ((res->ai_addr->sa_family==AF_INET6)?"IPv6":"unknown")) + ); + + + int listenPort = atoi(sname); + if(use_connection_ASPs) + listen_port_opened(listenPort); + + freeaddrinfo(aip); + return listenPort; +#endif +} + +void Abstract_Socket::listen_port_opened(int /*port_number*/) +{ + // Intentionally blank +} + +void Abstract_Socket::close_listen_port() +{ + // close current listening port if it is alive + if(listen_fd != -1) + { + Remove_Fd_Read_Handler(listen_fd); + close(listen_fd); + log_debug("Closed listening port of fd: %d", listen_fd); + listen_fd = -1; + } +} + +int Abstract_Socket::get_socket_fd() const{ + if(server_mode) return listen_fd; + if(peer_list_get_nr_of_peers()==0) return -1; + return peer_list_get_first_peer(); +} + +int Abstract_Socket::open_client_connection(const struct sockaddr_in & new_remote_addr, const struct sockaddr_in & new_local_addr) +{ +#ifdef WIN32 + log_debug("**** DEPRECATED FUNCTION CALLED: Abstract_Socket::open_client_connection(const struct sockaddr_in & new_remote_addr, const struct sockaddr_in & new_local_addr)." + " USE open_client_connection(const char* remoteHostname, const char* remoteServicename, const char* localHostname, const char* localServicename) INSTEAD! ****"); +#endif + log_debug("Remote address: %s:%d", inet_ntoa(new_remote_addr.sin_addr), ntohs(new_remote_addr.sin_port)); + + int deadlock_counter = AS_DEADLOCK_COUNTER; + int TCP_reconnect_counter = TCP_reconnect_attempts; + + // workaround for the 'address already used' bug + // used also when TCP reconnect is used + as_start_connecting: + + int socket_fd = socket(AF_INET, SOCK_STREAM, 0); + if(socket_fd<0) { + if(use_connection_ASPs) + { + log_warning("Cannot open socket when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot open socket."); + } + + if(!nagling) { + int on = 1; + setsockopt(socket_fd, IPPROTO_TCP, TCP_NODELAY, (const char*)&on, sizeof(on)); + } + + int rc; + + // when using client mode there is no separate file_desriptor for listening and target + log_debug("Connecting to server from address %s:%d", inet_ntoa(new_local_addr.sin_addr), ntohs(new_local_addr.sin_port)); + if (new_local_addr.sin_port != ntohs(0)) { // specific port to use + int val = 1; + if(setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&val, sizeof(val)) < 0) { + if(use_connection_ASPs) + { + log_warning("Setsockopt failed when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Setsockopt failed."); + } + rc = bind(socket_fd, (const struct sockaddr *)&new_local_addr, sizeof(new_local_addr)); + if(rc<0) { + if(use_connection_ASPs) + { + log_warning("Cannot bind to port when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot bind to port."); + } + log_debug("Bind successful on client."); + } + rc = connect(socket_fd, (const struct sockaddr *)&new_remote_addr, sizeof(new_remote_addr)); + + if(rc<0){ + if (errno == EADDRINUSE) { + log_warning("connect() returned error code EADDRINUSE. Perhaps this is a kernel bug. Trying to connect again."); + close(socket_fd); + errno = 0; + deadlock_counter--; + if (deadlock_counter<0) { + if(use_connection_ASPs) + { + log_warning("Already tried %d times, giving up when trying to open client connection: %s", AS_DEADLOCK_COUNTER, strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Already tried %d times, giving up", AS_DEADLOCK_COUNTER); + } + goto as_start_connecting; + } else if (client_TCP_reconnect && errno != 0) { + log_warning("connect() returned error code %d, trying to connect again (TCP reconnect mode).", errno); + close(socket_fd); + errno = 0; + TCP_reconnect_counter--; + if (TCP_reconnect_counter<0) { + if(use_connection_ASPs) + { + log_warning("Already tried %d times, giving up when trying to open client connection: %s", TCP_reconnect_attempts, strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Already tried %d times, giving up", TCP_reconnect_attempts); + } + sleep(TCP_reconnect_delay); + goto as_start_connecting; + } + + if(use_connection_ASPs) + { + log_warning("Cannot connect to server when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot connect to server"); + } + + // Non-blocking mode is set before updating bookkeping to handle the error case properly. + if (set_non_block_mode(socket_fd, use_non_blocking_socket) < 0){ + close(socket_fd); + if (use_connection_ASPs){ + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Set blocking mode failed."); + } + + as_client_struct * client_data=peer_list_add_peer(socket_fd); + Add_Fd_Read_Handler(socket_fd); // Done here - as in case of error: remove_client expects the handler as added + log_debug("Abstract_Socket::open_client_connection(). Handler set to socket fd %d", socket_fd); + client_data->fd_buff = new TTCN_Buffer; +// client_data->clientAddr = *(struct sockaddr_storage*)&new_remote_addr; + memset(&client_data->clientAddr,0,sizeof(client_data->clientAddr)); + memcpy(&client_data->clientAddr,&new_remote_addr,sizeof(new_remote_addr)); + client_data->clientAddrlen = sizeof(new_remote_addr); + client_data->tcp_state = ESTABLISHED; + client_data->reading_state = STATE_NORMAL; + if (!add_user_data(socket_fd)) { + remove_client(socket_fd); + peer_disconnected(socket_fd); + return -1; + } + + +// localAddr = new_local_addr; +// remoteAddr = new_remote_addr; + + client_connection_opened(socket_fd); + + return socket_fd; +} + +int Abstract_Socket::open_client_connection(const char* remoteHostname, const char* remoteServicename, const char* localHostname, const char* localServicename) { + log_debug("Abstract_Socket::open_client_connection(remoteAddr: %s/%s, localAddr: %s/%s) called", + remoteHostname,remoteServicename, + (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); +#ifdef WIN32 + struct sockaddr_in new_local_addr; + struct sockaddr_in new_remote_addr; + memset(&new_local_addr, 0, sizeof(new_local_addr)); + memset(&new_local_addr, 0, sizeof(new_remote_addr)); + if(localHostname!=NULL){ + get_host_id(localHostname,&new_local_addr); + } + if(localServicename!=NULL){ + new_local_addr.sin_port=htons(atoi(localServicename)); + } + if(remoteHostname!=NULL){ + get_host_id(remoteHostname,&new_remote_addr); + } + if(remoteServicename!=NULL){ + new_remote_addr.sin_port=htons(atoi(remoteServicename)); + } + return open_client_connection(new_remote_addr,new_local_addr); +#else + + int deadlock_counter = AS_DEADLOCK_COUNTER; + int TCP_reconnect_counter = TCP_reconnect_attempts; + + + struct addrinfo *res, *aip; + struct addrinfo hints; + int socket_fd = -1; + int error; + + /* Get host address. Any type of address will do. */ + bzero(&hints, sizeof (hints)); + hints.ai_flags = AI_ADDRCONFIG; /* |AI_ALL*/ + if (localHostname!=NULL || localServicename!=NULL) { /* use specific local address */ + hints.ai_flags |= AI_PASSIVE; + } + hints.ai_socktype = SOCK_STREAM; + hints.ai_family = ai_family; + + error = getaddrinfo(remoteHostname, remoteServicename, &hints, &res); + if (error != 0) { + if(use_connection_ASPs) + { + log_warning("getaddrinfo: %s for host %s service %s", + gai_strerror(error), remoteHostname, remoteServicename); + client_connection_opened(-1); + return -1; + } + else { log_error("getaddrinfo: %s for host %s service %s", + gai_strerror(error), remoteHostname, remoteServicename); + } + } + + if (socket_debugging) { + /* count the returned addresses: */ + int counter = 0; + for (aip = res; aip != NULL; aip = aip->ai_next,++counter) {}; + log_debug("Number of remote addresses: %d\n", counter); + } + + // workaround for the 'address already used' bug + // used also when TCP reconnect is used + as_start_connecting: + + /* Try all returned addresses until one works */ + for (aip = res; aip != NULL; aip = aip->ai_next) { + /* + * Open socket. The address type depends on what + * getaddrinfo() gave us. + */ + socket_fd = socket(aip->ai_family, aip->ai_socktype, + aip->ai_protocol); + if (socket_fd == -1) { + if(use_connection_ASPs) + { + log_warning("Cannot open socket when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + freeaddrinfo(res); + return -1; + } + else { + freeaddrinfo(res); + log_error("Cannot open socket."); + } + } + + log_debug("Using address family for socket %d: %s",socket_fd, + ((aip->ai_family==AF_INET)?"IPv4": + ((aip->ai_family==AF_INET6)?"IPv6":"unknown")) + ); + + + if(!nagling) { + int on = 1; + setsockopt(socket_fd, IPPROTO_TCP, TCP_NODELAY, (const char*)&on, sizeof(on)); + } + + // when using client mode there is no separate file_descriptor for listening and target + log_debug("Connecting to server from address %s/%s", + (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); + if (localHostname!=NULL || localServicename!=NULL) { // specific localaddress/port to use + int val = 1; + if(setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&val, sizeof(val)) < 0) { + if(use_connection_ASPs) + { + log_warning("Setsockopt failed when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Setsockopt failed."); + } + + // determine the local address: + struct addrinfo *localAddrinfo; + /* Get host address. Any type of address will do. */ + bzero(&hints, sizeof (hints)); + hints.ai_flags = AI_PASSIVE; + hints.ai_socktype = SOCK_STREAM; + hints.ai_family = ai_family;//aip->ai_family; // NOTE: On solaris 10 if is set to aip->ai_family, getaddrinfo will crash for IPv4-mapped addresses! + + error = getaddrinfo(localHostname, localServicename, &hints, &localAddrinfo); + if (error != 0) { + if(use_connection_ASPs) + { + log_warning("getaddrinfo: %s for host %s service %s", + gai_strerror(error), (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); + client_connection_opened(-1); + return -1; + } + else { log_error("getaddrinfo: %s for host %s service %s", + gai_strerror(error), (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); + } + } + + if (socket_debugging) { + /* count the returned addresses: */ + int counter = 0; + for (struct addrinfo* aip2 = localAddrinfo; aip2 != NULL; aip2 = aip2->ai_next,++counter) {}; + log_debug("Number of local addresses: %d\n", counter); + } + + /* Try all returned addresses until one works */ + struct addrinfo* aip2; + for (aip2 = localAddrinfo; aip2 != NULL; aip2 = aip2->ai_next) { + log_debug("Using address family for bind: %s", + ((aip2->ai_family==AF_INET)?"IPv4": + ((aip2->ai_family==AF_INET6)?"IPv6":"unknown")) + ); + + if(bind(socket_fd, aip2->ai_addr, aip2->ai_addrlen)<0) { +/* if(use_connection_ASPs) // the if else branches are the same + {*/ + log_debug("Cannot bind to port when trying to open client connection: %s", strerror(errno)); + //client_connection_opened(-1); + //freeaddrinfo(localAddrinfo); + errno = 0; + continue; //aip2 cycle + //return -1; +/* } + else { + //freeaddrinfo(localAddrinfo); + //log_error("Cannot bind to port."); + log_debug("Cannot bind to port when trying to open client connection: %s", strerror(errno)); + errno = 0; + continue; //aip2 cycle + }*/ + } + log_debug("Bind successful on client."); + freeaddrinfo(localAddrinfo); + break; + } + if (aip2==NULL) { + log_debug("Bind failed for all local addresses."); + freeaddrinfo(localAddrinfo); + continue; // aip cycle + } + } + + /* Connect to the host. */ + if (connect(socket_fd, aip->ai_addr, aip->ai_addrlen) == -1) { + if (errno == EADDRINUSE) { + log_warning("connect() returned error code EADDRINUSE. Perhaps this is a kernel bug. Trying to connect again."); + close(socket_fd); + socket_fd = -1; + errno = 0; + deadlock_counter--; + if (deadlock_counter<0) { + if(use_connection_ASPs) + { + log_warning("Already tried %d times, giving up when trying to open client connection: %s", AS_DEADLOCK_COUNTER, strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Already tried %d times, giving up", AS_DEADLOCK_COUNTER); + } + goto as_start_connecting; + } else if (client_TCP_reconnect && errno != 0) { + log_warning("connect() returned error code %d (%s), trying to connect again (TCP reconnect mode).", errno, strerror(errno)); + close(socket_fd); + socket_fd = -1; + errno = 0; + if (aip->ai_next==NULL) { /* Last address is tried and there is still an error */ + TCP_reconnect_counter--; + if (TCP_reconnect_counter<0) { + if(use_connection_ASPs) + { + log_warning("Already tried %d times, giving up when trying to open client connection: %s", TCP_reconnect_attempts, strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else { log_error("Already tried %d times, giving up", TCP_reconnect_attempts); } + } + } + sleep(TCP_reconnect_delay); + goto as_start_connecting; + } else { + log_debug("Cannot connect to server: %s", strerror(errno)); + (void) close(socket_fd); + socket_fd = -1; + } + + if (aip->ai_next==NULL) { + if(use_connection_ASPs) + { + log_warning("Cannot connect to server when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot connect to server"); + } + continue; //aip cycle + } + + // to determine the local address: + if (getsockname(socket_fd, aip->ai_addr, &aip->ai_addrlen)) { + close(socket_fd); + if(use_connection_ASPs) { + log_warning("getsockname() system call failed on the client socket when trying to connect to server: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("getsockname() system call failed on the client socket when trying to connect to server: %s", strerror(errno)); + } + char hname[NI_MAXHOST]; + char sname[NI_MAXSERV]; +/* error = getnameinfo(aip->ai_addr, aip->ai_addrlen, + hname, sizeof (hname), sname, sizeof (sname), NI_NUMERICSERV); + if (error) { + close(socket_fd); + if(use_connection_ASPs) + { + log_warning("getnameinfo() system call failed on the client socket when trying to connect to server: %s", gai_strerror(error)); + client_connection_opened(-1); + return -1; + } + else log_error("getnameinfo() system call failed on the client socket when trying to connect to server: %s", gai_strerror(error)); + } else { + log_debug("Connection established (name): %s/%s -> %s/%s\n", + hname, sname, + remoteHostname, remoteServicename); + }*/ + error = getnameinfo(aip->ai_addr, aip->ai_addrlen, + hname, sizeof (hname), sname, sizeof (sname), NI_NUMERICHOST|NI_NUMERICSERV); + if (error) { +/* close(socket_fd); + if(use_connection_ASPs) + { + log_warning("getnameinfo() system call failed on the client socket when trying to connect to server: %s", gai_strerror(error)); +// client_connection_opened(-1); +// return -1; + } + else*/ + log_warning("getnameinfo() system call failed on the client socket when trying to connect to server: %s", gai_strerror(error)); + } else { + log_debug("Connection established (addr): %s/%s -> %s/%s\n", + hname, sname, + remoteHostname, remoteServicename); + } + + log_debug( + "connected to: host %s service %s via address family %s\n", + remoteHostname, remoteServicename, + ((aip->ai_family==AF_INET)?"IPv4": + ((aip->ai_family==AF_INET6)?"IPv6":"unknown"))); + break; + } + if (aip==NULL) { + if(use_connection_ASPs) + { + log_warning("Cannot connect to server"); + client_connection_opened(-1); + freeaddrinfo(res); + return -1; + } + else log_error("Cannot connect to server"); + } + + // Non-blocking mode is set before updating bookkeping to handle the error case properly. + if (set_non_block_mode(socket_fd, use_non_blocking_socket) < 0) { + freeaddrinfo(res); + close(socket_fd); + if (use_connection_ASPs){ + log_warning("Set blocking mode failed."); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Set blocking mode failed."); + } + + as_client_struct * client_data=peer_list_add_peer(socket_fd); + Add_Fd_Read_Handler(socket_fd); // Done here - as in case of error: remove_client expects the handler as added + log_debug("Abstract_Socket::open_client_connection(). Handler set to socket fd %d", socket_fd); + client_data->fd_buff = new TTCN_Buffer; +// client_data->clientAddr = *(struct sockaddr_storage*)aip->ai_addr; + memset(&client_data->clientAddr,0,sizeof(client_data->clientAddr)); + memcpy(&client_data->clientAddr,aip->ai_addr,sizeof(*aip->ai_addr)); + client_data->clientAddrlen = aip->ai_addrlen; + client_data->tcp_state = ESTABLISHED; + client_data->reading_state = STATE_NORMAL; + + freeaddrinfo(res); + + if (!add_user_data(socket_fd)) { + remove_client(socket_fd); + peer_disconnected(socket_fd); + return -1; + } + + client_connection_opened(socket_fd); + + return socket_fd; +#endif +} + + +void Abstract_Socket::client_connection_opened(int /*client_id*/) +{ + // Intentionally blank +} + +void Abstract_Socket::unmap_user() +{ + log_debug("entering Abstract_Socket::unmap_user()"); + remove_all_clients(); + close_listen_port(); + Handler_Uninstall(); // For robustness only + log_debug("leaving Abstract_Socket::unmap_user()"); +} + +void Abstract_Socket::peer_disconnected(int /*fd*/) +{ + // virtual peer_disconnected() needs to be overriden in test ports! + if(!use_connection_ASPs) { + if (halt_on_connection_reset) + log_error("Connection was interrupted by the other side."); + if (client_TCP_reconnect){ + log_warning("TCP connection was interrupted by the other side, trying to reconnect again..."); + unmap_user(); + map_user(); + log_warning("TCP reconnect successfuly finished"); + } + } +} + +void Abstract_Socket::peer_half_closed(int fd) +{ + log_debug("Entering Abstract_Socket::peer_half_closed()"); + remove_client(fd); + peer_disconnected(fd); + log_debug("Leaving Abstract_Socket::peer_half_closed()"); +} + +void Abstract_Socket::send_shutdown(int client_id) +{ + log_debug("entering Abstract_Socket::send_shutdown()"); + int dest_fd = client_id; + + if (dest_fd == -1) { + if(peer_list_get_nr_of_peers() > 1) + log_error("Client Id not specified altough not only 1 client exists"); + else if(peer_list_get_nr_of_peers() == 0) + log_error("There is no connection alive, connect before sending anything."); + dest_fd = peer_list_get_first_peer(); + } + as_client_struct * client_data = get_peer(dest_fd); + if(client_data->tcp_state != ESTABLISHED) + log_error("TCP state of client nr %i does not allow to shut down its connection for writing!", dest_fd); + + if(shutdown(dest_fd, SHUT_WR) != 0) + { + if(errno == ENOTCONN) + { + remove_client(dest_fd); + peer_disconnected(dest_fd); + errno = 0; + } + else + log_error("shutdown() system call failed"); + } + else client_data->tcp_state = FIN_WAIT; + + // dest_fd is not removed from readfds, data can be received + + log_debug("leaving Abstract_Socket::send_shutdown()"); +} + +void Abstract_Socket::send_outgoing(const unsigned char* send_par, int length, int client_id) +{ + log_debug("entering Abstract_Socket::send_outgoing()"); + log_hex("Sending data: ", send_par, length); + int dest_fd; + int nrOfBytesSent; + + dest_fd = client_id; + if (dest_fd == -1) { + if(peer_list_get_nr_of_peers() > 1) + log_error("Client Id not specified altough not only 1 client exists"); + else if(peer_list_get_nr_of_peers() == 0) + log_error("There is no connection alive, use a Connect ASP before sending anything."); + dest_fd = peer_list_get_first_peer(); + } + as_client_struct * client_data = get_peer(dest_fd,true); + if(!client_data || ((client_data->tcp_state != ESTABLISHED) && (client_data->tcp_state != CLOSE_WAIT))){ + char *error_text=mprintf("client nr %i has no established connection", dest_fd); + report_error(client_id,length,-2,send_par,error_text); + Free(error_text); + log_debug("leaving Abstract_Socket::send_outgoing()"); + return; + } + + nrOfBytesSent = use_non_blocking_socket ? send_message_on_nonblocking_fd(dest_fd, send_par, length) : + send_message_on_fd(dest_fd, send_par, length); + + if (nrOfBytesSent == -1){ + log_debug("Client %d closed connection. Error: %d %s", client_id, errno, strerror(errno)); + report_unsent(dest_fd,length,nrOfBytesSent,send_par,"Client closed the connection"); + + if(client_data->tcp_state == CLOSE_WAIT){ + log_debug("Client %d waiting for close ASP.", client_id); + } else { + errno = 0; + log_debug("Client %d closed connection", client_id); + client_data->tcp_state = CLOSE_WAIT; + Remove_Fd_Read_Handler(dest_fd); + peer_half_closed(dest_fd); + } + }else if (nrOfBytesSent != length) { + char *error_text=mprintf("Send system call failed: %d bytes were sent instead of %d", nrOfBytesSent, length); + report_error(client_id,length,nrOfBytesSent,send_par,error_text); + Free(error_text); + } else { + log_debug("Nr of bytes sent = %d", nrOfBytesSent); + } + log_debug("leaving Abstract_Socket::send_outgoing()"); +} + +void Abstract_Socket::report_error(int /*client_id*/, int /*msg_length*/, int /*sent_length*/, const unsigned char* /*msg*/, const char* error_text) +{ + log_error("%s",error_text); +} + +void Abstract_Socket::report_unsent(int /*client_id*/, int /*msg_length*/, int /*sent_length*/, const unsigned char* /*msg*/, const char* error_text) +{ + log_debug("%s",error_text); +} + +void Abstract_Socket::all_mandatory_configparameters_present() +{ + if(!use_connection_ASPs) + { + if(server_mode) { + if(local_port_number == 0) { + log_error("%s is not defined in the configuration file", local_port_name()); + } + } + else { // client mode + if (remote_host_name == NULL) { + log_error("%s is not defined in the configuration file", remote_address_name()); + } + if(remote_port_number == 0){ + log_error("%s is not defined in the configuration file", remote_port_name()); + } + } + } + user_all_mandatory_configparameters_present(); +} + + +void Abstract_Socket::get_host_id(const char* hostName, struct sockaddr_in *addr) +{ + log_debug("Abstract_Socket::get_host_id called"); + unsigned int port = addr->sin_port; + memset(addr, 0, sizeof(*addr)); + addr->sin_family = AF_INET; + addr->sin_port = port; + struct hostent *hptr; + if(strcmp("localhost", hostName) != 0) + { + hptr = gethostbyname(hostName); + if (hptr != NULL) memcpy(&addr->sin_addr, hptr->h_addr_list[0], hptr->h_length); + else log_error("The host name %s is not valid in the configuration file.", hostName); + log_debug("The address set to %s[%s]", hptr->h_name, inet_ntoa(addr->sin_addr)); + } + else + { + addr->sin_addr.s_addr = htonl(INADDR_ANY); + log_debug("The address set to [%s]", inet_ntoa(addr->sin_addr)); + } +} + +void Abstract_Socket::remove_client(int fd) +{ + log_debug("entering Abstract_Socket::remove_client(%d)", fd); + if(fd != listen_fd) { + get_peer(fd); // check if client exists, log_error && fail if not + // TODO FIXME: remove the Add_Fd_Read_Handler(fd); if TITAN is fixed + Add_Fd_Read_Handler(fd); + Remove_Fd_All_Handlers(fd); + remove_user_data(fd); + delete get_peer(fd)->fd_buff; + peer_list_remove_peer(fd); + close(fd); + log_debug("Removed client %d.", fd); + } + else log_warning("Abstract_Socket::remove_client: %d is the server listening port, can not be removed!", fd); + log_debug("leaving Abstract_Socket::remove_client(%d)", fd); +} + +void Abstract_Socket::remove_all_clients() +{ + log_debug("entering Abstract_Socket::remove_all_clients"); + for(int i = 0; peer_list_root != NULL && i < peer_list_length; i++) + { + if(i != listen_fd && peer_list_root[i] != NULL) + remove_client(i); + } + // check if no stucked data + while (peer_list_get_nr_of_peers()) { + int client_id = peer_list_get_first_peer(); + if (client_id >= 0) log_warning("Client %d has not been removed, programming error", client_id); + else log_error("Number of clients<>0 but cannot get first client, programming error"); + peer_list_remove_peer(client_id); + } + + log_debug("leaving Abstract_Socket::remove_all_clients"); +} + +int Abstract_Socket::set_non_block_mode(int fd, bool enable_nonblock){ + + int flags = fcntl(fd, F_GETFL); + if (flags < 0) { + log_warning("System call fcntl(F_GETFL) failed on file " + "descriptor %d.", fd); + return -1; + } + + if (enable_nonblock) flags |= O_NONBLOCK; + else flags &= ~O_NONBLOCK; + + if (fcntl(fd, F_SETFL, flags) == -1) { + log_warning("System call fcntl(F_SETFL) failed on file " + "descriptor %d.", fd); + return -1; + } + return 0; + +} + +bool Abstract_Socket::increase_send_buffer(int fd, + int &old_size, int& new_size) +{ + int set_size; +#if defined LINUX || defined FREEBSD || defined SOLARIS8 + socklen_t +#else /* SOLARIS or WIN32 */ + int +#endif + optlen = sizeof(old_size); + // obtaining the current buffer size first + if (getsockopt(fd, SOL_SOCKET, SO_SNDBUF, (char*)&old_size, &optlen)) + goto getsockopt_failure; + if (old_size <= 0) { + log_warning("System call getsockopt(SO_SNDBUF) " + "returned invalid buffer size (%d) on file descriptor %d.", + old_size, fd); + return false; + } + // trying to double the buffer size + set_size = 2 * old_size; + if (set_size > old_size) { + if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (const char*)&set_size, + sizeof(set_size))) { + // the operation failed + switch (errno) { + case ENOMEM: + case ENOBUFS: + errno = 0; + break; + default: + // other error codes indicate a fatal error + goto setsockopt_failure; + } + } else { + // the operation was successful + goto success; + } + } + // trying to perform a binary search to determine the maximum buffer size + set_size = old_size; + for (int size_step = old_size / 2; size_step > 0; size_step /= 2) { + int tried_size = set_size + size_step; + if (tried_size > set_size) { + if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (const char*)&tried_size, + sizeof(tried_size))) { + // the operation failed + switch (errno) { + case ENOMEM: + case ENOBUFS: + errno = 0; + break; + default: + // other error codes indicate a fatal error + goto setsockopt_failure; + } + } else { + // the operation was successful + set_size = tried_size; + } + } + } + if (set_size <= old_size) return false; +success: + // querying the new effective buffer size (it might be smaller + // than set_size but should not be smaller than old_size) + optlen = sizeof(new_size); + if (getsockopt(fd, SOL_SOCKET, SO_SNDBUF, (char*)&new_size, + &optlen)) goto getsockopt_failure; + if (new_size > old_size) return true; + else { + if (new_size < old_size) + log_warning("System call getsockopt(SO_SNDBUF) returned unexpected buffer size " + "(%d, after increasing it from %d to %d) on file descriptor %d.", + new_size, old_size, set_size, fd); + return false; + } +getsockopt_failure: + log_warning("System call getsockopt(SO_SNDBUF) failed on file " + "descriptor %d. (%s)", fd, strerror(errno)); + return false; +setsockopt_failure: + log_warning("System call setsockopt(SO_SNDBUF) failed on file " + "descriptor %d. (%s)", fd, strerror(errno)); + return false; +} + + +const char* Abstract_Socket::local_port_name() { return "serverPort";} +const char* Abstract_Socket::remote_address_name() { return "destIPAddr";} +const char* Abstract_Socket::local_address_name() { return "serverIPAddr";} +const char* Abstract_Socket::remote_port_name() { return "destPort";} +const char* Abstract_Socket::ai_family_name() { return "ai_family";} +const char* Abstract_Socket::use_connection_ASPs_name() { return "use_connection_ASPs";} +const char* Abstract_Socket::halt_on_connection_reset_name(){ return "halt_on_connection_reset";} +const char* Abstract_Socket::client_TCP_reconnect_name() { return "client_TCP_reconnect";} +const char* Abstract_Socket::TCP_reconnect_attempts_name() { return "TCP_reconnect_attempts";} +const char* Abstract_Socket::TCP_reconnect_delay_name() { return "TCP_reconnect_delay";} +const char* Abstract_Socket::server_mode_name() { return "server_mode";} +const char* Abstract_Socket::socket_debugging_name() { return "socket_debugging";} +const char* Abstract_Socket::nagling_name() { return "nagling";} +const char* Abstract_Socket::use_non_blocking_socket_name() { return "use_non_blocking_socket";} +const char* Abstract_Socket::server_backlog_name() { return "server_backlog";} +bool Abstract_Socket::add_user_data(int) {return true;} +bool Abstract_Socket::remove_user_data(int) {return true;} +bool Abstract_Socket::user_all_mandatory_configparameters_present() { return true; } + + + +//////////////////////////////////////////////////////////////////////// +///// Peer handling functions +//////////////////////////////////////////////////////////////////////// + +void Abstract_Socket::peer_list_reset_peer() { + log_debug("Abstract_Socket::peer_list_reset_peer: Resetting peer array"); + for (int i = 0; i < peer_list_length; i++) + if (peer_list_root[i] != NULL) { + delete peer_list_root[i]; + peer_list_root[i] = NULL; + } + + peer_list_resize_list(-1); + log_debug("Abstract_Socket::peer_list_reset_peer: New length is %d", peer_list_length); +} + +void Abstract_Socket::peer_list_resize_list(int client_id) { + int new_length=client_id; + if (new_length<0) new_length = peer_list_get_last_peer(); + new_length++; // index starts from 0 + log_debug("Abstract_Socket::peer_list_resize_list: Resizing to %d", new_length); + peer_list_root = (as_client_struct **)Realloc(peer_list_root, new_length*sizeof(as_client_struct *)); + + // initialize new entries + for (int i = peer_list_length; i < new_length; i++) + peer_list_root[i] = NULL; + + peer_list_length = new_length; + log_debug("Abstract_Socket::peer_list_resize_list: New length is %d", peer_list_length); +} + +int Abstract_Socket::peer_list_get_first_peer() const { + log_debug("Abstract_Socket::peer_list_get_first_peer: Finding first peer of the peer array"); + for (int i = 0; i < peer_list_length; i++) { + if (peer_list_root[i] != NULL) { + log_debug("Abstract_Socket::peer_list_get_first_peer: First peer is %d", i); + return i; + } + } + log_debug("Abstract_Socket::peer_list_get_first_peer: No active peer found"); + return -1; // this indicates an empty list +} + +int Abstract_Socket::peer_list_get_last_peer() const +{ + log_debug("Abstract_Socket::peer_list_get_last_peer: Finding last peer of the peer array"); + if (peer_list_length==0) { + log_debug("Abstract_Socket::peer_list_get_last_peer: No active peer found"); + return -1; + } + for (int i = peer_list_length - 1; i >= 0; i--) { + if (peer_list_root[i] != NULL) { + log_debug("Abstract_Socket::peer_list_get_last_peer: Last peer is %u", i); + return i; + } + } + log_debug("Abstract_Socket::peer_list_get_last_peer: No active peer found"); + return -1; // this indicates an empty list +} + +int Abstract_Socket::peer_list_get_nr_of_peers() const +{ + int nr=0; + for (int i = 0; i < peer_list_length; i++) + if (peer_list_root[i] != NULL) nr++; + log_debug("Abstract_Socket::peer_list_get_nr_of_peers: Number of active peers = %d", nr); + return nr; +} + +Abstract_Socket::as_client_struct *Abstract_Socket::get_peer (int client_id, bool no_error) const +{ + if (client_id >= peer_list_length){ + if(no_error) return NULL; + else log_error ("Index %d exceeds length of peer list.", client_id); + } + if (peer_list_root[client_id]==NULL){ + if(no_error) return NULL; + else log_error("Abstract_Socket::get_peer: Client %d does not exist", client_id); + } + return peer_list_root[client_id]; +} + +Abstract_Socket::as_client_struct * Abstract_Socket::peer_list_add_peer (int client_id) { + log_debug("Abstract_Socket::peer_list_add_peer: Adding client %d to peer list", client_id); + if (client_id<0) log_error("Invalid Client Id is given: %d.", client_id); + if (client_id>peer_list_get_last_peer()) peer_list_resize_list(client_id); + peer_list_root[client_id] = new as_client_struct; + peer_list_root[client_id]->user_data = NULL; + peer_list_root[client_id]->fd_buff = NULL; + peer_list_root[client_id]->tcp_state = CLOSED; + peer_list_root[client_id]->reading_state = STATE_NORMAL; + return peer_list_root[client_id]; +} + +void Abstract_Socket::peer_list_remove_peer (int client_id) { + + log_debug("Abstract_Socket::peer_list_remove_peer: Removing client %d from peer list", client_id); + if (client_id >= peer_list_length || client_id<0) log_error("Invalid Client Id is given: %d.", client_id); + if (peer_list_root[client_id] == NULL) log_error("Peer %d does not exist.", client_id); + + delete peer_list_root[client_id]; + peer_list_root[client_id] = NULL; + + peer_list_resize_list(-1); +} + + + +#ifdef AS_USE_SSL +/* + * Server mode + When the mode is server, first a TCP socket is created. The server starts + to listen on this port. Once a TCP connect request is received, the TCP + connection is setup. After this the SSL handshake begins. + The SSL is mapped to the file descriptor of the TCP socket. The BIO is + automatically created by OpenSSL inheriting the characteristics of the + socket (non-blocking mode). The BIO is completely transparent. + The server always sends its certificate to the client. If configured so, + the server will request the certificate of the client and check if it is + a valid certificate. If not, the SSL connection is refused. + If configured not to verify the certificate, the server will not request + it from the client and the SSL connection is accepted. + If usage of the SSL ssl_session resumption is enabled and + the client refers to a previous ssl_session, the server will accept it, + unless it is not found in the SSL context cache. + Once the connection is negotiated, data can be sent/received. + The SSL connection is shutted down on an unmap() operation. The shutdown + process does not follow the standard. The server simply shuts down and + does not expect any acknowledgement from the client. + Clients connected to the server are distinguished with their file + descriptor numbers. When a message is received, the file descriptor + number is also passed, so the client can be identified. + * Client mode + When the mode is client, first a TCP connection is requested to the + server. Once accepted, the SSL endpoint is created. + If configured so, the client tries to use the ssl_session Id from the + previous connection, if available (e.g. not the first connection). + If no ssl_session Id is available or the server does not accept it, + a full handshake if performed. + If configured so, the certificate of the server is verified. + If the verification fails, the SSL connection is interrupted by the + client. If no verification required, the received certificate is + still verified, however the result does not affect the connection + (might fail). + * ssl_verify_certificates() is a virtual function. It is called after + SSL connection is up. Testports may use it to check other peer's + certificate and do actions. If the return value is 0, then the + SSL connection is closed. In case of a client, the test port + exits with an error (verification_error). The server just removes + client data, but keeps running. + If ssl_verifiycertificate == "yes", then accept connections only + where certificate is valid + Further checks can be done using SSL_Socket::ssl_verify_certificates() + after the SSL connection is established with the following function call + sequence: + + remove_client(dest_fd); + peer_disconnected(dest_fd); + +*/ + + +// ssl_session ID context of the server +static unsigned char ssl_server_context_name[] = "McHalls&EduardWasHere"; +const unsigned char * SSL_Socket::ssl_server_auth_session_id_context = ssl_server_context_name; +// Password pointer +void *SSL_Socket::ssl_current_client = NULL; + + +SSL_Socket::SSL_Socket() +{ + ssl_use_ssl=false; + ssl_initialized=false; + ssl_key_file=NULL; + ssl_certificate_file=NULL; + ssl_trustedCAlist_file=NULL; + ssl_cipher_list=NULL; + ssl_verify_certificate=false; + ssl_use_session_resumption=true; + ssl_session=NULL; + ssl_password=NULL; + test_port_type=NULL; + test_port_name=NULL; + ssl_ctx = NULL; + ssl_current_ssl = NULL; + SSLv2=true; + SSLv3=true; + TLSv1=true; + TLSv1_1=true; + TLSv1_2=true; +} + +SSL_Socket::SSL_Socket(const char *tp_type, const char *tp_name) +{ + ssl_use_ssl=false; + ssl_initialized=false; + ssl_key_file=NULL; + ssl_certificate_file=NULL; + ssl_trustedCAlist_file=NULL; + ssl_cipher_list=NULL; + ssl_verify_certificate=false; + ssl_use_session_resumption=true; + ssl_session=NULL; + ssl_password=NULL; + test_port_type=tp_type; + test_port_name=tp_name; + ssl_ctx = NULL; + ssl_current_ssl = NULL; + SSLv2=true; + SSLv3=true; + TLSv1=true; + TLSv1_1=true; + TLSv1_2=true; +} + +SSL_Socket::~SSL_Socket() +{ + // now SSL context can be removed + if (ssl_use_ssl && ssl_ctx!=NULL) { + SSL_CTX_free(ssl_ctx); + } + delete [] ssl_key_file; + delete [] ssl_certificate_file; + delete [] ssl_trustedCAlist_file; + delete [] ssl_cipher_list; + delete [] ssl_password; +} + + +bool SSL_Socket::parameter_set(const char *parameter_name, + const char *parameter_value) +{ + log_debug("entering SSL_Socket::parameter_set(%s, %s)", parameter_name, parameter_value); + + if(strcmp(parameter_name, ssl_use_ssl_name()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) ssl_use_ssl = true; + else if(strcasecmp(parameter_value, "no") == 0) ssl_use_ssl = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_use_ssl_name()); + } else if(strcmp(parameter_name, ssl_use_session_resumption_name()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) ssl_use_session_resumption = true; + else if(strcasecmp(parameter_value, "no") == 0) ssl_use_session_resumption = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_use_session_resumption_name()); + } else if(strcmp(parameter_name, ssl_private_key_file_name()) == 0) { + delete [] ssl_key_file; + ssl_key_file=new char[strlen(parameter_value)+1]; + strcpy(ssl_key_file, parameter_value); + } else if(strcmp(parameter_name, ssl_trustedCAlist_file_name()) == 0) { + delete [] ssl_trustedCAlist_file; + ssl_trustedCAlist_file=new char[strlen(parameter_value)+1]; + strcpy(ssl_trustedCAlist_file, parameter_value); + } else if(strcmp(parameter_name, ssl_certificate_file_name()) == 0) { + delete [] ssl_certificate_file; + ssl_certificate_file=new char[strlen(parameter_value)+1]; + strcpy(ssl_certificate_file, parameter_value); + } else if(strcmp(parameter_name, ssl_cipher_list_name()) == 0) { + delete [] ssl_cipher_list; + ssl_cipher_list=new char[strlen(parameter_value)+1]; + strcpy(ssl_cipher_list, parameter_value); + } else if(strcmp(parameter_name, ssl_password_name()) == 0) { + ssl_password=new char[strlen(parameter_value)+1]; + strcpy(ssl_password, parameter_value); + } else if(strcmp(parameter_name, ssl_verifycertificate_name()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) ssl_verify_certificate = true; + else if(strcasecmp(parameter_value, "no") == 0) ssl_verify_certificate = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_verifycertificate_name()); + } else if(strcasecmp(parameter_name, ssl_disable_SSLv2()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) SSLv2= false; + else if(strcasecmp(parameter_value, "no") == 0) SSLv2 = true; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_disable_SSLv2()); + } else if(strcasecmp(parameter_name, ssl_disable_SSLv3()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) SSLv2 = false; + else if(strcasecmp(parameter_value, "no") == 0) SSLv2 = true; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_disable_SSLv3()); + } else if(strcasecmp(parameter_name, ssl_disable_TLSv1()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) TLSv1= false; + else if(strcasecmp(parameter_value, "no") == 0) TLSv1 = true; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_disable_TLSv1()); + } else if(strcasecmp(parameter_name, ssl_disable_TLSv1_1()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) TLSv1_1 = false; + else if(strcasecmp(parameter_value, "no") == 0) TLSv1_1 = true; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_disable_TLSv1_1()); + } else if(strcasecmp(parameter_name, ssl_disable_TLSv1_2()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) TLSv1_2 = false; + else if(strcasecmp(parameter_value, "no") == 0) TLSv1_2 = true; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_disable_TLSv1_2()); + } else { + log_debug("leaving SSL_Socket::parameter_set(%s, %s)", parameter_name, parameter_value); + return Abstract_Socket::parameter_set(parameter_name, parameter_value); + } + log_debug("leaving SSL_Socket::parameter_set(%s, %s)", parameter_name, parameter_value); + return true; +} + + +bool SSL_Socket::add_user_data(int client_id) { + + log_debug("entering SSL_Socket::add_user_data()"); + if (!ssl_use_ssl) { + log_debug("leaving SSL_Socket::add_user_data()"); + return Abstract_Socket::add_user_data(client_id); + } + + ssl_init_SSL(); + + log_debug("Create a new SSL object"); + if (ssl_ctx==NULL) + log_error("No SSL CTX found, SSL not initialized"); + ssl_current_ssl=SSL_new(ssl_ctx); + + if (ssl_current_ssl==NULL) + log_error("Creation of SSL object failed"); +#ifdef SSL_OP_NO_SSLv2 + if(!SSLv2){ + SSL_set_options(ssl_current_ssl,SSL_OP_NO_SSLv2); + } +#endif +#ifdef SSL_OP_NO_SSLv3 + if(!SSLv3){ + SSL_set_options(ssl_current_ssl,SSL_OP_NO_SSLv3); + } +#endif +#ifdef SSL_OP_NO_TLSv1 + if(!TLSv1){ + SSL_set_options(ssl_current_ssl,SSL_OP_NO_TLSv1); + } +#endif +#ifdef SSL_OP_NO_TLSv1_1 + if(!TLSv1_1){ + SSL_set_options(ssl_current_ssl,SSL_OP_NO_TLSv1_1); + } +#endif +#ifdef SSL_OP_NO_TLSv1_2 + if(!TLSv1_2){ + SSL_set_options(ssl_current_ssl,SSL_OP_NO_TLSv1_2); + } +#endif + + set_user_data(client_id, ssl_current_ssl); + log_debug("New client added with key '%d'", client_id); + log_debug("Binding SSL to the socket"); + if (SSL_set_fd(ssl_current_ssl, client_id)!=1) + log_error("Binding of SSL object to socket failed"); + + // Conext change for SSL objects may come here in the + // future. + + if (Abstract_Socket::get_server_mode()) { + log_debug("Accept SSL connection request"); + if (ssl_current_client!=NULL) log_warning("Warning: race condition while setting current client object pointer"); + ssl_current_client=(SSL_Socket *)this; + if (ssl_getresult(SSL_accept(ssl_current_ssl))!=SSL_ERROR_NONE) { + log_warning("Connection from client %d is refused", client_id); + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::add_user_data()"); + return false; + } + ssl_current_client=NULL; + + } else { + if (ssl_use_session_resumption && ssl_session!=NULL) { + log_debug("Try to use ssl_session resumption"); + if (ssl_getresult(SSL_set_session(ssl_current_ssl, ssl_session))!=SSL_ERROR_NONE) + log_error("SSL error occured"); + } + + log_debug("Connect to server"); + if (ssl_current_client!=NULL) log_warning("Warning: race condition while setting current client object pointer"); + ssl_current_client=(SSL_Socket *)this; + // + + while(true) + { + int res = ssl_getresult(SSL_connect(ssl_current_ssl)); + switch (res) { + case SSL_ERROR_NONE: break; + case SSL_ERROR_WANT_WRITE: + ssl_current_client = NULL; + TTCN_Snapshot::block_for_sending(client_id); + continue; + case SSL_ERROR_WANT_READ: + for(;;) { + pollfd pollClientFd = { client_id, POLLIN, 0 }; + int nEvents = poll(&pollClientFd, 1, 0); + if (nEvents == 1 && (pollClientFd.revents & (POLLIN | POLLHUP)) != 0) + break; + if(nEvents < 0 && errno != EINTR) + log_error("System call poll() failed on file descriptor %d", client_id); + } + continue; + default: + log_warning("Connection to server is refused"); + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::add_user_data()"); + return false; + } + break; + } //while + + + ssl_current_client=NULL; + if (ssl_use_session_resumption) { + log_debug("Connected, get new ssl_session"); + ssl_session=SSL_get1_session(ssl_current_ssl); + if (ssl_session==NULL) + log_warning("Server did not send a session ID"); + } + } + + if (ssl_use_session_resumption) { + if (SSL_session_reused(ssl_current_ssl)) log_debug("Session was reused"); + else log_debug("Session was not reused"); + } + + if (!ssl_verify_certificates()) { // remove client + log_warning("Verification failed"); + log_debug("leaving SSL_Socket::add_user_data()"); + return false; + + } + log_debug("leaving SSL_Socket::add_user_data()"); + return true; +} + + +bool SSL_Socket::remove_user_data(int client_id) { + + log_debug("entering SSL_Socket::remove_user_data()"); + if (!ssl_use_ssl) { + log_debug("leaving SSL_Socket::remove_user_data()"); + return Abstract_Socket::remove_user_data(client_id); + } + ssl_current_ssl = (SSL*)get_user_data(client_id); + if (ssl_current_ssl!=NULL) { + SSL_shutdown(ssl_current_ssl); + SSL_free(ssl_current_ssl); + } else + log_warning("SSL object not found for client %d", client_id); + log_debug("leaving SSL_Socket::remove_user_data()"); + return true; +} + + + +bool SSL_Socket::user_all_mandatory_configparameters_present() { + if (!ssl_use_ssl) { return true; } + if (Abstract_Socket::get_server_mode()) { + if (ssl_certificate_file==NULL) + log_error("%s is not defined in the configuration file", ssl_certificate_file_name()); + if (ssl_trustedCAlist_file==NULL) + log_error("%s is not defined in the configuration file", ssl_trustedCAlist_file_name()); + if (ssl_key_file==NULL) + log_error("%s is not defined in the configuration file", ssl_private_key_file_name()); + } else { + if (ssl_verify_certificate && ssl_trustedCAlist_file==NULL) + log_error("%s is not defined in the configuration file altough %s=yes", ssl_trustedCAlist_file_name(), ssl_verifycertificate_name()); + } + return true; +} + + + +//STATE_WAIT_FOR_RECEIVE_CALLBACK: if the SSL_read operation would +// block because the socket is not ready for writing, +// I set the socket state to this state and add the file +// descriptor to the Event_Handler. The Event_Handler will +// wake up and call the receive_message_on_fd operation +// if the socket is ready to write. +//If the SSL_read operation would block because the socket is not ready for +//reading, I do nothing +int SSL_Socket::receive_message_on_fd(int client_id) +{ + log_debug("entering SSL_Socket::receive_message_on_fd()"); + if (!ssl_use_ssl) { + log_debug("leaving SSL_Socket::receive_message_on_fd()"); + return Abstract_Socket::receive_message_on_fd(client_id); + } + + if (ssl_current_client!=NULL) log_warning("Warning: race condition while setting current client object pointer"); + ssl_current_client=(SSL_Socket *)this; + + as_client_struct* peer = get_peer(client_id); // check if client exists + if (peer->reading_state == STATE_WAIT_FOR_RECEIVE_CALLBACK){ + Remove_Fd_Write_Handler(client_id); + log_debug("SSL_Socket::receive_message_on_fd: setting socket state to STATE_NORMAL"); + peer->reading_state = STATE_NORMAL; + } + TTCN_Buffer* recv_tb = get_buffer(client_id); + ssl_current_ssl=(SSL*)get_user_data(client_id); + int messageLength=0; + size_t end_len=AS_SSL_CHUNCK_SIZE; + unsigned char *end_ptr; + while (messageLength<=0) { + log_debug(" one read cycle started"); + recv_tb->get_end(end_ptr, end_len); + messageLength = SSL_read(ssl_current_ssl, end_ptr, end_len); + if (messageLength <= 0) { + int res=ssl_getresult(messageLength); + switch (res) { + case SSL_ERROR_ZERO_RETURN: + log_debug("SSL_Socket::receive_message_on_fd: SSL connection was interrupted by the other side"); + SSL_set_quiet_shutdown(ssl_current_ssl, 1); + log_debug("SSL_ERROR_ZERO_RETURN is received, setting SSL SHUTDOWN mode to QUIET"); + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::receive_message_on_fd() with SSL_ERROR_ZERO_RETURN"); + return 0; + case SSL_ERROR_WANT_WRITE://writing would block + if (get_use_non_blocking_socket()){ + Add_Fd_Write_Handler(client_id); + log_debug("SSL_Socket::receive_message_on_fd: setting socket state to STATE_WAIT_FOR_RECEIVE_CALLBACK"); + peer->reading_state = STATE_WAIT_FOR_RECEIVE_CALLBACK; + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::receive_message_on_fd()"); + return -2; + } + case SSL_ERROR_WANT_READ: //reading would block, continue processing data + if (get_use_non_blocking_socket()){ + log_debug("SSL_Socket::receive_message_on_fd: reading would block, leaving SSL_Socket::receive_message_on_fd()"); + ssl_current_client = NULL; + log_debug("leaving SSL_Socket::receive_message_on_fd()"); + return -2; + } + log_debug("repeat the read operation to finish the pending SSL handshake"); + break; + default: + log_error("SSL error occured"); + } + } else { + recv_tb->increase_length(messageLength); + } + } + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::receive_message_on_fd() with number of bytes read: %d", messageLength); + return messageLength; +} + + +int SSL_Socket::send_message_on_fd(int client_id, const unsigned char* send_par, int message_length) +{ + log_debug("entering SSL_Socket::send_message_on_fd()"); + + if (!ssl_use_ssl) { + log_debug("leaving SSL_Socket::send_message_on_fd()"); + return Abstract_Socket::send_message_on_fd(client_id, send_par, message_length); + } + + if (ssl_current_client!=NULL) log_warning("Warning: race condition while setting current client object pointer"); + ssl_current_client=(SSL_Socket *)this; + + get_peer(client_id); // check if client exists + ssl_current_ssl=(SSL*)get_user_data(client_id); + if (ssl_current_ssl==NULL) { log_error("No SSL data available for client %d", client_id); } + log_debug("Client ID = %d", client_id); + while (true) { + log_debug(" one write cycle started"); + + int res = ssl_getresult(SSL_write(ssl_current_ssl, send_par, message_length)); + switch (res) { + case SSL_ERROR_NONE: + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::send_message_on_fd()"); + return message_length; + case SSL_ERROR_WANT_WRITE: + case SSL_ERROR_WANT_READ: + log_debug("repeat the write operation to finish the pending SSL handshake"); + break; + case SSL_ERROR_ZERO_RETURN: + log_warning("SSL_Socket::send_message_on_fd: SSL connection was interrupted by the other side"); + SSL_set_quiet_shutdown(ssl_current_ssl, 1); + log_debug("SSL_ERROR_ZERO_RETURN is received, setting SSL SHUTDOWN mode to QUIET"); + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::send_message_on_fd()"); + return -1; + default: + log_debug("SSL error occured"); + return -1; + } + } + // avoid compiler warnings + return 0; +} + +//If the socket is not ready for writing, the same mechanism is used +//as described at the Abstract_Socket class +//If the socket is not ready for reading, I block the execution using +//the take_new operation while the socket is not ready for reading. +//While this operation will call the Event_Handler, +//I indicate with the STATE_DONT_RECEIVE state that from the Event_Handler the receive_message_on_fd +//operation must not be called for this socket. +int SSL_Socket::send_message_on_nonblocking_fd(int client_id, const unsigned char* send_par, int message_length){ + log_debug("entering SSL_Socket::send_message_on_nonblocking_fd()"); + + if (!ssl_use_ssl) { + log_debug("leaving SSL_Socket::send_message_on_nonblocking_fd()"); + return Abstract_Socket::send_message_on_nonblocking_fd(client_id, send_par, message_length); + } + + as_client_struct* peer; + if (ssl_current_client!=NULL) log_warning("Warning: race condition while setting current client object pointer"); + ssl_current_client=(SSL_Socket *)this; + + get_peer(client_id); + ssl_current_ssl=(SSL*)get_user_data(client_id); + if (ssl_current_ssl==NULL) { log_error("No SSL data available for client %d", client_id); } + log_debug("Client ID = %d", client_id); + while (true) { + int res; + peer = get_peer(client_id); // check if client exists + log_debug(" one write cycle started"); + ssl_current_ssl = (SSL*)get_user_data(client_id); + if (peer -> reading_state == STATE_DONT_CLOSE){ + goto client_closed_connection; + }else res = ssl_getresult(SSL_write(ssl_current_ssl, send_par, message_length)); + + switch (res) { + case SSL_ERROR_NONE: + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::send_message_on_nonblocking_fd()"); + log_debug("SSL_Socket::send_message_on_nonblocking_fd: setting socket state to STATE_NORMAL"); + peer -> reading_state = STATE_NORMAL; + return message_length; + case SSL_ERROR_WANT_WRITE: + if (peer == NULL){ + log_error("SSL_Socket::send_message_on_nonblocking_fd, Client ID %d does not exist.", client_id); + } + int old_bufsize, new_bufsize; + if (increase_send_buffer(client_id, old_bufsize, new_bufsize)) { + log_debug("Sending data on on file descriptor %d",client_id); + log_debug("The sending operation would block execution. The " + "size of the outgoing buffer was increased from %d to " + "%d bytes.",old_bufsize, + new_bufsize); + } else { + log_warning("Sending data on file descriptor %d", client_id); + log_warning("The sending operation would block execution and it " + "is not possible to further increase the size of the " + "outgoing buffer. Trying to process incoming data to " + "avoid deadlock."); + ssl_current_client=NULL; + log_debug("SSL_Socket::send_message_on_nonblocking_fd: setting socket state to STATE_BLOCK_FOR_SENDING"); + peer->reading_state = STATE_BLOCK_FOR_SENDING; + TTCN_Snapshot::block_for_sending(client_id); + } + peer = get_peer(client_id); // check if client exists + if (peer == NULL){ + log_error("SSL_Socket::send_message_on_nonblocking_fd, Client ID %d does not exist.", client_id); + } + break; + case SSL_ERROR_WANT_READ: + //receiving buffer is probably empty thus reading would block execution + log_debug("SSL_write cannot read data from socket %d. Trying to process data to avoid deadlock.", client_id); + log_debug("SSL_Socket::send_message_on_nonblocking_fd: setting socket state to STATE_DONT_RECEIVE"); + peer -> reading_state = STATE_DONT_RECEIVE; //don't call receive_message_on_fd() to this socket + for (;;) { + TTCN_Snapshot::take_new(TRUE); + pollfd pollClientFd = { client_id, POLLIN, 0 }; + int nEvents = poll(&pollClientFd, 1, 0); + if (nEvents == 1 && (pollClientFd.revents & (POLLIN | POLLHUP)) != 0) + break; + if (nEvents < 0 && errno != EINTR) + log_error("System call poll() failed on file descriptor %d", client_id); + } + log_debug("Deadlock resolved"); + break; + case SSL_ERROR_ZERO_RETURN: + goto client_closed_connection; + default: + log_warning("SSL error occured"); + return -1; + } + } + +client_closed_connection: + log_warning("SSL_Socket::send_message_on_nonblocking_fd: SSL connection was interrupted by the other side"); + SSL_set_quiet_shutdown(ssl_current_ssl, 1); + log_debug("Setting SSL SHUTDOWN mode to QUIET"); + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::send_message_on_nonblocking_fd()"); + log_debug("SSL_Socket::send_message_on_nonblocking_fd: setting socket state to STATE_NORMAL"); + peer -> reading_state = STATE_NORMAL; + errno = EPIPE; + return -1; + +} + +bool SSL_Socket::ssl_verify_certificates() +{ + char str[SSL_CHARBUF_LENGTH]; + + log_debug("entering SSL_Socket::ssl_verify_certificates()"); + + ssl_log_SSL_info(); + + // Get the other side's certificate + log_debug("Check certificate of the other party"); + X509 *cert = SSL_get_peer_certificate (ssl_current_ssl); + if (cert != NULL) { + + { + log_debug("Certificate information:"); + X509_NAME_oneline (X509_get_subject_name (cert), str, SSL_CHARBUF_LENGTH); + log_debug(" subject: %s", str); + } + + // We could do all sorts of certificate verification stuff here before + // deallocating the certificate. + + // Just a basic check that the certificate is valid + // Other checks (e.g. Name in certificate vs. hostname) shall be + // done on application level + if (ssl_verify_certificate) + log_debug("Verification state is: %s", X509_verify_cert_error_string(SSL_get_verify_result(ssl_current_ssl))); + X509_free (cert); + + } else + log_warning("Other side does not have certificate."); + + log_debug("leaving SSL_Socket::ssl_verify_certificates()"); + return true; +} + + + +// Data set/get functions +char * SSL_Socket::get_ssl_password() const {return ssl_password;} +void SSL_Socket::set_ssl_use_ssl(bool par) {ssl_use_ssl=par;} +void SSL_Socket::set_ssl_verifycertificate(bool par) {ssl_verify_certificate=par;} +void SSL_Socket::set_ssl_use_session_resumption(bool par) {ssl_use_session_resumption=par;} +void SSL_Socket::set_ssl_key_file(char * par) { + delete [] ssl_key_file; + ssl_key_file=par; +} +void SSL_Socket::set_ssl_certificate_file(char * par) { + delete [] ssl_certificate_file; + ssl_certificate_file=par; +} +void SSL_Socket::set_ssl_trustedCAlist_file(char * par) { + delete [] ssl_trustedCAlist_file; + ssl_trustedCAlist_file=par; +} +void SSL_Socket::set_ssl_cipher_list(char * par) { + delete [] ssl_cipher_list; + ssl_cipher_list=par; +} +void SSL_Socket::set_ssl_server_auth_session_id_context(const unsigned char * par) { + ssl_server_auth_session_id_context=par; +} + +// Default parameter names +const char* SSL_Socket::ssl_use_ssl_name() { return "ssl_use_ssl";} +const char* SSL_Socket::ssl_use_session_resumption_name() { return "ssl_use_session_resumption";} +const char* SSL_Socket::ssl_private_key_file_name() { return "ssl_private_key_file";} +const char* SSL_Socket::ssl_trustedCAlist_file_name() { return "ssl_trustedCAlist_file";} +const char* SSL_Socket::ssl_certificate_file_name() { return "ssl_certificate_chain_file";} +const char* SSL_Socket::ssl_password_name() { return "ssl_private_key_password";} +const char* SSL_Socket::ssl_cipher_list_name() { return "ssl_allowed_ciphers_list";} +const char* SSL_Socket::ssl_verifycertificate_name() { return "ssl_verify_certificate";} +const char* SSL_Socket::ssl_disable_SSLv2() { return "ssl_disable_SSLv2";} +const char* SSL_Socket::ssl_disable_SSLv3() { return "ssl_disable_SSLv3";} +const char* SSL_Socket::ssl_disable_TLSv1() { return "ssl_disable_TLSv1";} +const char* SSL_Socket::ssl_disable_TLSv1_1() { return "ssl_disable_TLSv1_1";} +const char* SSL_Socket::ssl_disable_TLSv1_2() { return "ssl_disable_TLSv1_2";} + + +void SSL_Socket::ssl_actions_to_seed_PRNG() { + struct stat randstat; + + if(RAND_status()) { + log_debug("PRNG already initialized, no action needed"); + return; + } + log_debug("Seeding PRND"); + // OpenSSL tries to use random devives automatically + // these would not be necessary + if (!stat("/dev/urandom", &randstat)) { + log_debug("Using installed random device /dev/urandom for seeding the PRNG with %d bytes.", SSL_PRNG_LENGTH); + if (RAND_load_file("/dev/urandom", SSL_PRNG_LENGTH)!=SSL_PRNG_LENGTH) + log_error("Could not read from /dev/urandom"); + } else if (!stat("/dev/random", &randstat)) { + log_debug("Using installed random device /dev/random for seeding the PRNG with %d bytes.", SSL_PRNG_LENGTH); + if (RAND_load_file("/dev/random", SSL_PRNG_LENGTH)!=SSL_PRNG_LENGTH) + log_error("Could not read from /dev/random"); + } else { + /* Neither /dev/random nor /dev/urandom are present, so add + entropy to the SSL PRNG a hard way. */ + log_warning("Solaris patches to provide random generation devices are not installed.\nSee http://www.openssl.org/support/faq.html \"Why do I get a \"PRNG not seeded\" error message?\"\nA workaround will be used."); + for (int i = 0; i < 10000 && !RAND_status(); ++i) { + char buf[4]; + struct timeval tv; + gettimeofday(&tv, 0); + buf[0] = tv.tv_usec & 0xF; + buf[2] = (tv.tv_usec & 0xF0) >> 4; + buf[3] = (tv.tv_usec & 0xF00) >> 8; + buf[1] = (tv.tv_usec & 0xF000) >> 12; + RAND_add(buf, sizeof buf, 0.1); + } + return; + } + + if(!RAND_status()) { + log_error("Could not seed the Pseudo Random Number Generator with enough data."); + } else { + log_debug("PRNG successfully initialized."); + } +} + + +void SSL_Socket::ssl_init_SSL() +{ + if (ssl_initialized) { + log_debug("SSL already initialized, no action needed"); + return; + } + + { + log_debug("Init SSL started"); + log_debug("Using %s (%lx)", SSLeay_version(SSLEAY_VERSION), OPENSSL_VERSION_NUMBER); + } + + SSL_library_init(); // initialize library + SSL_load_error_strings(); // readable error messages + + // Create SSL method: both server and client understanding SSLv2, SSLv3, TLSv1 +// ssl_method = SSLv23_method(); +// if (ssl_method==NULL) +// log_error("SSL method creation failed."); + // Create context + ssl_ctx = SSL_CTX_new (SSLv23_method()); + if (ssl_ctx==NULL) + log_error("SSL context creation failed."); + + // valid for all SSL objects created from this context afterwards + if(ssl_certificate_file!=NULL) { + log_debug("Loading certificate file"); + if(SSL_CTX_use_certificate_chain_file(ssl_ctx, ssl_certificate_file)!=1) + log_error("Can't read certificate file "); + } + + // valid for all SSL objects created from this context afterwards + if(ssl_key_file!=NULL) { + log_debug("Loading key file"); + if (ssl_current_client!=NULL) log_warning("Warning: race condition while setting current client object pointer"); + ssl_current_client=(SSL_Socket *)this; + if(ssl_password!=NULL) + SSL_CTX_set_default_passwd_cb(ssl_ctx, ssl_password_cb); + if(SSL_CTX_use_PrivateKey_file(ssl_ctx, ssl_key_file, SSL_FILETYPE_PEM)!=1) + log_error("Can't read key file "); + ssl_current_client=NULL; + } + + if (ssl_trustedCAlist_file!=NULL) { + log_debug("Loading trusted CA list file"); + if (SSL_CTX_load_verify_locations(ssl_ctx, ssl_trustedCAlist_file, NULL)!=1) + log_error("Can't read trustedCAlist file "); + } + + if (ssl_certificate_file!=NULL && ssl_key_file!=NULL) { + log_debug("Check for consistency between private and public keys"); + if (SSL_CTX_check_private_key(ssl_ctx)!=1) + log_warning("Private key does not match the certificate public key"); + } + + // check the other side's certificates + if (ssl_verify_certificate) { + log_debug("Setting verification behaviour: verification required and do not allow to continue on failure.."); + SSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, ssl_verify_callback); + } else { + log_debug("Setting verification behaviour: verification not required and do allow to continue on failure.."); + SSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_NONE, ssl_verify_callback); + } + + if (ssl_cipher_list!=NULL) { + log_debug("Setting ssl_cipher list restrictions"); + if (SSL_CTX_set_cipher_list(ssl_ctx, ssl_cipher_list)!=1) + log_error("Cipher list restriction failed for %s", ssl_cipher_list); + } + + ssl_actions_to_seed_PRNG(); + + if (Abstract_Socket::get_server_mode() && ssl_use_session_resumption) { + log_debug("Prepare server for ssl_session resumption"); + + log_debug("Context is: %s; length = %lu", ssl_server_auth_session_id_context, (unsigned long)strlen((const char*)ssl_server_auth_session_id_context)); + if (SSL_CTX_set_session_id_context(ssl_ctx, ssl_server_auth_session_id_context, strlen((const char*)ssl_server_auth_session_id_context))!=1) + log_error("Activation of SSL ssl_session resumption failed on server"); + } + + ssl_initialized=true; + + log_debug("Init SSL successfully finished"); +} + + +void SSL_Socket::ssl_log_SSL_info() +{ + char str[SSL_CHARBUF_LENGTH]; + + log_debug("Check SSL description"); + const SSL_CIPHER *ssl_cipher=SSL_get_current_cipher(ssl_current_ssl); + if (ssl_cipher!=NULL) { + SSL_CIPHER_description(SSL_get_current_cipher(ssl_current_ssl), str, SSL_CHARBUF_LENGTH); + { + log_debug("SSL description:"); + log_debug("%s", str); + } + } +} + + + +// Log the SSL error and flush the error queue +// Can be used after the followings: +// SSL_connect(), SSL_accept(), SSL_do_handshake(), +// SSL_read(), SSL_peek(), or SSL_write() +int SSL_Socket::ssl_getresult(int res) +{ + int err = SSL_get_error(ssl_current_ssl, res); + + log_debug("SSL operation result:"); + + switch(err) { + case SSL_ERROR_NONE: + log_debug("SSL_ERROR_NONE"); + break; + case SSL_ERROR_ZERO_RETURN: + log_debug("SSL_ERROR_ZERO_RETURN"); + break; + case SSL_ERROR_WANT_READ: + log_debug("SSL_ERROR_WANT_READ"); + break; + case SSL_ERROR_WANT_WRITE: + log_debug("SSL_ERROR_WANT_WRITE"); + break; + case SSL_ERROR_WANT_CONNECT: + log_debug("SSL_ERROR_WANT_CONNECT"); + break; + case SSL_ERROR_WANT_ACCEPT: + log_debug("SSL_ERROR_WANT_ACCEPT"); + break; + case SSL_ERROR_WANT_X509_LOOKUP: + log_debug("SSL_ERROR_WANT_X509_LOOKUP"); + break; + case SSL_ERROR_SYSCALL: + log_debug("SSL_ERROR_SYSCALL"); + log_debug("EOF was observed that violates the protocol, peer disconnected; treated as a normal disconnect"); + return SSL_ERROR_ZERO_RETURN; + break; + case SSL_ERROR_SSL: + log_debug("SSL_ERROR_SSL"); + break; + default: + log_error("Unknown SSL error code: %d", err); + } + // get the copy of the error string in readable format + unsigned long e=ERR_get_error(); + while (e) { + log_debug("SSL error queue content:"); + log_debug(" Library: %s", ERR_lib_error_string(e)); + log_debug(" Function: %s", ERR_func_error_string(e)); + log_debug(" Reason: %s", ERR_reason_error_string(e)); + e=ERR_get_error(); + } + //It does the same but more simple: + // ERR_print_errors_fp(stderr); + return err; +} + +int SSL_Socket::ssl_verify_certificates_at_handshake(int /*preverify_ok*/, X509_STORE_CTX */*ssl_ctx*/) { + // don't care by default + return -1; +} + +// Callback function used by OpenSSL. +// Called when a password is needed to decrypt the private key file. +// NOTE: not thread safe +int SSL_Socket::ssl_password_cb(char *buf, int num, int /*rwflag*/,void */*userdata*/) { + + if (ssl_current_client!=NULL) { + char *ssl_client_password; + ssl_client_password=((SSL_Socket *)ssl_current_client)->get_ssl_password(); + if(ssl_client_password==NULL) return 0; + const char* pass = (const char*) ssl_client_password; + int pass_len = strlen(pass) + 1; + if (num < pass_len) return 0; + + strcpy(buf, pass); + return(strlen(pass)); + } else { // go on with no password set + fprintf(stderr, "Warning: no current SSL object found but ssl_password_cb is called, programming error\n"); + return 0; + } +} + +// Callback function used by OpenSSL. +// Called during SSL handshake with a pre-verification status. +int SSL_Socket::ssl_verify_callback(int preverify_ok, X509_STORE_CTX *ssl_ctx) +{ + SSL *ssl_pointer; + SSL_CTX *ctx_pointer; + int user_result; + + ssl_pointer = (SSL *)X509_STORE_CTX_get_ex_data(ssl_ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); + ctx_pointer = SSL_get_SSL_CTX(ssl_pointer); + + if (ssl_current_client!=NULL) { + // if ssl_verifiycertificate == "no", then always accept connections + if(((SSL_Socket *)ssl_current_client)->ssl_verify_certificate) { + user_result=((SSL_Socket *)ssl_current_client)->ssl_verify_certificates_at_handshake(preverify_ok, ssl_ctx); + if (user_result>=0) return user_result; + } else { + return 1; + } + } else { // go on with default authentication + fprintf(stderr, "Warning: no current SSL object found but ssl_verify_callback is called, programming error\n"); + } + + // if ssl_verifiycertificate == "no", then always accept connections + if (SSL_CTX_get_verify_mode(ctx_pointer) == SSL_VERIFY_NONE) + return 1; + // if ssl_verifiycertificate == "yes", then accept connections only if the + // certificate is valid + else if (SSL_CTX_get_verify_mode(ctx_pointer) & SSL_VERIFY_PEER) { + return preverify_ok; + } + // something went wrong + else + return 0; +} + +#endif diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.grp b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.grp new file mode 100644 index 0000000000000000000000000000000000000000..bd7791173ba5c111b7f956b16e80fbc80ee3b80f --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.grp @@ -0,0 +1,35 @@ + + + + + + + + diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.hh b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.hh new file mode 100644 index 0000000000000000000000000000000000000000..7de8446c0bb381b290314e418868e2db3310781f --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.hh @@ -0,0 +1,414 @@ +/****************************************************************************** +* Copyright (c) 2000-2019 Ericsson Telecom AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v2.0 +* which accompanies this distribution, and is available at +* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html +* +* Contributors: +* Zoltan Bibo - initial implementation and initial documentation +* Gergely Futo +* Oliver Ferenc Czerman +* Balasko Jeno +* Zoltan Bibo +* Eduard Czimbalmos +* Kulcsr Endre +* Gabor Szalai +* Jozsef Gyurusi +* Csndes Tibor +* Zoltan Jasz +******************************************************************************/ +// +// File: Abstract_Socket.hh +// Description: Abstract_Socket header file +// Rev: R9B +// Prodnr: CNL 113 384 +// + + +#ifndef Abstract_Socket_HH +#define Abstract_Socket_HH + +#ifdef AS_USE_SSL +#include +#include +#include +#endif + +#include +#include +#include + +// to support systems not supporting IPv6 define AF_INET6 to some dummy value: +#ifndef AF_INET6 +#define AF_INET6 (-255) +#endif + +class PacketHeaderDescr { +public: + // Byte order in the header + enum HeaderByteOrder{ Header_MSB, Header_LSB }; +private: + unsigned long length_offset; + unsigned long nr_bytes_in_length; + HeaderByteOrder byte_order; + long value_offset; + unsigned long length_multiplier; +public: + PacketHeaderDescr(unsigned long p_length_offset, + unsigned long p_nr_bytes_in_length, HeaderByteOrder p_byte_order, + long p_value_offset = 0, unsigned long p_length_multiplier = 1) + : length_offset(p_length_offset), nr_bytes_in_length(p_nr_bytes_in_length), + byte_order(p_byte_order), value_offset(p_value_offset), + length_multiplier(p_length_multiplier) { } + + // returns the message length + unsigned long Get_Message_Length(const unsigned char* buffer_pointer) const; + // returns the number of bytes needed to have a valid message length + inline unsigned long Get_Valid_Header_Length() const + { return length_offset + nr_bytes_in_length; } +}; + +class Abstract_Socket +{ +protected: + enum TCP_STATES {CLOSED, LISTEN, ESTABLISHED, CLOSE_WAIT, FIN_WAIT}; + enum READING_STATES {STATE_DONT_RECEIVE, STATE_WAIT_FOR_RECEIVE_CALLBACK, STATE_BLOCK_FOR_SENDING, STATE_DONT_CLOSE, STATE_NORMAL}; + // client data + struct as_client_struct { + void *user_data; // pointer to any additional data needed by the user + TTCN_Buffer *fd_buff; // pointer to the data buffer + struct sockaddr_storage clientAddr;// client address +#if defined LINUX || defined FREEBSD || defined SOLARIS8 + socklen_t +#else /* SOLARIS or WIN32 */ + int +#endif + clientAddrlen; + TCP_STATES tcp_state; // TCP state + READING_STATES reading_state; //used when SSL_write returns SSL_ERROR_WANT_READ an we are using non-blocking socket + }; + + Abstract_Socket(); + Abstract_Socket(const char *testport_type, const char *testport_name); + virtual ~Abstract_Socket(); + + // Shall be called from set_parameter() + bool parameter_set(const char *parameter_name, const char *parameter_value); + // Shall be called from user_map() + void map_user(); + // Shall be called from user_unmap() + void unmap_user(); + + // puts the IP address in the addr + void get_host_id(const char* hostName, struct sockaddr_in *addr); /* This function should not be used! Use getaddrinfo instead! */ + + // Closes the current listening port and opens the specified one + int open_listen_port(const struct sockaddr_in & localAddr); /* This function should be removed! Deprecated by: */ + int open_listen_port(const char* localHostname, const char* localServicename); + // Closes the current listening port + void close_listen_port(); + + virtual void listen_port_opened(int port_number); + + // Opens a new client connection + int open_client_connection(const struct sockaddr_in & new_remote_addr, const struct sockaddr_in & new_local_addr); /* This function should be removed! Deprecated by: */ + int open_client_connection(const char* remoteHostname, const char* remoteService, const char* localHostname, const char* localService); + + virtual void client_connection_opened(int client_id); + + // Shall be called from Handle_Fd_Event() + void Handle_Socket_Event(int fd, boolean is_readable, boolean is_writable, boolean is_error); + // Shall be called from Handle_Timeout() - for possible future development + void Handle_Timeout_Event(double /*time_since_last_call*/) {}; + + // Shall be called from outgoing_send() + void send_outgoing(const unsigned char* message_buffer, int length, int client_id = -1); + void send_shutdown(int client_id = -1); + + // Access to private variables + bool get_nagling() const {return nagling;} + bool get_use_non_blocking_socket() const {return use_non_blocking_socket;}; + bool get_server_mode() const {return server_mode;} + bool get_socket_debugging() const {return socket_debugging;} + bool get_halt_on_connection_reset() const {return halt_on_connection_reset;} + bool get_use_connection_ASPs() const {return use_connection_ASPs;} + bool get_handle_half_close() const {return handle_half_close;} + int get_socket_fd() const; + int get_listen_fd() const {return listen_fd;} + + //set non-blocking mode + int set_non_block_mode(int fd, bool enable_nonblock); + + //increase buffer size + bool increase_send_buffer(int fd, int &old_size, int& new_size); + + const char* get_local_host_name(){return local_host_name; }; + unsigned int get_local_port_number(){return local_port_number; }; + const char* get_remote_host_name(){return remote_host_name; }; + unsigned int get_remote_port_number(){return remote_port_number; }; + const struct sockaddr_in & get_remote_addr() {return remoteAddr; }; /* FIXME: This function is deprecated and should be removed! */ + const struct sockaddr_in & get_local_addr() {return localAddr; }; /* FIXME: This function is deprecated and should be removed! */ + const int& get_ai_family() const {return ai_family;} + void set_ai_family(int parameter_value) {ai_family=parameter_value;} + bool get_ttcn_buffer_usercontrol() const {return ttcn_buffer_usercontrol; } + void set_nagling(bool parameter_value) {nagling=parameter_value;} + void set_server_mode(bool parameter_value) {server_mode=parameter_value;} + void set_handle_half_close(bool parameter_value) {handle_half_close=parameter_value;} + void set_socket_debugging(bool parameter_value) {socket_debugging=parameter_value;} + void set_halt_on_connection_reset(bool parameter_value) {halt_on_connection_reset=parameter_value;} + void set_ttcn_buffer_usercontrol(bool parameter_value) {ttcn_buffer_usercontrol=parameter_value;} + const char *test_port_type; + const char *test_port_name; + + // Called when a message is received + virtual void message_incoming(const unsigned char* message_buffer, int length, int client_id = -1) = 0; + + virtual void Add_Fd_Read_Handler(int fd) = 0; + virtual void Add_Fd_Write_Handler(int fd) = 0; + virtual void Remove_Fd_Read_Handler(int fd) = 0; + virtual void Remove_Fd_Write_Handler(int fd) = 0; + virtual void Remove_Fd_All_Handlers(int fd) = 0; + virtual void Handler_Uninstall() = 0; + virtual void Timer_Set_Handler(double call_interval, boolean is_timeout = TRUE, + boolean call_anyway = TRUE, boolean is_periodic = TRUE) = 0; // unused - for possible future development + virtual const PacketHeaderDescr* Get_Header_Descriptor() const; + + // Logging functions + void log_debug(const char *fmt, ...) const + __attribute__ ((__format__ (__printf__, 2, 3))); + void log_warning(const char *fmt, ...) const + __attribute__ ((__format__ (__printf__, 2, 3))); + void log_error(const char *fmt, ...) const + __attribute__ ((__format__ (__printf__, 2, 3), __noreturn__)); + void log_hex(const char *prompt, const unsigned char *msg, size_t length) const; + + // Called when a message is to be received (an event detected) + virtual int receive_message_on_fd(int client_id); + // Called when a message is to be sent + virtual int send_message_on_fd(int client_id, const unsigned char* message_buffer, int message_length); + virtual int send_message_on_nonblocking_fd(int client_id, const unsigned char *message_buffer, int message_length); + // Called after a peer is connected + virtual void peer_connected(int client_id, sockaddr_in& remote_addr); /* This function should be removed! deprecated by: */ + virtual void peer_connected(int /*client_id*/, const char * /*host*/, const int /*port*/) {}; + // Called after a peer is disconnected + virtual void peer_disconnected(int client_id); + // Called when a peer shut down its fd for writing + virtual void peer_half_closed(int client_id); + // Called after a send error + virtual void report_error(int client_id, int msg_length, int sent_length, const unsigned char* msg, const char* error_text); + // Called after a unsent message + virtual void report_unsent(int client_id, int msg_length, int sent_length, const unsigned char* msg, const char* error_text); + + // Test port parameters + virtual const char* local_port_name(); + virtual const char* remote_address_name(); + virtual const char* local_address_name(); + virtual const char* remote_port_name(); + virtual const char* ai_family_name(); + virtual const char* use_connection_ASPs_name(); + virtual const char* halt_on_connection_reset_name(); + virtual const char* client_TCP_reconnect_name(); + virtual const char* TCP_reconnect_attempts_name(); + virtual const char* TCP_reconnect_delay_name(); + virtual const char* server_mode_name(); + virtual const char* socket_debugging_name(); + virtual const char* nagling_name(); + virtual const char* use_non_blocking_socket_name(); + virtual const char* server_backlog_name(); + + // Fetch/Set user data pointer + void* get_user_data(int client_id) {return get_peer(client_id)->user_data;} + void set_user_data(int client_id, void *uptr) {get_peer(client_id)->user_data = uptr;} + // Called after a TCP connection is established + virtual bool add_user_data(int client_id); + // Called before the TCP connection is drop down + virtual bool remove_user_data(int client_id); + // Called when a client shall be removed + virtual void remove_client(int client_id); + // Called when all clients shall be removed + virtual void remove_all_clients(); + // Called at the beginning of map() to check mandatory parameter presence + virtual bool user_all_mandatory_configparameters_present(); + TTCN_Buffer *get_buffer(int client_id) {return get_peer(client_id)->fd_buff; } + + // Client data management functions + // add peer to the list + as_client_struct *peer_list_add_peer(int client_id); + // remove peer from list + void peer_list_remove_peer(int client_id); + // remove all peers from list + void peer_list_reset_peer(); + // returns back the structure of the peer + as_client_struct *get_peer(int client_id, bool no_error=false) const; + // length of the list + int peer_list_get_length() const { return peer_list_length; } + // number of peers in the list + int peer_list_get_nr_of_peers() const; + // fd of the last peer in the list + int peer_list_get_last_peer() const; + // fd of the first peer in the list + int peer_list_get_first_peer() const; + + +private: + void handle_message(int client_id = -1); + void all_mandatory_configparameters_present(); + bool halt_on_connection_reset_set; + bool halt_on_connection_reset; + bool client_TCP_reconnect; + int TCP_reconnect_attempts; + int TCP_reconnect_delay; + bool server_mode; + bool use_connection_ASPs; + bool handle_half_close; + bool socket_debugging; + bool nagling; + bool use_non_blocking_socket; + bool ttcn_buffer_usercontrol; + char* local_host_name; + unsigned int local_port_number; + char* remote_host_name; + unsigned int remote_port_number; + int ai_family; // address family to use + // remoteAddr and localAddr is filled when map_user is called + struct sockaddr_in remoteAddr; /* FIXME: not used! should be removed */ + struct sockaddr_in localAddr; /* FIXME: not used! should be removed */ + int server_backlog; + int deadlock_counter; + int listen_fd; + int peer_list_length; + + // Client data management functions + as_client_struct **peer_list_root; + void peer_list_resize_list(int client_id); +}; + + + +#ifdef AS_USE_SSL + +class SSL_Socket: public Abstract_Socket +{ + +protected: + SSL_Socket(); + SSL_Socket(const char *tp_type, const char *tp_name); + virtual ~SSL_Socket(); + + bool parameter_set(const char * parameter_name, const char * parameter_value); + // Called after a TCP connection is established (client side or server accepted a connection). + // It will create a new SSL conenction on the top of the TCP connection. + virtual bool add_user_data(int client_id); + // Called after a TCP connection is closed. + // It will delete the SSL conenction. + virtual bool remove_user_data(int client_id); + // Called from all_mandatory_configparameters_present() function + // during map() operation to check mandatory parameter presents. + virtual bool user_all_mandatory_configparameters_present(); + // Called after an SSL connection is established (handshake finished) for further + // authentication. Shall return 'true' if verification + // is OK, otherwise 'false'. If return value was 'true', the connection is kept, otherwise + // the connection will be shutted down. + virtual bool ssl_verify_certificates(); + // Call during SSL handshake (and rehandshake as well) by OpenSSL + // Return values: + // ==1: user authentication is passed, go on with handshake + // ==0: user authentication failed, refuse the connection to the other peer + // <0 : user don't care, go on with default basic checks + virtual int ssl_verify_certificates_at_handshake(int preverify_ok, X509_STORE_CTX *ssl_ctx); + // Called to receive from the socket if data is available (select()). + // Shall return with 0 if the peer is disconnected or with the number of bytes read. + // If error occured, execution shall stop in the function by calling log_error() + virtual int receive_message_on_fd(int client_id); + // Called to send a message on the socket. + // Shall return with 0 if the peer is disconnected or with the number of bytes written. + // If error occured, execution shall stop in the function by calling log_error() + virtual int send_message_on_fd(int client_id, const unsigned char * message_buffer, int length_of_message); + virtual int send_message_on_nonblocking_fd(int client_id, const unsigned char * message_buffer, int length_of_message); + + // The following members can be called to fetch the current values + bool get_ssl_use_ssl() const {return ssl_use_ssl;} + bool get_ssl_verifycertificate() const {return ssl_verify_certificate;} + bool get_ssl_use_session_resumption() const {return ssl_use_session_resumption;} + bool get_ssl_initialized() const {return ssl_initialized;} + char * get_ssl_key_file() const {return ssl_key_file;} + char * get_ssl_certificate_file() const {return ssl_certificate_file;} + char * get_ssl_trustedCAlist_file() const {return ssl_trustedCAlist_file;} + char * get_ssl_cipher_list() const {return ssl_cipher_list;} + char * get_ssl_password() const; + const unsigned char * get_ssl_server_auth_session_id_context() const {return ssl_server_auth_session_id_context;} +// const SSL_METHOD * get_current_ssl_method() const {return ssl_method;} +// const SSL_CIPHER * get_current_ssl_cipher() const {return ssl_cipher;} + SSL_SESSION* get_current_ssl_session() const {return ssl_session;} + SSL_CTX * get_current_ssl_ctx() const {return ssl_ctx;} + SSL * get_current_ssl() const {return ssl_current_ssl;} + + // The following members can be called to set the current values + // NOTE that in case the parameter_value is a char *pointer, the old character + // array is deleted by these functions automatically. + void set_ssl_use_ssl(bool parameter_value); + void set_ssl_verifycertificate(bool parameter_value); + void set_ssl_use_session_resumption(bool parameter_value); + void set_ssl_key_file(char * parameter_value); + void set_ssl_certificate_file(char * parameter_value); + void set_ssl_trustedCAlist_file(char * parameter_value); + void set_ssl_cipher_list(char * parameter_value); + void set_ssl_server_auth_session_id_context(const unsigned char * parameter_value); + + // The following members can be called to fetch the default test port parameter names + virtual const char* ssl_use_ssl_name(); + virtual const char* ssl_use_session_resumption_name(); + virtual const char* ssl_private_key_file_name(); + virtual const char* ssl_trustedCAlist_file_name(); + virtual const char* ssl_certificate_file_name(); + virtual const char* ssl_password_name(); + virtual const char* ssl_cipher_list_name(); + virtual const char* ssl_verifycertificate_name(); + virtual const char* ssl_disable_SSLv2(); + virtual const char* ssl_disable_SSLv3(); + virtual const char* ssl_disable_TLSv1(); + virtual const char* ssl_disable_TLSv1_1(); + virtual const char* ssl_disable_TLSv1_2(); + +private: + bool ssl_verify_certificate; // verify other part's certificate or not + bool ssl_use_ssl; // whether to use SSL + bool ssl_initialized; // whether SSL already initialized or not + bool ssl_use_session_resumption; // use SSL sessions or not + + bool SSLv2; + bool SSLv3; + bool TLSv1; + bool TLSv1_1; + bool TLSv1_2; + + + char *ssl_key_file; // private key file + char *ssl_certificate_file; // own certificate file + char *ssl_trustedCAlist_file; // trusted CA list file + char *ssl_cipher_list; // ssl_cipher list restriction to apply + char *ssl_password; // password to decode the private key + static const unsigned char * ssl_server_auth_session_id_context; + +// const SSL_METHOD *ssl_method; // SSL context method + SSL_CTX *ssl_ctx; // SSL context +// const SSL_CIPHER *ssl_cipher; // used SSL ssl_cipher + SSL_SESSION *ssl_session; // SSL ssl_session + SSL *ssl_current_ssl; // currently used SSL object + static void *ssl_current_client; // current SSL object, used only during authentication + + void ssl_actions_to_seed_PRNG(); // Seed the PRNG with enough random data + void ssl_init_SSL(); // Initialize SSL libraries and create the SSL context + void ssl_log_SSL_info(); // Log the currently used SSL setting (debug) + int ssl_getresult(int result_code); // Fetch and log the SSL error code from I/O operation result codes + // Callback function to pass the password to OpenSSL. Called by OpenSSL + // during SSL handshake. + static int ssl_password_cb(char * password_buffer, int length_of_password, int rw_flag, void * user_data); + // Callback function to perform authentication during SSL handshake. Called by OpenSSL. + // NOTE: for further authentication, use ssl_verify_certificates(). + static int ssl_verify_callback(int preverify_status, X509_STORE_CTX * ssl_context); +}; +#endif + +#endif diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module.mk b/ttcn/modules/titan.TestPorts.HTTPmsg/module.mk new file mode 100755 index 0000000000000000000000000000000000000000..f8df57abc8b77d674486cea82c53e0f4615625f0 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module.mk @@ -0,0 +1,9 @@ +sources := module/src/HTTPmsg_MessageLen.ttcn \ + module/src/HTTPmsg_MessageLen_Function.cc \ + module/src/HTTPmsg_PortType.ttcn \ + module/src/HTTPmsg_PT.cc \ + module/src/HTTPmsg_PT.hh \ + module/src/HTTPmsg_Types.ttcn +includes := module/src + +modules := ../titan.TestPorts.Common_Components.Abstract_Socket diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/HTTPmsg_CNL113312.tpd b/ttcn/modules/titan.TestPorts.HTTPmsg/module/HTTPmsg_CNL113312.tpd new file mode 100644 index 0000000000000000000000000000000000000000..032494ea30e4adc62be9c9ca3ad6484757637a1c --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/HTTPmsg_CNL113312.tpd @@ -0,0 +1,50 @@ + + + + HTTPmsg_CNL113312 + + + + + + + + + + + + + + + Default + + + + + true + true + true + bin/HTTPmsg_CNL113312 + Level 3 - Creating object files with dependency update + + + bin + + + + + diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/LICENSE b/ttcn/modules/titan.TestPorts.HTTPmsg/module/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..3534f2ff9d512c471aab17543d08c32a1110b32d --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. \ No newline at end of file diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/README.md b/ttcn/modules/titan.TestPorts.HTTPmsg/module/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ecff83ef8a40bc392ea037cf63f28447b50476e1 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/README.md @@ -0,0 +1,9 @@ +# titan.TestPorts.HTTPmsg + +Main project page: + +https://projects.eclipse.org/projects/tools.titan + +The source code of the TTCN-3 compiler and executor: + +https://github.com/eclipse/titan.core diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/HTTP_Test.cfg b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/HTTP_Test.cfg new file mode 100644 index 0000000000000000000000000000000000000000..0ae719448171cd80bb150e3955ebf460d8c089bf --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/HTTP_Test.cfg @@ -0,0 +1,34 @@ +[LOGGING] +FileMask := LOG_ALL | TTCN_MATCHING | TTCN_DEBUG +ConsoleMask := TTCN_PORTEVENT | TTCN_DEBUG +SourceInfoFormat := Single + +[MODULE_PARAMETERS] +HTTP_Test_no_ASPs.HttpServerHostName := "localhost" +HTTP_Test_no_ASPs.HttpServerPort := 1025 +HTTP_Test_no_ASPs.HTTPClientUseSSL := false +HTTP_Test_no_ASPs.HttpServerListenPort := 1025 +HTTP_Test_no_ASPs.HttpServerUseSSL := false + +[TESTPORT_PARAMETERS] +#system.HTTP_client_port.VERIFYCERTIFICATE := "no" +#system.HTTP_client_port.TRUSTEDCALIST_FILE := "certificates/CAcert.pem" +system.HTTP_client_port.http_debugging := "yes" +system.HTTP_client_port.use_notification_ASPs := "no" +system.HTTP_server_port.use_notification_ASPs := "no" +system.HTTP_server_port.KEYFILE := "/mnt/unix/vobs/ttcn/TCC_Common/TestPorts/HTTPmsg_CNL113312/demo/server.key" +system.HTTP_server_port.CERTIFICATEFILE := "/mnt/unix/vobs/ttcn/TCC_Common/TestPorts/HTTPmsg_CNL113312/demo/server.crt" +system.HTTP_server_port.PASSWORD := "katinka1" +system.HTTP_server_port.TRUSTEDCALIST_FILE := "certificates/CAcert.pem" +system.HTTP_server_port.http_debugging := "yes" + +[MAIN_CONTROLLER] +KillTimer := 1 +TCPPort := 9036 + +[EXECUTE] +#HTTP_Test_no_ASPs.parallel_TC_client +#HTTP_Test_no_ASPs.stress_TC_Persistent_both +#HTTP_Test_no_ASPs.tc_http_encDec +HTTP_Test_no_ASPs.tc_http_encDec2 +//saved by GUI diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/HTTP_Test_no_ASPs.ttcn b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/HTTP_Test_no_ASPs.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..3d69543f9bc991777c5fae144ea98844022e8319 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/HTTP_Test_no_ASPs.ttcn @@ -0,0 +1,409 @@ +// +// File: HTTP_Test_no_ASPs +// Description: To demonstrate how to use the test port +// Rev: R8C +// Prodnr: CNL 113 469 +// Updated: 2007-11-09 +// Contact: http://ttcn.ericsson.se +// Author: ETH/RZX Eduard Czimbalmos +module HTTP_Test_no_ASPs { + +modulepar { + charstring HttpServerHostName := "www.eth.ericsson.se"; + integer HttpServerPort := 80; + boolean HTTPClientUseSSL := false; + integer HttpServerListenPort := 1026; + boolean HttpServerUseSSL := false +} + +import from HTTPmsg_Types all; +import from HTTPmsg_PortType all; + +type component MTC {}; + +type component HTTP_client { + port HTTPmsg_PT HTTP_client_port; +}; + +type component HTTP_server { + port HTTPmsg_PT HTTP_server_port; +}; + +//========================================================================= +// Data Types +//========================================================================= + +type record of charstring CHARSTRINGS; +type record of octetstring OCTETSTRINGS; + +type record of HTTP_client ptcList; + + +template Half_close h := { client_id := ? }; +template HTTPMessage recv_resp := { response := ? }; +template HTTPMessage recv_req := { request := ? }; +template HTTPMessage recv_err := { erronous_msg := ? }; + +function TC() runs on HTTP_client +{ +/* var HeaderLines hd := { {header_name := "Host", header_value := HttpServerHostName}, + {header_name := "Connection", header_value := "close" } }; + var HTTPRequest r := { method := "GET", uri := "/x1.xml", + version_major := 1, version_minor := 1, header := hd, body := omit };*/ + var HeaderLines hd := { {header_name := "Content-Type", header_value := "text/xml"}, + {header_name := "Content-Length", header_value := "508" }, + {header_name := "Expires", header_value := "Sat, 01 Jan 2000 00:00:00 GMT" }, + {header_name := "Pragma", header_value := "no-cache" } }; + var HTTPRequest r := { client_id := omit, method := "POS T", uri := "/", + version_major := 1, version_minor := 0, header := hd, body := "clientPushclientPush+0100N100410E0202020N101610E0202620N101610E0201420" }; + var HTTPMessage send_req := { request := r }; + var Connect conn := { hostname := HttpServerHostName, + portnumber := HttpServerPort, use_ssl := HTTPClientUseSSL }; + var Close c := { client_id := omit }; + + map(self:HTTP_client_port, system:HTTP_client_port); + + var boolean conn_ok := false; + while(conn_ok == false) + { + timer t_connect := 2.0; + t_connect.start; + HTTP_client_port.send(conn); + alt { + [] HTTP_client_port.receive(recv_err) { + timer t_wait := 2.0; + t_wait.start; + t_wait.timeout; } + [] t_connect.timeout { + conn_ok := true; + log("connection to server ok"); } + } + } // endwhile + + timer T_guard := 5.0; + T_guard.start; + HTTP_client_port.send(send_req); + + alt { + [] HTTP_client_port.receive(h) { + HTTP_client_port.send(c); + setverdict(fail); } + [] HTTP_client_port.receive(recv_resp) { + timer t := 10.0; + t.start; + alt { + [] HTTP_client_port.receive(h) { + HTTP_client_port.send(c); + t.stop; + setverdict(pass); } + [] t.timeout { + HTTP_client_port.send(c); + t.stop; + setverdict(fail); } + }; + } + [] HTTP_client_port.receive { + HTTP_client_port.send(c); + setverdict(fail); + } + [] T_guard.timeout { + setverdict(fail); } + }; + + unmap(self:HTTP_client_port, system:HTTP_client_port); +} + +function server_TC() runs on HTTP_server +{ + var Listen listen := { local_hostname := omit, portnumber := HttpServerListenPort, use_ssl := HttpServerUseSSL }; + var HTTPResponse resp := { client_id := omit, version_major := 1, version_minor := 1, statuscode := 200, statustext := "OK", + header := { { header_name := "Server", header_value := "TTCN Test Suite simulated HTTP/1.1 server" }, + { header_name := "Content-Length", header_value := "643" } }, + body := "\n\n\n\n+0100\n\n\n\n\n\nN301628\nW974425\n\n1100\n1650\n120\n240\n\n\n\n\n\n\n\n\nN301630\nW974450\n\n0\n1650\n 120 \n240\n\n\n\n\n\n\n" }; + var HTTPMessage send_resp := { response := resp }; + var Close c := { client_id := omit }; + + map(self:HTTP_server_port, system:HTTP_server_port); + + HTTP_server_port.send(listen); + + timer T_guard := 500.0; + T_guard.start; + var boolean ready := false; + + while(ready == false) { + alt { + [] HTTP_server_port.receive(recv_req) { + HTTP_server_port.send(send_resp); + } + [] HTTP_server_port.receive(h) { + HTTP_server_port.send(c); + ready := true; + setverdict(pass); + } + [] T_guard.timeout { + setverdict(fail); + } + }; + } + + unmap(self:HTTP_server_port, system:HTTP_server_port); +} + +//==== Encode decode test ==== + +function f_singleEncDecCheck( in HTTPMessage p_msg) +{ + var template HTTPMessage tr_expectedMsg := p_msg; + if(ischosen( p_msg.request ) ){ + tr_expectedMsg.request.client_id := *; + } + else if(ischosen( p_msg.response )){ + tr_expectedMsg.response.client_id := *; + } + + var octetstring vloc_encodedMsg; + log("Original message:",p_msg); + log("\n======================\n"); + vloc_encodedMsg := enc_HTTPMessage(p_msg); + log("Encoded message:",vloc_encodedMsg); + + //==== Request decoding ==== + var HTTPMessage vloc_decodedMsg; + var integer vl_lengthOfRemainingMsg := dec_HTTPMessage( vloc_encodedMsg, vloc_decodedMsg ); //socket debugging has default value + log("length of the encoded msg: ", lengthof(vloc_encodedMsg)); + log("length of the remaining msg after encoding:", vl_lengthOfRemainingMsg); + if( vl_lengthOfRemainingMsgclientPushclientPush+0100N100410E0202020N101610E0202620N101610E0201420xy" }; //xy will be fragmented????? + + var HTTPMessage send_req := { request := r }; + f_singleEncDecCheck( send_req ); + + //==== Response Test ==== + var HTTPResponse resp := { client_id := omit, version_major := 1, version_minor := 1, statuscode := 200, statustext := "OK", + header := { { header_name := "Server", header_value := "TTCN Test Suite simulated HTTP/1.1 server" }, + { header_name := "Content-Length", header_value := "643" } }, + body := "\n\n\n\n+0100\n\n\n\n\n\nN301628\nW974425\n\n1100\n1650\n120\n240\n\n\n\n\n\n\n\n\nN301630\nW974450\n\n0\n1650\n 120 \n240\n\n\n\n\n\n\n" }; + var HTTPMessage send_resp := { response := resp }; + + f_singleEncDecCheck( send_resp ); + + +}//f_EncDec + + +function f_EncDec2() runs on MTC { + + var CHARSTRINGS test_msgs := { + "HTTP/1.1 302 Moved Temporarily\r\nDate: Wed, 22 Feb 2006 13:37:49 GMT\r\nPragma: no-cache\r\nLocation: http://caylem.etm.ericsson.se:7001/McxOwu/list_useractions.jsp?reload\r\nContent-Type: text/html\r\nExpires: Sat, 6 May 1995 12:00:00 GMT\r\nTransfer-Encoding: chunked\r\nCache-Control: no-store, no-cache, must-revalidate\r\nCache-Control: post-check=0, pre-check=0\r\n\r\n014d\r\n302 Moved Temporarily\r\n\r\n

This document you requested has moved temporarily.

\r\n

It's now at http://caylem.etm.ericsson.se:7001/McxOwu/list_useractions.jsp?reload.

\r\n\r\n\r\n0000\r\n\r\n", + "HTTP/1.1 200 OK\r\nDate: Wed, 22 Feb 2006 13:37:49 GMT\r\nContent-Type: text/html\r\nTransfer-Encoding: chunked\r\n\r\n0fe8\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nPresence\r\n\r\n\r\n\r\n\r\n\r\n0fe8\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n\r\n
\r\n\r\n\r\n
\r\n \r\n Sambal Bij (1100)\r\n\r\n \r\n \r\n \r\n Reset user settings\r\n \r\n \r\n \r\n Log out\r\n \r\n

\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Presence\r\n \r\n\r\n Left for the day\r\n\r\n\r\n

\r\n \r\n\r\n" & + "
Predefined options\r\n \r\n\r\n
\r\n \r\n Change to Available\r\n \r\n
\r\n\r\n
\r\n \r\n Change to Busy\r\n \r\n
\r\n\r\n
\r\n \r\n Change to Meeting\r\n \r\n
\r\n\r\n
\r\n \r\n Change to Lunch\r\n \r\n
\r\n\r\n
\r\n \r\n Change to Left for the day\r\n \r\n
\r\n\r\n


\r\n \r\n
More options...\r\n \r\n \r\n   \r\n Change now\r\n \r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n\r\n
Back \r\n (MM/dd/yyyy)\r\n \r\n (HH:mm)\r\n \r\n
Message\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n\r\n
\r\n \r\n \r\n \r\n \r\n
Deflect call\r\n \r\n \r\n

\r\n
  Main number\r\n
  Voicemail\r\n
  Phone\r\n \r\n \r\n
\r\n\r\n\r\n
\r\n\r\n\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n
Activate/deactivate
Call distribution groups\r\n
\r\n

\r\n
Not member of any call distribution group\n\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n0000\r\n\r\n" + }; + + var HTTPResponse resp := { client_id := omit, version_major := 1, version_minor := 1, statuscode := 200, statustext := "OK", + header := { { header_name := "Server", header_value := "TTCN Test Suite simulated HTTP/1.1 server" }, + { header_name := "Content-Length", header_value := int2str(lengthof(test_msgs[0])+ lengthof(test_msgs[1])) } }, + body := test_msgs[0] & test_msgs[1] }; + var HTTPMessage send_resp := { response := resp }; + + f_singleEncDecCheck( send_resp ); + + var octetstring received_reply := '485454502F312E3120333032204D6F7665642054656D706F726172696C790D0A446174653A205765642C2032322046656220323030362031333A33373A343920474D540D0A507261676D613A206E6F2D63616368650D0A4C6F636174696F6E3A20687474703A2F2F6361796C656D2E65746D2E6572696373736F6E2E73653A373030312F4D63784F77752F6C6973745F75736572616374696F6E732E6A73703F72656C6F61640D0A436F6E74656E742D547970653A20746578742F68746D6C0D0A457870697265733A205361742C2036204D617920313939352031323A30303A303020474D540D0A5472616E736665722D456E636F64696E673A206368756E6B65640D0A43616368652D436F6E74726F6C3A206E6F2D73746F72652C206E6F2D63616368652C206D7573742D726576616C69646174650D0A43616368652D436F6E74726F6C3A20706F73742D636865636B3D302C207072652D636865636B3D300D0A0D0A3C68746D6C3E3C686561643E3C7469746C653E333032204D6F7665642054656D706F726172696C793C2F7469746C653E3C2F686561643E0D0A3C626F6479206267636F6C6F723D2223464646464646223E0D0A3C703E5468697320646F63756D656E7420796F752072657175657374656420686173206D6F7665642074656D706F726172696C792E3C2F703E0D0A3C703E49742773206E6F77206174203C6120687265663D22687474703A2F2F6361796C656D2E65746D2E6572696373736F6E2E73653A373030312F4D63784F77752F6C6973745F75736572616374696F6E732E6A73703F72656C6F6164223E687474703A2F2F6361796C656D2E65746D2E6572696373736F6E2E73653A373030312F4D63784F77752F6C6973745F75736572616374696F6E732E6A73703F72656C6F61643C2F613E2E3C2F703E0D0A3C2F626F64793E3C2F68746D6C3E0D0A485454502F312E3120323030204F4B0D0A446174653A205765642C2032322046656220323030362031333A33373A343920474D540D0A436F6E74656E742D547970653A20746578742F68746D6C0D0A5472616E736665722D456E636F64696E673A206368756E6B65640D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A3C21444F43545950452048544D4C205055424C494320222D2F2F5733432F2F4454442048544D4C20342E3031205472616E736974696F6E616C2F2F454E223E0D0A0D0A3C68746D6C3E0D0A3C686561643E0D0A3C7469746C653E50726573656E63653C2F7469746C653E0D0A0D0A3C7363726970743E0D0A766172206672616D6573657432203D206E756C6C3B0D0A766172206672616D6573657431203D206E756C6C3B0D0A0D0A7661722077696E57203D203633302C2077696E48203D203436303B0D0A0D0A66756E6374696F6E2067657457696E53697A652829207B0D0A09696620287061727365496E74286E6176696761746F722E61707056657273696F6E293E3329207B0D0A0920696620286E6176696761746F722E6170704E616D653D3D224E657473636170652229207B0D0A09202077696E57203D2077696E646F772E696E6E657257696474683B0D0A09202077696E48203D2077696E646F772E696E6E65724865696768743B0D0A09207D0D0A0920696620286E6176696761746F722E6170704E616D652E696E6465784F6628224D6963726F736F66742229213D2D3129207B0D0A09202077696E57203D20646F63756D656E742E626F64792E6F666673657457696474683B0D0A09202077696E48203D20646F63756D656E742E626F64792E6F66667365744865696768743B0D0A09207D0D0A097D0D0A092F2F616C657274282277696E573D22202B2077696E57202B20222077696E483D22202B2077696E48293B0D0A7D0D0A7661722063757272526F77203D206E756C6C3B0D0A66756E6374696F6E2074725F6D6F7573656F76657228726F7729207B0D0A096966202821726F7729207B0D0A0909726F77203D20676574726F772877696E646F772E6576656E742E737263456C656D656E74293B0D0A09096966202821726F772972657475726E3B0D0A097D0D0A0969662028726F772E7374796C652E6261636B67726F756E64436F6C6F72203D3D20222229207B0D0A0909726F772E7374796C652E6261636B67726F756E64436F6C6F72203D20226C6967687467726579223B0D0A097D0D0A7D0D0A0D0A66756E6374696F6E2074725F6D6F7573656F757428726F7729207B0D0A096966202821726F7729207B0D0A0909726F77203D20676574726F772877696E646F772E6576656E742E737263456C656D656E74293B0D0A09096966202821726F772972657475726E3B0D0A097D0D0A0969662028726F772E7374796C652E6261636B67726F756E64436F6C6F72203D3D20226C69676874677265792229207B0D0A0909726F772E7374796C652E6261636B67726F756E64436F6C6F723D2022223B0D0A097D0D0A7D0D0A0D0A66756E6374696F6E20676574726F77286F626A290D0A7B0D0A097768696C65286F626A202626206F626A2E7461674E616D6520213D202254522229206F626A203D206F626A2E706172656E744E6F64653B0D0A0972657475726E206F626A3B0D0A7D0D0A2F2F2052656D6F7665206C656164696E6720616E6420747261696C696E672077686974652073706163650D0A66756E6374696F6E207472696D2874787429207B090D0A092F2F616C65727428227472696D3D22202B20747874293B0D0A090D0A09747279207B0D0A090972657475726E207478742E7265706C616365282F285E202B297C28202B24297C2809292F672C2222293B0D0A097D20636174636820286529207B0D0A09097661722078203D206E657720537472696E6728747874293B0D0A0909092F2F616C6572742822783D22202B2078293B0D0A09097768696C652028782E636861724174283029203D3D2022202229207B0D0A09090978203D20782E737562737472696E672831293B0D0A09090969662028782E6C656E677468203D3D2030292072657475726E2022223B0D0A0909092F2F616C6572742822783D22202B2078293B0D0A09097D0D0A090969662028782E6C656E677468203D3D2030292072657475726E2022223B0D0A09097768696C652028782E63686172417428782E6C656E677468202D203129203D3D2022202229207B0D0A09090978203D20782E737562737472696E6728302C20782E6C656E6774682D31293B0D0A09090969662028782E6C656E677468203D3D2030292072657475726E2022223B0D0A09097D0D0A090D0A090972657475726E20783B090D0A09090D0A090D0A097D0D0A0D0A7D0D0A0D0A66756E6374696F6E206E6F74796574696D706C656D656E74656428290D0A7B0D0A09616C65727428226E6F742079657420696D706C656D656E74656422293B0D0A7D0D0A0D0A66756E6374696F6E206C6F676F757428290D0A7B0D0A09746F702E6672616D65735B225F6F77755F68696464656E225D2E6C6F636174696F6E2E61737369676E282268696464656E5F6C6F676F75742E6A737022293B0D0A2F2F0977696E646F772E706172656E742E6672616D65735B225F6F77755F68696464656E225D2E6C6F636174696F6E2E61737369676E282268696464656E5F6C6F676F75742E6A737022293B0D0A7D0D0A66756E6374696F6E20646F7265667265736828290D0A7B0D0A09747279207B0D0A0909746F702E6672616D65735B225F6F77755F73696465626172225D2E6C6F636174696F6E203D202250726570617265536964656261723F6E6F73656C656374223B0D0A097D20636174636820286529207B0D0A0909616C65727428226661696C656420746F2072656C6F6164206672616D657322202B20652E746F537472696E672829293B0D0A097D0D0A7D0D0A0D0A66756E6374696F6E204E756D6265724368616E676564286F626A29207B0D0A0D0A097661722076616C203D206F626A2E76616C75653B0D0A09766172206C656164696E67706C7573203D2066616C73653B0D0A096966202876616C2E736561726368282F5E5C2B2F29203D3D203029207B0D0A09096C656164696E67706C7573203D20747275653B0D0A090976616C20203D2076616C2E737562737472696E672831293B0D0A097D0D0A096966202876616C2E736561726368282F5B5E302D395D2F29203E3D203029207B200D0A09092F2F616C6572742822476976652061206E756D62657222293B0D0A090976616C203D2076616C2E7265706C616365282F5B5E302D395D2F672C202222293B0D0A0909696620286C656164696E67706C757329207B0D0A0909096F626A2E76616C7565203D20222B22202B2076616C3B0D0A09097D20656C7365207B0D0A0909096F626A2E76616C7565203D2076616C3B0D0A09097D0D0A097D0D0A090D0A7D0D0A0D0A766172206D6F64616C4F626A2C206D6F64616C46756E632C206D6F64616C57696E3B0D0A66756E6374696F6E2073686F774D6F64616C286F626A2C2066756E632C2066696C656E616D652C20617267732C20617267733129207B0D0A097661722072657476616C203D2022223B0D0A2F2F096966202877696E646F772E73686F774D6F64616C4469616C6F6729207B0D0A2F2F090972657476616C203D2077696E646F772E73686F774D6F64616C4469616C6F672866696C656E616D652C20617267732C206172677331293B0D0A2F2F097D20656C7365207B0D0A09096D6F64616C4F626A203D206F626A3B0D0A09096D6F64616C46756E63203D2066756E633B0D0A0909646F63756D656E742E676574456C656D656E744279496428226D6F64616C41726722292E76616C7565203D20617267733B0D0A09096172677331203D2061726773312E7265706C616365282F3B2F672C20222C22293B0D0A09096172677331203D2061726773312E7265706C616365282F3A2F672C20223D22293B0D0A09096172677331203D2061726773312E7265706C616365282F6469616C6F6757696474682F672C2022776964746822293B0D0A09096172677331203D2061726773312E7265706C616365282F6469616C6F674865696768742F672C202268656967687422293B0D0A09096172677331203D2061726773312E7265706C616365282F6469616C6F67546F702F672C2022746F7022293B0D0A09096172677331203D2061726773312E7265706C616365282F6469616C'O & + '6F674C6566742F672C20226C65667422293B0D0A09096172677331203D2061726773312E7265706C616365282F7363726F6C6C2F672C20227363726F6C6C6261727322293B0D0A09090D0A09092F2F616C65727428226D6F64616C3A22202B20617267733120293B0D0A09092F2F616C657274282277696E646F772E6C6566743D22202B2077696E646F772E73637265656E2E6C656674202B20222077696E646F772E746F703D22202B2077696E646F772E73637265656E2E746F700D0A09092F2F092B20225C77696E646F772E7363726565583D22202B2077696E646F772E73637265656E58202B20222077696E646F772E73637265656E593D22202B2077696E646F772E73637265656E59293B0D0A0D0A09092F2F616C657274282273686F776D6F64616C3A22202B206172677331293B0D0A09202020092F2F6D6F64616C57696E203D2077696E646F772E6F70656E2866696C656E616D652C202220222C20617267733120293B0D0A09202020092F2F66696C656E616D65203D2022696E646578706F7075702E6A73703F22202B2066696C656E616D653B0D0A09096D6F64616C57696E203D2077696E646F772E6F70656E2866696C656E616D652C20225F6F77755F706F707570222C206172677331293B0D0A09096D6F64616C57696E2E666F63757328293B0D0A09090D0A2F2F097D0D0A0972657475726E2072657476616C3B0D0A7D0D0A0D0A66756E6374696F6E206D6F64616C446F6E652829207B0D0A09696620286D6F64616C4F626A202626206D6F64616C46756E6329207B0D0A09096D6F64616C46756E63286D6F64616C4F626A2C2020646F63756D656E742E676574456C656D656E744279496428226D6F64616C52657476616C22292E76616C7565293B0D0A097D0D0A7D0D0A0D0A66756E6374696F6E20676F4261636B2829207B0D0A096966202877696E646F772E6E616D65203D3D20225F6F77755F6C6973742229207B0D0A090977696E646F772E6C6F636174696F6E2E61737369676E28226C6973745F636174616C6F672E6A73703F636174616C6F673D636174616C6F67756522293B0D0A097D20656C7365207B0D0A090977696E646F772E686973746F72792E676F282D31293B0D0A097D0D0A7D0D0A66756E6374696F6E207363726F6C6C3256696577286F626A290D0A7B0D0A202020747279207B0D0A2020202076617220706172656E74203D206F626A2E706172656E744E6F64653B0D0A202020207768696C652028706172656E7420262620706172656E742E7461674E616D6520213D20282244495622292920706172656E74203D20706172656E742E706172656E744E6F64653B0D0A2020200D0A202020202F2F616C65727428227363726F6C6C32766965773D22202B20706172656E742E6964293B0D0A2020202076617220746F7473697A6520203D20706172656E742E6F66667365744865696768743B20202F2F2074686973206973207468652076697369626C652061726561200D73697A650D0A202020207661722063757272746F70203D20706172656E742E7363726F6C6C546F703B2020202020202F2F6865726520626567696E73207468652076697369626C6520617265610D0A2020202076617220626567696E506F73203D206F626A2E6F6666736574546F703B0D0A202020207661722073746570203D206F626A2E6F6666736574486569676874202B20333B0D0A2020202F2F09616C6572742822737465703D22202B2073746570202B20222070616464696E673D22202B206F626A2E7374796C652E70616464696E67546F70293B0D0A2020202076617220656E64506F73203D20626567696E506F73202B20737465703B0D0A202020200D0A202020207768696C652028656E64506F73203E202863757272746F70202B20746F7473697A65292920207B0D0A2020202020202063757272746F70202B3D20737465703B0D0A202020207D0D0A202020207768696C652028626567696E506F73203C2063757272746F7029207B0D0A2020202020202063757272746F70202D3D20737465703B0D0A202020207D0D0A20202020706172656E742E7363726F6C6C546F70203D2063757272746F703B0D0A202020202F2F77696E646F772E737461747573203D20227363726F6C6C746F703D22202B2063757272746F703B0D0A2020207D206361746368286529207B0D0A20202020202077696E646F772E737461747573203D20224661696C656420207363726F6C6C3276696577223B0D0A2020207D0D0A7D0D0A0D0A3C2F7363726970743E0D0A0D0A3C7363726970743E0D0A0D0A66756E6374696F6E20696E69742829207B0D0A092F2F646F63756D656E742E676574456C656D656E74427949642822705F7465787422292E73656C65637428293B0D0A0D0A0D0A090976617220646F72656C6F6164203D202272656C6F6164223B0D0A090969662028646F72656C6F61643D3D202272656C6F61642229207B0D0A090909646F7265667265736828293B0D0A09097D0D0A09090D0A0909766172206572726F726D7367203D2022223B0D0A0909696620286572726F726D736720213D20222229207B0D0A0909096572726F726D7367203D206572726F726D73672E7265706C616365282F5E6572726F723D2F692C202222293B0D0A0909096572726F726D7367203D206572726F726D73672E7265706C616365282F5C2532302F672C20222022293B0D0A090909616C657274286572726F726D7367293B0D0A09097D0D0A090D0A7D0D0A0D0A66756E6374696F6E2072656D6F766550726573656E63652829207B0D0A09646F63756D656E742E676574456C656D656E7442794964282270726573656E63655F636F646522292E76616C7565203D202230223B0D0A09646F63756D656E742E666F726D735B2270726573656E6365666F726D225D2E7375626D697428293B0D0A7D0D0A0D0A66756E6374696F6E2070636F64654368616E676564286F626A29207B0D0A092F2F616C657274282270636F64656368616E6765643D22202B206F626A2E6F7074696F6E735B6F626A2E73656C6563746564496E6465785D2E76616C7565293B0D0A097661722070636F646573203D206F626A2E6F7074696F6E735B6F626A2E73656C6563746564496E6465785D2E76616C75653B0D0A096966202870636F646573203D3D202222292072657475726E3B0D0A090D0A0976617220746D70203D2070636F6465732E73706C697428225F22293B0D0A097661722070636F6465203D20746D705B305D3B0D0A09766172206E756D626572203D20746D705B315D3B0D0A090D0A0976617220616374696F6E696D616765203D20646F63756D656E742E676574456C656D656E74427949642822616374696F6E696D61676522293B0D0A0969662028616374696F6E696D61676529207B0D0A0909696620286E756D626572203D3D20222229207B0D0A090909616374696F6E696D6167652E7372633D22696D672F6E6F745F617661696C61626C655F6E6F5F4346502E676966223B0D0A09097D20656C7365207B0D0A090909616374696F6E696D6167652E7372633D22696D672F6E6F745F617661696C61626C655F4346502E676966223B0D0A09097D0D0A097D0D0A09696620286E756D626572203D3D2022782229207B0D0A0909646F63756D656E742E676574456C656D656E74427949642822646976657273696F6E6E627222292E7374796C652E646973706C6179203D2022223B0D0A097D20656C7365207B0D0A0909646F63756D656E742E676574456C656D656E74427949642822646976657273696F6E6E627222292E7374796C652E646973706C6179203D20226E6F6E65223B0D0A097D0D0A7D0D0A66756E6374696F6E2073657450726573656E63652829207B0D0A097661722070636F64656C697374203D20646F63756D656E742E676574456C656D656E7442794964282270636F64656C69737422293B0D0A096966202870636F64656C6973742E73656C6563746564496E646578203C30207C7C2070636F64656C6973742E6F7074696F6E735B70636F64656C6973742E73656C6563746564496E6465785D2E76616C7565203D3D20222229207B0D0A0909616C6572742822646F207069636B20612076616C6964206F7074696F6E22290D0A090972657475726E3B0D0A097D0D0A097661722070636F646573203D2070636F64656C6973742E6F7074696F6E735B70636F64656C6973742E73656C6563746564496E6465785D2E76616C7565203B0D0A0976617220746D70203D2070636F6465732E73706C697428225F22293B0D0A097661722070636F6465203D20746D705B305D3B0D0A09766172206E756D626572203D20746D705B315D3B0D0A090D0A09646F63756D656E742E676574456C656D656E7442794964282270726573656E63655F636F646522292E76616C7565203D2070636F64653B0D0A09696620286E756D626572203D3D2022782229207B0D0A09096E756D626572203D207472696D28646F63756D656E742E676574456C656D656E74427949642822646976657273696F6E6E627222292E76616C7565293B0D0A097D200D0A09646F63756D656E742E676574456C656D656E7442794964282270726573656E63655F6469766572746E627222292E76616C7565203D206E756D6265723B0D0A090D0A0976617220756E74696C203D20646F63756D656E742E676574456C656D656E74427949642822756E74696C6461746522292E76616C7565200D0A090909092B20222022202B20646F63756D656E742E676574456C656D656E74427949642822756E74696C74696D6522292E76616C75653B0D0A09756E74696C203D207472696D28756E74696C293B0D0A0969662028756E74696C20213D20222229207B0D0A0909646F63756D656E742E676574456C656D656E7442794964282270726573656E63655F756E74696C22292E76616C7565203D20756E74696C3B0D0A097D0D0A090D0A09766172206D7367656C656D20203D20646F63756D656E742E676574456C656D656E74427949642822705F7465787422293B0D0A092F2F6A757374206D616B6520737572652074686174207468652074657874206973206E6F742074686520696E697469616C206578706C2E20746578742E0D0A09696620286D7367656C656D2E6F6E6B6579646F776E203D3D206E756C6C29207B200D0A0909766172207074657874203D207472696D286D7367656C656D2E76616C7565293B0D0A090969662028707465787420213D20222229207B0D0A090909646F63756D656E742E676574456C656D656E7442794964282270726573656E63655F7465787422292E76616C7565203D2070746578743B0D0A09097D0D0A097D0D0A09646F63756D656E742E666F726D735B2270726573656E6365666F726D225D2E7375626D697428293B0D0A7D0D0A66756E6374696F6E2070726573657450726573656E6365'O & + '2869647829207B0D0A09646F63756D656E742E676574456C656D656E7442794964282270726573656E63655F70726573657422292E76616C7565203D206964783B0D0A09646F63756D656E742E666F726D735B2270726573656E6365666F726D225D2E7375626D697428293B0D0A090D0A7D0D0A0D0A66756E6374696F6E205365744465666C65637428290D0A7B0D0A0976617220656C656D73203D20646F63756D656E742E676574456C656D656E747342794E616D652822636622293B0D0A09666F72202876617220693D303B2069203C656C656D732E6C656E6774683B20692B2B29207B0D0A090969662028656C656D735B695D2E636865636B656429207B0D0A090909766172206465666C6563746E72203D20656C656D735B695D2E76616C75653B0D0A090909696620286465666C6563746E72203D3D2022582229207B0D0A090909096465666C6563746E72203D20646F63756D656E742E676574456C656D656E7442794964282263665F6E756D62657222292E76616C75653B0D0A0909097D0D0A090909646F63756D656E742E676574456C656D656E7442794964282263616C6C6465666C6563746E7222292E76616C7565203D206465666C6563746E723B0D0A090909627265616B3B0D0A09097D0D0A097D0D0A09646F63756D656E742E666F726D735B2263616C6C6465666C656374666F726D225D2E7375626D697428293B0D0A7D0D0A0D0A66756E6374696F6E206366436C69636B6564286F626A29207B0D0A092F2F616C65727428226F626A3D22202B206F626A2E636865636B6564293B0D0A09696620286F626A2E636865636B6564202626206F626A2E76616C7565203D3D2022582229207B0D0A0909646F63756D656E742E676574456C656D656E7442794964282263665F6E756D62657222292E7374796C652E7669736962696C697479203D2022223B0D0A0909646F63756D656E742E676574456C656D656E7442794964282263665F6E756D62657222292E666F63757328293B0D0A097D20656C7365207B0D0A0909646F63756D656E742E676574456C656D656E7442794964282263665F6E756D62657222292E7374796C652E7669736962696C697479203D202268696464656E223B0D0A097D0D0A7D0D0A0D0A66756E6374696F6E20416374697661746547726F75707328290D0A7B0D0A09646F63756D656E742E666F726D735B226867736574746E67225D2E7375626D697428293B0D0A7D0D0A0D0A66756E6374696F6E2073686F776D6F72656F7074696F6E732829207B0D0A09646F63756D656E742E676574456C656D656E744279496428226D6F72656F7074696F6E737461626C6522292E7374796C652E646973706C6179203D2022223B0D0A09646F63756D656E742E676574456C656D656E744279496428226D6F72656F7074696F6E73627574746F6E22292E7374796C652E646973706C6179203D2022223B0D0A7D0D0A66756E6374696F6E206469766D73674368616E676564286F626A29207B0D0A09696620287061727365496E74286F626A2E76616C75652E6C656E67746829203E2032353529207B0D0A09096F626A2E76616C7565203D206F626A2E76616C75652E737562737472696E6728302C323535293B0D0A0909616C65727428224D61782032353522293B0D0A097D0D0A092F2F77696E646F772E737461747573203D206F626A2E76616C75652E6C656E6774683B0D0A7D090D0A66756E6374696F6E2072657365745573657253657474696E67732829200D0A7B0D0A09646F63756D656E742E666F726D735B22726573657475736572666F726D225D2E7375626D697428293B0D0A7D0D0A3C2F7363726970743E0D0A3C7374796C6520747970653D22746578742F637373223E0D0A0D0A626F6479207B0D0A09666F6E742D66616D696C793A2076657264616E612C20617269616C3B0D0A09666F6E742D73697A653A20313030253B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F626F64792E676966293B0D0A09636F6C6F72203A20626C61636B3B0D0A7D0D0A0D0A7461626C65207B0D0A09666F6E742D66616D696C793A2076657264616E612C20617269616C3B0D0A09666F6E742D73697A653A203930253B0D0A7D0D0A0D0A2E6C6F67696E666F726D207B0D0A09666F6E742D73697A653A203930253B0D0A09636F6C6F72203A20626C61636B3B0D0A7D0D0A2E627574746F6E207B0D0A09666F6E742D73697A653A3830253B0D0A09666F6E742D7765696768743A626F6C643B0D0A0970616464696E673A313B0D0A7D0D0A2E6D61696E666F726D207B0D0A09636F6C6F72203A20626C61636B3B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B0D0A09666F6E742D73697A653A3730253B0D0A0977696474683A313030253B0D0A096865696768743A313030253B0D0A0970616464696E673A303B0D0A096D617267696E3A303B0D0A0D0A7D090D0A2E617474656E64616E74666F726D207B0D0A09636F6C6F72203A20626C61636B3B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F626F64792E676966293B0D0A096D617267696E3A303B0D0A0970616464696E673A303B0D0A0977696474683A313030253B0D0A096865696768743A313030253B0D0A7D0D0A0D0A2E6D61696E7469746C65207B0D0A09666F6E742D7765696768743A20626F6C643B0D0A09636F6C6F72203A20626C61636B3B0D0A096C65747465722D73706163696E673A313B0D0A096865696768743A353070783B0D0A0977696474683A32333070783B0D0A0970616464696E673A303B0D0A096D617267696E3A303B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F746F702E676966293B0D0A7D0D0A0D0A2E616374696F6E6D656E75207B0D0A09666F6E742D73697A653A203930253B0D0A09636F6C6F72203A20626C61636B3B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B0D0A096D617267696E203A20353B0D0A0970616464696E673A353B0D0A0977696474683A3939253B0D0A0D0A7D0D0A2E616374696F6E64726F70646F776E207B0D0A09636F6C6F72203A20626C61636B3B0D0A7D0D0A0D0A2E736561726368666F726D207B0D0A09666F6E742D73697A653A203930253B0D0A09636F6C6F72203A20626C61636B3B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F626F64792E676966293B0D0A7D0D0A0D0A2F2A2055736564206279207468652073696465626172202A2F0D0A236D61696E626F6479207B0D0A096865696768743A3939253B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B200D0A096D696E2D77696474683A31333070783B0D0A096C6566743A353B0D0A09746F703A333B0D0A09706F736974696F6E3A6162736F6C7574653B0D0A090D0A7D0D0A0D0A2E6D656E7574726565207B0D0A0970616464696E673A303B0D0A09616C69676E3A63656E7465723B0D0A09636F6C6F723A20626C61636B3B0D0A096D696E2D77696474683A32333070783B0D0A0977696474683A313030253B0D0A7D0D0A0D0A2E73657474696E6773626F6479207B0D0A0970616464696E673A303B0D0A09616C69676E3A63656E7465723B0D0A09636F6C6F723A20626C61636B3B0D0A096D696E2D77696474683A31393870783B0D0A0977696474683A313030253B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F626F64792E676966293B0D0A09746F703A373070783B0D0A09706F736974696F6E3A6162736F6C7574653B0D0A09666F6E742D7765696768743A6E6F726D616C3B0D0A096865696768743A3930253B0D0A09666F6E742D73697A653A3830253B0D0A7D0D0A2E73657474696E67736C697374207B0D0A09666F6E742D73697A653A3830253B0D0A7D0D0A2E696E7075746669656C64207B0D0A09666F6E742D73697A653A3930253B0D0A7D0D0A2E73657474696E677368656164696E67207B0D0A0970616464696E673A30203020302031323B0D0A0977696474683A3330253B0D0A7D0D0A2E74726565726F77207B0D0A09666F6E742D7765696768743A6E6F726D616C3B0D0A09666F6E742D73697A653A3835253B0D0A09766572746963616C2D616C69676E3A746578742D746F703B0D0A0970616464696E673A33203020332030203B0D0A096D617267696E3A303B0D0A09636F6C6F72203A20626C61636B3B0D0A09637572736F723A68616E643B0D0A096D696E2D6865696768743A313670783B0D0A7D0D0A2E726F7768656164696E67207B0D0A096261636B67726F756E642D636F6C6F723A234343434343433B0D0A09666F6E742D7765696768743A626F6C643B0D0A09636F6C6F723A626C61636B3B0D0A09626F726465723A33206F7574736574206C69676874677261793B0D0A096D617267696E3A3270783B0D0A0970616464696E672D6C6566743A353B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A7D0D0A0D0A236D61696E636174616C6F67626F6479207B0D0A096865696768743A3939253B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F626F64792E676966293B0D0A0977696474683A313030253B0D0A096C6566743A353B0D0A09746F703A333B0D0A09706F736974696F6E3A6162736F6C7574653B0D0A7D0D0A0D0A2E696D67627574746F6E207B0D0A096261636B67726F756E642D636F6C6F723A234343434343433B0D0A09666F6E742D7765696768743A626F6C643B0D0A09636F6C6F723A626C61636B3B0D0A09626F726465723A33206F7574736574206C69676874677261793B0D0A096D617267696E3A3270783B0D0A0970616464696E673A323B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A09666F6E742D73697A653A3830253B0D0A7D0D0A0D0A2E6E756D626572627574746F6E207B0D0A096261636B67726F756E642D636F6C6F723A234343434343433B0D0A09666F6E742D7765696768743A6E6F726D616C3B0D0A09636F6C6F723A626C61636B3B0D0A096D617267696E3A3170783B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A09626F726465723A33206F7574736574206C69676874677261793B0D0A096865696768743A323070783B3B0D0A0977696474683A31323070783B0D0A09766572746963616C2D616C69676E3A626F74746F6D3B0D0A0970616464696E67203A20302030203020353B0D0A09666F6E742D73697A653A3830253B0D0A090D0A7D0D0A0D0A2E6E756D626572627574746F6E707573686564207B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B0D0A09666F6E742D7765696768743A626F6C643B0D0A092F2A636F6C6F'O & + '723A626C75653B2A2F0D0A096D617267696E3A3170783B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A09626F726465723A3320696E736574206C69676874677261793B0D0A096865696768743A323070783B3B0D0A0977696474683A31323070783B0D0A09766572746963616C2D616C69676E3A626F74746F6D3B0D0A0970616464696E67203A20302030203020353B0D0A09666F6E742D73697A653A3830253B0D0A090D0A7D0D0A2E616374696F6E736D616C6C627574746F6E207B0D0A096261636B67726F756E642D636F6C6F723A234343434343433B0D0A09666F6E742D7765696768743A626F6C643B0D0A09636F6C6F723A626C61636B3B0D0A096D617267696E3A3170783B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A09666F6E742D73697A653A3730253B0D0A09626F726465723A32206F7574736574206C69676874677261793B0D0A096865696768743A313170783B0D0A0977696474683A313170783B0D0A09766572746963616C2D616C69676E3A626F74746F6D3B0D0A7D0D0A2E616374696F6E627574746F6E207B0D0A096261636B67726F756E642D636F6C6F723A234343434343433B0D0A09666F6E742D7765696768743A626F6C643B0D0A09636F6C6F723A626C61636B3B0D0A096D617267696E3A3270783B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A09666F6E742D73697A653A3630253B0D0A09626F726465723A35206F7574736574206C69676874677261793B0D0A096865696768743A323570783B0D0A0977696474683A323570783B0D0A09766572746963616C2D616C69676E3A746F703B0D0A7D0D0A0D0A2E616374696F6E627574746F6E707573686564207B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B0D0A09666F6E742D7765696768743A626F6C643B0D0A09636F6C6F723A626C61636B3B0D0A096D617267696E3A3270783B0D0A09616C69676E3A63656E7465723B0D0A09666F6E742D73697A653A3730253B0D0A09626F726465723A3520696E736574206C69676874677261793B0D0A096865696768743A323570783B0D0A0977696474683A323570783B0D0A09766572746963616C2D616C69676E3A746F703B0D0A09637572736F723A68616E643B0D0A090D0A7D0D0A0D0A0D0A2E7472656563656C6C207B0D0A0970616464696E673A302030203220323B0D0A7D0D0A2E74726565737061636572207B0D0A0970616464696E673A303B0D0A096D617267696E3A303B0D0A096D696E2D6865696768743A3270783B0D0A09666F6E742D73697A653A3170783B0D0A0977696474683A32303070783B0D0A090D0A7D0D0A2E706F707570666F726D207B0D0A09616C69676E203A2063656E7465723B0D0A09666F6E742D73697A653A203930253B0D0A09636F6C6F72203A20626C61636B3B0D0A096261636B67726F756E642D696D6167653A2075726C28696D672F626F64792E676966293B0D0A7D0D0A0D0A2E706F7075707469746C65207B0D0A09666F6E742D73697A653A20313230253B0D0A09666F6E742D776569676874203A20626F6C643B0D0A096C65747465722D73706163696E67203A20313B0D0A7D0D0A2E706F707570746162207B0D0A09666F6E742D73697A653A20313130253B0D0A096C65747465722D73706163696E67203A20313B0D0A09626F726465722D746F70203A203120736F6C696420626C61636B3B0D0A09626F726465722D7269676874203A203120736F6C696420626C61636B3B0D0A09626F726465722D6C656674203A203120736F6C696420626C61636B3B0D0A0970616464696E67203A20343B0D0A096D617267696E203A20382033203020333B0D0A097769647468203A20313030253B0D0A096865696768743A3830253B0D0A09766572746963616C2D616C69676E3A746578742D746F703B0D0A096261636B67726F756E642D636F6C6F723A626C61636B3B0D0A09616C69676E3A63656E7465723B090D0A09636F6C6F723A626C61636B3B0D0A09637572736F723A68616E643B0D0A7D0D0A2E74616273656C6563746564207B0D0A09666F6E742D73697A653A20313130253B0D0A096C65747465722D73706163696E67203A20313B0D0A09626F72646572203A203120736F6C696420626C61636B3B0D0A09626F726465722D626F74746F6D203A20303B0D0A0970616464696E67203A20342034203020343B0D0A096D617267696E203A20303B0D0A09746578742D616C69676E203A206C6566743B0D0A09766572746963616C2D616C69676E3A746578742D746F703B0D0A09616C69676E3A63656E7465723B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B0D0A09636F6C6F723A626C61636B3B0D0A7D0D0A0D0A2E706F707570627574746F6E207B0D0A0977696474683A2031303070783B0D0A7D0D0A0D0A2E726573756C746C697374207B0D0A09616C69676E3A63656E7465723B0D0A09636F6C6F723A20626C61636B3B0D0A0977696474683A313030253B0D0A096865696768743A3839253B0D0A096F766572666C6F773A6175746F3B0D0A09706F736974696F6E3A6162736F6C7574653B0D0A096261636B67726F756E642D636F6C6F723A234530453045303B0D0A090D0A7D0D0A2E726573756C74726F77207B0D0A09666F6E742D7765696768743A6E6F726D616C3B0D0A09666F6E742D73697A653A3735253B0D0A09766572746963616C2D616C69676E3A746578742D746F703B0D0A0970616464696E673A313B0D0A096D617267696E3A303B0D0A09636F6C6F72203A20626C61636B3B0D0A09637572736F723A68616E643B0D0A096D696E2D6865696768743A313670783B0D0A7D0D0A2E726573756C7468656164696E67207B0D0A096261636B67726F756E642D636F6C6F723A234343434343433B0D0A09666F6E742D7765696768743A626F6C643B0D0A09636F6C6F723A626C61636B3B0D0A09626F726465723A33206F7574736574206C69676874677261793B0D0A096D617267696E3A3270783B0D0A0970616464696E672D6C6566743A353B0D0A09637572736F723A68616E643B0D0A09616C69676E3A63656E7465723B0D0A09666F6E742D73697A653A3835253B0D0A7D0D0A2E616374696F6E7465787461726561207B0D0A09666F6E742D73697A653A3930253B0D0A09746578742D616C69676E3A6C6566743B0D0A0977696474683A313030253B0D0A096865696768743A31303070783B0D0A7D0D0A0D0A3C2F7374796C653E0D0A0D0A3C2F686561643E0D0A3C626F6479206F6E6C6F61643D22696E697428293B22203E0D0A0D0A0D0A3C6469762069643D226D61696E626F647922203E0D0A0D0A3C666F726D206E616D653D22726573657475736572666F726D22207461726765743D225F73656C662220616374696F6E3D22736572766C65742F44727352657365745573657222206D6574686F643D22706F7374223E0D0A3C696E70757420747970653D68696464656E206E616D653D227265736574757365725F6469726964222069643D227265736574757365725F6469726964222076616C75653D22333631393031303030313A303436313832223E0D0A3C2F666F726D3E0D0A0D0A3C666F726D206E616D653D2270726573656E6365666F726D22207461726765743D225F73656C662220616374696F6E3D2244727350726573656E636522206D6574686F643D22706F7374223E0D0A3C696E70757420747970653D68696464656E206E616D653D2270726573656E63655F636F6465222069643D2270726573656E63655F636F6465222076616C75653D22223E0D0A3C696E70757420747970653D68696464656E206E616D653D2270726573656E63655F6469766572746E6272222069643D2270726573656E63655F6469766572746E6272222076616C75653D22223E0D0A3C696E70757420747970653D68696464656E206E616D653D2270726573656E63655F756E74696C222069643D2270726573656E63655F756E74696C222076616C75653D22223E0D0A3C696E70757420747970653D68696464656E206E616D653D2270726573656E63655F6469726964222069643D2270726573656E63655F6469726964222076616C75653D22223E0D0A3C696E70757420747970653D68696464656E206E616D653D2270726573656E63655F74657874222069643D2270726573656E63655F74657874222076616C75653D22223E0D0A3C696E70757420747970653D68696464656E206E616D653D2270726573656E63655F707265736574222069643D2270726573656E63655F707265736574222076616C75653D22223E0D0A3C2F666F726D3E0D0A0D0A3C64697620636C6173733D226D61696E7469746C6522207374796C653D2277696474683A31303025223E0D0A3C7461626C652063656C6C73706163696E673D302063656C6C70616464696E673D332077696474683D223130302522203E0D0A3C74723E0D0A093C746420636C6173733D226D61696E7469746C6522207374796C653D2277696474683A313030252220616C69676E3D626173656C696E653E0D0A093C696D67207372633D22696D672F7370616365722E67696622206865696768743D35302077696474683D323E0D0A0953616D62616C2042696A20202831313030290D0A3C212D2D20746F6F6C626F78202D2D3E0D0A093C746420616C69676E3D7269676874202076616C69676E3D626173656C696E65206E6F777261703E200D0A09090D0A09093C7370616E2069643D227265736574627574746F6E222020636C6173733D22616374696F6E627574746F6E22206F6E636C69636B3D2272657365745573657253657474696E677328292220203E0D0A090909093C696D67207372633D22696D672F7370616365722E676966222077696474683D22323522206865696774683D223235223E526573657420757365722073657474696E67730D0A09093C2F7370616E3E0D0A09090D0A09093C7370616E2069643D226C6F676F7574627574746F6E222020636C6173733D22616374696F6E627574746F6E22206F6E636C69636B3D226C6F676F757428292220203E0D0A090909093C696D67207372633D22696D672F7370616365722E676966222077696474683D22323522206865696774683D223235223E4C6F67206F75740D0A09093C2F7370616E3E0D0A3C74723E3C746420636F6C7370616E3D323E3C68723E0D0A0D0A3C2F7461626C653E0D0A0D0A3C2F6469763E0D0A0D0A3C64697620636C6173733D2273657474696E6773626F647922202069643D2270726573656E63656D656E75223E0D0A0D0A3C7461626C6520207374796C653D2277696474683A313030253B636F6C6F723A626C61636B3B6261636B67726F756E642D636F6C6F723A23453045304530'O & + '2220626F726465723D302063656C6C70616464696E673D332063656C6C73706163696E673D323E0D0A3C74723E3C7464207374796C653D2277696474683A3335253B626F726465723A3120736F6C696420677261793B223E0D0A0D0A093C7461626C6520207374796C653D2277696474683A313030253B636F6C6F723A626C61636B3B6261636B67726F756E642D636F6C6F723A234530453045302220626F726465723D302063656C6C70616464696E673D332063656C6C73706163696E673D323E0D0A09093C74723E3C746420207374796C653D22666F6E742D73697A653A31303025223E3C623E50726573656E63650D0A090D0A0D0A09093C7464206E6F777261703E093C696D67207372633D27696D672F6E6F745F617661696C61626C655F6E6F5F4346502E676966273E4C65667420666F7220746865206461790D0A0D0A0D0A093C74723E0D0A09093C746420636F6C7370616E3D323E3C68723E0D0A090D0A0D0A09093C7472207374796C653D22646973706C61793A223E3C746420636F6C7370616E3D323E507265646566696E6564206F7074696F6E730D0A090D0A0D0A09093C747220207374796C653D22646973706C61793A223E0D0A0909093C74642020636F6C7370616E3D32203E0D0A0909093C7370616E207374796C653D2277696474683A3730252220636C6173733D27696D67627574746F6E27206F6E636C69636B3D2270726573657450726573656E636528273027293B22203E0D0A090909093C696D67207372633D27696D672F617661696C61626C652E676966272077696474683D3136206865696768743D31363E4368616E676520746F20417661696C61626C650D0A0909093C2F7370616E3E0D0A0909093C62723E0D0A0D0A09093C747220207374796C653D22646973706C61793A223E0D0A0909093C74642020636F6C7370616E3D32203E0D0A0909093C7370616E207374796C653D2277696474683A3730252220636C6173733D27696D67627574746F6E27206F6E636C69636B3D2270726573657450726573656E636528273127293B22203E0D0A090909093C696D67207372633D27696D672F6E6F745F617661696C61626C655F6E6F5F4346502E676966272077696474683D3136206865696768743D31363E4368616E676520746F20427573790D0A0909093C2F7370616E3E0D0A0909093C62723E0D0A0D0A09093C747220207374796C653D22646973706C61793A223E0D0A0909093C74642020636F6C7370616E3D32203E0D0A0909093C7370616E207374796C653D2277696474683A3730252220636C6173733D27696D67627574746F6E27206F6E636C69636B3D2270726573657450726573656E636528273227293B22203E0D0A090909093C696D67207372633D27696D672F6E6F745F617661696C61626C655F6E6F5F4346502E676966272077696474683D3136206865696768743D31363E4368616E676520746F204D656574696E670D0A0909093C2F7370616E3E0D0A0909093C62723E0D0A0D0A09093C747220207374796C653D22646973706C61793A223E0D0A0909093C74642020636F6C7370616E3D32203E0D0A0909093C7370616E207374796C653D2277696474683A3730252220636C6173733D27696D67627574746F6E27206F6E636C69636B3D2270726573657450726573656E636528273327293B22203E0D0A090909093C696D67207372633D27696D672F6E6F745F617661696C61626C655F6E6F5F4346502E676966272077696474683D3136206865696768743D31363E4368616E676520746F204C756E63680D0A0909093C2F7370616E3E0D0A0909093C62723E0D0A0D0A09093C747220207374796C653D22646973706C61793A223E0D0A0909093C74642020636F6C7370616E3D32203E0D0A0909093C7370616E207374796C653D2277696474683A3730252220636C6173733D27696D67627574746F6E27206F6E636C69636B3D2270726573657450726573656E636528273427293B22203E0D0A090909093C696D67207372633D27696D672F6E6F745F617661696C61626C655F6E6F5F4346502E676966272077696474683D3136206865696768743D31363E4368616E676520746F204C65667420666F7220746865206461790D0A0909093C2F7370616E3E0D0A0909093C62723E0D0A0D0A09093C74723E0D0A09093C74642020636F6C7370616E3D323E3C62723E3C68723E0D0A09090D0A09093C74723E3C7464203E3C6120687265663D23206F6E636C69636B3D2273686F776D6F72656F7074696F6E73282922203E4D6F7265206F7074696F6E732E2E2E3C2F613E0D0A09090D0A0909093C7464207374796C653D22646973706C61793A6E6F6E65222069643D226D6F72656F7074696F6E73627574746F6E22206E6F7772617020616C69676E3D72696768743E3C7370616E20636C6173733D22696D67627574746F6E22207374796C653D22666F6E742D73697A653A37352522206F6E636C69636B3D2273657450726573656E636528293B223E0D0A09090909093C696D672069643D22616374696F6E696D61676522207372633D22696D672F7370616365722E676966223E266E6273703B266E6273703B0D0A090909094368616E6765206E6F773C2F7370616E3E0D0A09090D0A0D0A09093C74723E0D0A09093C746420636F6C7370616E3D323E0D0A09093C7461626C652069643D226D6F72656F7074696F6E737461626C6522207374796C653D22646973706C61793A6E6F6E65223E0D0A09093C74723E0D0A0909093C746420636F6C7370616E3D322076616C69676E3D746F70203E0D0A0909093C73656C656374207374796C653D2277696474683A31303025222069643D2270636F64656C6973742220206F6E6368616E67653D2270636F64654368616E67656428746869732922203E0D0A0909093C6F7074696F6E2076616C75653D27273E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3C2F6F7074696F6E3E0D0A3C6F7074696F6E2076616C75653D27315F273E42757379202D204E6F20646976657273696F6E0A3C6F7074696F6E2076616C75653D27315F2D31273E42757379202D20416C6C2063616C6C7320746F206D61696E206E756D6265720A3C6F7074696F6E2076616C75653D27315F2D32273E42757379202D20416C6C2063616C6C7320746F20766F6963656D61696C0A3C6F7074696F6E2076616C75653D27315F78273E42757379202D20416C6C2063616C6C7320746F206E756D6265720A3C6F7074696F6E2076616C75653D27273E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3C2F6F7074696F6E3E0A3C6F7074696F6E2076616C75653D27325F273E4D656574696E67202D204E6F20646976657273696F6E0A3C6F7074696F6E2076616C75653D27325F2D31273E4D656574696E67202D20416C6C2063616C6C7320746F206D61696E206E756D6265720A3C6F7074696F6E2076616C75653D27325F2D32273E4D656574696E67202D20416C6C2063616C6C7320746F20766F6963656D61696C0A3C6F7074696F6E2076616C75653D27325F78273E4D656574696E67202D20416C6C2063616C6C7320746F206E756D6265720A3C6F7074696F6E2076616C75653D27273E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3C2F6F7074696F6E3E0A3C6F7074696F6E2076616C75653D27335F273E4C756E6368202D204E6F20646976657273696F6E0A3C6F7074696F6E2076616C75653D27335F2D31273E4C756E6368202D20416C6C2063616C6C7320746F206D61696E206E756D6265720A3C6F7074696F6E2076616C75653D27335F2D32273E4C756E6368202D20416C6C2063616C6C7320746F20766F6963656D61696C0A3C6F7074696F6E2076616C75653D27335F78273E4C756E6368202D20416C6C2063616C6C7320746F206E756D6265720A3C6F7074696F6E2076616C75653D27273E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3C2F6F7074696F6E3E0A3C6F7074696F6E2076616C75653D27345F273E4C65667420666F722074686520646179202D204E6F20646976657273696F6E0A3C6F7074696F6E2076616C75653D27345F2D31273E4C65667420666F722074686520646179202D20416C6C2063616C6C7320746F206D61696E206E756D6265720A3C6F7074696F6E2076616C75653D27345F2D32273E4C65667420666F722074686520646179202D20416C6C2063616C6C7320746F20766F6963656D61696C0A3C6F7074696F6E2076616C75653D27345F78273E4C65667420666F722074686520646179202D20416C6C2063616C6C7320746F206E756D6265720A3C6F7074696F6E2076616C75653D27273E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3C2F6F7074696F6E3E0A3C6F7074696F6E2076616C75653D27355F273E52657475726E73202D204E6F20646976657273696F6E0A3C6F7074696F6E2076616C75653D27355F2D31273E52657475726E73202D20416C6C2063616C6C7320746F206D61696E206E756D6265720A3C6F7074696F6E2076616C75653D27355F2D32273E52657475726E73202D20416C6C2063616C6C7320746F20766F6963656D61696C0A3C6F7074696F6E2076616C75653D27355F78273E52657475726E73202D20416C6C2063616C6C7320746F206E756D6265720A3C6F7074696F6E2076616C75653D27273E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3C2F6F7074696F6E3E0A0D0A09090909090D0A0909093C2F73656C6563743E0D0A0909093C74723E3C746420636F6C7370616E3D323E0D0A090909093C696E70757420747970653D746578742076616C75653D2222206F6E6B657975703D224E756D6265724368616E67656428746869732922207374796C653D22646973706C61793A6E6F6E65222069643D22646976657273696F6E6E6272223E0D0A0D0A093C74723E0D0A093C7464207374796C653D22666F6E742D73697A653A3930253B22206E6F7772617020636F6C7370616E3D323E4261636B200D0A09093C7370616E207374796C653D22666F6E742D73697A653A373525223E284D4D2F64642F79797979293C2F7370616E3E0D0A0909093C696E70757420747970653D746578742069643D22756E74696C64617465222076616C75653D22222073697A653D223130223E0D0A09093C7370616E207374796C653D22666F6E742D73697A653A373525223E2848483A6D6D293C2F7370616E3E0D0A0909093C696E70757420747970653D746578742069643D22756E74696C74696D65222076616C75653D22222073697A653D2235223E0D0A093C74723E0D0A0909093C746420636F6C'O & + '7370616E3D322076616C69676E3D746F702077696474683D3330253E3C623E4D6573736167650D0A09090D0A09093C7472203E0909090D0A0909093C746420636F6C7370616E3D322076616C69676E3D746F70203E0D0A0909093C7465787461726561207374796C653D2277696474683A3939253B2220726F77733D3520636C6173736E616D653D22616374696F6E7465787461726561220D0A0909090969643D22705F7465787422206F6E6B6579646F776E3D22746869732E76616C75653D27273B746869732E6F6E6B6579646F776E3D6E756C6C22206F6E6B657975703D226469766D73674368616E676564287468697329223E4865726520796F752063616E20777269746520796F7572206D65737361676520746F2074686520617474656E64616E7420616E64206F74686572732E204D61782032353520636861726163746572732E3C2F74657874617265613E0D0A09090D0A09090D0A0909093C2F7461626C653E3C212D2D6D6F7265206F7074696F6E732D2D3E0D0A093C2F7461626C653E0D0A0D0A3C212D2D2043616C6C206465666C656374202D2D3E0D0A3C7464207374796C653D2277696474683A3335253B626F726465723A3120736F6C696420677261793B646973706C61793A6E6F6E65222076616C69676E3D746F703E0D0A093C7461626C6520207374796C653D22636F6C6F723A626C61636B3B6261636B67726F756E642D636F6C6F723A234530453045303B77696474683A313030252220626F726465723D302063656C6C70616464696E673D332063656C6C73706163696E673D323E0D0A09093C74723E3C7464207374796C653D22666F6E742D73697A653A31303025223E3C623E4465666C6563742063616C6C0D0A0909093C746420616C69676E3D72696768743E3C696E7075742020636C6173733D22696D67627574746F6E22207374796C653D22666F6E742D73697A653A3830253B22200D0A09090909747970653D22627574746F6E222076616C75653D224368616E676522206F6E636C69636B3D225365744465666C656374282922203E0D0A0909090D0A09093C74723E3C746420636F6C7370616E3D323E3C68723E090D0A09093C7472206F6E6D6F7573656F7665723D2274725F6D6F7573656F7665722874686973293B22206F6E6D6F7573656F75743D2274725F6D6F7573656F75742874686973292220636C6173733D74726565726F773E0D0A0909093C746420636F6C7370616E3D323E3C696E707574206F6E636C69636B3D226366436C69636B65642874686973293B2220747970653D726164696F2069643D2263665F6F70657261746F7222206E616D653D226366222076616C75653D222D3122203E266E6273703B266E6273703B4D61696E206E756D6265720D0A09093C7472206F6E6D6F7573656F7665723D2274725F6D6F7573656F7665722874686973293B22206F6E6D6F7573656F75743D2274725F6D6F7573656F75742874686973292220636C6173733D74726565726F773E0D0A0909093C746420636F6C7370616E3D323E3C696E707574206F6E636C69636B3D226366436C69636B65642874686973293B2220747970653D726164696F2069643D2263665F766F6963656D61696C22206E616D653D226366222076616C75653D222D3222203E266E6273703B266E6273703B566F6963656D61696C0D0A09093C7472206F6E6D6F7573656F7665723D2274725F6D6F7573656F7665722874686973293B22206F6E6D6F7573656F75743D2274725F6D6F7573656F75742874686973292220636C6173733D74726565726F773E0D0A0909093C746420636F6C7370616E3D323E3C696E707574206F6E636C69636B3D226366436C69636B65642874686973293B2220747970653D726164696F2069643D2263665F7822206E616D653D226366222076616C75653D225822203E266E6273703B266E6273703B50686F6E650D0A0909093C696E70757420747970653D74657874206E616D653D2263665F6E756D626572222069643D2263665F6E756D62657222206F6E6B657975703D224E756D6265724368616E6765642874686973293B22207374796C653D227669736962696C6974793A68696464656E222076616C75653D22223E0D0A09090D0A093C2F7461626C653E0D0A0D0A0D0A3C666F726D206E616D653D2263616C6C6465666C656374666F726D22207461726765743D225F73656C662220616374696F6E3D22736572766C65742F4472734465666C65637422206D6574686F643D22706F7374223E0D0A3C696E70757420747970653D68696464656E206E616D653D226469726964222069643D226469726964222076616C75653D22223E0D0A3C696E70757420747970653D68696464656E206E616D653D2263616C6C6465666C6563746E72222069643D2263616C6C6465666C6563746E72222076616C75653D22223E0D0A3C2F666F726D3E0D0A0D0A3C212D2D204344472F68756E7467726F757073202D2D3E0D0A3C7464207374796C653D2277696474683A3335253B626F726465723A3120736F6C696420677261793B222076616C69676E3D746F703E0D0A093C666F726D206E616D653D226867736574746E6722207461726765743D225F73656C662220616374696F6E3D22736572766C65742F44727348756E7447726F757022206D6574686F643D22706F7374223E0D0A093C696E70757420747970653D68696464656E206E616D653D226469726964222069643D226469726964222076616C75653D22223E0D0A093C7461626C6520207374796C653D22636F6C6F723A626C61636B3B6261636B67726F756E642D636F6C6F723A234530453045303B77696474683A313030252220626F726465723D302063656C6C70616464696E673D332063656C6C73706163696E673D323E0D0A09093C74723E3C7464207374796C653D22666F6E742D73697A653A313030253B223E3C623E41637469766174652F64656163746976617465203C62723E43616C6C20646973747269627574696F6E2067726F7570730D0A0909093C746420616C69676E3D72696768742076616C69676E3D746F703E3C696E7075742020636C6173733D22696D67627574746F6E22207374796C653D22666F6E742D73697A653A3830253B22200D0A09090909747970653D22627574746F6E222076616C75653D224368616E676522206F6E636C69636B3D22416374697661746547726F757073282922203E0D0A09093C74723E3C746420636F6C7370616E3D323E3C68723E090D0A3C74723E3C74643E4E6F74206D656D626572206F6620616E792063616C6C20646973747269627574696F6E2067726F75700A0D0A093C2F666F726D3E0D0A093C2F7461626C653E0D0A0D0A3C2F7461626C653E0D0A3C2F6469763E0D0A3C2F6469763E0D0A0D0A3C2F626F64793E0D0A3C2F68746D6C3E0D0A'O; + + // + + var integer vl_remainingStringLength := lengthof(received_reply); + var CHARSTRINGS vl_decodedMessagePieces := {}; + var HTTPMessage vloc_decodedMsg; + while( vl_remainingStringLength >0 ) + { + log("Original msg string length = ", lengthof(received_reply) ); + vl_remainingStringLength:= dec_HTTPMessage( received_reply, vloc_decodedMsg, true) + log(" The decoded message Piece = ", vloc_decodedMsg ); + log("remaining msg string length:", vl_remainingStringLength); + } + + +}//eof TC + + + function singleTC() runs on HTTP_client + { + // These may be declared as templates at global scope. + // Variables are used for performance reasons: + // sending is faster in this way. + var HeaderLines hd := { {header_name := "Host", header_value := HttpServerHostName}, + {header_name := "Content-Length", header_value := "0" } }; + // {header_name := "Connection", header_value := "close" } + + var HTTPRequest r := { client_id := omit, method := "GET", uri := "/", + version_major := 1, version_minor := 1, header := hd, body := "" }; + + var HTTPMessage send_req := { request := r }; + var Connect conn := { hostname := HttpServerHostName, + portnumber := HttpServerPort, use_ssl := HTTPClientUseSSL }; + var Close c := { client_id := omit }; + timer T_guard := 5.0; + var integer i; + var integer how_many_times := 1; //100 + + map(self:HTTP_client_port, system:HTTP_client_port); + + HTTP_client_port.send(conn); + + for(i := 0; i < how_many_times; i := i + 1 ) { + HTTP_client_port.send(send_req); + if(T_guard.running) { T_guard.stop } + + T_guard.start; + + alt { + [] HTTP_client_port.receive(recv_resp) { + if(i == how_many_times - 1) { + HTTP_client_port.send(c); + setverdict(pass); + } + } + [] HTTP_client_port.receive(h) { + HTTP_client_port.send(c); + setverdict(fail); + i := how_many_times; + } + [] HTTP_client_port.receive { + HTTP_client_port.send(c); + setverdict(fail); + } + [] T_guard.timeout { + setverdict(fail); } + }; + } + + unmap(self:HTTP_client_port, system:HTTP_client_port); + } + //================================== + //= Testcases = + //================================== + + + testcase parallel_TC_client() runs on HTTP_client + { + var HTTP_client client_PTC; + client_PTC := HTTP_client.create; + client_PTC.start(TC()); + client_PTC.done; + } + + testcase tc_parallel_server() runs on HTTP_server + { + var HTTP_server server_PTC; + server_PTC := HTTP_server.create; + server_PTC.start(server_TC()); + server_PTC.done; + } + + testcase tc_stress(in integer n) runs on HTTP_client + { + var ptcList ptc; + var integer r; + + for( r := 0; r < n; r := r + 1 ) { + ptc[r] := HTTP_client.create; + }; + + for( r := 0; r < n; r := r + 1 ) { + ptc[r].start(singleTC()); + }; + + for( r := 0; r < n; r := r + 1 ) { + ptc[r].done; + }; + } + + testcase tc_stress_Persistent_both() runs on HTTP_client + { + var HTTP_client client_PTC; + client_PTC := HTTP_client.create; + var HTTP_server server_PTC; + server_PTC := HTTP_server.create; + + server_PTC.start(server_TC()); + timer t_wait := 0.1; + t_wait.start; + t_wait.timeout; + client_PTC.start(singleTC()); + + client_PTC.done; + server_PTC.done; + } + + testcase tc_server() runs on HTTP_server + { + server_TC(); + } + + testcase tc_client() runs on HTTP_client + { + singleTC(); + } + + + testcase tc_http_encDec() runs on MTC + { + f_EncDec(); + } + + testcase tc_http_encDec2() runs on MTC + { + f_EncDec2(); + } + control + { + log("control started"); + //execute(tc_parallel_server()); + //execute(tc_stress(1)); + //execute(tc_stress_Persistent_both()); + //execute(tc_server); + //execute(tc_client); + execute(tc_http_encDec()); + execute(tc_http_encDec2()); + } + +} diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/HTTP_test.prj b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/HTTP_test.prj new file mode 100644 index 0000000000000000000000000000000000000000..d5db5774722248d24e5bae50631a60c342afac2e --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/HTTP_test.prj @@ -0,0 +1,48 @@ + + + + HTTP_test + ../bin/HTTP_test + ../bin + alpha + Parallel + lssl_script + yes + yes + no + yes + yes + rsh %host "cd %project_working_dir ; "%executable" %localhost %mctr_port" + alfa, beta, gamma + + + + ../src/HTTPmsg_PortType.ttcn + ../src/HTTPmsg_Types.ttcn + HTTP_Test_no_ASPs.ttcn + + + ../src/HTTPmsg_PT.cc + ../src/HTTPmsg_PT.hh + + + ../../Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.cc + ../../Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.hh + + + HTTP_Test.cfg + + + HTTP_Test_no_ASPs.control + HTTP_Test_no_ASPs.parallel_TC_client + HTTP_Test_no_ASPs.parallel_TC_server + HTTP_Test_no_ASPs.stress_TC_Persistent_both + HTTP_Test_no_ASPs.server_testcase + HTTP_Test_no_ASPs.client_testcase + + + lssl_script + server.crt + server.key + + diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/Makefile b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..4cd41c1507adac69911f452c8b7c0f3dd3ccc24a --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/Makefile @@ -0,0 +1,150 @@ +# This Makefile was generated by the Makefile Generator +# of the TTCN-3 Test Executor version 1.7.pre0 build 2 +# for Attila Balasko (ethbaat@ehubuux110) on Mon Jan 15 16:28:23 2007 + +# Copyright (c) 2000-2019 Ericsson Telecom AB + +# The following make commands are available: +# - make, make all Builds the executable test suite. +# - make archive Archives all source files. +# - make check Checks the semantics of TTCN-3 and ASN.1 modules. +# - make clean Removes all generated files. +# - make compile Translates TTCN-3 and ASN.1 modules to C++. +# - make dep Creates/updates dependency list. +# - make objects Builds the object files without linking the executable. +# - make tags Creates/updates tags file using ctags. + +# +# Set these variables... +# + +# The path of your TTCN-3 Test Executor installation: +# Uncomment this line to override the environment variable. +# TTCN3_DIR = + +# Your platform: (SOLARIS, SOLARIS8, LINUX, FREEBSD or WIN32) +PLATFORM = SOLARIS8 + +# Your C++ compiler: +CXX = g++ + +# Flags for the C++ preprocessor (and makedepend as well): +CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)/include + +# Flags for the C++ compiler: +CXXFLAGS = -Wall + +# Flags for the linker: +LDFLAGS = + +# Flags for the TTCN-3 and ASN.1 compiler: +COMPILER_FLAGS = -L + +# Execution mode: (either ttcn3 or ttcn3-parallel) +TTCN3_LIB = ttcn3-parallel + +# The path of your OpenSSL installation: +# If you do not have your own one, leave it unchanged. +OPENSSL_DIR = $(TTCN3_DIR) + +# Directory to store the archived source files: +# Note: you can set any directory except ./archive +ARCHIVE_DIR = backup + +# +# You may change these variables. Add your files if necessary... +# + +# TTCN-3 modules of this project: +TTCN3_MODULES = HTTP_Test_no_ASPs.ttcn HTTPmsg_PortType.ttcn HTTPmsg_Types.ttcn + +# ASN.1 modules of this project: +ASN1_MODULES = + +# C++ source & header files generated from the TTCN-3 & ASN.1 modules of +# this project: +GENERATED_SOURCES = HTTP_Test_no_ASPs.cc HTTPmsg_PortType.cc HTTPmsg_Types.cc +GENERATED_HEADERS = HTTP_Test_no_ASPs.hh HTTPmsg_PortType.hh HTTPmsg_Types.hh + +# C/C++ Source & header files of Test Ports, external functions and +# other modules: +USER_SOURCES = Abstract_Socket.cc HTTPmsg_PT.cc +USER_HEADERS = Abstract_Socket.hh HTTPmsg_PT.hh + +# Object files of this project that are needed for the executable test suite: +OBJECTS = HTTP_Test_no_ASPs.o HTTPmsg_PortType.o HTTPmsg_Types.o Abstract_Socket.o HTTPmsg_PT.o + +# Other files of the project (Makefile, configuration files, etc.) +# that will be added to the archived source files: +OTHER_FILES = Makefile + +# The name of the executable test suite: +TARGET = HTTP_Test_no_ASPs + +# +# Do not modify these unless you know what you are doing... +# Platform specific additional libraries: +# +SOLARIS_LIBS = -lsocket -lnsl -lxml2 +SOLARIS8_LIBS = -lsocket -lnsl -lxml2 +LINUX_LIBS = -lxml2 +FREEBSD_LIBS = -lxml2 +WIN32_LIBS = -lxml2 + +# +# Rules for building the executable... +# + +all: $(TARGET) ; + +objects: $(OBJECTS) ; + +$(TARGET): $(OBJECTS) + $(CXX) $(LDFLAGS) -o $@ $(OBJECTS) \ + -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \ + -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) + +.cc.o .c.o: + $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $< + +$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile + @if [ ! -f $@ ]; then rm -f compile; $(MAKE) compile; fi + +check: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler -s $(COMPILER_FLAGS) \ + $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES) + +compile: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler $(COMPILER_FLAGS) \ + $(TTCN3_MODULES) $(ASN1_MODULES) - $? + touch $@ + +browserdata.dat: $(TTCN3_MODULES) $(ASN1_MODULES) + $(TTCN3_DIR)/bin/compiler -B -s $(COMPILER_FLAGS) \ + $(TTCN3_MODULES) $(ASN1_MODULES) + +tags: $(TTCN3_MODULES) $(ASN1_MODULES) \ +$(USER_HEADERS) $(USER_SOURCES) + $(TTCN3_DIR)/bin/ctags_ttcn3 --line-directives=yes \ + $(TTCN3_MODULES) $(ASN1_MODULES) \ + $(USER_HEADERS) $(USER_SOURCES) + +clean: + -rm -f $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) compile \ + browserdata.dat tags *.log + +dep: $(GENERATED_SOURCES) $(USER_SOURCES) + makedepend $(CPPFLAGS) $(GENERATED_SOURCES) $(USER_SOURCES) + +archive: + mkdir -p $(ARCHIVE_DIR) + tar -cvhf - $(TTCN3_MODULES) $(ASN1_MODULES) \ + $(USER_HEADERS) $(USER_SOURCES) $(OTHER_FILES) \ + | gzip >$(ARCHIVE_DIR)/`basename $(TARGET) .exe`-`date '+%y%m%d-%H%M'`.tgz + +# +# Add your rules here if necessary... +# + +# DO NOT DELETE diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/installCAI.script b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/installCAI.script new file mode 100644 index 0000000000000000000000000000000000000000..fc9491d6eed4b85949e698e4ef67f0a890023483 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/installCAI.script @@ -0,0 +1,80 @@ +#! /bin/sh +# Run this script from _MAIN library. It will create links in bin to all necessary +# files. If you store test ports in different location set TESTPORT_PATH variable first, +# so that this script can locate test port files. + +# Create bin/ directory if does not exist +if [ ! -d ../bin2 ] ; then mkdir ../bin2 ; fi + +# Creating softlinks from main & protocols' directories +# +# Linking non-protocol-bound files + + +# NOTE: after creating dependencies using the make utility the soft link in the bin +# directory is overwritten with a new Makefile; copy this new Makefile back to the +# _Main directory if you want to preserve it. +ln -sf ../_Main/MakefileCAI ../bin2/Makefile + +#Test Execution + +ln -sf ../CAI/PortMappingTelnet.ttcn ../bin2 +ln -sf ../_Main/CAIConfigBuild.ttcn ../bin2 +ln -sf ../_Main/TestExecCAI.ttcn ../bin2 +ln -sf ../_Main/TestExecCAI.cfg ../bin2 + + + +# Linking CAI files + +tmppath=${PROTOCOLMODULE_PATH:-'/vobs/ttcn/TCC_Common/ProtocolModules/CAI_CNL113422/src'} + +ln -sf $tmppath/CAITopLevel.ttcn ../bin2 +ln -sf $tmppath/CAICommonDefinitions.ttcn ../bin2 +ln -sf $tmppath/CAI_Cms11AC.ttcn ../bin2 +ln -sf $tmppath/CAI_Cms11Hlr.ttcn ../bin2 +ln -sf $tmppath/CAI_FmcCac.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmAAA.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmAuc.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmEir.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmFnr.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmHlr.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmMMC.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmMML.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmMMS.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmMc.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmMoIP.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmMpc.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmPps.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmVIG.ttcn ../bin2 +ln -sf $tmppath/CAI_Imsich.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmGMRM.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmIPMM.ttcn ../bin2 +ln -sf $tmppath/CAI_GsmFBC.ttcn ../bin2 +ln -sf $tmppath/CAI_EMM2_1.ttcn ../bin2 +ln -sf $tmppath/CAI_EMM2_0.ttcn ../bin2 +ln -sf $tmppath/CAI_MINSAT.ttcn ../bin2 +ln -sf $tmppath/CAI_IMT3_0.ttcn ../bin2 +ln -sf $tmppath/CAI_EPC1_0.ttcn ../bin2 + +#Encoders +ln -sf $tmppath/CAI_EncDec.cc ../bin2 +ln -sf ../CAI/CAI_DecEnc.cc ../bin2 + + +# Linking test ports + +tmppath=${TESTPORT_PATH:-'/vobs/ttcn/TCC_Common/TestPorts'} + +ln -sf $tmppath/TELNETasp_CNL113320/src/TELNETasp_PT.cc ../bin2 +ln -sf $tmppath/TELNETasp_CNL113320/src/TELNETasp_PT.hh ../bin2 +ln -sf $tmppath/TELNETasp_CNL113320/src/TELNETasp_PortType.ttcn ../bin2 +ln -sf $tmppath/HTTPmsg_CNL113312/src/HTTPmsg_Types.ttcn ../bin2 +ln -sf $tmppath/HTTPmsg_CNL113312/src/HTTPmsg_PT.cc ../bin2 +ln -sf $tmppath/HTTPmsg_CNL113312/src/HTTPmsg_PT.hh ../bin2 +ln -sf $tmppath/HTTPmsg_CNL113312/src/HTTPmsg_PortType.ttcn ../bin2 + +tmppath=${TESTPORT_PATH:-'/vobs/ttcn/TCC_Releases/TestPorts'} + +ln -sf $tmppath/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.cc ../bin2 +ln -sf $tmppath/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.hh ../bin2 diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/lssl_script b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/lssl_script new file mode 100644 index 0000000000000000000000000000000000000000..e0db83f5a8d9ded915af74c1ad21448842835711 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/lssl_script @@ -0,0 +1,12 @@ +#!/bin/sh + +editcmd=' + +s/OPENSSL_DIR = $(TTCN3_DIR)/OPENSSL_DIR = \/mnt\/TTCN\/Tools\/openssl-0.9.8e/g + +s/CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)\/include/CPPFLAGS = -D$(PLATFORM) -DAS_USE_SSL -I$(TTCN3_DIR)\/include -I$(OPENSSL_DIR)\/include/g + +s/ -lcrypto/ -L$(OPENSSL_DIR)\/lib -lssl -lcrypto/g +' +sed -e "$editcmd" <$1 >$2 + diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/server.crt b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/server.crt new file mode 100644 index 0000000000000000000000000000000000000000..2381e9fb5405869d67d748e4e8ed89a2ee6870a3 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/server.crt @@ -0,0 +1,69 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 2 (0x2) + Signature Algorithm: md5WithRSAEncryption + Issuer: C=HU, ST=Pest, L=Budapest, O=Ericsson Telecom Hungary, OU=RUST, CN=a99027.eth.ericsson.se/emailAddress=Eduard.Czimbalmos@ericsson.com + Validity + Not Before: Jan 8 11:39:44 2004 GMT + Not After : Jan 7 11:39:44 2005 GMT + Subject: C=HU, ST=Pest, O=Ericsson Telecom Hungary, OU=RUST, CN=a99027.eth.ericsson.se/emailAddress=Eduard.Czimbalmos@ericsson.com + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + RSA Public Key: (1024 bit) + Modulus (1024 bit): + 00:ac:e3:07:4b:97:49:4f:27:35:fd:c5:7f:d1:b5: + 4a:f4:3c:53:cf:bf:36:31:02:19:e0:6f:8f:a2:34: + 39:0f:d7:4f:4f:e0:4b:36:dc:5c:ef:3f:a4:fb:60: + 07:3d:50:50:d5:6f:0e:ce:60:7e:98:ed:de:b9:de: + 63:60:9b:ec:86:ff:d6:79:34:3f:e7:c2:16:d4:d3: + d8:6d:c6:a5:9f:ef:7d:7a:be:25:c1:c5:88:ec:65: + 0a:ca:c5:16:2b:3d:3d:d8:de:a8:32:b5:c4:9b:5d: + 9c:25:91:ef:65:9a:3a:9c:80:ea:95:0b:90:b0:9f: + 75:ba:aa:6d:8a:24:35:54:89 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + Netscape Comment: + OpenSSL Generated Certificate + X509v3 Subject Key Identifier: + C1:32:B9:1E:DC:0C:44:1C:69:7F:AE:6C:85:B6:DA:59:35:0C:D2:E6 + X509v3 Authority Key Identifier: + keyid:E5:52:E4:91:CB:97:9B:48:D2:67:A3:49:EE:7E:C3:44:4B:BE:9B:2C + DirName:/C=HU/ST=Pest/L=Budapest/O=Ericsson Telecom Hungary/OU=RUST/CN=a99027.eth.ericsson.se/emailAddress=Eduard.Czimbalmos@ericsson.com + serial:00 + + Signature Algorithm: md5WithRSAEncryption + 9b:bd:ab:b4:4b:da:df:e1:f9:97:6a:37:ad:34:c8:01:6b:ba: + 20:7a:f3:77:ba:f7:d9:68:8e:f5:e6:82:dd:e3:e1:50:77:b7: + 02:39:12:4c:b9:92:2e:ac:0e:a2:1d:2e:9a:eb:50:fa:df:3e: + d3:45:57:64:9c:3f:fc:7b:d3:f1:39:ff:68:61:46:cd:68:13: + 5d:71:cf:60:9b:68:2b:87:99:31:54:3d:a9:54:27:c3:f3:eb: + 43:6c:ef:d7:bb:3d:72:f8:5b:13:e6:39:a9:f6:d7:1c:d5:23: + ca:be:3a:93:d3:39:43:a0:54:e8:29:21:cf:aa:d8:90:88:0a: + a2:c4 +-----BEGIN CERTIFICATE----- +MIIEBjCCA2+gAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBsTELMAkGA1UEBhMCSFUx +DTALBgNVBAgTBFBlc3QxETAPBgNVBAcTCEJ1ZGFwZXN0MSEwHwYDVQQKExhFcmlj +c3NvbiBUZWxlY29tIEh1bmdhcnkxDTALBgNVBAsTBFJVU1QxHzAdBgNVBAMTFmE5 +OTAyNy5ldGguZXJpY3Nzb24uc2UxLTArBgkqhkiG9w0BCQEWHkVkdWFyZC5Demlt +YmFsbW9zQGVyaWNzc29uLmNvbTAeFw0wNDAxMDgxMTM5NDRaFw0wNTAxMDcxMTM5 +NDRaMIGeMQswCQYDVQQGEwJIVTENMAsGA1UECBMEUGVzdDEhMB8GA1UEChMYRXJp +Y3Nzb24gVGVsZWNvbSBIdW5nYXJ5MQ0wCwYDVQQLEwRSVVNUMR8wHQYDVQQDExZh +OTkwMjcuZXRoLmVyaWNzc29uLnNlMS0wKwYJKoZIhvcNAQkBFh5FZHVhcmQuQ3pp +bWJhbG1vc0Blcmljc3Nvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB +AKzjB0uXSU8nNf3Ff9G1SvQ8U8+/NjECGeBvj6I0OQ/XT0/gSzbcXO8/pPtgBz1Q +UNVvDs5gfpjt3rneY2Cb7Ib/1nk0P+fCFtTT2G3GpZ/vfXq+JcHFiOxlCsrFFis9 +PdjeqDK1xJtdnCWR72WaOpyA6pULkLCfdbqqbYokNVSJAgMBAAGjggE9MIIBOTAJ +BgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0 +aWZpY2F0ZTAdBgNVHQ4EFgQUwTK5HtwMRBxpf65shbbaWTUM0uYwgd4GA1UdIwSB +1jCB04AU5VLkkcuXm0jSZ6NJ7n7DREu+myyhgbekgbQwgbExCzAJBgNVBAYTAkhV +MQ0wCwYDVQQIEwRQZXN0MREwDwYDVQQHEwhCdWRhcGVzdDEhMB8GA1UEChMYRXJp +Y3Nzb24gVGVsZWNvbSBIdW5nYXJ5MQ0wCwYDVQQLEwRSVVNUMR8wHQYDVQQDExZh +OTkwMjcuZXRoLmVyaWNzc29uLnNlMS0wKwYJKoZIhvcNAQkBFh5FZHVhcmQuQ3pp +bWJhbG1vc0Blcmljc3Nvbi5jb22CAQAwDQYJKoZIhvcNAQEEBQADgYEAm72rtEva +3+H5l2o3rTTIAWu6IHrzd7r32WiO9eaC3ePhUHe3AjkSTLmSLqwOoh0umutQ+t8+ +00VXZJw//HvT8Tn/aGFGzWgTXXHPYJtoK4eZMVQ9qVQnw/PrQ2zv17s9cvhbE+Y5 +qfbXHNUjyr46k9M5Q6BU6Ckhz6rYkIgKosQ= +-----END CERTIFICATE----- diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/server.key b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/server.key new file mode 100644 index 0000000000000000000000000000000000000000..8d6ece88633f8f5cb81d73de05005fa42c3523cc --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/demo/server.key @@ -0,0 +1,18 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,EBFCB69E20E5D263 + +KrzktC2qxWrTeP4NnRvqaI6TZWi7yyiEhSaj5/mH4RTCb2eDd6Ro+7TxTUQHVPW5 ++FVkdYIa6sMXjUmiKIiFTqcVH6uYl2SgK+tqaAIsEUIzJIYiwQh3sXMOcN3ZuFET +JYb1EypMCqFHAjfYHxFF4lJzryc5I16uOV8ajIfxvPZVcE7V5YPr9sMRxrZV8k/p +qj/TNWuDNnwJzVEtZnEUKPuHqLEXHI8kq9sqrDiDHZMAVwQb6ABpE74RfHbCYO2N +PnYZE6veiOTSZATQzjEhzGXiXslQqozRWH5iFpTI5ND00Zvm7u9AfYxgX/OWHm0/ +8SF0sxC/A+oSu00XKWVLQPvHekxGRdfqHqygdXAdlZS0BxtkUtln/ago9/QekRHL +u8O1iGz03mozFWn52VmEy9O1+V22fmpiuM95T+mzPCOwEAuN3O4BxGUkP/kwLrkY +uxeCe+Cm/3jKijMkm2ejKJhlmDS4sLuvEHG+H5C78W+7U3mNJ9/aMTTQR44H0vXz +f45OfrSt3eZsH10OoNWGk/T1EiJauOQx948bF3e6Pl4TrB2/O2GdRUKrZk5cvNQw +zHmY9JNTTPWA5rmc7HfRn7rHJ5O1eZ1P4oBA+1rTuIbqwykf1CzTWZvOH1cK77uP +0ZsL/lzJRz8NrRv768rqEm8UpDdP96XwZ9rx9euW1r+cA0NGcD+bRssm4vIWxI3F +JMG5cN2X58URsIpkTvQtA5s7XJ0y0TqMcnhtcrSz+dXyq6otT92uO3qfGZWbAdva +Gsogib7OS/BSNfvaEHIplT5u/xy4ney1G7PkoEr89WFwR6gufElJyw== +-----END RSA PRIVATE KEY----- diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/FD/HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, Function Specification.adoc b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/FD/HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, Function Specification.adoc new file mode 100644 index 0000000000000000000000000000000000000000..86d945d87c0eaf216e7c8e00795e1d2b86ba8f4c --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/FD/HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, Function Specification.adoc @@ -0,0 +1,255 @@ +--- +Author: István Óváry +Version: 155 17-CNL 113 312, Rev. E +Date: 2010-12-14 + +--- += HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, Function Specification +:author: István Óváry +:revnumber: 155 17-CNL 113 312, Rev. E +:revdate: 2010-12-14 +:toc: + +== How to Read This Document + +This is the Function Specification for the HTTPmsg_CNL113312 (called HTTP from now on) test port. The HTTP test port is developed for the TTCN-3 Toolset with TITAN. This document is intended to be read together with User’s Guide <<_3, [3]>> + +== Scope + +The purpose of this document is to specify the functionality of the HTTP test port. The document is primarily addressed to the end users of the product. Basic knowledge of TTCN-3, TITAN TTCN-3 Test Executor and the HTTP protocol is valuable when reading this document (see <<_1, [1]>> and <<_2, [2]>> + + +This document is based on specifications of Hypertext Transfer Protocol (HTTP1.1) defined by http://www.ietf.org/rfc/rfc2616.txt[RFC 2616]. + += General + +The HTTP Test Port makes possible to execute test suites towards an IUT. The test port allows sending and receiving HTTP messages between the test suite and IUT via a TCP/IP socket connection. + +The HTTP Test Port can be used as a protocol module via encoding and decoding functions, see <>. + +Both IPv4 and IPv6 are supported. + +The test port can handle multiple connections. Every connection gets an 'id' when it is established. When sending HTTP messages, the `client_id` parameter selects the connection on which the message should be sent. If it is set to `omit`, the HTTP message will be sent on the first available connection. + +The communication between the HTTP test port and the TITAN RTE is done by using the API functions described in <<_2, [2]>> + +The HTTP protocol messages are then transferred by the HTTP test port to the IUT through a network connection. + +See the transfer of HTTP protocol messages by the HTTP test port to the IUT through a network connection below: + +image::images/overview.png[alt] + += Function Specification + +== Implementation + +=== Environment + +The HTTP test port makes use of the services provided by the UNIX socket interface. When connecting to an SSL enabled IUT, the connection is secured with the OpenSSL toolkit based on configuration data. Every test port is able to handle one listening (server) port and multiple TCP connections. Proxy is supported. + +=== Module Structure + +The HTTP test port is implemented in the following TTCN-3 modules: + +* _HTTPmsg_Types.ttcn_ +* _HTTPmsg_PortType.ttcn_ + +The file _HTTPmsg_Types.ttcn_ defines the HTTP message types and ASPs to control the TCP connection, furthermore contains the declaration of the declaration of the encoding and decoding external functions. + +The port type is defined in _HTTPmsg_PortType.ttcn_. + +The c++ implementation of the test port and the encoding-decoding functions are contained in the following files: + +* _HTTPmsg_PT.hh_ +* _HTTPmsg_PT.cc_ + +The encoding and decoding functions also have been implemented here. + +The port is using the Abstract_Socket, a common component with the product number CNL 113 384, implementing the basic sending, receiving and socket handling routines. The following files should be included in the Makefile: + +* _Abstract_Socket.hh_ +* _Abstract_Socket.cc_ + +== Configuration + +The configuration of the HTTP test port is done by the TITAN RTE configuration file. The description of the specific parameters can be found in the HTTP test port User’s Guide <<_2, [2]>> + + +=== Notification ASPs + +The test port is able to provide the result of the Connect, Listen operations, and inform the server test suite if a new client has connected or the remote end has disconnected a specific connection. This behavior is switched on by setting the `use_notification_ASPs` test port parameter to `_"yes"_`. + +== Start Procedure + +After the test port is mapped by TITAN RTE to the IUT system’s interface port, it waits for a `Connect` or a `Listen` ASP. + +The `Connect` ASP sets up a connection toward an HTTP server, on which instances of HTTP Messages can be sent and received. + +The `Listen` ASP commands the test port to wait for incoming connections from HTTP clients by opening a listening port. + +For detailed operation see the User Guide <<_3, [3]>> + +[[sending-receiving-http-messages]] +== Sending/Receiving HTTP Messages + +=== HTTP Messages Sent by the Test Port + +The HTTP test port is able to send and receive `HTTPMessage` structures. The `HTTPMessage` can be one of the following types: + +* `HTTPRequest` ++ +The Request message represents a single request to perform by the HTTP server, usually to access a resource on the server. + +* `HTTPResponse` ++ +The Response message is sent by the HTTP server to the client. It includes the return status code of the request and the requested resource. + +* `HTTPRequest_binary_body` ++ +The same as the `HTTPRequest` message. It is passed to TTCN when the body of the message contains non-ascii characters. + +* `HTTPResponse_binary_body` ++ +The same as the `HTTPResponse` message. It is passed to TTCN when the body of the message contains non-ascii characters. + +Apart from the `HTTPRequest` and `HTTPResponse` ASPs above, the `erronous_msg` is received by the test port and sent to the test suite: + +* `HTTP_erronous_msg` If a message is received on the connection, which can not be decoded as a HTTP1.1 or HTTP1.0 message, the `Message` will contain an erroneous message with the `client_id`, and sent to the test suite. + +For detailed operation see the User Guide <<_3, [3]>> + +[[encoding_and_decoding_functions]] +== Encoding and Decoding Functions + +If the test port is used as protocol module, the following encoder and decoder funcions are available: + +[options="header"] +|===================================================== +|Name |Type of formal parameters |Type of return value +|`enc_HTTPMessage` |HTTPMessage |octetstring +|`dec_HTTPMessage` |in octetstring stream + +inout HTTPMessage msg + +in boolean socket debugging |integer +|===================================================== + +The encoder function returns with an octetstring as the encoded form of the `HTTPMessage` structure. + +The decoder function returns with the number of not processed octets of the input octetstring stream and the decoded message in its inout parameter. + +If the return value is not zero, there are not processed octetets. Those octets can be gathered from the original octetstring by the user and can be processed by calling the decoding function once again with the modified stream. This process is necessary only if more http message can be found in the original stream. + +== Message Length Function + +The following function can be used to calculate the length of the received HTTP message. It returns the length of the received HTTP message in octets or -1 if the length can not be determined. + +[cols=",,",options="header",] +|===================================================== +|Name |Type of formal parameters |Type of return value +|`f_HTTPMessage_len` |in octetstring stream |integer +|===================================================== + +== Closing Down + +=== Close + +The `Close` shuts down the client connection between the test port and the IUT. The `client_id` parameter of the `Close` ASP identifies the connection to be closed. If it is set to omit, all current connections will be closed. + +The `Half_close` ASP indicates that the remote end closed the connection. + +=== Shutdown + +Instructs the test port to close the server listening port. The client connections will remain open. The server will not accept further client connections until a `Listen` ASP is sent again. + +For detailed operation see the User Guide <<_3, [3]>> + +== Logging + +The type of information that will be logged can be categorized into two groups. The first one consists of information that shows the flow of the internal execution of the test port, e.g. important events, which function that is currently executing etc. The second group deals with presenting valuable data, e.g. presenting the content of a PDU. The logging printouts will be directed to the RTE log file. The user is able to decide whether logging is to take place or not by setting appropriate configuration data, see <<_2, [2]>> + + +== Error Handling + +Erroneous behavior detected during runtime may be presented on the console and directed into the RTE log file. The following two types of messages are taken care of: + +* Errors: information about errors detected is provided. If an error occurs the execution of the test case will stop immediately. The test ports will be unmapped. +* Warnings: information about warnings detected is provided. The execution continues after the warning is shown. + +== SSL Functionality + +The SSL implementation is based on the same OpenSSL as TITAN. Protocols SSLv2, SSLv3 and TLSv1 are supported. + +=== Compilation + +The usage of SSL and even the compilation of the SSL related code parts are optional. This is because SSL related code parts cannot be compiled without the OpenSSL installed. + +The compilation of SSL related code parts can be disabled by not defining the `AS_USE_SSL` macro in the _Makefile_ during the compilation. If the macro is defined in the _Makefile_, the SSL code parts are compiled to the executable test code. The usage of the SSL can be enabled/disabled by setting the `use_ssl` field of the `Connect`/`Listen` ASPs. For more information about the compilation see <<_3, [3]>> + +=== Authentication + +The test port provides both server side and client side authentication. When authenticating the other side, a certificate is requested and the own trusted certificate authorities’ list is sent. The received certificate is verified whether it is a valid certificate or not (the public and private keys are matching). No further authentication is performed (e.g. whether hostname is present in the certificate). The verification can be enabled/disabled in the runtime configuration file, see <<_3, [3]>>. + +In server mode the test port will always send its certificate and trusted certificate authorities’ list to its clients. If verification is enabled in the runtime configuration file, the server will request for a client’s certificate. If the client does not send a valid certificate, the connection will be refused. If verification is disabled, then the connection will be accepted even if the client does not send or send an invalid certificate. + +In client mode the test port will send its certificate to the server on the server’s request. If verification is enabled in the runtime configuration file, the client will send its own trusted certificate authorities’ list to the server and will verify the server’s certificate as well. If the server’s certificate is not valid, the SSL connection will not be established. If verification is disabled, then the connection will be accepted even if the server does not send or send an invalid certificate. + +The own certificate(s), the own private key file, the optional password protecting the own private key file and the trusted certificate authorities’ list file can be specified in the runtime configuration file, see <<_3, [3]>>. + +The test port will check the consistency between the own private key and the public key (based on the own certificate) automatically. If the check fails, a warning is issued and execution continues. + +=== Other Features + +Both client and server support SSLv2, SSLv3 and TLSv1, however no restriction is possible to use only a subset of these. The used protocol will be selected during the SSL handshake automatically. + +The usage of SSL session resumption can be enabled/disabled in the runtime configuration file, see <<_3, [3]>>. + +The allowed ciphering suites can be restricted in the runtime configuration file, see <<_3, [3]>>. + +The SSL re-handshaking requests are accepted and processed, however re-handshaking cannot be initiated from the test port. + +== Limitations + +* No restriction is possible on the used protocols (e.g. use only SSLv2); it is determined during SSL handshake between the peers. +* SSL re-handshaking cannot be initiated from the test port. +* The own certificate file(s), the own private key file and the trusted certificate authorities’ list file must be in PEM format. Other formats are not supported. + += Terminology + +*Sockets:* + +The sockets is a method for communication between a client program and a server program in a network. A socket is defined as "the endpoint in a connection." Sockets are created and used with a set of programming requests or "function calls" sometimes called the sockets application programming interface (API). The most common sockets API is the Berkeley UNIX C language interface for sockets. Sockets can also be used for communication between processes within the same computer. + += Abbreviations + +API:: Application Program Interface + +ASP:: Abstract Service Primitive + +IUT:: Implementation Under Test + +RTE:: Run-Time Environment + +HTTP:: Hypertext Transfer Protocol + +SUT:: System Under Test + +SSL:: Secure Sockets Layer + +TTCN-3:: Testing and Test Control Notation version 3 + += References + +[[_1]] +[1] ETSI ES 201 873-1 v3.1.1 (2005-06)The Testing and Test Control Notation version 3; Part 1: Core Language + +[[_2]] +[2] TITAN User Guide + +[[_3]] +[3] HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, User Guide + +[[_4]] +[4] http://www.ietf.org/rfc/rfc2616.txt[RFC 2616] + +Hypertext Transfer Protocol – HTTP/1.1 + +[[_5]] +[5] OpenSSL toolkit + +http://www.openssl.org diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/FD/HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, Function Specification.pdf b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/FD/HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, Function Specification.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dad4f64a86c52bd04ccd13d8bd753b38e337491e --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/FD/HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, Function Specification.pdf @@ -0,0 +1,7798 @@ +%PDF-1.3 +% +1 0 obj +<< /Title (HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, Function Specification) +/Author +/Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2) +/Producer +/ModDate (D:20180815082627+02'00') +/CreationDate (D:20180815082627+02'00') +>> +endobj +2 0 obj +<< /Type /Catalog +/Pages 3 0 R +/Names 14 0 R +/Outlines 144 0 R +/PageLabels 174 0 R +/PageMode /UseOutlines +/OpenAction [7 0 R /FitH 842.89] +/ViewerPreferences << /DisplayDocTitle true +>> +>> +endobj +3 0 obj +<< /Type /Pages +/Count 10 +/Kids [7 0 R 10 0 R 12 0 R 30 0 R 37 0 R 47 0 R 53 0 R 65 0 R 75 0 R 81 0 R] +>> +endobj +4 0 obj +<< /Length 2 +>> +stream +q + +endstream +endobj +5 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 4 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +>> +>> +endobj +6 0 obj +<< /Length 950 +>> +stream +q +/DeviceRGB cs +0.6 0.6 0.6 scn +/DeviceRGB CS +0.6 0.6 0.6 SCN + +BT +102.0202 361.6965 Td +/F1.0 27 Tf +[<485454506d73675f434e4c3131333331322054> 29.7852 <65737420506f727420666f72>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6 0.6 0.6 scn +0.6 0.6 0.6 SCN + +BT +73.5373 327.6765 Td +/F1.0 27 Tf +[<5454> 20.0195 <434e2d332054> 29.7852 <6f6f6c736574207769746820544954> 60.0586 <414e2c2046756e6374696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6 0.6 0.6 scn +0.6 0.6 0.6 SCN + +BT +381.341 293.6565 Td +/F1.0 27 Tf +<53706563696669636174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.0941 0.0941 0.0941 scn +0.0941 0.0941 0.0941 SCN + +BT +467.311 259.1849 Td +/F1.0 13 Tf +<49737476876e20ee76877279> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +315.5453 229.3714 Td +/F1.0 10.5 Tf +[<56> 60.0586 <657273696f6e203135352031372d434e4c20313133203331322c20526576> 69.8242 <2e20452c20323031302d31322d3134>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q + +endstream +endobj +7 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 6 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +>> +>> +>> +endobj +8 0 obj +<< /Type /Font +/BaseFont /43219f+NotoSerif +/Subtype /TrueType +/FontDescriptor 176 0 R +/FirstChar 32 +/LastChar 255 +/Widths 178 0 R +/ToUnicode 177 0 R +>> +endobj +9 0 obj +<< /Length 19961 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 782.394 Td +/F2.0 22 Tf +[<54> 29.7852 <61626c65206f6620436f6e74656e7473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 751.856 Td +/F1.0 10.5 Tf +<486f7720746f2052656164205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +193.0981 751.856 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 751.856 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 751.856 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 733.376 Td +/F1.0 10.5 Tf +<53636f7065> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +80.8636 733.376 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 733.376 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 733.376 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 714.896 Td +/F1.0 10.5 Tf +[<47656e6572> 20.0195 <616c>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +91.5526 714.896 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 714.896 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 714.896 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 696.416 Td +/F1.0 10.5 Tf +<46756e6374696f6e2053706563696669636174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +161.0311 696.416 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 696.416 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 696.416 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 677.936 Td +/F1.0 10.5 Tf +<496d706c656d656e746174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +144.9976 677.936 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 677.936 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 677.936 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 659.456 Td +/F1.0 10.5 Tf +<456e7669726f6e6d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +139.6531 659.456 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 659.456 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 659.456 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 640.976 Td +/F1.0 10.5 Tf +<4d6f64756c6520537472756374757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +161.0311 640.976 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 640.976 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 640.976 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 622.496 Td +/F1.0 10.5 Tf +[<436f6e6669677572> 20.0195 <6174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +134.3086 622.496 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 622.496 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 622.496 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 604.016 Td +/F1.0 10.5 Tf +<4e6f74696669636174696f6e2041535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +161.0311 604.016 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 604.016 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 604.016 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 585.536 Td +/F1.0 10.5 Tf +<53746172742050726f636564757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +139.6531 585.536 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 585.536 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 585.536 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 567.056 Td +/F1.0 10.5 Tf +<53656e64696e672f526563656976696e672048545450204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +235.8541 567.056 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 567.056 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 567.056 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 548.576 Td +/F1.0 10.5 Tf +[<48545450204d657373616765732053656e742062> 20.0195 <79207468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +257.2321 548.576 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 548.576 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 548.576 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 530.096 Td +/F1.0 10.5 Tf +<456e636f64696e6720616e64204465636f64696e672046756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +230.5096 530.096 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 530.096 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 530.096 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 511.616 Td +/F1.0 10.5 Tf +<4d657373616765204c656e6774682046756e6374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +187.7536 511.616 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 511.616 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 511.616 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 493.136 Td +/F1.0 10.5 Tf +<436c6f73696e6720446f776e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +128.9641 493.136 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 493.136 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 493.136 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 474.656 Td +/F1.0 10.5 Tf +<436c6f7365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +102.2416 474.656 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 474.656 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 474.656 Td +/F1.0 10.5 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 456.176 Td +/F1.0 10.5 Tf +<53687574646f776e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +123.6196 456.176 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 456.176 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 456.176 Td +/F1.0 10.5 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 437.696 Td +/F1.0 10.5 Tf +<4c6f6767696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +102.2416 437.696 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 437.696 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 437.696 Td +/F1.0 10.5 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 419.216 Td +/F1.0 10.5 Tf +<4572726f722048616e646c696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +139.6531 419.216 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 419.216 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 419.216 Td +/F1.0 10.5 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 400.736 Td +/F1.0 10.5 Tf +<53534c2046756e6374696f6e616c697479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +150.3421 400.736 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 400.736 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 400.736 Td +/F1.0 10.5 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 382.256 Td +/F1.0 10.5 Tf +<436f6d70696c6174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +134.3086 382.256 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 382.256 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 382.256 Td +/F1.0 10.5 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 363.776 Td +/F1.0 10.5 Tf +[<41> 20.0195 <757468656e7469636174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +150.3421 363.776 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 363.776 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 363.776 Td +/F1.0 10.5 Tf +<36> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 345.296 Td +/F1.0 10.5 Tf +[<4f746865722046> 40.0391 <65617475726573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +150.3421 345.296 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 345.296 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 345.296 Td +/F1.0 10.5 Tf +<36> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 326.816 Td +/F1.0 10.5 Tf +<4c696d69746174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +118.2751 326.816 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 326.816 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 326.816 Td +/F1.0 10.5 Tf +<36> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 308.336 Td +/F1.0 10.5 Tf +[<54> 29.7852 <65726d696e6f6c6f6779>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +112.9306 308.336 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 308.336 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 308.336 Td +/F1.0 10.5 Tf +<37> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 289.856 Td +/F1.0 10.5 Tf +<416262726576696174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +123.6196 289.856 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 289.856 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 289.856 Td +/F1.0 10.5 Tf +<37> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 271.376 Td +/F1.0 10.5 Tf +<5265666572656e636573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +107.5861 271.376 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 271.376 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 271.376 Td +/F1.0 10.5 Tf +<37> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q + +endstream +endobj +10 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 9 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 17 0 R +/F1.0 8 0 R +>> +>> +/Annots [88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R] +>> +endobj +11 0 obj +<< /Length 8552 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 782.394 Td +/F2.0 22 Tf +<486f7720746f2052656164205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0951 Tw + +BT +48.24 753.206 Td +/F1.0 10.5 Tf +<54686973206973207468652046756e6374696f6e2053706563696669636174696f6e20666f722074686520485454506d73675f434e4c313133333132202863616c6c656420485454502066726f6d206e6f77206f6e29207465737420706f72742e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1357 Tw + +BT +48.24 737.426 Td +/F1.0 10.5 Tf +[<5468652048545450207465737420706f727420697320646576656c6f70656420666f7220746865205454> 20.0195 <434e2d332054> 29.7852 <6f6f6c736574207769746820544954> 60.0586 <414e2e205468697320646f63756d656e7420697320696e74656e64656420746f206265>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 721.646 Td +/F1.0 10.5 Tf +[<7265616420746f67657468657220776974682055736572> -29.7852 ] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +209.4547 721.646 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 677.534 Td +/F2.0 22 Tf +<53636f7065> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.523 Tw + +BT +48.24 648.346 Td +/F1.0 10.5 Tf +<54686520707572706f7365206f66207468697320646f63756d656e7420697320746f2073706563696679207468652066756e6374696f6e616c697479206f66207468652048545450207465737420706f72742e2054686520646f63756d656e74206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1825 Tw + +BT +48.24 632.566 Td +/F1.0 10.5 Tf +[<7072696d6172696c792061646472657373656420746f2074686520656e64207573657273206f66207468652070726f647563742e204261736963206b6e6f776c65646765206f66205454> 20.0195 <434e2d332c20544954> 60.0586 <414e205454> 20.0195 <434e2d332054> 29.7852 <657374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 616.786 Td +/F1.0 10.5 Tf +<4578656375746f7220616e642074686520485454502070726f746f636f6c2069732076616c7561626c65207768656e2072656164696e67207468697320646f63756d656e74202873656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +436.194 616.786 Td +/F1.0 10.5 Tf +<5b315d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +449.6025 616.786 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +474.1515 616.786 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.768 Tw + +BT +48.24 589.006 Td +/F1.0 10.5 Tf +[<5468697320646f63756d656e74206973206261736564206f6e2073706563696669636174696f6e73206f6620487970657274657874205472> 20.0195 <616e736665722050726f746f636f6c202848545450312e312920646566696e65642062> 20.0195 <7920>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +0.768 Tw + +BT +527.5415 589.006 Td +/F1.0 10.5 Tf +<524643> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +48.24 573.226 Td +/F1.0 10.5 Tf +<32363136> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +71.718 573.226 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 523.774 Td +/F2.0 27 Tf +[<47656e6572> 20.0195 <616c>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.3523 Tw + +BT +48.24 493.126 Td +/F1.0 10.5 Tf +[<54686520485454502054> 29.7852 <65737420506f7274206d616b> 20.0195 <657320706f737369626c6520746f206578656375746520746573742073756974657320746f776172647320616e20495554> 89.8438 <2e20546865207465737420706f727420616c6c6f7773>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.2291 Tw + +BT +48.24 477.346 Td +/F1.0 10.5 Tf +[<73656e64696e6720616e6420726563656976696e672048545450206d65737361676573206265747765656e20746865207465737420737569746520616e64204955542076696120612054> 20.0195 <43502f495020736f636b> 20.0195 <6574>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 461.566 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.685 Tw + +BT +48.24 433.786 Td +/F1.0 10.5 Tf +[<54686520485454502054> 29.7852 <65737420506f72742063616e206265207573656420617320612070726f746f636f6c206d6f64756c652076696120656e636f64696e6720616e64206465636f64696e672066756e6374696f6e732c20736565>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +48.24 418.006 Td +/F1.0 10.5 Tf +<456e636f64696e6720616e64204465636f64696e672046756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +218.3295 418.006 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 390.226 Td +/F1.0 10.5 Tf +<426f7468204950763420616e6420495076362061726520737570706f727465642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6256 Tw + +BT +48.24 362.446 Td +/F1.0 10.5 Tf +<546865207465737420706f72742063616e2068616e646c65206d756c7469706c6520636f6e6e656374696f6e732e20457665727920636f6e6e656374696f6e206765747320616e2027696427207768656e2069742069732065737461626c69736865642e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.3239 Tw + +BT +48.24 346.666 Td +/F1.0 10.5 Tf +<5768656e2073656e64696e672048545450206d657373616765732c2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +3.3239 Tw + +BT +240.8292 346.666 Td +/F3.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.3239 Tw + +BT +288.0792 346.666 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d657465722073656c656374732074686520636f6e6e656374696f6e206f6e20776869636820746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7291 Tw + +BT +48.24 330.886 Td +/F1.0 10.5 Tf +<6d6573736167652073686f756c642062652073656e742e2049662069742069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.7291 Tw + +BT +246.407 330.886 Td +/F3.0 10.5 Tf +<6f6d6974> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7291 Tw + +BT +267.407 330.886 Td +/F1.0 10.5 Tf +<2c207468652048545450206d6573736167652077696c6c2062652073656e74206f6e2074686520666972737420617661696c61626c65> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 315.106 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.5376 Tw + +BT +48.24 287.326 Td +/F1.0 10.5 Tf +[<54686520636f6d6d756e69636174696f6e206265747765656e207468652048545450207465737420706f727420616e642074686520544954> 60.0586 <414e2052> 20.0195 <544520697320646f6e652062> 20.0195 <79207573696e672074686520415049>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 271.546 Td +/F1.0 10.5 Tf +<66756e6374696f6e732064657363726962656420696e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +162.3435 271.546 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4851 Tw + +BT +48.24 243.766 Td +/F1.0 10.5 Tf +[<54686520485454502070726f746f636f6c206d6573736167657320617265207468656e207472> 20.0195 <616e736665727265642062> 20.0195 <79207468652048545450207465737420706f727420746f2074686520495554207468726f7567682061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 227.986 Td +/F1.0 10.5 Tf +<6e6574776f726b20636f6e6e656374696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5792 Tw + +BT +48.24 200.206 Td +/F1.0 10.5 Tf +[<53656520746865207472> 20.0195 <616e73666572206f6620485454502070726f746f636f6c206d657373616765732062> 20.0195 <79207468652048545450207465737420706f727420746f2074686520495554207468726f7567682061206e6574776f726b>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 184.426 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e2062656c6f773a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +12 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 11 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 17 0 R +/F1.0 8 0 R +/F3.0 26 0 R +>> +/XObject << /Stamp1 142 0 R +>> +>> +/Annots [18 0 R 20 0 R 21 0 R 22 0 R 23 0 R 25 0 R 27 0 R] +>> +endobj +13 0 obj +[12 0 R /XYZ 0 841.89 null] +endobj +14 0 obj +<< /Type /Names +/Dests 15 0 R +>> +endobj +15 0 obj +<< /Kids [61 0 R 62 0 R] +>> +endobj +16 0 obj +[12 0 R /XYZ 0 841.89 null] +endobj +17 0 obj +<< /Type /Font +/BaseFont /c62bea+NotoSerif-Bold +/Subtype /TrueType +/FontDescriptor 180 0 R +/FirstChar 32 +/LastChar 255 +/Widths 182 0 R +/ToUnicode 181 0 R +>> +endobj +18 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [209.4547 718.58 222.8632 732.86] +/Type /Annot +>> +endobj +19 0 obj +[12 0 R /XYZ 0 705.83 null] +endobj +20 0 obj +<< /Border [0 0 0] +/Dest (_1) +/Subtype /Link +/Rect [436.194 613.72 449.6025 628.0] +/Type /Annot +>> +endobj +21 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [474.1515 613.72 487.56 628.0] +/Type /Annot +>> +endobj +22 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (http://www.ietf.org/rfc/rfc2616.txt) +>> +/Subtype /Link +/Rect [527.5415 585.94 547.04 600.22] +/Type /Annot +>> +endobj +23 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (http://www.ietf.org/rfc/rfc2616.txt) +>> +/Subtype /Link +/Rect [48.24 570.16 71.718 584.44] +/Type /Annot +>> +endobj +24 0 obj +[12 0 R /XYZ 0 557.41 null] +endobj +25 0 obj +<< /Border [0 0 0] +/Dest (encoding_and_decoding_functions) +/Subtype /Link +/Rect [48.24 414.94 218.3295 429.22] +/Type /Annot +>> +endobj +26 0 obj +<< /Type /Font +/BaseFont /96a564+mplus1mn-regular +/Subtype /TrueType +/FontDescriptor 184 0 R +/FirstChar 32 +/LastChar 255 +/Widths 186 0 R +/ToUnicode 185 0 R +>> +endobj +27 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [162.3435 268.48 175.752 282.76] +/Type /Annot +>> +endobj +28 0 obj +<< /Type /XObject +/Subtype /Image +/Height 170 +/Width 555 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Length 3949 +/Filter [/FlateDecode] +/DecodeParms [<< /Predictor 15 +/Colors 3 +/BitsPerComponent 8 +/Columns 555 +>>] +>> +stream +xi0aXq3*S%$`Ehb &4Et:@j@YD d$Et:@j@YD d$Et:Oߔ̎L~O O}61CrcD -x] +Z-g )8 -s/f7Y6_+#`<ˊaƙ+;2hɝ Th+du{r 0=&w%и?QE.h + \М@~lIq|蓵cT 1G3>(^GH.Cx@aR#hM }OD#`.Kph9g`h9ZC+. ږ@Cu:JDB5ȷ灜K9&}T %>HOg^F~x6|#9'.so"T@$*Ԓ@%:@ H t5 ,ԀNP":@ H t5 ,ԀNP":@ H t5 ,ԀNP":@ H t5o!x0@ +@AK0 -_2Z0 3Z|I (b1PLT\%..$d@PL@AK0 .$d@PL@AK0 .$d@PL@AK0 .$d@PL@AK0 .$d@PL@AK0 .$d@PL@AK0 .$d@P|K*u`K@%̕]*a@P-$g?PK@Yv/e.$tZ N|?vVL7 zCGh :@+HZA +7tV@# $Po(@S)GutЊ@pAL{;sX(fWH 2>Y1'η49ܒGJ޿wtl˛%ruh<0wmuyǖY@+H؜~*JUy¥,!J46=K.?j "#6.WYl:EpBgH@ <?$j@! @#C$H@ <?$j@! T@v?=,EYMxoFۨI'g|)tpi;o9.$ݺ:p>Cjx3*21ܿӫyNܣA~Ccgnp2L$ނàzzF5NrlhYOph7բ&W"R Hs v9$3ެ"ꁸ5#Z[9ۣ5b:NUxDa#CP:NO;@ؙ@ͪ!M5z9|it84'^尻یNb'u9 8O7v :@]"SAy3TZgXbk4Tqe P5Y{(yz<.ʰ@[Tqhɥ~: $H Grxvv]SbpLbt]5ó4N]j~HYgHs@)@ʼn\ye#Zj^3knC +wpm;XzZYb]ʑS Jד[[n\E^z-]_%Ro1vW9{ҫlf[b3@?ZBNXƆP.6 @_yj} ›A)GۖU[qedo-~M}k,vl(+bQG ^e Cg"$ڃ;Gʕ-3{o M ,'V=y'F*5@(46 T`u =vP>7潽I 9 +WG;Ek>y]Vl5p&#pz}j&bO]#'$;}G`vխS2]m +d JyyE;EiR73ѝpn_V{zRh45/o%9_"'3qAwɹf5=3-zMk1)I 'PPgL +f̑0~.w8|uص~؎e `:֥:^n &ٚ)uһ'P4 {$P75B$Pq'aohW,; (<Ў~_(@oew#v eg*@J A! @#C$H@ <?$j'_:BS)U +endstream +endobj +29 0 obj +<< /Length 6747 +>> +stream +q +/DeviceRGB cs +0.0 0.0 0.0 scn +/DeviceRGB CS +0.0 0.0 0.0 SCN + +q +416.25 0.0 0.0 127.5 48.24 678.39 cm +/I1 Do +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 632.754 Td +/F2.0 27 Tf +<46756e6374696f6e2053706563696669636174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 585.774 Td +/F2.0 22 Tf +<496d706c656d656e746174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 544.526 Td +/F2.0 18 Tf +<456e7669726f6e6d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2724 Tw + +BT +48.24 516.506 Td +/F1.0 10.5 Tf +[<5468652048545450207465737420706f7274206d616b> 20.0195 <657320757365206f66207468652073657276696365732070726f76696465642062> 20.0195 <792074686520554e495820736f636b> 20.0195 <657420696e746572666163652e205768656e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7973 Tw + +BT +48.24 500.726 Td +/F1.0 10.5 Tf +[<636f6e6e656374696e6720746f20616e2053534c20656e61626c656420495554> 89.8438 <2c2074686520636f6e6e656374696f6e2069732073656375726564207769746820746865204f70656e53534c20746f6f6c6b6974206261736564206f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4307 Tw + +BT +48.24 484.946 Td +/F1.0 10.5 Tf +[<636f6e6669677572> 20.0195 <6174696f6e20646174612e204576657279207465737420706f72742069732061626c6520746f2068616e646c65206f6e65206c697374656e696e6720287365727665722920706f727420616e64206d756c7469706c652054> 20.0195 <4350>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 469.166 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e732e2050726f787920697320737570706f727465642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 429.326 Td +/F2.0 18 Tf +<4d6f64756c6520537472756374757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 401.306 Td +/F1.0 10.5 Tf +[<5468652048545450207465737420706f727420697320696d706c656d656e74656420696e2074686520666f6c6c6f77696e67205454> 20.0195 <434e2d33206d6f64756c65733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 373.526 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 373.526 Td +/F4.0 10.5 Tf +<485454506d73675f54797065732e7474636e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 351.746 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 351.746 Td +/F4.0 10.5 Tf +<485454506d73675f506f7274547970652e7474636e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.1417 Tw + +BT +48.24 323.966 Td +/F1.0 10.5 Tf +<5468652066696c6520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.1417 Tw + +BT +96.7593 323.966 Td +/F4.0 10.5 Tf +<485454506d73675f54797065732e7474636e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.1417 Tw + +BT +199.1448 323.966 Td +/F1.0 10.5 Tf +[<20646566696e6573207468652048545450206d65737361676520747970657320616e64204153507320746f20636f6e74726f6c207468652054> 20.0195 <4350>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8967 Tw + +BT +48.24 308.186 Td +/F1.0 10.5 Tf +[<636f6e6e656374696f6e2c20667572746865726d6f726520636f6e7461696e7320746865206465636c6172> 20.0195 <6174696f6e206f6620746865206465636c6172> 20.0195 <6174696f6e206f662074686520656e636f64696e6720616e64206465636f64696e67>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 292.406 Td +/F1.0 10.5 Tf +<65787465726e616c2066756e6374696f6e732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 264.626 Td +/F1.0 10.5 Tf +<54686520706f7274207479706520697320646566696e656420696e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +182.3775 264.626 Td +/F4.0 10.5 Tf +<485454506d73675f506f7274547970652e7474636e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +301.206 264.626 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7813 Tw + +BT +48.24 236.846 Td +/F1.0 10.5 Tf +<54686520632b2b20696d706c656d656e746174696f6e206f6620746865207465737420706f727420616e642074686520656e636f64696e672d6465636f64696e672066756e6374696f6e732061726520636f6e7461696e656420696e20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 221.066 Td +/F1.0 10.5 Tf +<666f6c6c6f77696e672066696c65733a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 193.286 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 193.286 Td +/F4.0 10.5 Tf +[<485454506d73675f5054> 89.8438 <2e6868>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 171.506 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 171.506 Td +/F4.0 10.5 Tf +[<485454506d73675f5054> 89.8438 <2e6363>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 143.726 Td +/F1.0 10.5 Tf +<54686520656e636f64696e6720616e64206465636f64696e672066756e6374696f6e7320616c736f2068617665206265656e20696d706c656d656e74656420686572652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1357 Tw + +BT +48.24 115.946 Td +/F1.0 10.5 Tf +[<54686520706f7274206973207573696e6720746865204162737472> 20.0195 <6163745f536f636b> 20.0195 <65742c206120636f6d6d6f6e20636f6d706f6e656e742077697468207468652070726f64756374206e756d62657220434e4c20313133203338342c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4636 Tw + +BT +48.24 100.166 Td +/F1.0 10.5 Tf +[<696d706c656d656e74696e67207468652062617369632073656e64696e672c20726563656976696e6720616e6420736f636b> 20.0195 <65742068616e646c696e6720726f7574696e65732e2054686520666f6c6c6f77696e672066696c65732073686f756c64>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 84.386 Td +/F1.0 10.5 Tf +[<626520696e636c7564656420696e20746865204d616b> 20.0195 <6566696c653a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 56.606 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 56.606 Td +/F4.0 10.5 Tf +[<4162737472> 20.0195 <6163745f536f636b> 20.0195 <65742e6868>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +30 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 29 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/XObject << /I1 28 0 R +/Stamp2 143 0 R +>> +/Font << /F2.0 17 0 R +/F1.0 8 0 R +/F4.0 35 0 R +>> +>> +>> +endobj +31 0 obj +[30 0 R /XYZ 0 666.39 null] +endobj +32 0 obj +[30 0 R /XYZ 0 614.07 null] +endobj +33 0 obj +[30 0 R /XYZ 0 568.55 null] +endobj +34 0 obj +[30 0 R /XYZ 0 453.35 null] +endobj +35 0 obj +<< /Type /Font +/BaseFont /86b0d1+NotoSerif-Italic +/Subtype /TrueType +/FontDescriptor 188 0 R +/FirstChar 32 +/LastChar 255 +/Widths 190 0 R +/ToUnicode 189 0 R +>> +endobj +36 0 obj +<< /Length 10152 +>> +stream +q + +-0.5 Tc +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +56.8805 793.926 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 793.926 Td +/F4.0 10.5 Tf +[<4162737472> 20.0195 <6163745f536f636b> 20.0195 <65742e6363>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 749.814 Td +/F2.0 22 Tf +[<436f6e6669677572> 20.0195 <6174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1259 Tw + +BT +48.24 720.626 Td +/F1.0 10.5 Tf +[<54686520636f6e6669677572> 20.0195 <6174696f6e206f66207468652048545450207465737420706f727420697320646f6e652062> 20.0195 <792074686520544954> 60.0586 <414e2052> 20.0195 <544520636f6e6669677572> 20.0195 <6174696f6e2066696c652e20546865206465736372697074696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 704.846 Td +/F1.0 10.5 Tf +[<6f662074686520737065636966696320706172> 20.0195 <616d65746572732063616e20626520666f756e6420696e207468652048545450207465737420706f72742055736572> -29.7852 ] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +419.6225 704.846 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 665.006 Td +/F2.0 18 Tf +<4e6f74696669636174696f6e2041535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8504 Tw + +BT +48.24 636.986 Td +/F1.0 10.5 Tf +[<546865207465737420706f72742069732061626c6520746f2070726f766964652074686520726573756c74206f662074686520436f6e6e6563742c204c697374656e206f706572> 20.0195 <6174696f6e732c20616e6420696e666f726d2074686520736572766572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0039 Tw + +BT +48.24 621.206 Td +/F1.0 10.5 Tf +<746573742073756974652069662061206e657720636c69656e742068617320636f6e6e6563746564206f72207468652072656d6f746520656e642068617320646973636f6e6e6563746564206120737065636966696320636f6e6e656374696f6e2e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 605.426 Td +/F1.0 10.5 Tf +[<54686973206265686176696f72206973207377697463686564206f6e2062> 20.0195 <792073657474696e672074686520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +263.4583 605.426 Td +/F3.0 10.5 Tf +<7573655f6e6f74696669636174696f6e5f41535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +373.7083 605.426 Td +/F1.0 10.5 Tf +[<207465737420706f727420706172> 20.0195 <616d6574657220746f20>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +488.7041 605.426 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +514.9541 605.426 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 561.314 Td +/F2.0 22 Tf +<53746172742050726f636564757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4813 Tw + +BT +48.24 532.126 Td +/F1.0 10.5 Tf +[<416674657220746865207465737420706f7274206973206d61707065642062> 20.0195 <7920544954> 60.0586 <414e2052> 20.0195 <544520746f20746865204955542073797374656dd57320696e7465726661636520706f72742c20697420776169747320666f72206120>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4813 Tw + +BT +510.29 532.126 Td +/F3.0 10.5 Tf +<436f6e6e656374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4813 Tw + +BT +547.04 532.126 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 516.346 Td +/F1.0 10.5 Tf +<6f72206120> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +70.584 516.346 Td +/F3.0 10.5 Tf +<4c697374656e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +102.084 516.346 Td +/F1.0 10.5 Tf +[<20415350> 120.1172 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1022 Tw + +BT +48.24 488.566 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1022 Tw + +BT +69.7622 488.566 Td +/F3.0 10.5 Tf +<436f6e6e656374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1022 Tw + +BT +106.5122 488.566 Td +/F1.0 10.5 Tf +<204153502073657473207570206120636f6e6e656374696f6e20746f7761726420616e2048545450207365727665722c206f6e20776869636820696e7374616e636573206f662048545450204d65737361676573> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 472.786 Td +/F1.0 10.5 Tf +<63616e2062652073656e7420616e642072656365697665642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8506 Tw + +BT +48.24 445.006 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.8506 Tw + +BT +71.5106 445.006 Td +/F3.0 10.5 Tf +<4c697374656e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8506 Tw + +BT +103.0106 445.006 Td +/F1.0 10.5 Tf +[<2041535020636f6d6d616e647320746865207465737420706f727420746f207761697420666f7220696e636f6d696e6720636f6e6e656374696f6e732066726f6d204854545020636c69656e74732062> 20.0195 <79>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 429.226 Td +/F1.0 10.5 Tf +<6f70656e696e672061206c697374656e696e6720706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 401.446 Td +/F1.0 10.5 Tf +[<46> 40.0391 <6f722064657461696c6564206f706572> 20.0195 <6174696f6e2073656520746865205573657220477569646520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +257.2839 401.446 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 357.334 Td +/F2.0 22 Tf +<53656e64696e672f526563656976696e672048545450204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 316.086 Td +/F2.0 18 Tf +[<48545450204d657373616765732053656e742062> 20.0195 <79207468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2006 Tw + +BT +48.24 288.066 Td +/F1.0 10.5 Tf +<5468652048545450207465737420706f72742069732061626c6520746f2073656e6420616e64207265636569766520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2006 Tw + +BT +280.6474 288.066 Td +/F3.0 10.5 Tf +<485454504d657373616765> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2006 Tw + +BT +338.3974 288.066 Td +/F1.0 10.5 Tf +<20737472756374757265732e2054686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2006 Tw + +BT +419.3346 288.066 Td +/F3.0 10.5 Tf +<485454504d657373616765> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2006 Tw + +BT +477.0846 288.066 Td +/F1.0 10.5 Tf +<2063616e206265206f6e65206f66> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 272.286 Td +/F1.0 10.5 Tf +<74686520666f6c6c6f77696e672074797065733a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 244.506 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 246.69 Td +/F3.0 10.5 Tf +<4854545052657175657374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0171 Tw + +BT +66.24 220.506 Td +/F1.0 10.5 Tf +[<5468652052657175657374206d65737361676520726570726573656e747320612073696e676c65207265717565737420746f20706572666f726d2062> 20.0195 <79207468652048545450207365727665722c20757375616c6c7920746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 204.726 Td +/F1.0 10.5 Tf +<6163636573732061207265736f75726365206f6e20746865207365727665722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 176.946 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 179.13 Td +/F3.0 10.5 Tf +<48545450526573706f6e7365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1955 Tw + +BT +66.24 152.946 Td +/F1.0 10.5 Tf +[<54686520526573706f6e7365206d6573736167652069732073656e742062> 20.0195 <792074686520485454502073657276657220746f2074686520636c69656e742e20497420696e636c75646573207468652072657475726e2073746174757320636f6465>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 137.166 Td +/F1.0 10.5 Tf +<6f6620746865207265717565737420616e642074686520726571756573746564207265736f757263652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 109.386 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 111.57 Td +/F3.0 10.5 Tf +<48545450526571756573745f62696e6172795f626f6479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4967 Tw + +BT +66.24 85.386 Td +/F1.0 10.5 Tf +<5468652073616d652061732074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.4967 Tw + +BT +158.5783 85.386 Td +/F3.0 10.5 Tf +<4854545052657175657374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4967 Tw + +BT +216.3283 85.386 Td +/F1.0 10.5 Tf +[<206d6573736167652e2049742069732070617373656420746f205454> 20.0195 <434e207768656e2074686520626f6479206f6620746865206d657373616765>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 69.606 Td +/F1.0 10.5 Tf +[<636f6e7461696e73206e6f6e2d61736369692063686172> 20.0195 <6163746572732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +37 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 36 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F4.0 35 0 R +/F2.0 17 0 R +/F3.0 26 0 R +/F5.0 41 0 R +>> +/XObject << /Stamp1 142 0 R +>> +>> +/Annots [39 0 R 43 0 R] +>> +endobj +38 0 obj +[37 0 R /XYZ 0 778.11 null] +endobj +39 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [419.6225 701.78 433.031 716.06] +/Type /Annot +>> +endobj +40 0 obj +[37 0 R /XYZ 0 689.03 null] +endobj +41 0 obj +<< /Type /Font +/BaseFont /8b258c+mplus1mn-italic +/Subtype /TrueType +/FontDescriptor 192 0 R +/FirstChar 32 +/LastChar 255 +/Widths 194 0 R +/ToUnicode 193 0 R +>> +endobj +42 0 obj +[37 0 R /XYZ 0 589.61 null] +endobj +43 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [257.2839 398.38 270.6924 412.66] +/Type /Annot +>> +endobj +44 0 obj +[37 0 R /XYZ 0 385.63 null] +endobj +45 0 obj +[37 0 R /XYZ 0 340.11 null] +endobj +46 0 obj +<< /Length 16231 +>> +stream +q + +-0.5 Tc +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +56.8805 793.926 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 796.11 Td +/F3.0 10.5 Tf +<48545450526573706f6e73655f62696e6172795f626f6479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1686 Tw + +BT +66.24 769.926 Td +/F1.0 10.5 Tf +<5468652073616d652061732074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.1686 Tw + +BT +157.2658 769.926 Td +/F3.0 10.5 Tf +<48545450526573706f6e7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1686 Tw + +BT +220.2658 769.926 Td +/F1.0 10.5 Tf +[<206d6573736167652e2049742069732070617373656420746f205454> 20.0195 <434e207768656e2074686520626f6479206f6620746865206d657373616765>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 754.146 Td +/F1.0 10.5 Tf +[<636f6e7461696e73206e6f6e2d61736369692063686172> 20.0195 <6163746572732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3626 Tw + +BT +48.24 720.366 Td +/F1.0 10.5 Tf +<41706172742066726f6d2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.3626 Tw + +BT +129.6288 720.366 Td +/F3.0 10.5 Tf +<4854545052657175657374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3626 Tw + +BT +187.3788 720.366 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.3626 Tw + +BT +214.6529 720.366 Td +/F3.0 10.5 Tf +<48545450526573706f6e7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3626 Tw + +BT +277.6529 720.366 Td +/F1.0 10.5 Tf +<20415350732061626f76652c2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.3626 Tw + +BT +366.8513 720.366 Td +/F3.0 10.5 Tf +<6572726f6e6f75735f6d7367> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3626 Tw + +BT +429.8513 720.366 Td +/F1.0 10.5 Tf +[<2069732072656365697665642062> 20.0195 <79207468652074657374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 704.586 Td +/F1.0 10.5 Tf +<706f727420616e642073656e7420746f2074686520746573742073756974653a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 676.806 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.4395 Tw + +BT +66.24 676.806 Td +/F3.0 10.5 Tf +<485454505f6572726f6e6f75735f6d7367> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4395 Tw + +BT +155.49 676.806 Td +/F1.0 10.5 Tf +<2049662061206d657373616765206973207265636569766564206f6e2074686520636f6e6e656374696f6e2c2077686963682063616e206e6f74206265206465636f6465642061732061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1328 Tw + +BT +66.24 661.026 Td +/F1.0 10.5 Tf +<48545450312e31206f722048545450312e30206d6573736167652c2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1328 Tw + +BT +236.0172 661.026 Td +/F3.0 10.5 Tf +<4d657373616765> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1328 Tw + +BT +272.7672 661.026 Td +/F1.0 10.5 Tf +<2077696c6c20636f6e7461696e20616e206572726f6e656f7573206d65737361676520776974682074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1328 Tw + +BT +497.165 661.026 Td +/F3.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1328 Tw + +BT +544.415 661.026 Td +/F1.0 10.5 Tf +<2c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 645.246 Td +/F1.0 10.5 Tf +<616e642073656e7420746f2074686520746573742073756974652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 617.466 Td +/F1.0 10.5 Tf +[<46> 40.0391 <6f722064657461696c6564206f706572> 20.0195 <6174696f6e2073656520746865205573657220477569646520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +257.2839 617.466 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 573.354 Td +/F2.0 22 Tf +<456e636f64696e6720616e64204465636f64696e672046756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.1925 Tw + +BT +48.24 544.166 Td +/F1.0 10.5 Tf +<496620746865207465737420706f727420697320757365642061732070726f746f636f6c206d6f64756c652c2074686520666f6c6c6f77696e6720656e636f64657220616e64206465636f6465722066756e63696f6e7320617265> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 528.386 Td +/F1.0 10.5 Tf +<617661696c61626c653a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 492.29 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +214.5065 492.29 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +380.773 492.29 166.267 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 472.01 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +214.5065 472.01 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +380.773 472.01 166.267 20.28 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +48.24 423.17 166.2665 48.84 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +214.5065 423.17 166.2665 48.84 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +380.773 423.17 166.267 48.84 re +f +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 512.57 m +214.5065 512.57 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 492.29 m +214.5065 492.29 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 512.82 m +48.24 491.665 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 512.82 m +214.5065 491.665 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +51.24 498.356 Td +/F2.0 10.5 Tf +<4e616d65> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 512.57 m +380.773 512.57 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +214.5065 492.29 m +380.773 492.29 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 512.82 m +214.5065 491.665 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 512.82 m +380.773 491.665 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +217.5065 498.356 Td +/F2.0 10.5 Tf +[<54797065206f6620666f726d616c20706172> 20.0195 <616d6574657273>] TJ +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 512.57 m +547.04 512.57 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +380.773 492.29 m +547.04 492.29 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 512.82 m +380.773 491.665 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 512.82 m +547.04 491.665 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +383.773 498.356 Td +/F2.0 10.5 Tf +<54797065206f662072657475726e2076616c7565> Tj +ET + +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 492.29 m +214.5065 492.29 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 472.01 m +214.5065 472.01 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 492.915 m +48.24 471.76 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 492.915 m +214.5065 471.76 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 480.26 Td +/F3.0 10.5 Tf +<656e635f485454504d657373616765> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +214.5065 492.29 m +380.773 492.29 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 472.01 m +380.773 472.01 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 492.915 m +214.5065 471.76 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 492.915 m +380.773 471.76 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +217.5065 478.076 Td +/F1.0 10.5 Tf +<485454504d657373616765> Tj +ET + +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +380.773 492.29 m +547.04 492.29 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 472.01 m +547.04 472.01 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 492.915 m +380.773 471.76 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 492.915 m +547.04 471.76 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +383.773 478.076 Td +/F1.0 10.5 Tf +<6f63746574737472696e67> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 472.01 m +214.5065 472.01 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 423.17 m +214.5065 423.17 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 472.26 m +48.24 422.92 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 472.26 m +214.5065 422.92 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 459.98 Td +/F3.0 10.5 Tf +<6465635f485454504d657373616765> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 472.01 m +380.773 472.01 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 423.17 m +380.773 423.17 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 472.26 m +214.5065 422.92 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 472.26 m +380.773 422.92 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +217.5065 457.796 Td +/F1.0 10.5 Tf +<696e206f63746574737472696e672073747265616d> Tj +ET + + +BT +217.5065 443.516 Td +/F1.0 10.5 Tf +<696e6f757420485454504d657373616765206d7367> Tj +ET + + +BT +217.5065 429.236 Td +/F1.0 10.5 Tf +[<696e20626f6f6c65616e20736f636b> 20.0195 <657420646562756767696e67>] TJ +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 472.01 m +547.04 472.01 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 423.17 m +547.04 423.17 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 472.26 m +380.773 422.92 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 472.26 m +547.04 422.92 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +383.773 457.796 Td +/F1.0 10.5 Tf +<696e7465676572> Tj +ET + +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 399.206 Td +/F1.0 10.5 Tf +<54686520656e636f6465722066756e6374696f6e2072657475726e73207769746820616e206f63746574737472696e672061732074686520656e636f64656420666f726d206f662074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +430.8285 399.206 Td +/F3.0 10.5 Tf +<485454504d657373616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +488.5785 399.206 Td +/F1.0 10.5 Tf +<207374727563747572652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2573 Tw + +BT +48.24 371.426 Td +/F1.0 10.5 Tf +<546865206465636f6465722066756e6374696f6e2072657475726e73207769746820746865206e756d626572206f66206e6f742070726f636573736564206f6374657473206f662074686520696e707574206f63746574737472696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 355.646 Td +/F1.0 10.5 Tf +[<73747265616d20616e6420746865206465636f646564206d65737361676520696e2069747320696e6f757420706172> 20.0195 <616d657465722e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6854 Tw + +BT +48.24 327.866 Td +/F1.0 10.5 Tf +<4966207468652072657475726e2076616c7565206973206e6f74207a65726f2c20746865726520617265206e6f742070726f636573736564206f637465746574732e2054686f7365206f63746574732063616e2062652067617468657265642066726f6d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8423 Tw + +BT +48.24 312.086 Td +/F1.0 10.5 Tf +[<746865206f726967696e616c206f63746574737472696e672062> 20.0195 <7920746865207573657220616e642063616e2062652070726f6365737365642062> 20.0195 <792063616c6c696e6720746865206465636f64696e672066756e6374696f6e206f6e6365>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7539 Tw + +BT +48.24 296.306 Td +/F1.0 10.5 Tf +<616761696e207769746820746865206d6f6469666965642073747265616d2e20546869732070726f63657373206973206e6563657373617279206f6e6c79206966206d6f72652068747470206d6573736167652063616e20626520666f756e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 280.526 Td +/F1.0 10.5 Tf +<696e20746865206f726967696e616c2073747265616d2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 236.414 Td +/F2.0 22 Tf +<4d657373616765204c656e6774682046756e6374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3529 Tw + +BT +48.24 207.226 Td +/F1.0 10.5 Tf +<54686520666f6c6c6f77696e672066756e6374696f6e2063616e206265207573656420746f2063616c63756c61746520746865206c656e677468206f66207468652072656365697665642048545450206d6573736167652e2049742072657475726e73> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 191.446 Td +/F1.0 10.5 Tf +<746865206c656e677468206f66207468652072656365697665642048545450206d65737361676520696e206f6374657473206f72202d3120696620746865206c656e6774682063616e206e6f742062652064657465726d696e65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 155.35 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +214.5065 155.35 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +380.773 155.35 166.267 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 135.07 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +214.5065 135.07 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +380.773 135.07 166.267 20.28 re +f +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 175.63 m +214.5065 175.63 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 155.35 m +214.5065 155.35 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 175.88 m +48.24 154.725 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 175.88 m +214.5065 154.725 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +51.24 161.416 Td +/F2.0 10.5 Tf +<4e616d65> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 175.63 m +380.773 175.63 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +214.5065 155.35 m +380.773 155.35 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 175.88 m +214.5065 154.725 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 175.88 m +380.773 154.725 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +217.5065 161.416 Td +/F2.0 10.5 Tf +[<54797065206f6620666f726d616c20706172> 20.0195 <616d6574657273>] TJ +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 175.63 m +547.04 175.63 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +380.773 155.35 m +547.04 155.35 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 175.88 m +380.773 154.725 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 175.88 m +547.04 154.725 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +383.773 161.416 Td +/F2.0 10.5 Tf +<54797065206f662072657475726e2076616c7565> Tj +ET + +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 155.35 m +214.5065 155.35 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 135.07 m +214.5065 135.07 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 155.975 m +48.24 134.82 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 155.975 m +214.5065 134.82 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 143.32 Td +/F3.0 10.5 Tf +<665f485454504d6573736167655f6c656e> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +214.5065 155.35 m +380.773 155.35 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 135.07 m +380.773 135.07 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 155.975 m +214.5065 134.82 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 155.975 m +380.773 134.82 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +217.5065 141.136 Td +/F1.0 10.5 Tf +<696e206f63746574737472696e672073747265616d> Tj +ET + +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +380.773 155.35 m +547.04 155.35 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 135.07 m +547.04 135.07 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 155.975 m +380.773 134.82 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 155.975 m +547.04 134.82 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +383.773 141.136 Td +/F1.0 10.5 Tf +<696e7465676572> Tj +ET + +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 94.774 Td +/F2.0 22 Tf +<436c6f73696e6720446f776e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +47 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 46 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 26 0 R +/F2.0 17 0 R +>> +/XObject << /Stamp2 143 0 R +>> +>> +/Annots [48 0 R] +>> +endobj +48 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [257.2839 614.4 270.6924 628.68] +/Type /Annot +>> +endobj +49 0 obj +[47 0 R /XYZ 0 601.65 null] +endobj +50 0 obj +[47 0 R /XYZ 0 264.71 null] +endobj +51 0 obj +[47 0 R /XYZ 0 123.07 null] +endobj +52 0 obj +<< /Length 9827 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 786.666 Td +/F2.0 18 Tf +<436c6f7365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7234 Tw + +BT +48.24 758.646 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.7234 Tw + +BT +72.3834 758.646 Td +/F3.0 10.5 Tf +<436c6f7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7234 Tw + +BT +98.6334 758.646 Td +/F1.0 10.5 Tf +[<20736875747320646f776e2074686520636c69656e7420636f6e6e656374696f6e206265747765656e20746865207465737420706f727420616e642074686520495554> 89.8438 <2e2054686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.7234 Tw + +BT +499.79 758.646 Td +/F3.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7234 Tw + +BT +547.04 758.646 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6151 Tw + +BT +48.24 742.866 Td +/F1.0 10.5 Tf +[<706172> 20.0195 <616d65746572206f662074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.6151 Tw + +BT +139.9097 742.866 Td +/F3.0 10.5 Tf +<436c6f7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6151 Tw + +BT +166.1597 742.866 Td +/F1.0 10.5 Tf +<20415350206964656e7469666965732074686520636f6e6e656374696f6e20746f20626520636c6f7365642e2049662069742069732073657420746f206f6d69742c20616c6c2063757272656e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 727.086 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e732077696c6c20626520636c6f7365642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 699.306 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +69.66 699.306 Td +/F3.0 10.5 Tf +<48616c665f636c6f7365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +122.16 699.306 Td +/F1.0 10.5 Tf +<2041535020696e646963617465732074686174207468652072656d6f746520656e6420636c6f7365642074686520636f6e6e656374696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 659.466 Td +/F2.0 18 Tf +<53687574646f776e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3207 Tw + +BT +48.24 631.446 Td +/F1.0 10.5 Tf +<496e7374727563747320746865207465737420706f727420746f20636c6f73652074686520736572766572206c697374656e696e6720706f72742e2054686520636c69656e7420636f6e6e656374696f6e732077696c6c2072656d61696e206f70656e2e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 615.666 Td +/F1.0 10.5 Tf +<546865207365727665722077696c6c206e6f7420616363657074206675727468657220636c69656e7420636f6e6e656374696f6e7320756e74696c206120> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +347.532 615.666 Td +/F3.0 10.5 Tf +<4c697374656e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +379.032 615.666 Td +/F1.0 10.5 Tf +<204153502069732073656e7420616761696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 587.886 Td +/F1.0 10.5 Tf +[<46> 40.0391 <6f722064657461696c6564206f706572> 20.0195 <6174696f6e2073656520746865205573657220477569646520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +257.2839 587.886 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 543.774 Td +/F2.0 22 Tf +<4c6f6767696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4687 Tw + +BT +48.24 514.586 Td +/F1.0 10.5 Tf +<5468652074797065206f6620696e666f726d6174696f6e20746861742077696c6c206265206c6f676765642063616e2062652063617465676f72697a656420696e746f2074776f2067726f7570732e20546865206669727374206f6e65> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4086 Tw + +BT +48.24 498.806 Td +/F1.0 10.5 Tf +<636f6e7369737473206f6620696e666f726d6174696f6e20746861742073686f77732074686520666c6f77206f662074686520696e7465726e616c20657865637574696f6e206f6620746865207465737420706f72742c20652e672eca696d706f7274616e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2202 Tw + +BT +48.24 483.026 Td +/F1.0 10.5 Tf +<6576656e74732c2077686963682066756e6374696f6e20746861742069732063757272656e746c7920657865637574696e67206574632e20546865207365636f6e642067726f7570206465616c7320776974682070726573656e74696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1305 Tw + +BT +48.24 467.246 Td +/F1.0 10.5 Tf +[<76616c7561626c6520646174612c20652e672eca70726573656e74696e672074686520636f6e74656e74206f662061205044552e20546865206c6f6767696e67207072696e746f7574732077696c6c20626520646972656374656420746f207468652052> 20.0195 <5445>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4973 Tw + +BT +48.24 451.466 Td +/F1.0 10.5 Tf +[<6c6f672066696c652e2054686520757365722069732061626c6520746f206465636964652077686574686572206c6f6767696e6720697320746f2074616b> 20.0195 <6520706c616365206f72206e6f742062> 20.0195 <792073657474696e6720617070726f707269617465>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 435.686 Td +/F1.0 10.5 Tf +[<636f6e6669677572> 20.0195 <6174696f6e20646174612c2073656520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +164.9683 435.686 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 391.574 Td +/F2.0 22 Tf +<4572726f722048616e646c696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0118 Tw + +BT +48.24 362.386 Td +/F1.0 10.5 Tf +[<4572726f6e656f7573206265686176696f7220646574656374656420647572696e672072756e74696d65206d61> 20.0195 <792062652070726573656e746564206f6e2074686520636f6e736f6c6520616e6420646972656374656420696e746f20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 346.606 Td +/F1.0 10.5 Tf +[<52> 20.0195 <5445206c6f672066696c652e2054686520666f6c6c6f77696e672074776f207479706573206f66206d65737361676573206172652074616b> 20.0195 <656e2063617265206f663a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 318.826 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2851 Tw + +BT +66.24 318.826 Td +/F1.0 10.5 Tf +<4572726f72733a20696e666f726d6174696f6e2061626f7574206572726f72732064657465637465642069732070726f76696465642e20496620616e206572726f72206f63637572732074686520657865637574696f6e206f6620746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 303.046 Td +/F1.0 10.5 Tf +[<7465737420636173652077696c6c2073746f7020696d6d6564696174656c79> 89.8438 <2e20546865207465737420706f7274732077696c6c20626520756e6d61707065642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 281.266 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7095 Tw + +BT +66.24 281.266 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61726e696e67733a20696e666f726d6174696f6e2061626f7574207761726e696e67732064657465637465642069732070726f76696465642e2054686520657865637574696f6e20636f6e74696e75657320616674657220746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 265.486 Td +/F1.0 10.5 Tf +<7761726e696e672069732073686f776e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 221.374 Td +/F2.0 22 Tf +<53534c2046756e6374696f6e616c697479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0713 Tw + +BT +48.24 192.186 Td +/F1.0 10.5 Tf +[<5468652053534c20696d706c656d656e746174696f6e206973206261736564206f6e207468652073616d65204f70656e53534c20617320544954> 60.0586 <414e2e2050726f746f636f6c732053534c76322c2053534c763320616e6420544c537631>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 176.406 Td +/F1.0 10.5 Tf +<61726520737570706f727465642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 136.566 Td +/F2.0 18 Tf +<436f6d70696c6174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.3605 Tw + +BT +48.24 108.546 Td +/F1.0 10.5 Tf +<546865207573616765206f662053534c20616e64206576656e2074686520636f6d70696c6174696f6e206f66207468652053534c2072656c6174656420636f646520706172747320617265206f7074696f6e616c2e2054686973206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 92.766 Td +/F1.0 10.5 Tf +<626563617573652053534c2072656c6174656420636f64652070617274732063616e6e6f7420626520636f6d70696c656420776974686f757420746865204f70656e53534c20696e7374616c6c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6975 Tw + +BT +48.24 64.986 Td +/F1.0 10.5 Tf +[<54686520636f6d70696c6174696f6e206f662053534c2072656c6174656420636f64652070617274732063616e2062652064697361626c65642062> 20.0195 <79206e6f7420646566696e696e672074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.6975 Tw + +BT +445.6011 64.986 Td +/F3.0 10.5 Tf +<41535f5553455f53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6975 Tw + +BT +498.1011 64.986 Td +/F1.0 10.5 Tf +<206d6163726f20696e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +53 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 52 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 17 0 R +/F1.0 8 0 R +/F3.0 26 0 R +>> +/XObject << /Stamp1 142 0 R +>> +>> +/Annots [56 0 R 58 0 R] +>> +endobj +54 0 obj +[53 0 R /XYZ 0 841.89 null] +endobj +55 0 obj +[53 0 R /XYZ 0 683.49 null] +endobj +56 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [257.2839 584.82 270.6924 599.1] +/Type /Annot +>> +endobj +57 0 obj +[53 0 R /XYZ 0 572.07 null] +endobj +58 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [164.9683 432.62 178.3768 446.9] +/Type /Annot +>> +endobj +59 0 obj +[53 0 R /XYZ 0 419.87 null] +endobj +60 0 obj +[53 0 R /XYZ 0 249.67 null] +endobj +61 0 obj +<< /Limits [(_1) (_http_messages_sent_by_the_test_port)] +/Names [(_1) 79 0 R (_2) 82 0 R (_3) 83 0 R (_4) 84 0 R (_5) 86 0 R (__anchor-top) 13 0 R (_abbreviations) 77 0 R (_authentication) 67 0 R (_close) 54 0 R (_closing_down) 51 0 R (_compilation) 63 0 R (_configuration) 38 0 R (_environment) 33 0 R (_error_handling) 59 0 R (_function_specification) 31 0 R (_general) 24 0 R (_how_to_read_this_document) 16 0 R (_http_messages_sent_by_the_test_port) 45 0 R] +>> +endobj +62 0 obj +<< /Limits [(_implementation) (sending-receiving-http-messages)] +/Names [(_implementation) 32 0 R (_limitations) 73 0 R (_logging) 57 0 R (_message_length_function) 50 0 R (_module_structure) 34 0 R (_notification_asps) 40 0 R (_other_features) 70 0 R (_references) 78 0 R (_scope) 19 0 R (_shutdown) 55 0 R (_ssl_functionality) 60 0 R (_start_procedure) 42 0 R (_terminology) 76 0 R (encoding_and_decoding_functions) 49 0 R (sending-receiving-http-messages) 44 0 R] +>> +endobj +63 0 obj +[53 0 R /XYZ 0 160.59 null] +endobj +64 0 obj +<< /Length 12585 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +<74686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +67.5654 794.676 Td +/F4.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +109.3027 794.676 Td +/F1.0 10.5 Tf +<20647572696e672074686520636f6d70696c6174696f6e2e20496620746865206d6163726f20697320646566696e656420696e2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +386.531 794.676 Td +/F4.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +428.2683 794.676 Td +/F1.0 10.5 Tf +<2c207468652053534c20636f646520706172747320617265> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1115 Tw + +BT +48.24 778.896 Td +/F1.0 10.5 Tf +[<636f6d70696c656420746f207468652065786563757461626c65207465737420636f64652e20546865207573616765206f66207468652053534c2063616e20626520656e61626c65642f64697361626c65642062> 20.0195 <792073657474696e6720746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 763.116 Td +/F3.0 10.5 Tf +<7573655f73736c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +84.99 763.116 Td +/F1.0 10.5 Tf +<206669656c64206f662074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +144.3045 763.116 Td +/F3.0 10.5 Tf +<436f6e6e656374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +181.0545 763.116 Td +/F1.0 10.5 Tf +<2f> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +184.0785 763.116 Td +/F3.0 10.5 Tf +<4c697374656e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +215.5785 763.116 Td +/F1.0 10.5 Tf +[<20415350732e2046> 40.0391 <6f72206d6f726520696e666f726d6174696f6e2061626f75742074686520636f6d70696c6174696f6e2073656520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +491.4971 763.116 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 723.276 Td +/F2.0 18 Tf +[<41> 20.0195 <757468656e7469636174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.952 Tw + +BT +48.24 695.256 Td +/F1.0 10.5 Tf +<546865207465737420706f72742070726f766964657320626f746820736572766572207369646520616e6420636c69656e7420736964652061757468656e7469636174696f6e2e205768656e2061757468656e7469636174696e6720746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8982 Tw + +BT +48.24 679.476 Td +/F1.0 10.5 Tf +<6f7468657220736964652c20612063657274696669636174652069732072657175657374656420616e6420746865206f776e207472757374656420636572746966696361746520617574686f726974696573d5206c6973742069732073656e742e20546865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0653 Tw + +BT +48.24 663.696 Td +/F1.0 10.5 Tf +[<7265636569766564206365727469666963617465206973207665726966696564207768657468657220697420697320612076616c6964206365727469666963617465206f72206e6f742028746865207075626c696320616e642070726976617465206b> 20.0195 <65797320617265>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.9449 Tw + +BT +48.24 647.916 Td +/F1.0 10.5 Tf +<6d61746368696e67292e204e6f20667572746865722061757468656e7469636174696f6e20697320706572666f726d65642028652e672eca7768657468657220686f73746e616d652069732070726573656e7420696e20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 632.136 Td +/F1.0 10.5 Tf +[<6365727469666963617465292e2054686520766572696669636174696f6e2063616e20626520656e61626c65642f64697361626c656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c2073656520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +499.2673 632.136 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +512.6758 632.136 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2079 Tw + +BT +48.24 604.356 Td +/F1.0 10.5 Tf +[<496e20736572766572206d6f646520746865207465737420706f72742077696c6c20616c7761> 20.0195 <79732073656e642069747320636572746966696361746520616e64207472757374656420636572746966696361746520617574686f726974696573d5206c69737420746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9488 Tw + +BT +48.24 588.576 Td +/F1.0 10.5 Tf +[<69747320636c69656e74732e20496620766572696669636174696f6e20697320656e61626c656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c20746865207365727665722077696c6c207265717565737420666f722061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1286 Tw + +BT +48.24 572.796 Td +/F1.0 10.5 Tf +<636c69656e74d5732063657274696669636174652e2049662074686520636c69656e7420646f6573206e6f742073656e6420612076616c69642063657274696669636174652c2074686520636f6e6e656374696f6e2077696c6c20626520726566757365642e204966> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6273 Tw + +BT +48.24 557.016 Td +/F1.0 10.5 Tf +<766572696669636174696f6e2069732064697361626c65642c207468656e2074686520636f6e6e656374696f6e2077696c6c206265206163636570746564206576656e2069662074686520636c69656e7420646f6573206e6f742073656e64206f72> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 541.236 Td +/F1.0 10.5 Tf +<73656e6420616e20696e76616c69642063657274696669636174652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.0851 Tw + +BT +48.24 513.456 Td +/F1.0 10.5 Tf +[<496e20636c69656e74206d6f646520746865207465737420706f72742077696c6c2073656e642069747320636572746966696361746520746f2074686520736572766572206f6e2074686520736572766572> -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2083 Tw + +BT +48.24 497.676 Td +/F1.0 10.5 Tf +[<766572696669636174696f6e20697320656e61626c656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c2074686520636c69656e742077696c6c2073656e6420697473206f776e2074727573746564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2134 Tw + +BT +48.24 481.896 Td +/F1.0 10.5 Tf +[<636572746966696361746520617574686f726974696573d5206c69737420746f207468652073657276657220616e642077696c6c207665726966792074686520736572766572> -29.7852 -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1982 Tw + +BT +48.24 466.116 Td +/F1.0 10.5 Tf +<6365727469666963617465206973206e6f742076616c69642c207468652053534c20636f6e6e656374696f6e2077696c6c206e6f742062652065737461626c69736865642e20496620766572696669636174696f6e2069732064697361626c65642c207468656e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 450.336 Td +/F1.0 10.5 Tf +<74686520636f6e6e656374696f6e2077696c6c206265206163636570746564206576656e206966207468652073657276657220646f6573206e6f742073656e64206f722073656e6420616e20696e76616c69642063657274696669636174652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0041 Tw + +BT +48.24 422.556 Td +/F1.0 10.5 Tf +[<546865206f776e2063657274696669636174652873292c20746865206f776e2070726976617465206b> 20.0195 <65792066696c652c20746865206f7074696f6e616c2070617373776f72642070726f74656374696e6720746865206f776e2070726976617465>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3485 Tw + +BT +48.24 406.776 Td +/F1.0 10.5 Tf +[<6b> 20.0195 <65792066696c6520616e6420746865207472757374656420636572746966696361746520617574686f726974696573d5206c6973742066696c652063616e2062652073706563696669656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 390.996 Td +/F1.0 10.5 Tf +<66696c652c2073656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +88.371 390.996 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +101.7795 390.996 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.578 Tw + +BT +48.24 363.216 Td +/F1.0 10.5 Tf +[<546865207465737420706f72742077696c6c20636865636b2074686520636f6e73697374656e6379206265747765656e20746865206f776e2070726976617465206b> 20.0195 <657920616e6420746865207075626c6963206b> 20.0195 <657920286261736564206f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 347.436 Td +/F1.0 10.5 Tf +[<746865206f776e20636572746966696361746529206175746f6d61746963616c6c79> 89.8438 <2e2049662074686520636865636b206661696c732c2061207761726e696e672069732069737375656420616e6420657865637574696f6e20636f6e74696e7565732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 307.596 Td +/F2.0 18 Tf +[<4f746865722046> 40.0391 <65617475726573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1632 Tw + +BT +48.24 279.576 Td +/F1.0 10.5 Tf +<426f746820636c69656e7420616e642073657276657220737570706f72742053534c76322c2053534c763320616e6420544c5376312c20686f7765766572206e6f207265737472696374696f6e20697320706f737369626c6520746f20757365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 263.796 Td +/F1.0 10.5 Tf +[<6f6e6c79206120737562736574206f662074686573652e2054686520757365642070726f746f636f6c2077696c6c2062652073656c656374656420647572696e67207468652053534c2068616e647368616b> 20.0195 <65206175746f6d61746963616c6c79> 89.8438 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4648 Tw + +BT +48.24 236.016 Td +/F1.0 10.5 Tf +[<546865207573616765206f662053534c2073657373696f6e20726573756d7074696f6e2063616e20626520656e61626c65642f64697361626c656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c20736565>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +48.24 220.236 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +61.6485 220.236 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 192.456 Td +/F1.0 10.5 Tf +[<54686520616c6c6f77656420636970686572696e67207375697465732063616e206265207265737472696374656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c2073656520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +466.4653 192.456 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +479.8738 192.456 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8923 Tw + +BT +48.24 164.676 Td +/F1.0 10.5 Tf +<5468652053534c2072652d68616e647368616b696e672072657175657374732061726520616363657074656420616e642070726f6365737365642c20686f77657665722072652d68616e647368616b696e672063616e6e6f74206265> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 148.896 Td +/F1.0 10.5 Tf +<696e697469617465642066726f6d20746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 104.784 Td +/F2.0 22 Tf +<4c696d69746174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 75.596 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.169 Tw + +BT +66.24 75.596 Td +/F1.0 10.5 Tf +<4e6f207265737472696374696f6e20697320706f737369626c65206f6e2074686520757365642070726f746f636f6c732028652e672eca757365206f6e6c792053534c7632293b2069742069732064657465726d696e656420647572696e672053534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 59.816 Td +/F1.0 10.5 Tf +[<68616e647368616b> 20.0195 <65206265747765656e207468652070656572732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<36> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +65 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 64 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F4.0 35 0 R +/F3.0 26 0 R +/F2.0 17 0 R +>> +/XObject << /Stamp2 143 0 R +>> +>> +/Annots [66 0 R 68 0 R 69 0 R 71 0 R 72 0 R] +>> +endobj +66 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [491.4971 760.05 504.9056 774.33] +/Type /Annot +>> +endobj +67 0 obj +[65 0 R /XYZ 0 747.3 null] +endobj +68 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [499.2673 629.07 512.6758 643.35] +/Type /Annot +>> +endobj +69 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [88.371 387.93 101.7795 402.21] +/Type /Annot +>> +endobj +70 0 obj +[65 0 R /XYZ 0 331.62 null] +endobj +71 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [48.24 217.17 61.6485 231.45] +/Type /Annot +>> +endobj +72 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [466.4653 189.39 479.8738 203.67] +/Type /Annot +>> +endobj +73 0 obj +[65 0 R /XYZ 0 133.08 null] +endobj +74 0 obj +<< /Length 6477 +>> +stream +q + +-0.5 Tc +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +56.8805 793.926 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 793.926 Td +/F1.0 10.5 Tf +<53534c2072652d68616e647368616b696e672063616e6e6f7420626520696e697469617465642066726f6d20746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 772.146 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0829 Tw + +BT +66.24 772.146 Td +/F1.0 10.5 Tf +[<546865206f776e2063657274696669636174652066696c652873292c20746865206f776e2070726976617465206b> 20.0195 <65792066696c6520616e6420746865207472757374656420636572746966696361746520617574686f726974696573d5206c6973742066696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 756.366 Td +/F1.0 10.5 Tf +<6d75737420626520696e2050454d20666f726d61742e204f7468657220666f726d61747320617265206e6f7420737570706f727465642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 706.914 Td +/F2.0 27 Tf +[<54> 29.7852 <65726d696e6f6c6f6779>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 676.266 Td +/F2.0 10.5 Tf +[<536f636b> 20.0195 <6574733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1149 Tw + +BT +48.24 660.486 Td +/F1.0 10.5 Tf +[<54686520736f636b> 20.0195 <6574732069732061206d6574686f6420666f7220636f6d6d756e69636174696f6e206265747765656e206120636c69656e742070726f6772> 20.0195 <616d20616e642061207365727665722070726f6772> 20.0195 <616d20696e2061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3859 Tw + +BT +48.24 644.706 Td +/F1.0 10.5 Tf +[<6e6574776f726b2e204120736f636b> 20.0195 <657420697320646566696e6564206173202274686520656e64706f696e7420696e206120636f6e6e656374696f6e2e2220536f636b> 20.0195 <65747320617265206372656174656420616e64207573656420776974682061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +5.2202 Tw + +BT +48.24 628.926 Td +/F1.0 10.5 Tf +[<736574206f662070726f6772> 20.0195 <616d6d696e67207265717565737473206f72202266756e6374696f6e2063616c6c732220736f6d6574696d65732063616c6c65642074686520736f636b> 20.0195 <657473206170706c69636174696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7097 Tw + +BT +48.24 613.146 Td +/F1.0 10.5 Tf +[<70726f6772> 20.0195 <616d6d696e6720696e746572666163652028415049292e20546865206d6f737420636f6d6d6f6e20736f636b> 20.0195 <6574732041504920697320746865204265726b> 20.0195 <656c657920554e49582043206c616e6775616765>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.658 Tw + +BT +48.24 597.366 Td +/F1.0 10.5 Tf +[<696e7465726661636520666f7220736f636b> 20.0195 <6574732e20536f636b> 20.0195 <6574732063616e20616c736f206265207573656420666f7220636f6d6d756e69636174696f6e206265747765656e2070726f6365737365732077697468696e20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 581.586 Td +/F1.0 10.5 Tf +<73616d6520636f6d70757465722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 532.134 Td +/F2.0 27 Tf +<416262726576696174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 501.486 Td +/F2.0 10.5 Tf +<415049> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 482.706 Td +/F1.0 10.5 Tf +[<4170706c69636174696f6e2050726f6772> 20.0195 <616d20496e74657266616365>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 454.926 Td +/F2.0 10.5 Tf +<415350> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 436.146 Td +/F1.0 10.5 Tf +[<4162737472> 20.0195 <6163742053657276696365205072696d6974697665>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 408.366 Td +/F2.0 10.5 Tf +<495554> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 389.586 Td +/F1.0 10.5 Tf +[<496d706c656d656e746174696f6e20556e6465722054> 29.7852 <657374>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 361.806 Td +/F2.0 10.5 Tf +[<52> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 343.026 Td +/F1.0 10.5 Tf +<52756e2d54696d6520456e7669726f6e6d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 315.246 Td +/F2.0 10.5 Tf +<48545450> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 296.466 Td +/F1.0 10.5 Tf +[<487970657274657874205472> 20.0195 <616e736665722050726f746f636f6c>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 268.686 Td +/F2.0 10.5 Tf +<535554> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 249.906 Td +/F1.0 10.5 Tf +[<53> 20.0195 <797374656d20556e6465722054> 29.7852 <657374>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 222.126 Td +/F2.0 10.5 Tf +<53534c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 203.346 Td +/F1.0 10.5 Tf +[<53656375726520536f636b> 20.0195 <657473204c61> 20.0195 <796572>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 175.566 Td +/F2.0 10.5 Tf +[<5454> 20.0195 <434e2d33>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 156.786 Td +/F1.0 10.5 Tf +[<54> 29.7852 <657374696e6720616e642054> 29.7852 <65737420436f6e74726f6c204e6f746174696f6e2076657273696f6e2033>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 107.334 Td +/F2.0 27 Tf +<5265666572656e636573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8862 Tw + +BT +48.24 76.686 Td +/F1.0 10.5 Tf +[<5b315d204554534920455320323031203837332d312076332e312e312028323030352d3036295468652054> 29.7852 <657374696e6720616e642054> 29.7852 <65737420436f6e74726f6c204e6f746174696f6e2076657273696f6e20333b205061727420313a20436f7265>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 60.906 Td +/F1.0 10.5 Tf +<4c616e6775616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<37> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +75 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 74 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F2.0 17 0 R +>> +/XObject << /Stamp1 142 0 R +>> +>> +>> +endobj +76 0 obj +[75 0 R /XYZ 0 740.55 null] +endobj +77 0 obj +[75 0 R /XYZ 0 565.77 null] +endobj +78 0 obj +[75 0 R /XYZ 0 140.97 null] +endobj +79 0 obj +[75 0 R /XYZ 0 88.65 null] +endobj +80 0 obj +<< /Length 1547 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 793.926 Td +/F1.0 10.5 Tf +[<5b325d20544954> 60.0586 <414e2055736572204775696465>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 766.146 Td +/F1.0 10.5 Tf +[<5b335d20485454506d73675f434e4c3131333331322054> 29.7852 <65737420506f727420666f72205454> 20.0195 <434e2d332054> 29.7852 <6f6f6c736574207769746820544954> 60.0586 <414e2c2055736572204775696465>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 738.366 Td +/F1.0 10.5 Tf +<5b345d20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +64.368 738.366 Td +/F1.0 10.5 Tf +<5246432032363136> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 722.586 Td +/F1.0 10.5 Tf +[<487970657274657874205472> 20.0195 <616e736665722050726f746f636f6c20d020485454502f312e31>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 694.806 Td +/F1.0 10.5 Tf +<5b355d204f70656e53534c20746f6f6c6b6974> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 679.026 Td +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +48.24 679.026 Td +/F1.0 10.5 Tf +[<687474703a2f2f777777> 69.8242 <2e6f70656e73736c2e6f7267>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<38> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +81 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 80 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +>> +/XObject << /Stamp2 143 0 R +>> +>> +/Annots [85 0 R 87 0 R] +>> +endobj +82 0 obj +[81 0 R /XYZ 0 805.89 null] +endobj +83 0 obj +[81 0 R /XYZ 0 778.11 null] +endobj +84 0 obj +[81 0 R /XYZ 0 750.33 null] +endobj +85 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (http://www.ietf.org/rfc/rfc2616.txt) +>> +/Subtype /Link +/Rect [64.368 735.3 110.064 749.58] +/Type /Annot +>> +endobj +86 0 obj +[81 0 R /XYZ 0 706.77 null] +endobj +87 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (http://www.openssl.org) +>> +/Subtype /Link +/Rect [48.24 675.96 163.6788 690.24] +/Type /Annot +>> +endobj +88 0 obj +<< /Border [0 0 0] +/Dest (_how_to_read_this_document) +/Subtype /Link +/Rect [48.24 748.79 189.801 763.07] +/Type /Annot +>> +endobj +89 0 obj +<< /Border [0 0 0] +/Dest (_how_to_read_this_document) +/Subtype /Link +/Rect [541.1705 748.79 547.04 763.07] +/Type /Annot +>> +endobj +90 0 obj +<< /Border [0 0 0] +/Dest (_scope) +/Subtype /Link +/Rect [48.24 730.31 77.22 744.59] +/Type /Annot +>> +endobj +91 0 obj +<< /Border [0 0 0] +/Dest (_scope) +/Subtype /Link +/Rect [541.1705 730.31 547.04 744.59] +/Type /Annot +>> +endobj +92 0 obj +<< /Border [0 0 0] +/Dest (_general) +/Subtype /Link +/Rect [48.24 711.83 87.6253 726.11] +/Type /Annot +>> +endobj +93 0 obj +<< /Border [0 0 0] +/Dest (_general) +/Subtype /Link +/Rect [541.1705 711.83 547.04 726.11] +/Type /Annot +>> +endobj +94 0 obj +<< /Border [0 0 0] +/Dest (_function_specification) +/Subtype /Link +/Rect [48.24 693.35 160.0545 707.63] +/Type /Annot +>> +endobj +95 0 obj +<< /Border [0 0 0] +/Dest (_function_specification) +/Subtype /Link +/Rect [541.1705 693.35 547.04 707.63] +/Type /Annot +>> +endobj +96 0 obj +<< /Border [0 0 0] +/Dest (_implementation) +/Subtype /Link +/Rect [60.24 674.87 141.09 689.15] +/Type /Annot +>> +endobj +97 0 obj +<< /Border [0 0 0] +/Dest (_implementation) +/Subtype /Link +/Rect [541.1705 674.87 547.04 689.15] +/Type /Annot +>> +endobj +98 0 obj +<< /Border [0 0 0] +/Dest (_environment) +/Subtype /Link +/Rect [72.24 656.39 138.7575 670.67] +/Type /Annot +>> +endobj +99 0 obj +<< /Border [0 0 0] +/Dest (_environment) +/Subtype /Link +/Rect [541.1705 656.39 547.04 670.67] +/Type /Annot +>> +endobj +100 0 obj +<< /Border [0 0 0] +/Dest (_module_structure) +/Subtype /Link +/Rect [72.24 637.91 159.9045 652.19] +/Type /Annot +>> +endobj +101 0 obj +<< /Border [0 0 0] +/Dest (_module_structure) +/Subtype /Link +/Rect [541.1705 637.91 547.04 652.19] +/Type /Annot +>> +endobj +102 0 obj +<< /Border [0 0 0] +/Dest (_configuration) +/Subtype /Link +/Rect [60.24 619.43 129.5503 633.71] +/Type /Annot +>> +endobj +103 0 obj +<< /Border [0 0 0] +/Dest (_configuration) +/Subtype /Link +/Rect [541.1705 619.43 547.04 633.71] +/Type /Annot +>> +endobj +104 0 obj +<< /Border [0 0 0] +/Dest (_notification_asps) +/Subtype /Link +/Rect [72.24 600.95 158.424 615.23] +/Type /Annot +>> +endobj +105 0 obj +<< /Border [0 0 0] +/Dest (_notification_asps) +/Subtype /Link +/Rect [541.1705 600.95 547.04 615.23] +/Type /Annot +>> +endobj +106 0 obj +<< /Border [0 0 0] +/Dest (_start_procedure) +/Subtype /Link +/Rect [60.24 582.47 138.6855 596.75] +/Type /Annot +>> +endobj +107 0 obj +<< /Border [0 0 0] +/Dest (_start_procedure) +/Subtype /Link +/Rect [541.1705 582.47 547.04 596.75] +/Type /Annot +>> +endobj +108 0 obj +<< /Border [0 0 0] +/Dest (sending-receiving-http-messages) +/Subtype /Link +/Rect [60.24 563.99 231.8205 578.27] +/Type /Annot +>> +endobj +109 0 obj +<< /Border [0 0 0] +/Dest (sending-receiving-http-messages) +/Subtype /Link +/Rect [541.1705 563.99 547.04 578.27] +/Type /Annot +>> +endobj +110 0 obj +<< /Border [0 0 0] +/Dest (_http_messages_sent_by_the_test_port) +/Subtype /Link +/Rect [72.24 545.51 254.0076 559.79] +/Type /Annot +>> +endobj +111 0 obj +<< /Border [0 0 0] +/Dest (_http_messages_sent_by_the_test_port) +/Subtype /Link +/Rect [541.1705 545.51 547.04 559.79] +/Type /Annot +>> +endobj +112 0 obj +<< /Border [0 0 0] +/Dest (encoding_and_decoding_functions) +/Subtype /Link +/Rect [60.24 527.03 230.3295 541.31] +/Type /Annot +>> +endobj +113 0 obj +<< /Border [0 0 0] +/Dest (encoding_and_decoding_functions) +/Subtype /Link +/Rect [541.1705 527.03 547.04 541.31] +/Type /Annot +>> +endobj +114 0 obj +<< /Border [0 0 0] +/Dest (_message_length_function) +/Subtype /Link +/Rect [60.24 508.55 187.3635 522.83] +/Type /Annot +>> +endobj +115 0 obj +<< /Border [0 0 0] +/Dest (_message_length_function) +/Subtype /Link +/Rect [541.1705 508.55 547.04 522.83] +/Type /Annot +>> +endobj +116 0 obj +<< /Border [0 0 0] +/Dest (_closing_down) +/Subtype /Link +/Rect [60.24 490.07 128.721 504.35] +/Type /Annot +>> +endobj +117 0 obj +<< /Border [0 0 0] +/Dest (_closing_down) +/Subtype /Link +/Rect [541.1705 490.07 547.04 504.35] +/Type /Annot +>> +endobj +118 0 obj +<< /Border [0 0 0] +/Dest (_close) +/Subtype /Link +/Rect [72.24 471.59 98.343 485.87] +/Type /Annot +>> +endobj +119 0 obj +<< /Border [0 0 0] +/Dest (_close) +/Subtype /Link +/Rect [541.1705 471.59 547.04 485.87] +/Type /Annot +>> +endobj +120 0 obj +<< /Border [0 0 0] +/Dest (_shutdown) +/Subtype /Link +/Rect [72.24 453.11 123.2595 467.39] +/Type /Annot +>> +endobj +121 0 obj +<< /Border [0 0 0] +/Dest (_shutdown) +/Subtype /Link +/Rect [541.1705 453.11 547.04 467.39] +/Type /Annot +>> +endobj +122 0 obj +<< /Border [0 0 0] +/Dest (_logging) +/Subtype /Link +/Rect [60.24 434.63 99.909 448.91] +/Type /Annot +>> +endobj +123 0 obj +<< /Border [0 0 0] +/Dest (_logging) +/Subtype /Link +/Rect [541.1705 434.63 547.04 448.91] +/Type /Annot +>> +endobj +124 0 obj +<< /Border [0 0 0] +/Dest (_error_handling) +/Subtype /Link +/Rect [60.24 416.15 136.848 430.43] +/Type /Annot +>> +endobj +125 0 obj +<< /Border [0 0 0] +/Dest (_error_handling) +/Subtype /Link +/Rect [541.1705 416.15 547.04 430.43] +/Type /Annot +>> +endobj +126 0 obj +<< /Border [0 0 0] +/Dest (_ssl_functionality) +/Subtype /Link +/Rect [60.24 397.67 147.684 411.95] +/Type /Annot +>> +endobj +127 0 obj +<< /Border [0 0 0] +/Dest (_ssl_functionality) +/Subtype /Link +/Rect [541.1705 397.67 547.04 411.95] +/Type /Annot +>> +endobj +128 0 obj +<< /Border [0 0 0] +/Dest (_compilation) +/Subtype /Link +/Rect [72.24 379.19 133.4655 393.47] +/Type /Annot +>> +endobj +129 0 obj +<< /Border [0 0 0] +/Dest (_compilation) +/Subtype /Link +/Rect [541.1705 379.19 547.04 393.47] +/Type /Annot +>> +endobj +130 0 obj +<< /Border [0 0 0] +/Dest (_authentication) +/Subtype /Link +/Rect [72.24 360.71 146.8213 374.99] +/Type /Annot +>> +endobj +131 0 obj +<< /Border [0 0 0] +/Dest (_authentication) +/Subtype /Link +/Rect [541.1705 360.71 547.04 374.99] +/Type /Annot +>> +endobj +132 0 obj +<< /Border [0 0 0] +/Dest (_other_features) +/Subtype /Link +/Rect [72.24 342.23 146.6006 356.51] +/Type /Annot +>> +endobj +133 0 obj +<< /Border [0 0 0] +/Dest (_other_features) +/Subtype /Link +/Rect [541.1705 342.23 547.04 356.51] +/Type /Annot +>> +endobj +134 0 obj +<< /Border [0 0 0] +/Dest (_limitations) +/Subtype /Link +/Rect [60.24 323.75 117.6015 338.03] +/Type /Annot +>> +endobj +135 0 obj +<< /Border [0 0 0] +/Dest (_limitations) +/Subtype /Link +/Rect [541.1705 323.75 547.04 338.03] +/Type /Annot +>> +endobj +136 0 obj +<< /Border [0 0 0] +/Dest (_terminology) +/Subtype /Link +/Rect [48.24 305.27 111.8933 319.55] +/Type /Annot +>> +endobj +137 0 obj +<< /Border [0 0 0] +/Dest (_terminology) +/Subtype /Link +/Rect [541.1705 305.27 547.04 319.55] +/Type /Annot +>> +endobj +138 0 obj +<< /Border [0 0 0] +/Dest (_abbreviations) +/Subtype /Link +/Rect [48.24 286.79 119.0205 301.07] +/Type /Annot +>> +endobj +139 0 obj +<< /Border [0 0 0] +/Dest (_abbreviations) +/Subtype /Link +/Rect [541.1705 286.79 547.04 301.07] +/Type /Annot +>> +endobj +140 0 obj +<< /Border [0 0 0] +/Dest (_references) +/Subtype /Link +/Rect [48.24 268.31 103.0815 282.59] +/Type /Annot +>> +endobj +141 0 obj +<< /Border [0 0 0] +/Dest (_references) +/Subtype /Link +/Rect [541.1705 268.31 547.04 282.59] +/Type /Annot +>> +endobj +142 0 obj +<< /Type /XObject +/Subtype /Form +/BBox [0 0 595.28 841.89] +/Length 162 +>> +stream +q +/DeviceRGB cs +0.0 0.0 0.0 scn +/DeviceRGB CS +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +q +0.25 w +/DeviceRGB CS +0.8667 0.8667 0.8667 SCN +48.24 30.0 m +547.04 30.0 l +S +Q +Q + +endstream +endobj +143 0 obj +<< /Type /XObject +/Subtype /Form +/BBox [0 0 595.28 841.89] +/Length 162 +>> +stream +q +/DeviceRGB cs +0.0 0.0 0.0 scn +/DeviceRGB CS +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +q +0.25 w +/DeviceRGB CS +0.8667 0.8667 0.8667 SCN +48.24 30.0 m +547.04 30.0 l +S +Q +Q + +endstream +endobj +144 0 obj +<< /Type /Outlines +/Count 29 +/First 145 0 R +/Last 173 0 R +>> +endobj +145 0 obj +<< /Title +/Parent 144 0 R +/Count 0 +/Next 146 0 R +/Dest [7 0 R /XYZ 0 841.89 null] +>> +endobj +146 0 obj +<< /Title +/Parent 144 0 R +/Count 0 +/Next 147 0 R +/Prev 145 0 R +/Dest [10 0 R /XYZ 0 841.89 null] +>> +endobj +147 0 obj +<< /Title +/Parent 144 0 R +/Count 0 +/Next 148 0 R +/Prev 146 0 R +/Dest [12 0 R /XYZ 0 841.89 null] +>> +endobj +148 0 obj +<< /Title +/Parent 144 0 R +/Count 0 +/Next 149 0 R +/Prev 147 0 R +/Dest [12 0 R /XYZ 0 705.83 null] +>> +endobj +149 0 obj +<< /Title +/Parent 144 0 R +/Count 0 +/Next 150 0 R +/Prev 148 0 R +/Dest [12 0 R /XYZ 0 557.41 null] +>> +endobj +150 0 obj +<< /Title +/Parent 144 0 R +/Count 20 +/First 151 0 R +/Last 170 0 R +/Next 171 0 R +/Prev 149 0 R +/Dest [30 0 R /XYZ 0 666.39 null] +>> +endobj +151 0 obj +<< /Title +/Parent 150 0 R +/Count 2 +/First 152 0 R +/Last 153 0 R +/Next 154 0 R +/Dest [30 0 R /XYZ 0 614.07 null] +>> +endobj +152 0 obj +<< /Title +/Parent 151 0 R +/Count 0 +/Next 153 0 R +/Dest [30 0 R /XYZ 0 568.55 null] +>> +endobj +153 0 obj +<< /Title +/Parent 151 0 R +/Count 0 +/Prev 152 0 R +/Dest [30 0 R /XYZ 0 453.35 null] +>> +endobj +154 0 obj +<< /Title +/Parent 150 0 R +/Count 1 +/First 155 0 R +/Last 155 0 R +/Next 156 0 R +/Prev 151 0 R +/Dest [37 0 R /XYZ 0 778.11 null] +>> +endobj +155 0 obj +<< /Title +/Parent 154 0 R +/Count 0 +/Dest [37 0 R /XYZ 0 689.03 null] +>> +endobj +156 0 obj +<< /Title +/Parent 150 0 R +/Count 0 +/Next 157 0 R +/Prev 154 0 R +/Dest [37 0 R /XYZ 0 589.61 null] +>> +endobj +157 0 obj +<< /Title +/Parent 150 0 R +/Count 1 +/First 158 0 R +/Last 158 0 R +/Next 159 0 R +/Prev 156 0 R +/Dest [37 0 R /XYZ 0 385.63 null] +>> +endobj +158 0 obj +<< /Title +/Parent 157 0 R +/Count 0 +/Dest [37 0 R /XYZ 0 340.11 null] +>> +endobj +159 0 obj +<< /Title +/Parent 150 0 R +/Count 0 +/Next 160 0 R +/Prev 157 0 R +/Dest [47 0 R /XYZ 0 601.65 null] +>> +endobj +160 0 obj +<< /Title +/Parent 150 0 R +/Count 0 +/Next 161 0 R +/Prev 159 0 R +/Dest [47 0 R /XYZ 0 264.71 null] +>> +endobj +161 0 obj +<< /Title +/Parent 150 0 R +/Count 2 +/First 162 0 R +/Last 163 0 R +/Next 164 0 R +/Prev 160 0 R +/Dest [47 0 R /XYZ 0 123.07 null] +>> +endobj +162 0 obj +<< /Title +/Parent 161 0 R +/Count 0 +/Next 163 0 R +/Dest [53 0 R /XYZ 0 841.89 null] +>> +endobj +163 0 obj +<< /Title +/Parent 161 0 R +/Count 0 +/Prev 162 0 R +/Dest [53 0 R /XYZ 0 683.49 null] +>> +endobj +164 0 obj +<< /Title +/Parent 150 0 R +/Count 0 +/Next 165 0 R +/Prev 161 0 R +/Dest [53 0 R /XYZ 0 572.07 null] +>> +endobj +165 0 obj +<< /Title +/Parent 150 0 R +/Count 0 +/Next 166 0 R +/Prev 164 0 R +/Dest [53 0 R /XYZ 0 419.87 null] +>> +endobj +166 0 obj +<< /Title +/Parent 150 0 R +/Count 3 +/First 167 0 R +/Last 169 0 R +/Next 170 0 R +/Prev 165 0 R +/Dest [53 0 R /XYZ 0 249.67 null] +>> +endobj +167 0 obj +<< /Title +/Parent 166 0 R +/Count 0 +/Next 168 0 R +/Dest [53 0 R /XYZ 0 160.59 null] +>> +endobj +168 0 obj +<< /Title +/Parent 166 0 R +/Count 0 +/Next 169 0 R +/Prev 167 0 R +/Dest [65 0 R /XYZ 0 747.3 null] +>> +endobj +169 0 obj +<< /Title +/Parent 166 0 R +/Count 0 +/Prev 168 0 R +/Dest [65 0 R /XYZ 0 331.62 null] +>> +endobj +170 0 obj +<< /Title +/Parent 150 0 R +/Count 0 +/Prev 166 0 R +/Dest [65 0 R /XYZ 0 133.08 null] +>> +endobj +171 0 obj +<< /Title +/Parent 144 0 R +/Count 0 +/Next 172 0 R +/Prev 150 0 R +/Dest [75 0 R /XYZ 0 740.55 null] +>> +endobj +172 0 obj +<< /Title +/Parent 144 0 R +/Count 0 +/Next 173 0 R +/Prev 171 0 R +/Dest [75 0 R /XYZ 0 565.77 null] +>> +endobj +173 0 obj +<< /Title +/Parent 144 0 R +/Count 0 +/Prev 172 0 R +/Dest [75 0 R /XYZ 0 140.97 null] +>> +endobj +174 0 obj +<< /Nums [0 << /P (i) +>> 1 << /P (ii) +>> 2 << /P (1) +>> 3 << /P (2) +>> 4 << /P (3) +>> 5 << /P (4) +>> 6 << /P (5) +>> 7 << /P (6) +>> 8 << /P (7) +>> 9 << /P (8) +>>] +>> +endobj +175 0 obj +<< /Length1 12352 +/Length 7795 +/Filter [/FlateDecode] +>> +stream +xz |Ό˶lْeKNÖ%8َ qL!B6xSG)]~]Bٖ-)fnlk|{=3#ٲcڿxޙy9^ aYMy'/` B8jptщ>o|ހgN n*6B~x&ghh.I1Iãp #&K7o< =3?/ Ro{ݥG(Uqϩpp`E( 壿Ha(4,\)FR@<6NOP!huzhH2&"ґ -֌L[݁sr.wAaQqIiYyQq"[gj6$,y5"fl#nj|Vt}ES=&q_,Ur YQn-*p:<08峅9'` Xs +uFV1Ȫ2FI 1$.dt.be®@_pɜ³YYAAp!Kv&ʈyIz?{y}B$ ЈYfʞe|8ak;Fy 5)=|R&OQ;rS ˉ _%*y/Vf#dck- zrpĂToQ*,zLoQ(-zdF,ؓ`GDp`9ޮoaMn_xol#c bGBL7Asn6'g?\ VU +ʂxʏ}˟{Kر g|--׹Evz"5[eOŇݿP^flwmF@UJF=\wg3caL,PDa ˮL[CX{͏NtgH4:鵾=΁n*wꋽ{RL[u0ӛKDG`ih.stXIueEGN…W&0l1&&N<ƀ+_д y@54aӬXcn&YMV%ecYv޾N yC>15 p[(f< n#;)άiYK3C)Qf(gUh\[Z4ſUzic[ї^ЊZKS̱A-~LBبzBV-Tx(`  H%8flROԅJ,tQSG7O_UʕKa.DG?{/"ɲz< [8X归DRUʭVcu?LZdFN1^EC Z mwF4L3ns4e +ˬP]:a"LtuwNewۏtTjZReCu(aX޶7/1fVx~r˫j.ɧ)QU=Vp E^ )YU8hC.%O ڔ֢Βg|fwVO($1ѥ'~{[n Rkwԗ~r#Z MR h Kg} x1X ]13 ^W\9oXyy=K\9M & +򕦓?3pX^KVa-SPAiGPFYoS\f%PCDӊi|1clyM 6z{@/3[F$8mP ZA&JWcƚJZ.*f' *|5Qu.KLbHmjuGv@1i?toQʒ!Lc/vN1T3tͼ4*Sv+V1 _@%[xn%),r iV&%qLirDMiZ; ?݋OY2eLJx3 `6TǪb})$Ht M8 qsQשQen}Ok/>IWtl<[xsCI`N RcOƋ5l-*1/op[cԑM9]|L +uxq wWRǗkCkFe4 fwWz_Nןqͷ>4?=5t_zz?LM0+do\ +\xDH/޴/Z r}?ە{?.6f#49qZzun☱Vqj * ꘔn͍z&z =98WdAv{FyF82_;X`.s(Kr-Z^qs\/Olpzr7̪ žʇTul\{HJh+rn+iwͪijH9-%cmmL*l2Xm1k]k[uIq`Vc|;_+i .e@&gڲr MBdi>8:R]v?/wFM >{}ypunגXkRďʵ|}o]e^ڙbb7`Je63MV/8y +8;'V 0CLF,nW:]ԂjTUI>,6V;Z!ř%vwg*`1D!$dwr +z㣎c`GϒB>pè2%"K/F̀7 )̒ 僾W+NT*EK*o_綟Vbb$ k5 V+^P,&!،8CM$!9_Re3ިXy/tOqHTOdž-x_0l3+4ެhɅ_y(y8sRg3<U/k 'BHƟ' *elԻanQI?O7u\.ѵ7\Ҿy~uޕ]$5l!Ĥ6}}Wɾ͟_Ws=Zr!:}e}>Sn$f +p1nu$@(4꙽60 M -Zg+8[~"Ve@B#WvζXsa8g{rՎ%>/"hy*K@Ğ* ͧNJ x*:6RBD6AE?q|S OGx<'lY?RT4nwǻ?\'䶵ZA}gf'p<818;ةQ_$ݛ>w. +:#%Y{v#iz҂/`9qY[yVO!}~W_/ѳ RY +" 9r[ь]w1TC~6F(wr81a$IP};1\)[UQW^jx'rcjsϿ<=ád[~ +R`0KTq&!\eLw&F`-< y}]dȒ4i j9^W[4]A̲ezm -AԊFjն02!1F^ٍGܿ@(RpEJ1Lsu?%CK|5]T|\i?1#N%s+KQԸTut:56.ULA",?PD*,LeMsxEП 6-9$=[pI؇ i~"9i +Q Qq8B4z<)[KqoTrR)T}D׷eU`3ʫo^`dBxӺ#pG6qT9"H)RֶX3;j]ueCn?r[!,̉ r'b5R6|Oe4邠GU'cI}y~t$FZ)TlmhXh~Y`ar E0>lċE]JFjkw'ٳ0* ǖ /LM˛>SBl}̧<":0FP }~6.* Í]HvstJb SvBD`I/4X`.a.Y #$ܘ/%Ie+K)MO4ZM ɀx ٟ3@(&cBmpkS3uv>-7Zڄ~XO[8Ө' o]]XRUl-r ,Fe_WܕphB.VGl_ʫL0>1`Mb"uO^:Wʄ jJ2rg/z!nPx(<>NJ x(4~:BU0&oxCs`4I̔XiC[kBQ@aQ_Ami͎Qcp52ؖLoԐ\R4ϏR|4D)+;ڐMZ-vyAa|E-yD˯YZY(ᑒ3fBm$SX߼ӿ}(2#Iz~""l!S*rzRSzs+ST*UNfF%u.rcG߭Q{тi$nD'|- +jlz|@aI0c{Ju#A'S65 !O 59Nm$B?erH~BEUW~wGpLp]X*#|#o!D"QhRОГ=A"|* qCo":"ND|9yV"-d9J {!/(E,q=9G68/CpCN81G7Q-Br:34{pG, _qc}4u0ށzD)א=(W nt]A~TEP>Gfqx8"TJfdbrnjxphFiTLL h5EFִq`z`ꮁ~3*Al pL3h;F\mAҀ +QՀoMWpYw~d4 L a& x}bgGSkhzT$@jL ) a49Lc dc]ߍ305=<10[4C̍iŨf$ ECY̌\_#Ȋx53S1Ԉf|a(/3 $ B#06[HVcÃ㚙&odl:BYcfv|hx|> +endobj +177 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +178 0 obj +[259 1000 408 1000 1000 1000 1000 220 346 346 1000 559 250 310 250 288 559 559 559 559 559 559 559 559 559 1000 286 286 1000 1000 1000 1000 1000 705 653 613 727 623 589 713 792 367 1000 1000 623 937 763 742 604 1000 655 543 612 716 674 1046 660 1000 1000 359 1000 359 1000 458 1000 562 613 492 613 535 369 538 634 319 1000 584 310 944 645 577 613 613 471 451 352 634 579 861 578 564 511 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 562 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 361 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 259 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 250 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 742 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +179 0 obj +<< /Length1 8816 +/Length 5646 +/Filter [/FlateDecode] +>> +stream +xY{xՕwf$˲-KdˣeYKdYgw'1e[~Ē'wB!JS4 vCQv˲ ݶ ,(_ڴ&dόX1*3ws~s5#ȉxhj(z?$GKG# #M!ĆB %E(O0o,:wŻAH!IiEh)To>pO:Lf'yGwLO.ri٠nXwBxJ&}'wD_*/|"Hg $K(K&W$=Qs4#2 ,VT>D#q]VV&u>ʗf>tU"u]R~ <(-$2 vUBNXqiiD\g4\&"R4${瞙p:zc-e,[7ܹf֛Dw=yn*gLmnNsEV=Xͭ6imNlPPsG{\_2{WS tGTBfI0 ɪR j{@V9&t+M! gST^B8E)?k9yk]pv,"SH-~/UZis6^_9ZsQq=KS*l:}??>S#d tmzZէEYy]~K͐j`NB<C<YPw @pȑ}*q=r޳̕3[^o}~\[=P( +0 =/[KwK"o`s'Ic&کv;ݝO5΂T|J$N-RHybhJX1l?R_Ҕ+=ĉS8CgǏMx+2$M-)"?R#_`>?Xsmݦ9F- b7plzD+|$μޣ0Ź&e5-8 Tg%FSY 0{â'A;P&;W=tn$c6 +ۂ̿z%;dq쌩 + u4.[`Bh%n̞D1kvykT$"L|J敻*]`&8P=utfbhnTfCЩkpa:"L9/Z%HҮǒ{Y,}*5)z$y&y:ɕJc=rQ=DZ}s63Y˘E{MqL85Y~YmqI\-.ћ͹]͌c]$UUlvf#aY7=o.>Mn.33 +V܍ pD6#qMF};7}[|q.Xm@«AYXk,}r&N,SX㉉g~C~!vu=})W'A5=KŪG.\'wBXɉnղ6_VNQ}9!ǘ΅62D7oNSܦmbi&8`XK8u86\WUqqIoz/wal6_Nn@],'sǮj9WdEEF~p˦[#qn>i\Wv}bIrSƫ"csuy4P_+xwġ-/GOL%]~K]mGߒtJ7tȮODʹlXiWY6e;֖B뇾{k ]=xsYXCA.(W(уiԢpo&eBvAf;u_[IxF) z|mwf^5nYۧMn(s5sK3 ̕i|CysRk}0 {k7u\fY/"9%#eE nu_ۥx\Jge*)w%f㕭*>w"UE~#)JTthn[ +;e2gg e ay*gMPSEa9Nl}=vt{%럑omI x$yÞ=1Rghf8w[Z|Ҝl{qYpO[fҁFuE-t۫-~ |@+^_mzrOJu ,@^#C巬/( +$V*tb+b#n7-:4GN:tk5Ӆn ruzg\h 7k5$3粁0J́{]WwϿ.Q"CU[RsGNc_hyG)x=<`g}YWVa`c7r/u9qx4nkK/>UNa9/Ǡbs)V pYC-(-*ܥUZ*IT"$5M= 5p"?q.o`z4]X8| ;Pqe:7L?v*g^Jo :J`\ZD4{\HefSA*5]]H7.>ߝ~RO"E^•mv'?c c2o:I`B' aoX,N8?p2iqZ]n\&[*otk!f{Gk'I +Z+/:!YS]OC^zn(9Z(n:٣j!GcFi~Sei* +l{:c+7@qO20wn_G'5|'&rɝH˦q=3?ۄ3`{JwVpN01{`-V{#ѓS>w'kK ?~BPe9x4J n\q*g%7D1U[vg[Gشn[ +gG7o:Z_c|+qjn^ﰙzqFb~whx1w"DY|\{DwBe<^OY2gw*y2RJ55Qa~y5czrcGXaUklfysSkyqQwǴbGlf.pn()5vݹ;>z 4u6`S#u]vI +ҪFL +;WWUwMw~@7Li-q8mꍻxH lxrnV4boS~HX~03W B[%CKo鉟mJSl=(L7!g7vnuXWj𛙆 +[qM]9,֧K3[]پbm{m% [M4N] Ĺ!o'q2KafqB]ȵ)s̜I3uĎ|coQȓJ3} ޏ_#/ +ŋ/;t9N sG}%U;חaq\Q֤&84}c ؛E'9>/5CEV[/4E:4H'zՕ4~P*ΠsTpDIewMت8t}е:R/9Mf Q[T2W5*wh98Nc9 RDxE88R +iܞGwhhjfX?Xms ]+P"led2.{>@5GEzu?}gdFy:)o!o82pt[r(\UC]~k BvtS?Wu1CdT)yyNP:WSRoO=+ ; -`8;hv- C|$ix>>G>,RY+|[4O ga2U~xHOy\hAfjx=HOCz2~M BZr [  +R0xEHiaZ74i$F?FU SF|'AH( `o ߅ܨy:T֡ԈP3ZZP+jCuB%MmF[PhÃ7,aÉwPB?!gfBN +}/!gߡr*rkcS 3csYbHnՑޚ;ó[vTbh +-4F!!17"( &4Z S\/ 0#{kl.FwgG1Q]܈q4R CMb)@ O6zaFNrZqO8GovZW ̎&bCfaO%КGcC`8de pm~,fBhhf$$ 8|L7&@㐭/SZx]xv|t k<]Ŗ$1 u=?96>9\JhӃ Ij9nf2*F`^Z`p>ʹ>:$H:ϗCqc;X񩝓G|'q$4vmhbZٹ*ͷqf+gA6ցH-CYpx S!$4tٝYAK&ݖYq흫'[~6C  +endstream +endobj +180 0 obj +<< /Type /FontDescriptor +/FontName /c62bea+NotoSerif-Bold +/FontFile2 179 0 R +/FontBBox [-212 -250 1306 1058] +/Flags 6 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 1068 +/Descent -292 +/CapHeight 1462 +/XHeight 1098 +>> +endobj +181 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +182 0 obj +[259 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 310 1000 288 1000 1000 1000 559 1000 1000 1000 1000 1000 1000 304 1000 1000 1000 1000 1000 1000 752 1000 667 767 652 621 769 818 400 1000 1000 653 952 788 787 638 1000 707 585 652 747 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 599 648 526 648 570 407 560 666 352 1000 636 352 985 666 612 645 1000 522 487 404 666 605 855 1000 579 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +183 0 obj +<< /Length1 4472 +/Length 2986 +/Filter [/FlateDecode] +>> +stream +xV{lSuE;vBpps'vlq8!:y84PnՎMiꐪBYk2jEF)XG +eh])7ν7)tYmw}uˠ +R#ѽo"Q t=(돖̮Gיx,;\uHtz4v\5ez/zdBq=UH,gwb"7U @γ0ip}וC#/0 lJP ~66>qN`@ )!=#3ki7ˋVWqdD)셜˷s_0O^:?p>~ctjg4!s4mҦqFGn+$Ξ3N{Mck)O(i/z_SЍsjڵʮ5 322>r z9!We?'\9*1ɰpy~T^@hAC`ZG#L&?P1l^bN +5aT@.R'0sog4}A 5ns7G%!_`j85|0'UՌNog T^CȇbQR[PBUD$9jP2Xk]ٸeiB׫zMLa"ljuV#abBhŘ]@{)(Q;ƈi$h 7a߾9sc+zSP{k`W{wf1'{8 ٧wfNy*sc\cVR_VF{jˬu$ķ]͡W SQ|qW3"&hh<մloX]?<٫Nj>ɥ\w J*T( +%c簫8b-+d_l>8TKF WƢGi3(%Ĥ.=jDiv󉔖:#]ŎZם0"9G846Қ8# b:q9d%ͩ| Jse<$/7e6/sz*/yYV`A:m,*TidwcG,U9[p߯'_QBzD_+9 8kIkp"ΤN.7LOO$"sa'%7406H9)!jҠ[)Xя*rX[liX]鵓t*qq;WT$˵*]jz7٥;E(T=]]JVNzN y)I /Ԙ9ki^ܟͅ +sUVS3{ ue͙MdMk"F(#]HUxV n\_1BAE{ x΂|ϥ<̷+8ŽwK CE"!_{"H_0FoEB$2="&T&=J`(om#QӃL, n I[M{&m׷ P&pw<Z۠: Ѕ-+JfɔR )x[RNANΆe:u2-ȁ5pT+P+2=rHLObR$SaqTXA<2= +I<yCN~M {Fxv>"Wy_3;g,|F^(Fi>[&KtZŮZ 3Ur Űc@8KFY: ]R\U)PbhNJt˶q]lDPeT3fl[5%$'pލh%]QSD7D-c3lf&+ذKgI$D:$&;\0@'Уf4"=6Tl \{w4M]Ô{}0!zΣÁp;>9GXEE]Z3T v)+;_f߿~ + +endstream +endobj +184 0 obj +<< /Type /FontDescriptor +/FontName /96a564+mplus1mn-regular +/FontFile2 183 0 R +/FontBBox [0 -230 1000 860] +/Flags 4 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 860 +/Descent -140 +/CapHeight 860 +/XHeight 0 +>> +endobj +185 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +186 0 obj +[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 500 1000 500 1000 1000 500 1000 1000 1000 500 500 1000 1000 500 1000 500 500 500 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 500 500 500 500 500 500 500 1000 500 1000 1000 500 500 500 500 500 500 500 500 500 500 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +187 0 obj +<< /Length1 5372 +/Length 3472 +/Filter [/FlateDecode] +>> +stream +xW{\T׵^33<5P'F$JAf1**GT P/203 *6*! chi5FRxm^Rk:{Ι?.朽{[k 24=MuKQ@mMv"js;+;Qos: ߎI0a_^i̺vh د}~${ uB~׋P]c_~4@}dzG@)-bB/VxpNhGD¸XSԚxH?A#` ^&3I$X٦,ZtvWibE<&؍d@"Le +F=(tVSVTIDYFNN+Xh73Ҭe9Ѿ#rqb3{9]n2c\v OlnDͰٜS9G>! b cm+@ȢJǎʶӉUЧo&9qcg'*[@*Sl ժ*Dm[iӣ+lJ U(+d|Zh Ɠˈ1c#GPmȸmJCEq_Ԯ#lڦ6OQrrEoQW7q=`wh!@xtaϘX~R['+=4|emy"]Sc*l6CCyˎ*u<'<$ӛ'#g:>!hԜ>e2ZΧ{^;7o{ݏlRW&?<#Yw:͛?P{`űt/ +Z!$s.h#_X~9*Sz7qKHuTמenj=WUY+ \Z<R5w rіXL +aJd!?gζ +{@xhjԪh":Ajޜ J?3*i9DfAWo =+_8Jt*3έgEMHS=#m`.SMVYl̯]_S[Cn3CCŎN=rrR-ڒ%iƤZyAz*VI:N`KlnУ덳YI> (1_̋hHXj'|}Jޔ\0: j ղOnRzp.jdNc q"W ,x"er;!`%9Z?Y>U蹦ʵm~[x9mCsȫc} %Y{QP$ըdnxA{~U$IqRqa5zrTXKK3nD\>ֳc9ghҦWK?>]q-U ꌮOXݚW~\_TtЍ{⺬H:1"[T&ImƩ߸U-\pmՄm/_, 7;.*uğ{@o-e P #:drv&cat/ܶ(Yl4%]X5!};v2ԑd-bNVΖ}\6seeMablG[^P `;,^j 9fلu|;5n"jb߇01CO .vF!GiKІחۯ8,9,yJȶEBoh"C 02q 7[b. )b\A! aL5?ߥe7:Gg ƼW#&Y! +J ya!<ѨE``1J$#|!6q{DD@$'-9.+%Y$gIA"9H!3$ bbI.$T!+sZ_v79RWmk+!_97x?? : <m^) EI+FVĞԵ`XJ 8RM~{[Kj@| v{soQK։CQC3jpǫ?=q戭%6v fÉ)-L᐀Gsfluszv}fth%#dE4kot۽Kyw8"Վ??K"U/,E[7fr_{_K;c.-dK@]vp9[\~/IG6R["TCs AC=8a46fņwcD n~\?kE-q˧Qގ%+V0KD>Gc+j->uuLy- =jtxyz F1ːu3uĭ(QLMN;hώB܇;S9KHQ"ll .,P>ʪ5{ѧ^C\~>σI! +endstream +endobj +188 0 obj +<< /Type /FontDescriptor +/FontName /86b0d1+NotoSerif-Italic +/FontFile2 187 0 R +/FontBBox [-254 -250 1238 1047] +/Flags 70 +/StemV 0 +/ItalicAngle -12.0 +/Ascent 1068 +/Descent -292 +/CapHeight 1462 +/XHeight 1098 +>> +endobj +189 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +190 0 obj +[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 250 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 705 1000 1000 1000 1000 1000 1000 792 1000 1000 1000 1000 937 1000 1000 620 1000 1000 543 612 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 458 1000 579 562 486 1000 493 317 556 599 304 1000 568 304 895 599 574 577 1000 467 463 368 1000 1000 1000 1000 527 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +191 0 obj +<< /Length1 2376 +/Length 1493 +/Filter [/FlateDecode] +>> +stream +xT}h[U?4e֛u%i6JYڦM{5Y6-It[pQEDAPa"C :*ŁQ![/u"}q~|ι= P`wXND ֹOqGm* +\0 +T&ӅI Jmd"f9!|2E%;%Ѕ tljd3BgXG X:bg Aw3MSxYӆYݳٹtͧQ%LGC]hޝ,Y{!,`ow)X.lRy c٭ݰ S5M}owg>O/02%"4;eU6C +9H шF+ Xޯh)^abDWY)<. |#e+.fCt<#`QOcUfr,x\贋fJ4jgnʤ oAɺXDO _ Dʌ "PcozbW5i$JjX!ѯt*%aeXJ`ltX׫14U*UE-ȝ3?jb~`ЦZuˀF!d3sshj5H"v#bB!QR7(j5XvXK@[xLiI/Έj~Ol''@b?j3W<.ǐBV?./e 8G(8ۙؽ^bb]prn -Upz +endstream +endobj +192 0 obj +<< /Type /FontDescriptor +/FontName /8b258c+mplus1mn-italic +/FontFile2 191 0 R +/FontBBox [0 -230 1000 860] +/Flags 4 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 860 +/Descent -140 +/CapHeight 860 +/XHeight 0 +>> +endobj +193 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +194 0 obj +[1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +xref +0 195 +0000000000 65535 f +0000000015 00000 n +0000000394 00000 n +0000000598 00000 n +0000000719 00000 n +0000000770 00000 n +0000001042 00000 n +0000002043 00000 n +0000002339 00000 n +0000002506 00000 n +0000022520 00000 n +0000023260 00000 n +0000031865 00000 n +0000032279 00000 n +0000032323 00000 n +0000032372 00000 n +0000032416 00000 n +0000032460 00000 n +0000032633 00000 n +0000032750 00000 n +0000032794 00000 n +0000032909 00000 n +0000033023 00000 n +0000033201 00000 n +0000033376 00000 n +0000033420 00000 n +0000033563 00000 n +0000033738 00000 n +0000033854 00000 n +0000038054 00000 n +0000044854 00000 n +0000045220 00000 n +0000045264 00000 n +0000045308 00000 n +0000045352 00000 n +0000045396 00000 n +0000045571 00000 n +0000055777 00000 n +0000056182 00000 n +0000056226 00000 n +0000056342 00000 n +0000056386 00000 n +0000056560 00000 n +0000056604 00000 n +0000056721 00000 n +0000056765 00000 n +0000056809 00000 n +0000073094 00000 n +0000073466 00000 n +0000073582 00000 n +0000073626 00000 n +0000073670 00000 n +0000073714 00000 n +0000083594 00000 n +0000083973 00000 n +0000084017 00000 n +0000084061 00000 n +0000084177 00000 n +0000084221 00000 n +0000084337 00000 n +0000084381 00000 n +0000084425 00000 n +0000084906 00000 n +0000085392 00000 n +0000085436 00000 n +0000098075 00000 n +0000098488 00000 n +0000098605 00000 n +0000098648 00000 n +0000098765 00000 n +0000098880 00000 n +0000098924 00000 n +0000099037 00000 n +0000099154 00000 n +0000099198 00000 n +0000105728 00000 n +0000106070 00000 n +0000106114 00000 n +0000106158 00000 n +0000106202 00000 n +0000106245 00000 n +0000107845 00000 n +0000108198 00000 n +0000108242 00000 n +0000108286 00000 n +0000108330 00000 n +0000108506 00000 n +0000108550 00000 n +0000108714 00000 n +0000108851 00000 n +0000108990 00000 n +0000109105 00000 n +0000109224 00000 n +0000109343 00000 n +0000109464 00000 n +0000109599 00000 n +0000109735 00000 n +0000109860 00000 n +0000109988 00000 n +0000110112 00000 n +0000110237 00000 n +0000110367 00000 n +0000110498 00000 n +0000110625 00000 n +0000110753 00000 n +0000110883 00000 n +0000111015 00000 n +0000111144 00000 n +0000111274 00000 n +0000111418 00000 n +0000111563 00000 n +0000111712 00000 n +0000111862 00000 n +0000112006 00000 n +0000112151 00000 n +0000112288 00000 n +0000112426 00000 n +0000112551 00000 n +0000112678 00000 n +0000112795 00000 n +0000112915 00000 n +0000113037 00000 n +0000113160 00000 n +0000113279 00000 n +0000113401 00000 n +0000113528 00000 n +0000113657 00000 n +0000113787 00000 n +0000113919 00000 n +0000114044 00000 n +0000114170 00000 n +0000114298 00000 n +0000114427 00000 n +0000114555 00000 n +0000114684 00000 n +0000114809 00000 n +0000114935 00000 n +0000115060 00000 n +0000115186 00000 n +0000115313 00000 n +0000115441 00000 n +0000115565 00000 n +0000115690 00000 n +0000115961 00000 n +0000116232 00000 n +0000116310 00000 n +0000116743 00000 n +0000116935 00000 n +0000117159 00000 n +0000117303 00000 n +0000117455 00000 n +0000117697 00000 n +0000117892 00000 n +0000118046 00000 n +0000118220 00000 n +0000118425 00000 n +0000118589 00000 n +0000118773 00000 n +0000119050 00000 n +0000119286 00000 n +0000119534 00000 n +0000119750 00000 n +0000119951 00000 n +0000120081 00000 n +0000120223 00000 n +0000120375 00000 n +0000120555 00000 n +0000120776 00000 n +0000120930 00000 n +0000121109 00000 n +0000121275 00000 n +0000121429 00000 n +0000121597 00000 n +0000121773 00000 n +0000121923 00000 n +0000122105 00000 n +0000129992 00000 n +0000130208 00000 n +0000131571 00000 n +0000132635 00000 n +0000138372 00000 n +0000138593 00000 n +0000139956 00000 n +0000141051 00000 n +0000144128 00000 n +0000144342 00000 n +0000145705 00000 n +0000146813 00000 n +0000150376 00000 n +0000150602 00000 n +0000151965 00000 n +0000153078 00000 n +0000154662 00000 n +0000154875 00000 n +0000156238 00000 n +trailer +<< /Size 195 +/Root 2 0 R +/Info 1 0 R +>> +startxref +157373 +%%EOF diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/FD/images/Overview.png b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/FD/images/Overview.png new file mode 100644 index 0000000000000000000000000000000000000000..14427f069264c2cea19dc81809b7b8ec382f0dbf Binary files /dev/null and b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/FD/images/Overview.png differ diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/HTTPmsg_CNL113312_PRI_2.doc b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/HTTPmsg_CNL113312_PRI_2.doc new file mode 100644 index 0000000000000000000000000000000000000000..8bc1bb47f40a9306d6be5e17993e48883db46f22 Binary files /dev/null and b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/HTTPmsg_CNL113312_PRI_2.doc differ diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/UG/HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, User Guide.adoc b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/UG/HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, User Guide.adoc new file mode 100644 index 0000000000000000000000000000000000000000..bea385857f6b794419cafc631e3273353fe29343 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/UG/HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, User Guide.adoc @@ -0,0 +1,572 @@ +--- +Author: Péter Dimitrov +Version: 198 17-CNL 113 312, Rev. G +Date: 2010-07-01 + +--- += HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, User Guide +:author: Péter Dimitrov +:revnumber: 198 17-CNL 113 312, Rev. G +:revdate: 2010-07-01 +:toc: + +== About This Document + +=== How to Read This Document + +This is the User’s Guide for the _HTTPmsg_CNL113312_ (called HTTP from now on) test port. The HTTP test port is developed for the TTCN-3 Toolset with TITAN according to the Functional Specification <<_3, [3]>>. + +=== Prerequisite Knowledge + +The knowledge of the TITAN TTCN-3 Test Executor <<_2, [2]>> and the TTCN-3 language <<_1, [1]>> is essential. Basic knowledge of the HTTP protocol is valuable when reading this document. + + +== System Requirements + +In order to operate the HTTP test port the following system requirements must be satisfied: + +* Platform: any platform supported by TITAN RTE, optional OpenSSL. +* TITAN TTCN-3 Test Executor R8A (1.8.pl0) or higher installed. For installation guide see <<_2, [2]>> + +NOTE: This version of the test port is not compatible with TITAN releases earlier than R8A. + +* The C compiler gcc version 2.95 or above is installed. +* The OpenSSL 0.9.7 or above is installed. See <<_5, [5]>>. +* The Abstract_Socket CNL 113 384, rev. R6A or later product has to be installed. + +== Fundamental Concepts + +The test port establishes connection between the TTCN-3 test executor and the HTTP server or client trough a TCP/IP socket connection. The test port transmits and receives HTTP1.1 messages; see <<_3, [3]>> and <<_4, [4]>> + += The Test Port + +== Overview + +The HTTP test port offers HTTP message primitives and TCP connection control ASPs to the test suite in TTCN-3 format. The TTCN-3 definition of the HTTP messages and TCP notification ASPs can be found in a separate TTCN-3 module. This module should be imported into the test suite. + +== Installation + +Since the HTTP test port is used as a part of the TTCN-3 test environment this requires TTCN-3 Test Executor to be installed before any operation of the HTTP test port. For more details on the installation of TTCN-3 Test Executor see the relevant section of <<_2, [2]>> + +When building the executable test suite intended to handle HTTP over SSL connections, the libraries compiled for the OpenSSL toolkit and the TTCN-3 Test Executor should also be linked into the executable. + +Using and compiling OpenSSL is optional in the test port. See <<_5, [5]>> for more information. OpenSSL libraries should be added to the _Makefile_ generated by the TITAN executor see example in close <<8_examples.adoc#makefile, Makefile>>. + +== Configuration + +The executable test program behavior is customized via the RTE configuration file. This is a simple text file, which contains various sections (e.g. `[TESTPORT_PARAMETERS]`) after each other. The usual suffix of the RTE configuration file is _.cfg_. For further information about the configuration file see <<_2, [2]>> + +[[HTTP_test_port_parameters_in_the_RTE_configuration_file]] +=== HTTP Test Port Parameters in the RTE Configuration File + +In the `[TESTPORT_PARAMETERS]` section you can specify parameters that are passed to the test ports. Each parameter definition consists of a component name, a port name, a parameter name and a parameter value. The component name can be either an identifier or a component reference (integer) value. The port and parameter names are identifiers while the parameter value must always be a charstring (with quotation marks). Instead of component name or port name (or both of them) the asterisk ("*") sign can be used, which means "all components" or "all ports of the component". More information about the RTE configuration file can be found in <<_2, [2]>> + +In the `[TESTPORT_PARAMETERS]` section the following parameters can be set for the HTTP test port. Parameters marked with bold fonts apply to *SSL* using HTTP test ports *only*. Parameter values are *case-sensitive*! + +* `use_notification_ASPs` ++ +Enables receiving of `Connect_result`, `Client_connected` and `Listen_result` ASPs. Its default value is `_"no"_` in order to provide backward-compatibility for test suites using the port versions older than R2A. + +* `server_backlog` ++ +The parameter can be used to specify the number of allowed pending (queued) connection requests on the port the server listens. It is optional in server mode and not used in client mode. The default value is `_"1024"_`. + +* `http_debugging` ++ +Enables detailed debugging in the test port. It has only effect when TTCN_DEBUG is also set within the logging parameters of the configuration file. Its default value is `_"no"_`. + +* `TRUSTEDCALIST_FILE` ++ +It specifies a PEM encoded file’s path on the file system containing the certificates of the trusted CA authorities to use. Mandatory in server mode, and mandatory in client mode if VERIFYCERTIFICATE=`_"yes"_`. + +* `VERIFYCERTIFICATE` ++ +The parameter is *optional*, and can be used to tell the HTTP test port whether to check the certificate of the other side. If it is defined `_"yes"_`, the test port will query and check the certificate. If the certificate is not valid (i.e. the public and private keys do not match), it will exit with a corresponding error message. If it is defined `_"no"_`, the test port will not check the validity of the certificate. The default value is `_"no"_`. + +* `KEYFILE` ++ +This parameter is *conditional*. It specifies a PEM encoded file’s path on the file system containing the RSA private key. Mandatory in server mode and optional in client mode. + +* `CERTIFICATEFILE` ++ +This parameter is *conditional*. It specifies a PEM encoded file’s path on the file system containing the certificate chain. For detailed information see <<_5, [5]>> Mandatory in server mode and optional in client mode. Note that the server may require client authentication. In this case no connection can be established without a client certificate. + +* `PASSWORD` ++ +The parameter is *optional*, and can be used to specify the password protecting the private key file. The PASSWORD has to be the password used by generation of the private key file. If the password is not defined, the SSL toolkit asks for it when the test port receives the `LISTEN` ASP. It is recommended to define it in the config file instead. + +== Start Procedure + +=== TTCN-3 Test Executor + +Before the executable test suite can be run the TTCN-3 modules and C++ codes should be compiled and linked into an executable program. This process can be automated using the make utility. For more information about the _Makefile_ see the *_Makefile_* section and <<_2, [2]>> + +NOTE: The c++ implementation files __HTTPmsg_PT.hh__, __HTTPmsg_PT.cc__, __Abstract_Socket.cc__, __Abstract_Socket.hh__ and the TTCN-3 modules __HTTPmsg_Types.ttcn__ and __HTTPmsg_PortType.ttcn__ of the test port should be included in the _Makefile_. + +For information on how to start the execution see <<_2, [2]>> + +=== Connecting to a Server + +In case of the test performs the role of a HTTP client, the `Connect` ASP has to be sent. Its parameters are: + +`hostname`: host name or IP address of the remote server. + +`portnumber`: port number of the remote server where it accepts connections. + +`use_ssl`: has to be `_false_` on normal TCP/IP connections, `_true_` if the server accepts HTTPS connections. + +Multiple parallel connections can be opened and used. If two or more connections are used in parallel, `use_notification_ASPs` parameter has to be set to `_true_`, see <>. In this case `Connect_result` ASP is returned to the test case with the `client_id` associated to the connection. The returned `client_id` has to be used in the messages targeted to send on this connection. The returned `client_id` with value `_–1_` means that the server did not accept the connection because an error occurred. + +=== Starting a Server, Listening for Client Connections + +In case of the test performs the role of a HTTP server, the `Listen` ASP has to be sent. Its parameters are: + +`local_hostname`: host name or IP address of the interface in the local computer. It should be set if the workstation has multiple IP interfaces, and the test has to use a specific one. + +`portnumber`: port number where the server will accept connections. + +`use_ssl`: has to be `_false_` to accept normal TCP/IP connections, `_true_` to accept HTTPS connections. + +Sending the `Listen` ASP multiple times will cause to close the listening port and open another one. + +If `use_notification_ASPs` parameter is set to `_true_` in the configuration, the `Listen_result` ASP is returned to the test case with the opened port number. The returned `portnumber` with value `_–1_` means that an error occurred while setting up the requested listening port. + +If a client connects to the server and `use_notification_ASPs` parameter is set to `_true_` in the configuration, the `Client_connected` ASP is sent to the test case with `_hostname_`, `_portnumber_` and `_client_id_` fields. `client_id` has to be used as described above. + +[[sending-receiving-http-messages]] +== Sending/receiving HTTP Messages + +The HTTP test port is able to send and receive `HTTPMessage` structures. The `HTTPMessage` can be one of the following types: + +* `HTTPRequest` + +The Request message represents a single request to perform by the HTTP server, usually to access a `resource` on the server. +* `HTTPResponse` + +The Response message is sent by the HTTP server to the client. It includes the return status code of the request and the requested resource. +* `HTTPRequest_binary_body` + +The same as the `HTTPRequest` message. It is passed to TTCN when the body of the message contains non-ascii characters. +* `HTTPResponse_binary_body` + +The same as the `HTTPResponse` message. It is passed to TTCN when the body of the message contains non-ascii characters. + +In case of multiple connections, the `client_id` will identify the connection. When sending an HTTP message, it has to be set to the corresponding connection id. When receiving the message, the test port sets it to the corresponding connection id, and the test case will get the right value. + +Apart from the `HTTPRequest` and `HTTPResponse` ASPs above, the `erronous_msg` is received by the test port and sent to the test suite: + +`HTTP_erronous_msg` + +If a message is received on the connection, which can not be decoded as a `HTTP1.1` or `HTTP1.0` message, the `HTTPMessage` will contain an erroneous message with a `client_id`, and sent to the test suite. + +== Stop Procedure + +=== Closing Connections + +To close a specific client connection, the `Close` ASP has to be sent with the relevant `client_id`. If `client_id` is `_omit_`, all client connections will be closed. + +To close the server listening port, the `Shutdown` ASP has to be sent. + +If `use_notification_ASPs` parameter is set to `_true_` in the configuration, the test case will receive the `Close` ASP if the remote end of the connection disconnects. The `client_id` field will identify the relevant connection. + +If the remote end closes the connection, a `Half_close` ASP is received by the test case. `Half_close` means that the remote end will not send any more data, but it may receive. Some test cases may use this functionality, but in most cases a `Close` ASP has to be sent in reply to it, with the `client_id` received in the `Half_close` message. + +[[ttcn-3-test-executor-0]] +=== TTCN-3 Test Executor + +The TITAN executor stops the test port after the test case is finished or in case of execution error during the test case. + += Usage as Protocol Module + +The HTTP test port can be used as a protocol module, i.e. only a protocol data structure description with the appropriate encoding and decoding functions. The data structure definitions are the same as in case of http test port, they can be found in file _HTTPmsg_Types.ttcn._ The encoding and decoding functions are declared as external functions in file _HTTPmsg_Types.ttcn_ but they are implemented in files _HTTPmsg_PT.cc/hh._ + +The available functions are as follows: + +[cols=",,",options="header",] +|===================================================== +|Name |Type of formal parameters |Type of return value +|`enc_HTTPMessage` |HTTPMessage |octetstring +|`dec_HTTPMessage` |in octetstring stream + +inout HTTPMessage msg + +in boolean socket debugging |integer +|===================================================== + +If the test port used as protocol module, the Makefile is the same as in normal case i.e _HTTPmsg_PT.cc/hh_ is used and the port definition file _HTTPmsg_PortType.ttcn_ is also used but (generally) there will not be defined any port of this port type ``HTTPmsg_PT``. + += Usage with IPL4 Test Port + +To use IPL4 test port for HTTP traffic the HTTP test port provides a message length calculator function. That function can be used to determine the message boundary by the IPL4 test port. + +[cols=",,",options="header",] +|===================================================== +|Name |Type of formal parameters |Type of return value +|`f_HTTPMessage_len` |in octetstring stream |integer +|===================================================== + += Migrating Test Suite Using R1x + +With the release of the port version R2A it has been decided to add four new received ASPs and a new message field to the test port types. This modification has been made to fulfil the requirement of a HTTP server handling multiple parallel client connections. The change causes test suites written for R1x port to fail the compilation. However, the transition to the R2 port is straightforward. + +Steps to compile older test suites with HTTP port R2: + +* Decide whether SSL will be used or not in the test. If yes, please see <<8_examples.adoc, makefile, Makefile>> about editing the _Makefile_ to allow SSL in the test. If SSL is not used in the test, then SSL specific parts can be removed from the _Makefile_. ++ +NOTE: `OPENSSL_DIR` and `–lssl` are still needed to compile the executable. + +* Remove _buffer.cc_ and _buffer.hh_ from the (user) sources, and add __Abstract_Socket.cc__ and __Abstract_Socket.hh__. + +* Do not set the `use_notification_ASPs` to `_"yes"_` unless you do not modify the test suite to handle the incoming `Close`, `Connect_result`, `Client_connected` and `Listen_result` ASPs. It is recommended to consider the usage of these ASPs since they allow the test suite to implement more complex TCP event handling. For example, a client test case can wait for a server to be started up by checking if the `client_id` is `_–1_` in the returned `Connect_result` ASP. + +* Add the `client_id := omit` assignment to every `HTTPRequest` , `HTTPResponse`, `HTTPRequest_binary_body`, `HTTPResponse_binary_body`, `erronous_msg`, `Half_close` and `Close` variables and templates. + +Example: + +[source] +---- +var HTTPRequest r := { method := "GET", uri := "/", + version_major := 1, version_minor := 1, header := hd, body := ""} +---- + +has to be modified to: + +[source] +---- +var HTTPRequest r := { client_id := omit, method := "GET", uri := "/", + version_major := 1, version_minor := 1, header := hd, body := ""} +---- + +The new ASPs are only received by the test if the `use_notification ASPs := "yes"` is specified in the runtime configuration file. + += Error Messages + +The error messages have the following general form: + +`*`Dynamic test case error: *`` + +The list of the possible error messages is shown below. Note that this list contains the error messages produced by the test port. The error messages coming from the TITAN are not shown: + +`*Parameter value not recognized for parameter *` + +The specified `` in the runtime configuration file is not recognized for the parameter ``. See <<2_the_test_port.adoc#HTTP_test_port_parameters_in_the_RTE_configuration_file, HTTP Test Port Parameters in the RTE Configuration File>>. + +`*: HTTP test port is not compiled to support SSL connections. Please check the User's Guide for instructions on compiling the HTTP test port with SSL support.*` + +`-DAS_USE_SSL` and OpenSSL related compiling instructions are missing from the _Makefile_. See <<8_examples.adoc#makefile, Makefile>>. + +`*Cannot connect to server*` + +The Connect operation failed; look for the reason above this message in the log. + +`*Cannot listen at port*` + +The Listen operation failed; look for the reason above this message in the log. + +`*Cannot accept connection at port*` + +The server failed to accept an incoming connection; look for the reason above this message in the log. + +`*Cannot open socket*` + +There was an error while allocating a socket for a connection; look for the reason above this message in the log. + +`*Setsockopt failed*` + +There was an error while allocating a socket for a connection; look for the reason above this message in the log. + +`*Cannot bind to port*` + +There was an error while allocating the requested port number for a connection; look for the reason above this message in the log. + +`*getsockname() system call failed on the server socket*` + +There was an error while allocating the requested port number for a connection; look for the reason above this message in the log. + +`*Client Id not specified although not only 1 client exists*` + +Since multiple connections are alive, you have to specify a client id when sending a message to distinguish between the connections where the message has to be sent. + +`*There is no connection alive, use the 'ASP_TCP_Connect' before sending anything.*` + +Connect has to be sent before sending a message, or the server has to accept a connection first. + +`*Send system call failed: There is no client nr connected to the TCP server*` + +A send operation is performed to a non-existing client. + +`*Send system call failed: bytes were sent instead of *` + +The send operation failed because of the ``. + +`*The host name is not valid in the configuration file.*` + +The given host name in the Connect / Listen ASP cannot be resolved by the system. + +`*Number of clients<>0 but cannot get first client, programming error*` + +Never should show up. Please send a bug report including log files produced with all debugging possibilities turned on. + +`*Index exceeds length of peer list.*` + +Never should show up. Please send a bug report including log files produced with all debugging possibilities turned on. + +`*Abstract_Socket::get_peer: Client does not exist*` + +Never should show up. Please send a bug report including log files produced with all debugging possibilities turned on. + +`*Invalid Client Id is given: .*` + +Please send a bug report including log files produced with all debugging possibilities turned on. + +`*Peer does not exist.*` + +Never should show up. Please send a bug report including log files produced with all debugging possibilities turned on. + +== Additional Error Messages in case SSL Connections Are Used + +`*No SSL CTX found, SSL not initialized*` + +Never should show up. + +`*Creation of SSL object failed*` + +Never should show up. + +`*Binding of SSL object to socket failed*` + +The SSL object could not be bound to the TCP socket + +`*SSL error occurred*` + +A general SSL error occurred. Check the test port logs to see previous error messages showing the real problem. + +`* is not defined in the configuration file*` + +The test port parameter with is mandatory, but is not defined in the configuration file. + +`*No SSL data available for client *` + +Please send a bug report including log files produced with all debugging possibilities turned on. + +`*Could not read from /dev/urandom*` + +The read operation on the installed random device is failed. + +`*Could not read from /dev/random*` + +The read operation on the installed random device is failed. + +`*Could not seed the Pseudo Random Number Generator with enough data.*` + +As no random devices found, a workaround is used to seed the SSL PRNG. Consider upgrading your system with the latest available patches. HelpDesk should correct this within a day. + +`*The seeding failed.*` + +Please send a bug report including log files produced with all debugging possibilities turned on. + +`*SSL method creation failed.*` + +The creation of the SSL method object failed. + +`*SSL context creation failed.*` + +The creation of the SSL context object failed. + +`*Can't read certificate file*` + +The specified certificate file could not be read. + +`*Can't read key file*` + +The specified private key file could not be read. + +`*Can't read trustedCAlist file*` + +The specified certificate of the trusted CAs file could not be read. + +`*Cipher list restriction failed for *` + +The specified cipher restriction list could not be set. + +`*Unknown SSL error code: *` + +Please send a bug report including log files produced with all debugging possibilities turned on. + += Warning Messages + +The following list shows the possible warning messages produced by the test port: + +`*HTTPmsg__PT::set_parameter(): Unsupported Test Port parameter: *` + +The specified parameter is not recognized by the test port. Check <<2_the_test_port.adoc#HTTP_test_port_parameters_in_the_RTE_configuration_file, HTTP Test Port Parameters in the RTE Configuration File>> for parameter names. The parameter names have to be given case sensitive. + +`*: to switch on HTTP test port debugging, set the ..http_debugging := ``yes'' in the port's parameters.*` + +HTTP test port produces detailed logs if you specify `thehttp_debugging := "yes"` in the configuration file. + +`*Error when reading the received TCP PDU.*` + +There was an error while reading incoming data from the connection. The connection gets disconnected immediately, the test is informed about the disconnect by a Close ASP with the relevant `client_id`. + +`*Cannot open socket when trying to open the listen port: *` + +The Listen operation failed because of ``. + +`*Setsockopt failed when trying to open the listen port: *` + +There was an error while allocating a socket because of ``. The test is informed about the failure by receiving a `Listen_result` ASP with portnumber = `_"-1"_`. + +`*Cannot bind to port when trying to open the listen port: *` + +There was an error while binding to the requested port because of ``. The test is informed about the failure by receiving a `Listen_result` ASP with portnumber = `_"-1"_`. + +`*Cannot listen at port when trying to open the listen port: *` + +There was an error while trying to listen for incoming connections because of ``. The test is informed about the failure by receiving a `Listen_result` ASP with portnumber = `_"-1"_`. + +`*getsockname() system call failed on the server socket when trying to open the listen port: *` + +There was an error while trying to listen on the specified port because of ``. The test is informed about the failure by receiving a `Listen_result` ASP with portnumber = `_"-1"_`. + +`*Cannot open socket when trying to open client connection: *` + +There was an error while allocating a socket for a connection because of ``. The test is informed about the failure by receiving a `Connect_result` ASP with client_id = `_"-1"_`. + +`*Setsockopt failed when trying to open client connection: *` + +There was an error while allocating a socket for a connection because of ``. The test is informed about the failure by receiving a `Connect_result` ASP with client_id = `_"-1"_`. + +`*Cannot bind to port when trying to open client connection: *` + +There was an error while binding to the requested port to the socket because of ``. The test is informed about the failure by receiving a `Connect_result` ASP with client_id = `_"-1"_`. + +`*connect() returned error code EADDRINUSE. Perhaps this is a kernel bug. Trying to connect again.*` + +If the connect system call fails because of the `address is already in use' error, the test port automatically does 16 retry. Meanwhile this warning is logged. + +`*Cannot connect to server when trying to open client connection: *` + +The Connect operation failed; look for the reason above this message in the log. A `Connect_result` with `client_id = -1` will be returned to the test. + +`*Abstract_Socket::remove_client: is the server listening port, can not be removed!*` + +The specified `client_id` in the Close ASP belongs to the server listening port. Wrong `client_id` is specified. + +`*Client has not been removed, programming error*` + +Please send a bug report including log files produced with all debugging possibilities turned on. + +`*Warning: race condition while setting current client object pointer*`` + +There are multiple instances of the port running trying to access a common resource concurrently. This may cause problem. + +`*Connection from client is refused*` + +The connection from a client is refused in the server. + +`*Connection to server is refused*` + +The connection from the client is refused by the server. + +`*Server did not send a session ID*` + +The connection from the client is refused by the server. + +`*Verification failed*` + +The verification of the other side is failed. The connection will be shut down. + +`*SSL object not found for client *` + +Please send a bug report including log files produced with all debugging possibilities turned on. + +`*SSL_Socket::receive_message_on_fd: SSL connection was interrupted by the other side*` + +The TLS/SSL connection has been closed. If the protocol version is SSL 3.0 or TLS 1.0, this warning appears only if a closure alert has occurred in the protocol, i.e. if the connection has been closed cleanly. Note that in this case it does not necessarily indicate that the underlying transport has been closed. + +`*SSL_Socket::send_message_on_fd: SSL connection was interrupted by the other side*` + +See above. + +`*Other side does not have certificate.*` + +The other side of the SSL connection does not have a certificate. + +`*Solaris patches to provide random generation devices are not installed. See http://www.openssl.org/support/faq.html "Why do I get a''PRNG not seeded" error message?" A workaround will be used.*` + +Solaris patches to provide random generation devices are not installed. A workaround will be used to seed the PRNG. + +`*Private key does not match the certificate public key*`` + +The private key specified for the test port does not match with the public key. + += Examples + +== Configuration File + +An example RTE configuration file is included in the 'demo' directory of the test port release. + +[[makefile]] +== Makefile + +In this section the most important parameters are listed in the _Makefile_. The following gives some detail about them: + +* `OPENSSL_DIR =` ++ +Specifies the OpenSSL installation directory. It has to contain the _lib/libssl.a_ file and the include directory. It is not needed if OpenSSL is installed by root in the default location. It is recommended to change the already-present OPENSSL_DIR entry, which is included by the _Makefile_ generation process. + +* `CPPFLAGS = -Dlatexmath:[$(PLATFORM) -I$](TTCN3_DIR)/include -DAS_USE_SSL-I$(OPENSSL_DIR)/include` ++ +The `DAS_USE_SSL` switch activates the SSL-specific code in the test port. If the switch is missing, SSL functionality will not be available, and the test port will generate dynamic test case error when connecting or listening with parameter including `use_ssl=true` setting. ++ +This `-I$(OPENSSL_DIR)/include` switch tells the C++ compiler where to look for the OpenSSL header files. It is not needed if OpenSSL is installed by root in the default location. + +* `TTCN3_MODULES =` ++ +The list of TTCN-3 modules needed. + +* `USER_SOURCES =` ++ +The list of other external C++ source files. + +* `$(TARGET): $(OBJECTS)` + +** `$(CXX) $(LDFLAGS) -o $@ $(OBJECTS) -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \` + +** `-L$(OPENSSL_DIR)/lib –lssl -lcrypto $($(PLATFORM)_LIBS)` ++ +The `–L$(OPENSSL_DIR)/lib` and `–lssl` parameter tells the linker to use the _libssl.a_ compiled in the `$(OPENSSL_DIR)/lib` directory. + += Terminology + +None. + += Abbreviations + +ASP:: Abstract Service Primitive + +IUT:: Implementation Under Test (HTTP 1.1 server or client) + +RTE:: Run-Time Environment + +HTTP:: Hypertext Transfer Protocol + +SUT:: System Under Test + +SSL:: Secure Sockets Layer + +TTCN-3:: Testing and Test Control Notation version 3 + += References + +[[_1]] +[1] ETSI ES 201 873-1 v3.1.1 (2005-06)The Testing and Test Control Notation version 3; Part 1: Core Language + +[[_2]] +[2] TITAN User Guide + +[[_3]] +[3] HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, Functional Specification + +[[_4]] +[4] http://www.ietf.org/rfc/rfc2616.txt[RFC 2616] + +Hypertext Transfer Protocol – HTTP/1.1 + +[[_5]] +[5] OpenSSL toolkit + +http://www.openssl.org + diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/UG/HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, User Guide.pdf b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/UG/HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, User Guide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eb197e7f5de58c6faf922ea82095d9635336a156 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/UG/HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, User Guide.pdf @@ -0,0 +1,15626 @@ +%PDF-1.3 +% +1 0 obj +<< /Title (HTTPmsg_CNL113312 Test Port for TTCN-3 Toolset with TITAN, User Guide) +/Author +/Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2) +/Producer +/ModDate (D:20180815083032+02'00') +/CreationDate (D:20180815083032+02'00') +>> +endobj +2 0 obj +<< /Type /Catalog +/Pages 3 0 R +/Names 14 0 R +/Outlines 179 0 R +/PageLabels 212 0 R +/PageMode /UseOutlines +/OpenAction [7 0 R /FitH 842.89] +/ViewerPreferences << /DisplayDocTitle true +>> +>> +endobj +3 0 obj +<< /Type /Pages +/Count 16 +/Kids [7 0 R 10 0 R 12 0 R 33 0 R 45 0 R 52 0 R 61 0 R 66 0 R 74 0 R 80 0 R 82 0 R 85 0 R 90 0 R 92 0 R 99 0 R 106 0 R] +>> +endobj +4 0 obj +<< /Length 2 +>> +stream +q + +endstream +endobj +5 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 4 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +>> +>> +endobj +6 0 obj +<< /Length 931 +>> +stream +q +/DeviceRGB cs +0.6 0.6 0.6 scn +/DeviceRGB CS +0.6 0.6 0.6 SCN + +BT +102.0202 361.6965 Td +/F1.0 27 Tf +[<485454506d73675f434e4c3131333331322054> 29.7852 <65737420506f727420666f72>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6 0.6 0.6 scn +0.6 0.6 0.6 SCN + +BT +129.6973 327.6765 Td +/F1.0 27 Tf +[<5454> 20.0195 <434e2d332054> 29.7852 <6f6f6c736574207769746820544954> 60.0586 <414e2c2055736572>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6 0.6 0.6 scn +0.6 0.6 0.6 SCN + +BT +471.062 293.6565 Td +/F1.0 27 Tf +<4775696465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.0941 0.0941 0.0941 scn +0.0941 0.0941 0.0941 SCN + +BT +455.468 259.1849 Td +/F1.0 13 Tf +<508e7465722044696d6974726f76> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +314.6003 229.3714 Td +/F1.0 10.5 Tf +[<56> 60.0586 <657273696f6e203139382031372d434e4c20313133203331322c20526576> 69.8242 <2e20472c20323031302d30372d3031>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q + +endstream +endobj +7 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 6 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +>> +>> +>> +endobj +8 0 obj +<< /Type /Font +/BaseFont /b45cdd+NotoSerif +/Subtype /TrueType +/FontDescriptor 214 0 R +/FirstChar 32 +/LastChar 255 +/Widths 216 0 R +/ToUnicode 215 0 R +>> +endobj +9 0 obj +<< /Length 22038 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 782.394 Td +/F2.0 22 Tf +[<54> 29.7852 <61626c65206f6620436f6e74656e7473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 751.856 Td +/F1.0 10.5 Tf +<41626f7574205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +161.0311 751.856 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 751.856 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 751.856 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 733.376 Td +/F1.0 10.5 Tf +<486f7720746f2052656164205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +203.7871 733.376 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 733.376 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 733.376 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 714.896 Td +/F1.0 10.5 Tf +<507265726571756973697465204b6e6f776c65646765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +182.4091 714.896 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 714.896 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 714.896 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 696.416 Td +/F1.0 10.5 Tf +[<53> 20.0195 <797374656d20526571756972656d656e7473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +161.0311 696.416 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 696.416 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 696.416 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 677.936 Td +/F1.0 10.5 Tf +<46756e64616d656e74616c20436f6e6365707473> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +166.3756 677.936 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 677.936 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 677.936 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 659.456 Td +/F1.0 10.5 Tf +[<5468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +118.2751 659.456 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 659.456 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 659.456 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 640.976 Td +/F1.0 10.5 Tf +<4f76657276696577> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +112.9306 640.976 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 640.976 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 640.976 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 622.496 Td +/F1.0 10.5 Tf +<496e7374616c6c6174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +118.2751 622.496 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 622.496 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 622.496 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 604.016 Td +/F1.0 10.5 Tf +[<436f6e6669677572> 20.0195 <6174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +134.3086 604.016 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 604.016 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 604.016 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 585.536 Td +/F1.0 10.5 Tf +[<485454502054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e207468652052> 20.0195 <544520436f6e6669677572> 20.0195 <6174696f6e2046696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +358.7776 585.536 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 585.536 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 585.536 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 567.056 Td +/F1.0 10.5 Tf +<53746172742050726f636564757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +139.6531 567.056 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 567.056 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 567.056 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 548.576 Td +/F1.0 10.5 Tf +[<5454> 20.0195 <434e2d332054> 29.7852 <657374204578656375746f72>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +182.4091 548.576 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 548.576 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 548.576 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 530.096 Td +/F1.0 10.5 Tf +<436f6e6e656374696e6720746f206120536572766572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +187.7536 530.096 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 530.096 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 530.096 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 511.616 Td +/F1.0 10.5 Tf +<5374617274696e672061205365727665722c204c697374656e696e6720666f7220436c69656e7420436f6e6e656374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +326.7106 511.616 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 511.616 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 511.616 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 493.136 Td +/F1.0 10.5 Tf +<53656e64696e672f726563656976696e672048545450204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +230.5096 493.136 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 493.136 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 493.136 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 474.656 Td +/F1.0 10.5 Tf +<53746f702050726f636564757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +139.6531 474.656 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 474.656 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 474.656 Td +/F1.0 10.5 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 456.176 Td +/F1.0 10.5 Tf +<436c6f73696e6720436f6e6e656374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +177.0646 456.176 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 456.176 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 456.176 Td +/F1.0 10.5 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 437.696 Td +/F1.0 10.5 Tf +[<5454> 20.0195 <434e2d332054> 29.7852 <657374204578656375746f72>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +182.4091 437.696 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 437.696 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 437.696 Td +/F1.0 10.5 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 419.216 Td +/F1.0 10.5 Tf +<55736167652061732050726f746f636f6c204d6f64756c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +177.0646 419.216 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 419.216 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 419.216 Td +/F1.0 10.5 Tf +<36> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 400.736 Td +/F1.0 10.5 Tf +[<557361676520776974682049504c342054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +177.0646 400.736 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 400.736 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 400.736 Td +/F1.0 10.5 Tf +<36> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 382.256 Td +/F1.0 10.5 Tf +[<4d696772> 20.0195 <6174696e672054> 29.7852 <657374205375697465205573696e6720523178>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +203.7871 382.256 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 382.256 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 382.256 Td +/F1.0 10.5 Tf +<36> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 363.776 Td +/F1.0 10.5 Tf +<4572726f72204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +128.9641 363.776 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 363.776 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 363.776 Td +/F1.0 10.5 Tf +<37> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 345.296 Td +/F1.0 10.5 Tf +[<41> 20.0195 <64646974696f6e616c204572726f72204d6573736167657320696e20636173652053534c20436f6e6e656374696f6e73204172652055736564>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +364.1221 345.296 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 345.296 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 345.296 Td +/F1.0 10.5 Tf +<39> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 326.816 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61726e696e67204d65737361676573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +144.4726 326.816 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 326.816 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 326.816 Td +/F1.0 10.5 Tf +<3130> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 308.336 Td +/F1.0 10.5 Tf +<4578616d706c6573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +101.7166 308.336 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 308.336 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 308.336 Td +/F1.0 10.5 Tf +<3133> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 289.856 Td +/F1.0 10.5 Tf +[<436f6e6669677572> 20.0195 <6174696f6e2046696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +155.1616 289.856 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 289.856 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 289.856 Td +/F1.0 10.5 Tf +<3133> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 271.376 Td +/F1.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +107.0611 271.376 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 271.376 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 271.376 Td +/F1.0 10.5 Tf +<3133> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 252.896 Td +/F1.0 10.5 Tf +[<54> 29.7852 <65726d696e6f6c6f6779>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +112.4056 252.896 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 252.896 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 252.896 Td +/F1.0 10.5 Tf +<3133> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 234.416 Td +/F1.0 10.5 Tf +<416262726576696174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +123.0946 234.416 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 234.416 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 234.416 Td +/F1.0 10.5 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 215.936 Td +/F1.0 10.5 Tf +<5265666572656e636573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +107.0611 215.936 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 215.936 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 215.936 Td +/F1.0 10.5 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q + +endstream +endobj +10 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 9 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 17 0 R +/F1.0 8 0 R +>> +>> +/Annots [117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R] +>> +endobj +11 0 obj +<< /Length 9096 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 782.394 Td +/F2.0 22 Tf +<41626f7574205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 741.146 Td +/F2.0 18 Tf +<486f7720746f2052656164205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9243 Tw + +BT +48.24 713.126 Td +/F1.0 10.5 Tf +[<54686973206973207468652055736572> -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9243 Tw + +BT +216.8557 713.126 Td +/F3.0 10.5 Tf +<485454506d73675f434e4c313133333132> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9243 Tw + +BT +325.7827 713.126 Td +/F1.0 10.5 Tf +<202863616c6c656420485454502066726f6d206e6f77206f6e29207465737420706f72742e20546865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.4917 Tw + +BT +48.24 697.346 Td +/F1.0 10.5 Tf +[<48545450207465737420706f727420697320646576656c6f70656420666f7220746865205454> 20.0195 <434e2d332054> 29.7852 <6f6f6c736574207769746820544954> 60.0586 <414e206163636f7264696e6720746f207468652046756e6374696f6e616c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 681.566 Td +/F1.0 10.5 Tf +<53706563696669636174696f6e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +115.398 681.566 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +128.8065 681.566 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 641.726 Td +/F2.0 18 Tf +<507265726571756973697465204b6e6f776c65646765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.887 Tw + +BT +48.24 613.706 Td +/F1.0 10.5 Tf +[<546865206b6e6f776c65646765206f662074686520544954> 60.0586 <414e205454> 20.0195 <434e2d332054> 29.7852 <657374204578656375746f7220>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +1.887 Tw + +BT +316.891 613.706 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.887 Tw + +BT +330.2995 613.706 Td +/F1.0 10.5 Tf +[<20616e6420746865205454> 20.0195 <434e2d33206c616e677561676520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +1.887 Tw + +BT +470.0286 613.706 Td +/F1.0 10.5 Tf +<5b315d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.887 Tw + +BT +483.4371 613.706 Td +/F1.0 10.5 Tf +<20697320657373656e7469616c2e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 597.926 Td +/F1.0 10.5 Tf +<4261736963206b6e6f776c65646765206f662074686520485454502070726f746f636f6c2069732076616c7561626c65207768656e2072656164696e67207468697320646f63756d656e742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 553.814 Td +/F2.0 22 Tf +[<53> 20.0195 <797374656d20526571756972656d656e7473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 524.626 Td +/F1.0 10.5 Tf +[<496e206f7264657220746f206f706572> 20.0195 <617465207468652048545450207465737420706f72742074686520666f6c6c6f77696e672073797374656d20726571756972656d656e7473206d757374206265207361746973666965643a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 496.846 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 496.846 Td +/F1.0 10.5 Tf +[<506c6174666f726d3a20616e> 20.0195 <7920706c6174666f726d20737570706f727465642062> 20.0195 <7920544954> 60.0586 <414e2052> 20.0195 <54452c206f7074696f6e616c204f70656e53534c2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 475.066 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 475.066 Td +/F1.0 10.5 Tf +[<544954> 60.0586 <414e205454> 20.0195 <434e2d332054> 29.7852 <657374204578656375746f72205238412028312e382e706c3029206f722068696768657220696e7374616c6c65642e2046> 40.0391 <6f7220696e7374616c6c6174696f6e2067756964652073656520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +500.8885 475.066 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.5 w +0.9333 0.9333 0.9333 SCN +102.4695 459.25 m +102.4695 435.47 l +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.3451 443.286 Td +/F2.0 10.5 Tf +[<4e4f> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +114.4695 443.286 Td +/F1.0 10.5 Tf +[<546869732076657273696f6e206f6620746865207465737420706f7274206973206e6f7420636f6d70617469626c65207769746820544954> 60.0586 <414e2072656c6561736573206561726c696572207468616e205238412e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 411.506 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 411.506 Td +/F1.0 10.5 Tf +<546865204320636f6d70696c6572206763632076657273696f6e20322e3935206f722061626f766520697320696e7374616c6c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 389.726 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 389.726 Td +/F1.0 10.5 Tf +<546865204f70656e53534c20302e392e37206f722061626f766520697320696e7374616c6c65642e2053656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +285.879 389.726 Td +/F1.0 10.5 Tf +<5b355d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +299.2875 389.726 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 367.946 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 367.946 Td +/F1.0 10.5 Tf +[<546865204162737472> 20.0195 <6163745f536f636b> 20.0195 <657420434e4c20313133203338342c20726576> 69.8242 <2e20523641206f72206c617465722070726f647563742068617320746f20626520696e7374616c6c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 323.834 Td +/F2.0 22 Tf +<46756e64616d656e74616c20436f6e6365707473> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0208 Tw + +BT +48.24 294.646 Td +/F1.0 10.5 Tf +[<546865207465737420706f72742065737461626c697368657320636f6e6e656374696f6e206265747765656e20746865205454> 20.0195 <434e2d332074657374206578656375746f7220616e6420746865204854545020736572766572206f7220636c69656e74>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9419 Tw + +BT +48.24 278.866 Td +/F1.0 10.5 Tf +[<74726f75676820612054> 20.0195 <43502f495020736f636b> 20.0195 <657420636f6e6e656374696f6e2e20546865207465737420706f7274207472> 20.0195 <616e736d69747320616e642072656365697665732048545450312e31206d657373616765733b2073656520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +0.9419 Tw + +BT +533.6315 278.866 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9419 Tw + +BT +547.04 278.866 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 263.086 Td +/F1.0 10.5 Tf +<616e6420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +70.0695 263.086 Td +/F1.0 10.5 Tf +<5b345d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 213.634 Td +/F2.0 27 Tf +[<5468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 166.654 Td +/F2.0 22 Tf +<4f76657276696577> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7015 Tw + +BT +48.24 137.466 Td +/F1.0 10.5 Tf +[<5468652048545450207465737420706f7274206f66666572732048545450206d657373616765207072696d69746976657320616e642054> 20.0195 <435020636f6e6e656374696f6e20636f6e74726f6c204153507320746f207468652074657374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5284 Tw + +BT +48.24 121.686 Td +/F1.0 10.5 Tf +[<737569746520696e205454> 20.0195 <434e2d3320666f726d61742e20546865205454> 20.0195 <434e2d3320646566696e6974696f6e206f66207468652048545450206d6573736167657320616e642054> 20.0195 <4350206e6f74696669636174696f6e20415350732063616e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 105.906 Td +/F1.0 10.5 Tf +[<626520666f756e6420696e2061207365706172> 20.0195 <617465205454> 20.0195 <434e2d33206d6f64756c652e2054686973206d6f64756c652073686f756c6420626520696d706f7274656420696e746f2074686520746573742073756974652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +12 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 11 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 17 0 R +/F1.0 8 0 R +/F3.0 19 0 R +>> +/XObject << /Stamp1 177 0 R +>> +>> +/Annots [20 0 R 22 0 R 23 0 R 25 0 R 26 0 R 28 0 R 29 0 R] +>> +endobj +13 0 obj +[12 0 R /XYZ 0 841.89 null] +endobj +14 0 obj +<< /Type /Names +/Dests 15 0 R +>> +endobj +15 0 obj +<< /Kids [69 0 R 115 0 R 70 0 R] +>> +endobj +16 0 obj +[12 0 R /XYZ 0 841.89 null] +endobj +17 0 obj +<< /Type /Font +/BaseFont /8ce6bb+NotoSerif-Bold +/Subtype /TrueType +/FontDescriptor 218 0 R +/FirstChar 32 +/LastChar 255 +/Widths 220 0 R +/ToUnicode 219 0 R +>> +endobj +18 0 obj +[12 0 R /XYZ 0 765.17 null] +endobj +19 0 obj +<< /Type /Font +/BaseFont /7c8351+NotoSerif-Italic +/Subtype /TrueType +/FontDescriptor 222 0 R +/FirstChar 32 +/LastChar 255 +/Widths 224 0 R +/ToUnicode 223 0 R +>> +endobj +20 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [115.398 678.5 128.8065 692.78] +/Type /Annot +>> +endobj +21 0 obj +[12 0 R /XYZ 0 665.75 null] +endobj +22 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [316.891 610.64 330.2995 624.92] +/Type /Annot +>> +endobj +23 0 obj +<< /Border [0 0 0] +/Dest (_1) +/Subtype /Link +/Rect [470.0286 610.64 483.4371 624.92] +/Type /Annot +>> +endobj +24 0 obj +[12 0 R /XYZ 0 582.11 null] +endobj +25 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [500.8885 472.0 514.297 486.28] +/Type /Annot +>> +endobj +26 0 obj +<< /Border [0 0 0] +/Dest (_5) +/Subtype /Link +/Rect [285.879 386.66 299.2875 400.94] +/Type /Annot +>> +endobj +27 0 obj +[12 0 R /XYZ 0 352.13 null] +endobj +28 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [533.6315 275.8 547.04 290.08] +/Type /Annot +>> +endobj +29 0 obj +<< /Border [0 0 0] +/Dest (_4) +/Subtype /Link +/Rect [70.0695 260.02 83.478 274.3] +/Type /Annot +>> +endobj +30 0 obj +[12 0 R /XYZ 0 247.27 null] +endobj +31 0 obj +[12 0 R /XYZ 0 194.95 null] +endobj +32 0 obj +<< /Length 13937 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 782.394 Td +/F2.0 22 Tf +<496e7374616c6c6174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5143 Tw + +BT +48.24 753.206 Td +/F1.0 10.5 Tf +[<53696e6365207468652048545450207465737420706f7274206973207573656420617320612070617274206f6620746865205454> 20.0195 <434e2d33207465737420656e7669726f6e6d656e742074686973207265717569726573205454> 20.0195 <434e2d332054> 29.7852 <657374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.8835 Tw + +BT +48.24 737.426 Td +/F1.0 10.5 Tf +[<4578656375746f7220746f20626520696e7374616c6c6564206265666f726520616e> 20.0195 <79206f706572> 20.0195 <6174696f6e206f66207468652048545450207465737420706f72742e2046> 40.0391 <6f72206d6f72652064657461696c73206f6e20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 721.646 Td +/F1.0 10.5 Tf +[<696e7374616c6c6174696f6e206f66205454> 20.0195 <434e2d332054> 29.7852 <657374204578656375746f7220736565207468652072656c6576616e742073656374696f6e206f6620>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +362.3916 721.646 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.3614 Tw + +BT +48.24 693.866 Td +/F1.0 10.5 Tf +<5768656e206275696c64696e67207468652065786563757461626c65207465737420737569746520696e74656e64656420746f2068616e646c652048545450206f7665722053534c20636f6e6e656374696f6e732c20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5702 Tw + +BT +48.24 678.086 Td +/F1.0 10.5 Tf +[<6c696272> 20.0195 <617269657320636f6d70696c656420666f7220746865204f70656e53534c20746f6f6c6b697420616e6420746865205454> 20.0195 <434e2d332054> 29.7852 <657374204578656375746f722073686f756c6420616c736f206265206c696e6b> 20.0195 <656420696e746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 662.306 Td +/F1.0 10.5 Tf +<7468652065786563757461626c652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3011 Tw + +BT +48.24 634.526 Td +/F1.0 10.5 Tf +<5573696e6720616e6420636f6d70696c696e67204f70656e53534c206973206f7074696f6e616c20696e20746865207465737420706f72742e2053656520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +1.3011 Tw + +BT +368.26 634.526 Td +/F1.0 10.5 Tf +<5b355d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3011 Tw + +BT +381.6685 634.526 Td +/F1.0 10.5 Tf +<20666f72206d6f726520696e666f726d6174696f6e2e204f70656e53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6218 Tw + +BT +48.24 618.746 Td +/F1.0 10.5 Tf +[<6c696272> 20.0195 <61726965732073686f756c6420626520616464656420746f2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6218 Tw + +BT +219.0198 618.746 Td +/F3.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6218 Tw + +BT +260.7571 618.746 Td +/F1.0 10.5 Tf +[<2067656e6572> 20.0195 <617465642062> 20.0195 <792074686520544954> 60.0586 <414e206578656375746f7220736565206578616d706c6520696e20636c6f7365>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +48.24 602.966 Td +/F1.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +91.6153 602.966 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 558.854 Td +/F2.0 22 Tf +[<436f6e6669677572> 20.0195 <6174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5074 Tw + +BT +48.24 529.666 Td +/F1.0 10.5 Tf +[<5468652065786563757461626c6520746573742070726f6772> 20.0195 <616d206265686176696f7220697320637573746f6d697a656420766961207468652052> 20.0195 <544520636f6e6669677572> 20.0195 <6174696f6e2066696c652e205468697320697320612073696d706c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6894 Tw + +BT +48.24 513.886 Td +/F1.0 10.5 Tf +<746578742066696c652c20776869636820636f6e7461696e7320766172696f75732073656374696f6e732028652e672e20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.6894 Tw + +BT +288.2309 513.886 Td +/F4.0 10.5 Tf +<5b54455354504f52545f504152414d45544552535d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6894 Tw + +BT +398.4809 513.886 Td +/F1.0 10.5 Tf +<292061667465722065616368206f746865722e2054686520757375616c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8994 Tw + +BT +48.24 498.106 Td +/F1.0 10.5 Tf +[<737566666978206f66207468652052> 20.0195 <544520636f6e6669677572> 20.0195 <6174696f6e2066696c6520697320>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8994 Tw + +BT +239.8919 498.106 Td +/F3.0 10.5 Tf +<2e636667> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8994 Tw + +BT +256.7864 498.106 Td +/F1.0 10.5 Tf +[<2e2046> 40.0391 <6f72206675727468657220696e666f726d6174696f6e2061626f75742074686520636f6e6669677572> 20.0195 <6174696f6e2066696c6520736565>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +48.24 482.326 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 442.486 Td +/F2.0 18 Tf +[<485454502054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e207468652052> 20.0195 <544520436f6e6669677572> 20.0195 <6174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 418.006 Td +/F2.0 18 Tf +<46696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2261 Tw + +BT +48.24 389.986 Td +/F1.0 10.5 Tf +<496e2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.2261 Tw + +BT +82.7277 389.986 Td +/F4.0 10.5 Tf +<5b54455354504f52545f504152414d45544552535d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2261 Tw + +BT +192.9777 389.986 Td +/F1.0 10.5 Tf +[<2073656374696f6e20796f752063616e207370656369667920706172> 20.0195 <616d65746572732074686174206172652070617373656420746f20746865207465737420706f7274732e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.304 Tw + +BT +48.24 374.206 Td +/F1.0 10.5 Tf +[<4561636820706172> 20.0195 <616d6574657220646566696e6974696f6e20636f6e7369737473206f66206120636f6d706f6e656e74206e616d652c206120706f7274206e616d652c206120706172> 20.0195 <616d65746572206e616d6520616e642061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7791 Tw + +BT +48.24 358.426 Td +/F1.0 10.5 Tf +[<706172> 20.0195 <616d657465722076616c75652e2054686520636f6d706f6e656e74206e616d652063616e2062652065697468657220616e206964656e746966696572206f72206120636f6d706f6e656e74207265666572656e6365>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.183 Tw + +BT +48.24 342.646 Td +/F1.0 10.5 Tf +[<28696e7465676572292076616c75652e2054686520706f727420616e6420706172> 20.0195 <616d65746572206e616d657320617265206964656e74696669657273207768696c652074686520706172> 20.0195 <616d657465722076616c7565206d757374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7558 Tw + +BT +48.24 326.866 Td +/F1.0 10.5 Tf +[<616c7761> 20.0195 <797320626520612063686172737472696e672028776974682071756f746174696f6e206d61726b73292e20496e7374656164206f6620636f6d706f6e656e74206e616d65206f7220706f7274206e616d6520286f7220626f7468>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0585 Tw + +BT +48.24 311.086 Td +/F1.0 10.5 Tf +<6f66207468656d292074686520617374657269736b2028222a2229207369676e2063616e20626520757365642c207768696368206d65616e732022616c6c20636f6d706f6e656e747322206f722022616c6c20706f727473206f6620746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 295.306 Td +/F1.0 10.5 Tf +[<636f6d706f6e656e74222e204d6f726520696e666f726d6174696f6e2061626f7574207468652052> 20.0195 <544520636f6e6669677572> 20.0195 <6174696f6e2066696c652063616e20626520666f756e6420696e20>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +449.7281 295.306 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7068 Tw + +BT +48.24 267.526 Td +/F1.0 10.5 Tf +<496e2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.7068 Tw + +BT +83.6892 267.526 Td +/F4.0 10.5 Tf +<5b54455354504f52545f504152414d45544552535d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7068 Tw + +BT +193.9392 267.526 Td +/F1.0 10.5 Tf +[<2073656374696f6e2074686520666f6c6c6f77696e6720706172> 20.0195 <616d65746572732063616e2062652073657420666f72207468652048545450207465737420706f72742e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6313 Tw + +BT +48.24 251.746 Td +/F1.0 10.5 Tf +[<506172> 20.0195 <616d6574657273206d61726b> 20.0195 <6564207769746820626f6c6420666f6e7473206170706c7920746f20>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6313 Tw + +BT +275.605 251.746 Td +/F2.0 10.5 Tf +<53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6313 Tw + +BT +294.7465 251.746 Td +/F1.0 10.5 Tf +<207573696e672048545450207465737420706f72747320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6313 Tw + +BT +409.7909 251.746 Td +/F2.0 10.5 Tf +<6f6e6c79> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6313 Tw + +BT +432.9854 251.746 Td +/F1.0 10.5 Tf +[<2e20506172> 20.0195 <616d657465722076616c75657320617265>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 235.966 Td +/F2.0 10.5 Tf +<636173652d73656e736974697665> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +121.5825 235.966 Td +/F1.0 10.5 Tf +<21> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 208.186 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 210.37 Td +/F4.0 10.5 Tf +<7573655f6e6f74696669636174696f6e5f41535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8342 Tw + +BT +66.24 184.186 Td +/F1.0 10.5 Tf +<456e61626c657320726563656976696e67206f6620> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.8342 Tw + +BT +172.6401 184.186 Td +/F4.0 10.5 Tf +<436f6e6e6563745f726573756c74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8342 Tw + +BT +246.1401 184.186 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.8342 Tw + +BT +252.3188 184.186 Td +/F4.0 10.5 Tf +<436c69656e745f636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8342 Tw + +BT +336.3188 184.186 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.8342 Tw + +BT +362.5362 184.186 Td +/F4.0 10.5 Tf +<4c697374656e5f726573756c74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8342 Tw + +BT +430.7862 184.186 Td +/F1.0 10.5 Tf +<20415350732e204974732064656661756c742076616c7565> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9146 Tw + +BT +66.24 168.406 Td +/F1.0 10.5 Tf +<697320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.9146 Tw + +BT +77.9591 168.406 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9146 Tw + +BT +98.9591 168.406 Td +/F1.0 10.5 Tf +<20696e206f7264657220746f2070726f76696465206261636b776172642d636f6d7061746962696c69747920666f72207465737420737569746573207573696e672074686520706f72742076657273696f6e73206f6c646572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 152.626 Td +/F1.0 10.5 Tf +<7468616e205232412e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 124.846 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 127.03 Td +/F4.0 10.5 Tf +<7365727665725f6261636b6c6f67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2175 Tw + +BT +66.24 100.846 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465722063616e206265207573656420746f207370656369667920746865206e756d626572206f6620616c6c6f7765642070656e64696e6720287175657565642920636f6e6e656374696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1006 Tw + +BT +66.24 85.066 Td +/F1.0 10.5 Tf +<7265717565737473206f6e2074686520706f72742074686520736572766572206c697374656e732e204974206973206f7074696f6e616c20696e20736572766572206d6f646520616e64206e6f74207573656420696e20636c69656e74206d6f64652e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 69.286 Td +/F1.0 10.5 Tf +<5468652064656661756c742076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +166.851 69.286 Td +/F5.0 10.5 Tf +<223130323422> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +198.351 69.286 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +33 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 32 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 17 0 R +/F1.0 8 0 R +/F3.0 19 0 R +/F4.0 39 0 R +/F5.0 43 0 R +>> +/XObject << /Stamp2 178 0 R +>> +>> +/Annots [35 0 R 36 0 R 37 0 R 40 0 R 42 0 R] +>> +endobj +34 0 obj +[33 0 R /XYZ 0 841.89 null] +endobj +35 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [362.3916 718.58 375.8001 732.86] +/Type /Annot +>> +endobj +36 0 obj +<< /Border [0 0 0] +/Dest (_5) +/Subtype /Link +/Rect [368.26 631.46 381.6685 645.74] +/Type /Annot +>> +endobj +37 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (8_examples.pdf#makefile) +>> +/Subtype /Link +/Rect [48.24 599.9 91.6153 614.18] +/Type /Annot +>> +endobj +38 0 obj +[33 0 R /XYZ 0 587.15 null] +endobj +39 0 obj +<< /Type /Font +/BaseFont /e7f085+mplus1mn-regular +/Subtype /TrueType +/FontDescriptor 226 0 R +/FirstChar 32 +/LastChar 255 +/Widths 228 0 R +/ToUnicode 227 0 R +>> +endobj +40 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [48.24 479.26 61.6485 493.54] +/Type /Annot +>> +endobj +41 0 obj +[33 0 R /XYZ 0 466.51 null] +endobj +42 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [449.7281 292.24 463.1366 306.52] +/Type /Annot +>> +endobj +43 0 obj +<< /Type /Font +/BaseFont /0e5052+mplus1mn-italic +/Subtype /TrueType +/FontDescriptor 230 0 R +/FirstChar 32 +/LastChar 255 +/Widths 232 0 R +/ToUnicode 231 0 R +>> +endobj +44 0 obj +<< /Length 15330 +>> +stream +q + +-0.5 Tc +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +56.8805 793.926 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 796.11 Td +/F4.0 10.5 Tf +<687474705f646562756767696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8546 Tw + +BT +66.24 769.926 Td +/F1.0 10.5 Tf +[<456e61626c65732064657461696c656420646562756767696e6720696e20746865207465737420706f72742e20497420686173206f6e6c7920656666656374207768656e205454> 20.0195 <434e5f444542554720697320616c736f20736574>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 754.146 Td +/F1.0 10.5 Tf +[<77697468696e20746865206c6f6767696e6720706172> 20.0195 <616d6574657273206f662074686520636f6e6669677572> 20.0195 <6174696f6e2066696c652e204974732064656661756c742076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +437.5721 754.146 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +458.5721 754.146 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 726.366 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 728.55 Td +/F4.0 10.5 Tf +<5452555354454443414c4953545f46494c45> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2628 Tw + +BT +66.24 702.366 Td +/F1.0 10.5 Tf +<49742073706563696669657320612050454d20656e636f6465642066696c65d5732070617468206f6e207468652066696c652073797374656d20636f6e7461696e696e672074686520636572746966696361746573206f66207468652074727573746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +5.4992 Tw + +BT +66.24 686.586 Td +/F1.0 10.5 Tf +<434120617574686f72697469657320746f207573652e204d616e6461746f727920696e20736572766572206d6f64652c20616e64206d616e6461746f727920696e20636c69656e74206d6f6465206966> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 670.806 Td +/F1.0 10.5 Tf +[<564552494659> 29.7852 <434552> 20.0195 <544946494341> 60.0586 <54453d>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +175.0319 670.806 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +201.2819 670.806 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 643.026 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 645.21 Td +/F4.0 10.5 Tf +<5645524946594345525449464943415445> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.81 Tw + +BT +66.24 619.026 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220697320>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.81 Tw + +BT +159.3763 619.026 Td +/F2.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.81 Tw + +BT +203.9173 619.026 Td +/F1.0 10.5 Tf +<2c20616e642063616e206265207573656420746f2074656c6c207468652048545450207465737420706f7274207768657468657220746f20636865636b20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.0329 Tw + +BT +66.24 603.246 Td +/F1.0 10.5 Tf +<6365727469666963617465206f6620746865206f7468657220736964652e20496620697420697320646566696e656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +3.0329 Tw + +BT +304.996 603.246 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.0329 Tw + +BT +331.246 603.246 Td +/F1.0 10.5 Tf +<2c20746865207465737420706f72742077696c6c20717565727920616e6420636865636b20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0818 Tw + +BT +66.24 587.466 Td +/F1.0 10.5 Tf +[<63657274696669636174652e20496620746865206365727469666963617465206973206e6f742076616c69642028692e652eca746865207075626c696320616e642070726976617465206b> 20.0195 <65797320646f206e6f74206d61746368292c2069742077696c6c2065786974>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2418 Tw + +BT +66.24 571.686 Td +/F1.0 10.5 Tf +<77697468206120636f72726573706f6e64696e67206572726f72206d6573736167652e20496620697420697320646566696e656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2418 Tw + +BT +326.7476 571.686 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2418 Tw + +BT +347.7476 571.686 Td +/F1.0 10.5 Tf +<2c20746865207465737420706f72742077696c6c206e6f7420636865636b207468652076616c6964697479> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 555.906 Td +/F1.0 10.5 Tf +<6f66207468652063657274696669636174652e205468652064656661756c742076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +253.917 555.906 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +274.917 555.906 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 528.126 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 530.31 Td +/F4.0 10.5 Tf +<4b455946494c45> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6056 Tw + +BT +66.24 504.126 Td +/F1.0 10.5 Tf +[<5468697320706172> 20.0195 <616d6574657220697320>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6056 Tw + +BT +167.2307 504.126 Td +/F2.0 10.5 Tf +<636f6e646974696f6e616c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6056 Tw + +BT +228.0152 504.126 Td +/F1.0 10.5 Tf +<2e2049742073706563696669657320612050454d20656e636f6465642066696c65d5732070617468206f6e207468652066696c652073797374656d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 488.346 Td +/F1.0 10.5 Tf +[<636f6e7461696e696e6720746865205253> 20.0195 <412070726976617465206b> 20.0195 <6579> 89.8438 <2e204d616e6461746f727920696e20736572766572206d6f646520616e64206f7074696f6e616c20696e20636c69656e74206d6f64652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 460.566 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 462.75 Td +/F4.0 10.5 Tf +<434552544946494341544546494c45> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6056 Tw + +BT +66.24 436.566 Td +/F1.0 10.5 Tf +[<5468697320706172> 20.0195 <616d6574657220697320>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6056 Tw + +BT +167.2307 436.566 Td +/F2.0 10.5 Tf +<636f6e646974696f6e616c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6056 Tw + +BT +228.0152 436.566 Td +/F1.0 10.5 Tf +<2e2049742073706563696669657320612050454d20656e636f6465642066696c65d5732070617468206f6e207468652066696c652073797374656d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2556 Tw + +BT +66.24 420.786 Td +/F1.0 10.5 Tf +[<636f6e7461696e696e672074686520636572746966696361746520636861696e2e2046> 40.0391 <6f722064657461696c656420696e666f726d6174696f6e2073656520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +0.2556 Tw + +BT +374.0868 420.786 Td +/F1.0 10.5 Tf +<5b355d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2556 Tw + +BT +387.4953 420.786 Td +/F1.0 10.5 Tf +<204d616e6461746f727920696e20736572766572206d6f646520616e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8284 Tw + +BT +66.24 405.006 Td +/F1.0 10.5 Tf +[<6f7074696f6e616c20696e20636c69656e74206d6f64652e204e6f746520746861742074686520736572766572206d61> 20.0195 <79207265717569726520636c69656e742061757468656e7469636174696f6e2e20496e20746869732063617365206e6f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 389.226 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e2063616e2062652065737461626c697368656420776974686f7574206120636c69656e742063657274696669636174652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 361.446 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 363.63 Td +/F4.0 10.5 Tf +<50415353574f5244> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7256 Tw + +BT +66.24 337.446 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220697320>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7256 Tw + +BT +156.123 337.446 Td +/F2.0 10.5 Tf +<6f7074696f6e616c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7256 Tw + +BT +200.664 337.446 Td +/F1.0 10.5 Tf +[<2c20616e642063616e206265207573656420746f2073706563696679207468652070617373776f72642070726f74656374696e67207468652070726976617465206b> 20.0195 <6579>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4542 Tw + +BT +66.24 321.666 Td +/F1.0 10.5 Tf +[<66696c652e205468652050> 49.8047 <415353> 20.0195 <57> 20.0195 <4f52442068617320746f206265207468652070617373776f726420757365642062> 20.0195 <792067656e6572> 20.0195 <6174696f6e206f66207468652070726976617465206b> 20.0195 <65792066696c652e20496620746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4851 Tw + +BT +66.24 305.886 Td +/F1.0 10.5 Tf +<70617373776f7264206973206e6f7420646566696e65642c207468652053534c20746f6f6c6b69742061736b7320666f72206974207768656e20746865207465737420706f72742072656365697665732074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4851 Tw + +BT +480.7715 305.886 Td +/F4.0 10.5 Tf +<4c495354454e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4851 Tw + +BT +512.2715 305.886 Td +/F1.0 10.5 Tf +[<20415350> 120.1172 <2e204974>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 290.106 Td +/F1.0 10.5 Tf +<6973207265636f6d6d656e64656420746f20646566696e6520697420696e2074686520636f6e6669672066696c6520696e73746561642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 239.994 Td +/F2.0 22 Tf +<53746172742050726f636564757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 198.746 Td +/F2.0 18 Tf +[<5454> 20.0195 <434e2d332054> 29.7852 <657374204578656375746f72>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6253 Tw + +BT +48.24 170.726 Td +/F1.0 10.5 Tf +[<4265666f7265207468652065786563757461626c6520746573742073756974652063616e2062652072756e20746865205454> 20.0195 <434e2d33206d6f64756c657320616e6420432b2b20636f6465732073686f756c6420626520636f6d70696c6564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8804 Tw + +BT +48.24 154.946 Td +/F1.0 10.5 Tf +[<616e64206c696e6b> 20.0195 <656420696e746f20616e2065786563757461626c652070726f6772> 20.0195 <616d2e20546869732070726f636573732063616e206265206175746f6d61746564207573696e6720746865206d616b> 20.0195 <65207574696c697479> 89.8438 <2e2046> 40.0391 <6f72>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 139.166 Td +/F1.0 10.5 Tf +<6d6f726520696e666f726d6174696f6e2061626f75742074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +191.061 139.166 Td +/F3.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +232.7983 139.166 Td +/F1.0 10.5 Tf +<207365652074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +272.8978 139.166 Td +/F6.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +318.8351 139.166 Td +/F1.0 10.5 Tf +<2073656374696f6e20616e6420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +381.4991 139.166 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.5 w +0.9333 0.9333 0.9333 SCN +102.4695 123.35 m +102.4695 68.01 l +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.3451 91.606 Td +/F2.0 10.5 Tf +[<4e4f> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8954 Tw + +BT +114.4695 107.386 Td +/F1.0 10.5 Tf +<54686520632b2b20696d706c656d656e746174696f6e2066696c657320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8954 Tw + +BT +269.7124 107.386 Td +/F3.0 10.5 Tf +[<485454506d73675f5054> 89.8438 <2e6868>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8954 Tw + +BT +349.4931 107.386 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8954 Tw + +BT +356.7329 107.386 Td +/F3.0 10.5 Tf +[<485454506d73675f5054> 89.8438 <2e6363>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8954 Tw + +BT +434.1406 107.386 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8954 Tw + +BT +441.3804 107.386 Td +/F3.0 10.5 Tf +[<4162737472> 20.0195 <6163745f536f636b> 20.0195 <65742e6363>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8954 Tw + +BT +532.415 107.386 Td +/F1.0 10.5 Tf +<2c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +12.5639 Tw + +BT +114.4695 91.606 Td +/F3.0 10.5 Tf +[<4162737472> 20.0195 <6163745f536f636b> 20.0195 <65742e6868>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +12.5639 Tw + +BT +207.8771 91.606 Td +/F1.0 10.5 Tf +[<20616e6420746865205454> 20.0195 <434e2d33206d6f64756c657320>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +12.5639 Tw + +BT +398.2611 91.606 Td +/F3.0 10.5 Tf +<485454506d73675f54797065732e7474636e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +12.5639 Tw + +BT +500.6466 91.606 Td +/F1.0 10.5 Tf +<20616e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +114.4695 75.826 Td +/F3.0 10.5 Tf +<485454506d73675f506f7274547970652e7474636e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +233.298 75.826 Td +/F1.0 10.5 Tf +<206f6620746865207465737420706f72742073686f756c6420626520696e636c7564656420696e2074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +440.9145 75.826 Td +/F3.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +482.6518 75.826 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +45 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 44 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F4.0 39 0 R +/F5.0 43 0 R +/F2.0 17 0 R +/F3.0 19 0 R +/F6.0 49 0 R +>> +/XObject << /Stamp1 177 0 R +>> +>> +/Annots [46 0 R 50 0 R] +>> +endobj +46 0 obj +<< /Border [0 0 0] +/Dest (_5) +/Subtype /Link +/Rect [374.0868 417.72 387.4953 432.0] +/Type /Annot +>> +endobj +47 0 obj +[45 0 R /XYZ 0 268.29 null] +endobj +48 0 obj +[45 0 R /XYZ 0 222.77 null] +endobj +49 0 obj +<< /Type /Font +/BaseFont /37ee38+NotoSerif-BoldItalic +/Subtype /TrueType +/FontDescriptor 234 0 R +/FirstChar 32 +/LastChar 255 +/Widths 236 0 R +/ToUnicode 235 0 R +>> +endobj +50 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [381.4991 136.1 394.9076 150.38] +/Type /Annot +>> +endobj +51 0 obj +<< /Length 17608 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +[<46> 40.0391 <6f7220696e666f726d6174696f6e206f6e20686f7720746f2073746172742074686520657865637574696f6e2073656520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +298.4336 794.676 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 754.836 Td +/F2.0 18 Tf +<436f6e6e656374696e6720746f206120536572766572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.401 Tw + +BT +48.24 726.816 Td +/F1.0 10.5 Tf +<496e2063617365206f6620746865207465737420706572666f726d732074686520726f6c65206f662061204854545020636c69656e742c2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.401 Tw + +BT +336.6693 726.816 Td +/F4.0 10.5 Tf +<436f6e6e656374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.401 Tw + +BT +373.4193 726.816 Td +/F1.0 10.5 Tf +[<204153502068617320746f2062652073656e742e2049747320706172> 20.0195 <616d6574657273>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 711.036 Td +/F1.0 10.5 Tf +<6172653a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 683.256 Td +/F4.0 10.5 Tf +<686f73746e616d65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +90.24 683.256 Td +/F1.0 10.5 Tf +<3a20686f7374206e616d65206f722049502061646472657373206f66207468652072656d6f7465207365727665722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 655.476 Td +/F4.0 10.5 Tf +<706f72746e756d626572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +100.74 655.476 Td +/F1.0 10.5 Tf +<3a20706f7274206e756d626572206f66207468652072656d6f746520736572766572207768657265206974206163636570747320636f6e6e656374696f6e732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.6341 Tw + +BT +48.24 627.696 Td +/F4.0 10.5 Tf +<7573655f73736c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.6341 Tw + +BT +84.99 627.696 Td +/F1.0 10.5 Tf +<3a2068617320746f20626520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.6341 Tw + +BT +156.5093 627.696 Td +/F5.0 10.5 Tf +<66616c7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.6341 Tw + +BT +182.7593 627.696 Td +/F1.0 10.5 Tf +[<206f6e206e6f726d616c2054> 20.0195 <43502f495020636f6e6e656374696f6e732c20>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.6341 Tw + +BT +364.2066 627.696 Td +/F5.0 10.5 Tf +<74727565> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.6341 Tw + +BT +385.2066 627.696 Td +/F1.0 10.5 Tf +<20696620746865207365727665722061636365707473204854545053> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 611.916 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0739 Tw + +BT +48.24 584.136 Td +/F1.0 10.5 Tf +[<4d756c7469706c6520706172> 20.0195 <616c6c656c20636f6e6e656374696f6e732063616e206265206f70656e656420616e6420757365642e2049662074776f206f72206d6f726520636f6e6e656374696f6e7320617265207573656420696e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2852 Tw + +BT +48.24 568.356 Td +/F1.0 10.5 Tf +[<706172> 20.0195 <616c6c656c2c20>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.2852 Tw + +BT +93.226 568.356 Td +/F4.0 10.5 Tf +<7573655f6e6f74696669636174696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2852 Tw + +BT +203.476 568.356 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d657465722068617320746f2062652073657420746f20>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.2852 Tw + +BT +347.1767 568.356 Td +/F5.0 10.5 Tf +<74727565> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2852 Tw + +BT +368.1767 568.356 Td +/F1.0 10.5 Tf +<2c2073656520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +1.2852 Tw + +BT +394.7816 568.356 Td +/F1.0 10.5 Tf +[<485454502054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +1.8459 Tw + +BT +48.24 552.576 Td +/F1.0 10.5 Tf +[<7468652052> 20.0195 <544520436f6e6669677572> 20.0195 <6174696f6e2046696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8459 Tw + +BT +185.2583 552.576 Td +/F1.0 10.5 Tf +<2e20496e2074686973206361736520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.8459 Tw + +BT +256.6289 552.576 Td +/F4.0 10.5 Tf +<436f6e6e6563745f726573756c74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8459 Tw + +BT +330.1289 552.576 Td +/F1.0 10.5 Tf +<204153502069732072657475726e656420746f2074686520746573742063617365207769746820746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.2798 Tw + +BT +48.24 536.796 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2798 Tw + +BT +95.49 536.796 Td +/F1.0 10.5 Tf +<206173736f63696174656420746f2074686520636f6e6e656374696f6e2e205468652072657475726e656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.2798 Tw + +BT +329.2502 536.796 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2798 Tw + +BT +376.5002 536.796 Td +/F1.0 10.5 Tf +<2068617320746f206265207573656420696e20746865206d65737361676573> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1856 Tw + +BT +48.24 521.016 Td +/F1.0 10.5 Tf +<746172676574656420746f2073656e64206f6e207468697320636f6e6e656374696f6e2e205468652072657475726e656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1856 Tw + +BT +299.068 521.016 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1856 Tw + +BT +346.318 521.016 Td +/F1.0 10.5 Tf +<20776974682076616c756520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1856 Tw + +BT +405.2862 521.016 Td +/F7.0 10.5 Tf + Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1856 Tw + +BT +410.2422 521.016 Td +/F5.0 10.5 Tf +<31> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1856 Tw + +BT +415.4922 521.016 Td +/F1.0 10.5 Tf +<206d65616e732074686174207468652073657276657220646964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 505.236 Td +/F1.0 10.5 Tf +<6e6f74206163636570742074686520636f6e6e656374696f6e206265636175736520616e206572726f72206f636375727265642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 465.396 Td +/F2.0 18 Tf +<5374617274696e672061205365727665722c204c697374656e696e6720666f7220436c69656e7420436f6e6e656374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4593 Tw + +BT +48.24 437.376 Td +/F1.0 10.5 Tf +<496e2063617365206f6620746865207465737420706572666f726d732074686520726f6c65206f6620612048545450207365727665722c2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4593 Tw + +BT +341.5114 437.376 Td +/F4.0 10.5 Tf +<4c697374656e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4593 Tw + +BT +373.0114 437.376 Td +/F1.0 10.5 Tf +[<204153502068617320746f2062652073656e742e2049747320706172> 20.0195 <616d6574657273>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 421.596 Td +/F1.0 10.5 Tf +<6172653a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.092 Tw + +BT +48.24 393.816 Td +/F4.0 10.5 Tf +<6c6f63616c5f686f73746e616d65> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.092 Tw + +BT +121.74 393.816 Td +/F1.0 10.5 Tf +<3a20686f7374206e616d65206f722049502061646472657373206f662074686520696e7465726661636520696e20746865206c6f63616c20636f6d70757465722e2049742073686f756c642062652073657420696620746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 378.036 Td +/F1.0 10.5 Tf +<776f726b73746174696f6e20686173206d756c7469706c6520495020696e74657266616365732c20616e642074686520746573742068617320746f207573652061207370656369666963206f6e652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 350.256 Td +/F4.0 10.5 Tf +<706f72746e756d626572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +100.74 350.256 Td +/F1.0 10.5 Tf +<3a20706f7274206e756d62657220776865726520746865207365727665722077696c6c2061636365707420636f6e6e656374696f6e732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 322.476 Td +/F4.0 10.5 Tf +<7573655f73736c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +84.99 322.476 Td +/F1.0 10.5 Tf +<3a2068617320746f20626520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +137.973 322.476 Td +/F5.0 10.5 Tf +<66616c7365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +164.223 322.476 Td +/F1.0 10.5 Tf +[<20746f20616363657074206e6f726d616c2054> 20.0195 <43502f495020636f6e6e656374696f6e732c20>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +354.1258 322.476 Td +/F5.0 10.5 Tf +<74727565> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +375.1258 322.476 Td +/F1.0 10.5 Tf +<20746f2061636365707420485454505320636f6e6e656374696f6e732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 294.696 Td +/F1.0 10.5 Tf +<53656e64696e672074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +109.9485 294.696 Td +/F4.0 10.5 Tf +<4c697374656e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +141.4485 294.696 Td +/F1.0 10.5 Tf +<20415350206d756c7469706c652074696d65732077696c6c20636175736520746f20636c6f736520746865206c697374656e696e6720706f727420616e64206f70656e20616e6f74686572206f6e652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4084 Tw + +BT +48.24 266.916 Td +/F1.0 10.5 Tf +<496620> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.4084 Tw + +BT +61.0959 266.916 Td +/F4.0 10.5 Tf +<7573655f6e6f74696669636174696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4084 Tw + +BT +171.3459 266.916 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d657465722069732073657420746f20>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.4084 Tw + +BT +281.6361 266.916 Td +/F5.0 10.5 Tf +<74727565> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4084 Tw + +BT +302.6361 266.916 Td +/F1.0 10.5 Tf +[<20696e2074686520636f6e6669677572> 20.0195 <6174696f6e2c2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.4084 Tw + +BT +441.0032 266.916 Td +/F4.0 10.5 Tf +<4c697374656e5f726573756c74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4084 Tw + +BT +509.2532 266.916 Td +/F1.0 10.5 Tf +<20415350206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1551 Tw + +BT +48.24 251.136 Td +/F1.0 10.5 Tf +<72657475726e656420746f2074686520746573742063617365207769746820746865206f70656e656420706f7274206e756d6265722e205468652072657475726e656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.1551 Tw + +BT +419.4571 251.136 Td +/F4.0 10.5 Tf +<706f72746e756d626572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1551 Tw + +BT +471.9571 251.136 Td +/F1.0 10.5 Tf +<20776974682076616c756520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.1551 Tw + +BT +536.834 251.136 Td +/F7.0 10.5 Tf + Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.1551 Tw + +BT +541.79 251.136 Td +/F5.0 10.5 Tf +<31> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1551 Tw + +BT +547.04 251.136 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 235.356 Td +/F1.0 10.5 Tf +<6d65616e73207468617420616e206572726f72206f63637572726564207768696c652073657474696e672075702074686520726571756573746564206c697374656e696e6720706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.5845 Tw + +BT +48.24 207.576 Td +/F1.0 10.5 Tf +<4966206120636c69656e7420636f6e6e6563747320746f207468652073657276657220616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +3.5845 Tw + +BT +260.9184 207.576 Td +/F4.0 10.5 Tf +<7573655f6e6f74696669636174696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.5845 Tw + +BT +371.1684 207.576 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d657465722069732073657420746f20>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +3.5845 Tw + +BT +487.3394 207.576 Td +/F5.0 10.5 Tf +<74727565> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.5845 Tw + +BT +508.3394 207.576 Td +/F1.0 10.5 Tf +<20696e20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.1224 Tw + +BT +48.24 191.796 Td +/F1.0 10.5 Tf +[<636f6e6669677572> 20.0195 <6174696f6e2c2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +3.1224 Tw + +BT +146.559 191.796 Td +/F4.0 10.5 Tf +<436c69656e745f636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.1224 Tw + +BT +230.559 191.796 Td +/F1.0 10.5 Tf +<204153502069732073656e7420746f2074686520746573742063617365207769746820> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +3.1224 Tw + +BT +419.1213 191.796 Td +/F5.0 10.5 Tf +<686f73746e616d65> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.1224 Tw + +BT +461.1213 191.796 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +3.1224 Tw + +BT +469.5881 191.796 Td +/F5.0 10.5 Tf +<706f72746e756d626572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.1224 Tw + +BT +522.0881 191.796 Td +/F1.0 10.5 Tf +<20616e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 176.016 Td +/F5.0 10.5 Tf +<636c69656e745f6964> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +95.49 176.016 Td +/F1.0 10.5 Tf +<206669656c64732e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +130.8225 176.016 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +178.0725 176.016 Td +/F1.0 10.5 Tf +<2068617320746f2062652075736564206173206465736372696265642061626f76652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 131.904 Td +/F2.0 22 Tf +<53656e64696e672f726563656976696e672048545450204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2006 Tw + +BT +48.24 102.716 Td +/F1.0 10.5 Tf +<5468652048545450207465737420706f72742069732061626c6520746f2073656e6420616e64207265636569766520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2006 Tw + +BT +280.6474 102.716 Td +/F4.0 10.5 Tf +<485454504d657373616765> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2006 Tw + +BT +338.3974 102.716 Td +/F1.0 10.5 Tf +<20737472756374757265732e2054686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2006 Tw + +BT +419.3346 102.716 Td +/F4.0 10.5 Tf +<485454504d657373616765> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2006 Tw + +BT +477.0846 102.716 Td +/F1.0 10.5 Tf +<2063616e206265206f6e65206f66> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 86.936 Td +/F1.0 10.5 Tf +<74686520666f6c6c6f77696e672074797065733a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 59.156 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 59.156 Td +/F4.0 10.5 Tf +<4854545052657175657374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +52 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 51 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F2.0 17 0 R +/F4.0 39 0 R +/F5.0 43 0 R +/F7.0 57 0 R +>> +/XObject << /Stamp2 178 0 R +>> +>> +/Annots [53 0 R 55 0 R 56 0 R] +>> +endobj +53 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [298.4336 791.61 311.8421 805.89] +/Type /Annot +>> +endobj +54 0 obj +[52 0 R /XYZ 0 778.86 null] +endobj +55 0 obj +<< /Border [0 0 0] +/Dest (HTTP_test_port_parameters_in_the_RTE_configuration_file) +/Subtype /Link +/Rect [394.7816 565.29 547.04 579.57] +/Type /Annot +>> +endobj +56 0 obj +<< /Border [0 0 0] +/Dest (HTTP_test_port_parameters_in_the_RTE_configuration_file) +/Subtype /Link +/Rect [48.24 549.51 185.2583 563.79] +/Type /Annot +>> +endobj +57 0 obj +<< /Type /Font +/BaseFont /ebad8f+mplus-1p-regular +/Subtype /TrueType +/FontDescriptor 238 0 R +/FirstChar 32 +/LastChar 255 +/Widths 240 0 R +/ToUnicode 239 0 R +>> +endobj +58 0 obj +[52 0 R /XYZ 0 489.42 null] +endobj +59 0 obj +[52 0 R /XYZ 0 160.2 null] +endobj +60 0 obj +<< /Length 15752 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +2.0171 Tw + +BT +66.24 794.676 Td +/F1.0 10.5 Tf +[<5468652052657175657374206d65737361676520726570726573656e747320612073696e676c65207265717565737420746f20706572666f726d2062> 20.0195 <79207468652048545450207365727665722c20757375616c6c7920746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 778.896 Td +/F1.0 10.5 Tf +<616363657373206120> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +108.9015 778.896 Td +/F4.0 10.5 Tf +<7265736f75726365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +150.9015 778.896 Td +/F1.0 10.5 Tf +<206f6e20746865207365727665722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 757.116 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 757.116 Td +/F4.0 10.5 Tf +<48545450526573706f6e7365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1955 Tw + +BT +66.24 741.336 Td +/F1.0 10.5 Tf +[<54686520526573706f6e7365206d6573736167652069732073656e742062> 20.0195 <792074686520485454502073657276657220746f2074686520636c69656e742e20497420696e636c75646573207468652072657475726e2073746174757320636f6465>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 725.556 Td +/F1.0 10.5 Tf +<6f6620746865207265717565737420616e642074686520726571756573746564207265736f757263652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 703.776 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 703.776 Td +/F4.0 10.5 Tf +<48545450526571756573745f62696e6172795f626f6479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4967 Tw + +BT +66.24 687.996 Td +/F1.0 10.5 Tf +<5468652073616d652061732074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.4967 Tw + +BT +158.5783 687.996 Td +/F4.0 10.5 Tf +<4854545052657175657374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4967 Tw + +BT +216.3283 687.996 Td +/F1.0 10.5 Tf +[<206d6573736167652e2049742069732070617373656420746f205454> 20.0195 <434e207768656e2074686520626f6479206f6620746865206d657373616765>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 672.216 Td +/F1.0 10.5 Tf +[<636f6e7461696e73206e6f6e2d61736369692063686172> 20.0195 <6163746572732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 650.436 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 650.436 Td +/F4.0 10.5 Tf +<48545450526573706f6e73655f62696e6172795f626f6479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1686 Tw + +BT +66.24 634.656 Td +/F1.0 10.5 Tf +<5468652073616d652061732074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.1686 Tw + +BT +157.2658 634.656 Td +/F4.0 10.5 Tf +<48545450526573706f6e7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1686 Tw + +BT +220.2658 634.656 Td +/F1.0 10.5 Tf +[<206d6573736167652e2049742069732070617373656420746f205454> 20.0195 <434e207768656e2074686520626f6479206f6620746865206d657373616765>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 618.876 Td +/F1.0 10.5 Tf +[<636f6e7461696e73206e6f6e2d61736369692063686172> 20.0195 <6163746572732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6478 Tw + +BT +48.24 591.096 Td +/F1.0 10.5 Tf +<496e2063617365206f66206d756c7469706c6520636f6e6e656374696f6e732c2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.6478 Tw + +BT +231.3619 591.096 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6478 Tw + +BT +278.6119 591.096 Td +/F1.0 10.5 Tf +<2077696c6c206964656e746966792074686520636f6e6e656374696f6e2e205768656e2073656e64696e6720616e2048545450> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7959 Tw + +BT +48.24 575.316 Td +/F1.0 10.5 Tf +<6d6573736167652c2069742068617320746f2062652073657420746f2074686520636f72726573706f6e64696e6720636f6e6e656374696f6e2069642e205768656e20726563656976696e6720746865206d6573736167652c207468652074657374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 559.536 Td +/F1.0 10.5 Tf +<706f7274207365747320697420746f2074686520636f72726573706f6e64696e6720636f6e6e656374696f6e2069642c20616e6420746865207465737420636173652077696c6c20676574207468652072696768742076616c75652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3626 Tw + +BT +48.24 531.756 Td +/F1.0 10.5 Tf +<41706172742066726f6d2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.3626 Tw + +BT +129.6288 531.756 Td +/F4.0 10.5 Tf +<4854545052657175657374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3626 Tw + +BT +187.3788 531.756 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.3626 Tw + +BT +214.6529 531.756 Td +/F4.0 10.5 Tf +<48545450526573706f6e7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3626 Tw + +BT +277.6529 531.756 Td +/F1.0 10.5 Tf +<20415350732061626f76652c2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.3626 Tw + +BT +366.8513 531.756 Td +/F4.0 10.5 Tf +<6572726f6e6f75735f6d7367> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3626 Tw + +BT +429.8513 531.756 Td +/F1.0 10.5 Tf +[<2069732072656365697665642062> 20.0195 <79207468652074657374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 515.976 Td +/F1.0 10.5 Tf +<706f727420616e642073656e7420746f2074686520746573742073756974653a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 488.196 Td +/F4.0 10.5 Tf +<485454505f6572726f6e6f75735f6d7367> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2882 Tw + +BT +48.24 472.416 Td +/F1.0 10.5 Tf +<49662061206d657373616765206973207265636569766564206f6e2074686520636f6e6e656374696f6e2c2077686963682063616e206e6f74206265206465636f646564206173206120> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.2882 Tw + +BT +452.5205 472.416 Td +/F4.0 10.5 Tf +<48545450312e31> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2882 Tw + +BT +489.2705 472.416 Td +/F1.0 10.5 Tf +<206f7220> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.2882 Tw + +BT +510.29 472.416 Td +/F4.0 10.5 Tf +<48545450312e30> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2882 Tw + +BT +547.04 472.416 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9805 Tw + +BT +48.24 456.636 Td +/F1.0 10.5 Tf +<6d6573736167652c2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.9805 Tw + +BT +116.4036 456.636 Td +/F4.0 10.5 Tf +<485454504d657373616765> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9805 Tw + +BT +174.1536 456.636 Td +/F1.0 10.5 Tf +<2077696c6c20636f6e7461696e20616e206572726f6e656f7573206d6573736167652077697468206120> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.9805 Tw + +BT +395.2633 456.636 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9805 Tw + +BT +442.5133 456.636 Td +/F1.0 10.5 Tf +<2c20616e642073656e7420746f207468652074657374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 440.856 Td +/F1.0 10.5 Tf +<73756974652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 396.744 Td +/F2.0 22 Tf +<53746f702050726f636564757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 355.496 Td +/F2.0 18 Tf +<436c6f73696e6720436f6e6e656374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5451 Tw + +BT +48.24 327.476 Td +/F1.0 10.5 Tf +[<54> 29.7852 <6f20636c6f7365206120737065636966696320636c69656e7420636f6e6e656374696f6e2c2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.5451 Tw + +BT +260.5738 327.476 Td +/F4.0 10.5 Tf +<436c6f7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5451 Tw + +BT +286.8238 327.476 Td +/F1.0 10.5 Tf +<204153502068617320746f2062652073656e742077697468207468652072656c6576616e7420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.5451 Tw + +BT +485.1724 327.476 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5451 Tw + +BT +532.4224 327.476 Td +/F1.0 10.5 Tf +<2e204966> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 311.696 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +95.49 311.696 Td +/F1.0 10.5 Tf +<20697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +109.014 311.696 Td +/F5.0 10.5 Tf +<6f6d6974> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +130.014 311.696 Td +/F1.0 10.5 Tf +<2c20616c6c20636c69656e7420636f6e6e656374696f6e732077696c6c20626520636c6f7365642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 283.916 Td +/F1.0 10.5 Tf +[<54> 29.7852 <6f20636c6f73652074686520736572766572206c697374656e696e6720706f72742c2074686520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +235.1213 283.916 Td +/F4.0 10.5 Tf +<53687574646f776e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +277.1213 283.916 Td +/F1.0 10.5 Tf +<204153502068617320746f2062652073656e742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7482 Tw + +BT +48.24 256.136 Td +/F1.0 10.5 Tf +<496620> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.7482 Tw + +BT +59.4357 256.136 Td +/F4.0 10.5 Tf +<7573655f6e6f74696669636174696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7482 Tw + +BT +169.6857 256.136 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d657465722069732073657420746f20>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.7482 Tw + +BT +271.6748 256.136 Td +/F5.0 10.5 Tf +<74727565> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7482 Tw + +BT +292.6748 256.136 Td +/F1.0 10.5 Tf +[<20696e2074686520636f6e6669677572> 20.0195 <6174696f6e2c20746865207465737420636173652077696c6c207265636569766520746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9738 Tw + +BT +48.24 240.356 Td +/F4.0 10.5 Tf +<436c6f7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9738 Tw + +BT +74.49 240.356 Td +/F1.0 10.5 Tf +<20415350206966207468652072656d6f746520656e64206f662074686520636f6e6e656374696f6e20646973636f6e6e656374732e2054686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9738 Tw + +BT +384.5952 240.356 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9738 Tw + +BT +431.8452 240.356 Td +/F1.0 10.5 Tf +<206669656c642077696c6c206964656e7469667920746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 224.576 Td +/F1.0 10.5 Tf +<72656c6576616e7420636f6e6e656374696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3845 Tw + +BT +48.24 196.796 Td +/F1.0 10.5 Tf +<4966207468652072656d6f746520656e6420636c6f7365732074686520636f6e6e656374696f6e2c206120> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.3845 Tw + +BT +268.9384 196.796 Td +/F4.0 10.5 Tf +<48616c665f636c6f7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3845 Tw + +BT +321.4384 196.796 Td +/F1.0 10.5 Tf +[<204153502069732072656365697665642062> 20.0195 <7920746865207465737420636173652e20>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.3845 Tw + +BT +494.54 196.796 Td +/F4.0 10.5 Tf +<48616c665f636c6f7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3845 Tw + +BT +547.04 196.796 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0541 Tw + +BT +48.24 181.016 Td +/F1.0 10.5 Tf +[<6d65616e732074686174207468652072656d6f746520656e642077696c6c206e6f742073656e6420616e> 20.0195 <79206d6f726520646174612c20627574206974206d61> 20.0195 <7920726563656976652e20536f6d652074657374206361736573206d61> 20.0195 <7920757365>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.677 Tw + +BT +48.24 165.236 Td +/F1.0 10.5 Tf +[<746869732066756e6374696f6e616c697479> 89.8438 <2c2062757420696e206d6f7374206361736573206120>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.677 Tw + +BT +246.9753 165.236 Td +/F4.0 10.5 Tf +<436c6f7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.677 Tw + +BT +273.2253 165.236 Td +/F1.0 10.5 Tf +<204153502068617320746f2062652073656e7420696e207265706c7920746f2069742c20776974682074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.677 Tw + +BT +499.79 165.236 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.677 Tw + +BT +547.04 165.236 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 149.456 Td +/F1.0 10.5 Tf +<726563656976656420696e2074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +125.3205 149.456 Td +/F4.0 10.5 Tf +<48616c665f636c6f7365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +177.8205 149.456 Td +/F1.0 10.5 Tf +<206d6573736167652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 109.616 Td +/F2.0 18 Tf +[<5454> 20.0195 <434e2d332054> 29.7852 <657374204578656375746f72>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0709 Tw + +BT +48.24 81.596 Td +/F1.0 10.5 Tf +[<54686520544954> 60.0586 <414e206578656375746f722073746f707320746865207465737420706f727420616674657220746865207465737420636173652069732066696e6973686564206f7220696e2063617365206f6620657865637574696f6e206572726f72>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 65.816 Td +/F1.0 10.5 Tf +<647572696e6720746865207465737420636173652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +61 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 60 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F4.0 39 0 R +/F2.0 17 0 R +/F5.0 43 0 R +>> +/XObject << /Stamp1 177 0 R +>> +>> +>> +endobj +62 0 obj +[61 0 R /XYZ 0 425.04 null] +endobj +63 0 obj +[61 0 R /XYZ 0 379.52 null] +endobj +64 0 obj +[61 0 R /XYZ 0 133.64 null] +endobj +65 0 obj +<< /Length 18700 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 777.054 Td +/F2.0 27 Tf +<55736167652061732050726f746f636f6c204d6f64756c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4343 Tw + +BT +48.24 746.406 Td +/F1.0 10.5 Tf +<5468652048545450207465737420706f72742063616e206265207573656420617320612070726f746f636f6c206d6f64756c652c20692e652eca6f6e6c7920612070726f746f636f6c206461746120737472756374757265206465736372697074696f6e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4247 Tw + +BT +48.24 730.626 Td +/F1.0 10.5 Tf +<776974682074686520617070726f70726961746520656e636f64696e6720616e64206465636f64696e672066756e6374696f6e732e2054686520646174612073747275637475726520646566696e6974696f6e7320617265207468652073616d65> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7961 Tw + +BT +48.24 714.846 Td +/F1.0 10.5 Tf +<617320696e2063617365206f662068747470207465737420706f72742c20746865792063616e20626520666f756e6420696e2066696c6520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7961 Tw + +BT +341.8501 714.846 Td +/F3.0 10.5 Tf +<485454506d73675f54797065732e7474636e2e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7961 Tw + +BT +446.8606 714.846 Td +/F1.0 10.5 Tf +<2054686520656e636f64696e6720616e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.5347 Tw + +BT +48.24 699.066 Td +/F1.0 10.5 Tf +<6465636f64696e672066756e6374696f6e7320617265206465636c617265642061732065787465726e616c2066756e6374696f6e7320696e2066696c6520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.5347 Tw + +BT +373.746 699.066 Td +/F3.0 10.5 Tf +<485454506d73675f54797065732e7474636e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.5347 Tw + +BT +476.1315 699.066 Td +/F1.0 10.5 Tf +<20627574207468657920617265> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 683.286 Td +/F1.0 10.5 Tf +<696d706c656d656e74656420696e2066696c657320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +153.975 683.286 Td +/F3.0 10.5 Tf +[<485454506d73675f5054> 89.8438 <2e63632f68682e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 655.506 Td +/F1.0 10.5 Tf +<54686520617661696c61626c652066756e6374696f6e732061726520617320666f6c6c6f77733a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 619.41 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +214.5065 619.41 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +380.773 619.41 166.267 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 599.13 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +214.5065 599.13 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +380.773 599.13 166.267 20.28 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +48.24 550.29 166.2665 48.84 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +214.5065 550.29 166.2665 48.84 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +380.773 550.29 166.267 48.84 re +f +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 639.69 m +214.5065 639.69 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 619.41 m +214.5065 619.41 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 639.94 m +48.24 618.785 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 639.94 m +214.5065 618.785 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +51.24 625.476 Td +/F2.0 10.5 Tf +<4e616d65> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 639.69 m +380.773 639.69 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +214.5065 619.41 m +380.773 619.41 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 639.94 m +214.5065 618.785 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 639.94 m +380.773 618.785 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +217.5065 625.476 Td +/F2.0 10.5 Tf +[<54797065206f6620666f726d616c20706172> 20.0195 <616d6574657273>] TJ +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 639.69 m +547.04 639.69 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +380.773 619.41 m +547.04 619.41 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 639.94 m +380.773 618.785 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 639.94 m +547.04 618.785 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +383.773 625.476 Td +/F2.0 10.5 Tf +<54797065206f662072657475726e2076616c7565> Tj +ET + +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 619.41 m +214.5065 619.41 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 599.13 m +214.5065 599.13 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 620.035 m +48.24 598.88 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 620.035 m +214.5065 598.88 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 607.38 Td +/F4.0 10.5 Tf +<656e635f485454504d657373616765> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +214.5065 619.41 m +380.773 619.41 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 599.13 m +380.773 599.13 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 620.035 m +214.5065 598.88 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 620.035 m +380.773 598.88 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +217.5065 605.196 Td +/F1.0 10.5 Tf +<485454504d657373616765> Tj +ET + +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +380.773 619.41 m +547.04 619.41 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 599.13 m +547.04 599.13 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 620.035 m +380.773 598.88 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 620.035 m +547.04 598.88 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +383.773 605.196 Td +/F1.0 10.5 Tf +<6f63746574737472696e67> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 599.13 m +214.5065 599.13 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 550.29 m +214.5065 550.29 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 599.38 m +48.24 550.04 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 599.38 m +214.5065 550.04 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 587.1 Td +/F4.0 10.5 Tf +<6465635f485454504d657373616765> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 599.13 m +380.773 599.13 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 550.29 m +380.773 550.29 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 599.38 m +214.5065 550.04 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 599.38 m +380.773 550.04 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +217.5065 584.916 Td +/F1.0 10.5 Tf +<696e206f63746574737472696e672073747265616d> Tj +ET + + +BT +217.5065 570.636 Td +/F1.0 10.5 Tf +<696e6f757420485454504d657373616765206d7367> Tj +ET + + +BT +217.5065 556.356 Td +/F1.0 10.5 Tf +[<696e20626f6f6c65616e20736f636b> 20.0195 <657420646562756767696e67>] TJ +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 599.13 m +547.04 599.13 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 550.29 m +547.04 550.29 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 599.38 m +380.773 550.04 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 599.38 m +547.04 550.04 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +383.773 584.916 Td +/F1.0 10.5 Tf +<696e7465676572> Tj +ET + +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.3228 Tw + +BT +48.24 526.326 Td +/F1.0 10.5 Tf +[<496620746865207465737420706f727420757365642061732070726f746f636f6c206d6f64756c652c20746865204d616b> 20.0195 <6566696c65206973207468652073616d6520617320696e206e6f726d616c206361736520692e65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7445 Tw + +BT +48.24 510.546 Td +/F3.0 10.5 Tf +[<485454506d73675f5054> 89.8438 <2e63632f6868>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7445 Tw + +BT +141.2506 510.546 Td +/F1.0 10.5 Tf +<206973207573656420616e642074686520706f727420646566696e6974696f6e2066696c6520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7445 Tw + +BT +338.0844 510.546 Td +/F3.0 10.5 Tf +<485454506d73675f506f7274547970652e7474636e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7445 Tw + +BT +456.9129 510.546 Td +/F1.0 10.5 Tf +<20697320616c736f207573656420627574> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 494.766 Td +/F1.0 10.5 Tf +[<2867656e6572> 20.0195 <616c6c79292074686572652077696c6c206e6f7420626520646566696e656420616e> 20.0195 <7920706f7274206f66207468697320706f7274207479706520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +357.6851 494.766 Td +/F4.0 10.5 Tf +<485454506d73675f5054> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +410.1851 494.766 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 445.314 Td +/F2.0 27 Tf +[<557361676520776974682049504c342054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2434 Tw + +BT +48.24 414.666 Td +/F1.0 10.5 Tf +[<54> 29.7852 <6f207573652049504c34207465737420706f727420666f722048545450207472> 20.0195 <6166666963207468652048545450207465737420706f72742070726f76696465732061206d657373616765206c656e6774682063616c63756c61746f72>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 398.886 Td +/F1.0 10.5 Tf +[<66756e6374696f6e2e20546861742066756e6374696f6e2063616e206265207573656420746f2064657465726d696e6520746865206d65737361676520626f756e646172792062> 20.0195 <79207468652049504c34207465737420706f72742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 362.79 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +214.5065 362.79 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +380.773 362.79 166.267 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 342.51 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +214.5065 342.51 166.2665 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +380.773 342.51 166.267 20.28 re +f +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 383.07 m +214.5065 383.07 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 362.79 m +214.5065 362.79 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 383.32 m +48.24 362.165 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 383.32 m +214.5065 362.165 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +51.24 368.856 Td +/F2.0 10.5 Tf +<4e616d65> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 383.07 m +380.773 383.07 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +214.5065 362.79 m +380.773 362.79 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 383.32 m +214.5065 362.165 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 383.32 m +380.773 362.165 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +217.5065 368.856 Td +/F2.0 10.5 Tf +[<54797065206f6620666f726d616c20706172> 20.0195 <616d6574657273>] TJ +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 383.07 m +547.04 383.07 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +380.773 362.79 m +547.04 362.79 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 383.32 m +380.773 362.165 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 383.32 m +547.04 362.165 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +383.773 368.856 Td +/F2.0 10.5 Tf +<54797065206f662072657475726e2076616c7565> Tj +ET + +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 362.79 m +214.5065 362.79 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 342.51 m +214.5065 342.51 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 363.415 m +48.24 342.26 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 363.415 m +214.5065 342.26 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 350.76 Td +/F4.0 10.5 Tf +<665f485454504d6573736167655f6c656e> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +214.5065 362.79 m +380.773 362.79 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 342.51 m +380.773 342.51 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +214.5065 363.415 m +214.5065 342.26 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 363.415 m +380.773 342.26 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +217.5065 348.576 Td +/F1.0 10.5 Tf +<696e206f63746574737472696e672073747265616d> Tj +ET + +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +380.773 362.79 m +547.04 362.79 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 342.51 m +547.04 342.51 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +380.773 363.415 m +380.773 342.26 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 363.415 m +547.04 342.26 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +383.773 348.576 Td +/F1.0 10.5 Tf +<696e7465676572> Tj +ET + +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 296.874 Td +/F2.0 27 Tf +[<4d696772> 20.0195 <6174696e672054> 29.7852 <657374205375697465205573696e6720523178>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7724 Tw + +BT +48.24 266.226 Td +/F1.0 10.5 Tf +<57697468207468652072656c65617365206f662074686520706f72742076657273696f6e2052324120697420686173206265656e206465636964656420746f2061646420666f7572206e6577207265636569766564204153507320616e642061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.454 Tw + +BT +48.24 250.446 Td +/F1.0 10.5 Tf +<6e6577206d657373616765206669656c6420746f20746865207465737420706f72742074797065732e2054686973206d6f64696669636174696f6e20686173206265656e206d61646520746f2066756c66696c2074686520726571756972656d656e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.9519 Tw + +BT +48.24 234.666 Td +/F1.0 10.5 Tf +[<6f6620612048545450207365727665722068616e646c696e67206d756c7469706c6520706172> 20.0195 <616c6c656c20636c69656e7420636f6e6e656374696f6e732e20546865206368616e676520636175736573207465737420737569746573>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +5.3562 Tw + +BT +48.24 218.886 Td +/F1.0 10.5 Tf +[<7772697474656e20666f722052317820706f727420746f206661696c2074686520636f6d70696c6174696f6e2e20486f77657665722c20746865207472> 20.0195 <616e736974696f6e20746f2074686520523220706f7274206973>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 203.106 Td +/F1.0 10.5 Tf +[<737472> 20.0195 <6169676874666f72776172642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 175.326 Td +/F1.0 10.5 Tf +<537465707320746f20636f6d70696c65206f6c6465722074657374207375697465732077697468204854545020706f72742052323a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 147.546 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1658 Tw + +BT +66.24 147.546 Td +/F1.0 10.5 Tf +<44656369646520776865746865722053534c2077696c6c2062652075736564206f72206e6f7420696e2074686520746573742e204966207965732c20706c656173652073656520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +1.1658 Tw + +BT +421.0713 147.546 Td +/F1.0 10.5 Tf +[<6d616b> 20.0195 <6566696c652c204d616b> 20.0195 <6566696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1658 Tw + +BT +514.4057 147.546 Td +/F1.0 10.5 Tf +<2061626f7574> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3935 Tw + +BT +66.24 131.766 Td +/F1.0 10.5 Tf +<65646974696e672074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3935 Tw + +BT +123.307 131.766 Td +/F3.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3935 Tw + +BT +165.0443 131.766 Td +/F1.0 10.5 Tf +<20746f20616c6c6f772053534c20696e2074686520746573742e2049662053534c206973206e6f74207573656420696e2074686520746573742c207468656e2053534c207370656369666963207061727473> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 115.986 Td +/F1.0 10.5 Tf +<63616e2062652072656d6f7665642066726f6d2074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +195.159 115.986 Td +/F3.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +236.8963 115.986 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.5 w +0.9333 0.9333 0.9333 SCN +120.4695 100.17 m +120.4695 76.39 l +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +78.3451 84.206 Td +/F2.0 10.5 Tf +[<4e4f> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +132.4695 84.206 Td +/F4.0 10.5 Tf +<4f50454e53534c5f444952> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +190.2195 84.206 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +214.7685 84.206 Td +/F7.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +219.7245 84.206 Td +/F4.0 10.5 Tf +<6c73736c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +240.7245 84.206 Td +/F1.0 10.5 Tf +<20617265207374696c6c206e656564656420746f20636f6d70696c65207468652065786563757461626c652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 52.426 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.2883 Tw + +BT +66.24 52.426 Td +/F1.0 10.5 Tf +<52656d6f766520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.2883 Tw + +BT +113.4103 52.426 Td +/F3.0 10.5 Tf +<6275666665722e6363> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.2883 Tw + +BT +155.1688 52.426 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.2883 Tw + +BT +188.2944 52.426 Td +/F3.0 10.5 Tf +<6275666665722e6868> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.2883 Tw + +BT +232.4259 52.426 Td +/F1.0 10.5 Tf +<2066726f6d207468652028757365722920736f75726365732c20616e642061646420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.2883 Tw + +BT +429.8876 52.426 Td +/F3.0 10.5 Tf +[<4162737472> 20.0195 <6163745f536f636b> 20.0195 <65742e6363>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.2883 Tw + +BT +520.9222 52.426 Td +/F1.0 10.5 Tf +<20616e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<36> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +66 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 65 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 17 0 R +/F1.0 8 0 R +/F3.0 19 0 R +/F4.0 39 0 R +/F7.0 57 0 R +>> +/XObject << /Stamp2 178 0 R +>> +>> +/Annots [72 0 R] +>> +endobj +67 0 obj +[66 0 R /XYZ 0 841.89 null] +endobj +68 0 obj +[66 0 R /XYZ 0 478.95 null] +endobj +69 0 obj +<< /Limits [(HTTP_test_port_parameters_in_the_RTE_configuration_file) (_additional_error_messages_in_case_ssl_connections_are_used)] +/Names [(HTTP_test_port_parameters_in_the_RTE_configuration_file) 41 0 R (_1) 109 0 R (_2) 110 0 R (_3) 111 0 R (_4) 112 0 R (_5) 114 0 R (__anchor-top) 13 0 R (_abbreviations) 107 0 R (_about_this_document) 16 0 R (_additional_error_messages_in_case_ssl_connections_are_used) 83 0 R] +>> +endobj +70 0 obj +<< /Limits [(_prerequisite_knowledge) (ttcn-3-test-executor-0)] +/Names [(_prerequisite_knowledge) 21 0 R (_references) 108 0 R (_start_procedure) 47 0 R (_starting_a_server_listening_for_client_connections) 58 0 R (_stop_procedure) 62 0 R (_system_requirements) 24 0 R (_terminology) 104 0 R (_the_test_port) 30 0 R (_ttcn_3_test_executor) 48 0 R (_usage_as_protocol_module) 67 0 R (_usage_with_ipl4_test_port) 68 0 R (_warning_messages) 86 0 R (makefile) 102 0 R (sending-receiving-http-messages) 59 0 R (ttcn-3-test-executor-0) 64 0 R] +>> +endobj +71 0 obj +[66 0 R /XYZ 0 330.51 null] +endobj +72 0 obj +<< /Border [0 0 0] +/Dest (8_examples.adoc) +/Subtype /Link +/Rect [421.0713 144.48 514.4057 158.76] +/Type /Annot +>> +endobj +73 0 obj +<< /Length 16393 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +66.24 794.676 Td +/F3.0 10.5 Tf +[<4162737472> 20.0195 <6163745f536f636b> 20.0195 <65742e6868>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +159.6476 794.676 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 772.896 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8528 Tw + +BT +66.24 772.896 Td +/F1.0 10.5 Tf +<446f206e6f74207365742074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.8528 Tw + +BT +140.7676 772.896 Td +/F4.0 10.5 Tf +<7573655f6e6f74696669636174696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8528 Tw + +BT +251.0176 772.896 Td +/F1.0 10.5 Tf +<20746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.8528 Tw + +BT +267.9167 772.896 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8528 Tw + +BT +294.1667 772.896 Td +/F1.0 10.5 Tf +<20756e6c65737320796f7520646f206e6f74206d6f6469667920746865207465737420737569746520746f2068616e646c65> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +8.2804 Tw + +BT +66.24 757.116 Td +/F1.0 10.5 Tf +<74686520696e636f6d696e6720> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +8.2804 Tw + +BT +151.2398 757.116 Td +/F4.0 10.5 Tf +<436c6f7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +8.2804 Tw + +BT +177.4898 757.116 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +8.2804 Tw + +BT +191.1147 757.116 Td +/F4.0 10.5 Tf +<436f6e6e6563745f726573756c74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +8.2804 Tw + +BT +264.6147 757.116 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +8.2804 Tw + +BT +278.2396 757.116 Td +/F4.0 10.5 Tf +<436c69656e745f636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +8.2804 Tw + +BT +362.2396 757.116 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +8.2804 Tw + +BT +403.3493 757.116 Td +/F4.0 10.5 Tf +<4c697374656e5f726573756c74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +8.2804 Tw + +BT +471.5993 757.116 Td +/F1.0 10.5 Tf +<20415350732e204974206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8382 Tw + +BT +66.24 741.336 Td +/F1.0 10.5 Tf +<7265636f6d6d656e64656420746f20636f6e736964657220746865207573616765206f6620746865736520415350732073696e6365207468657920616c6c6f7720746865207465737420737569746520746f20696d706c656d656e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.285 Tw + +BT +66.24 725.556 Td +/F1.0 10.5 Tf +[<6d6f726520636f6d706c65782054> 20.0195 <4350206576656e742068616e646c696e672e2046> 40.0391 <6f72206578616d706c652c206120636c69656e74207465737420636173652063616e207761697420666f7220612073657276657220746f206265>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 709.776 Td +/F1.0 10.5 Tf +[<737461727465642075702062> 20.0195 <7920636865636b696e672069662074686520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +210.5308 709.776 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +257.7808 709.776 Td +/F1.0 10.5 Tf +<20697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +271.3048 709.776 Td +/F7.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +276.2608 709.776 Td +/F5.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +281.5108 709.776 Td +/F1.0 10.5 Tf +<20696e207468652072657475726e656420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +363.1693 709.776 Td +/F4.0 10.5 Tf +<436f6e6e6563745f726573756c74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +436.6693 709.776 Td +/F1.0 10.5 Tf +[<20415350> 120.1172 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 687.996 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +11.2681 Tw + +BT +66.24 687.996 Td +/F1.0 10.5 Tf +[<41> 20.0195 <64642074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +11.2681 Tw + +BT +130.2509 687.996 Td +/F4.0 10.5 Tf +<636c69656e745f6964203a3d206f6d6974> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +11.2681 Tw + +BT +242.0371 687.996 Td +/F1.0 10.5 Tf +<2061737369676e6d656e7420746f20657665727920> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +11.2681 Tw + +BT +393.0649 687.996 Td +/F4.0 10.5 Tf +<4854545052657175657374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +11.2681 Tw + +BT +450.8149 687.996 Td +/F1.0 10.5 Tf +<202c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +11.2681 Tw + +BT +481.415 687.996 Td +/F4.0 10.5 Tf +<48545450526573706f6e7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +11.2681 Tw + +BT +544.415 687.996 Td +/F1.0 10.5 Tf +<2c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4628 Tw + +BT +66.24 672.216 Td +/F4.0 10.5 Tf +<48545450526571756573745f62696e6172795f626f6479> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4628 Tw + +BT +186.99 672.216 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4628 Tw + +BT +192.7973 672.216 Td +/F4.0 10.5 Tf +<48545450526573706f6e73655f62696e6172795f626f6479> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4628 Tw + +BT +318.7973 672.216 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4628 Tw + +BT +324.6047 672.216 Td +/F4.0 10.5 Tf +<6572726f6e6f75735f6d7367> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4628 Tw + +BT +387.6047 672.216 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4628 Tw + +BT +393.412 672.216 Td +/F4.0 10.5 Tf +<48616c665f636c6f7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4628 Tw + +BT +445.912 672.216 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4628 Tw + +BT +471.3867 672.216 Td +/F4.0 10.5 Tf +<436c6f7365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4628 Tw + +BT +497.6367 672.216 Td +/F1.0 10.5 Tf +<207661726961626c6573> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 656.436 Td +/F1.0 10.5 Tf +<616e642074656d706c617465732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 628.656 Td +/F1.0 10.5 Tf +<4578616d706c653a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 612.84 m +543.04 612.84 l +545.2491 612.84 547.04 611.0491 547.04 608.84 c +547.04 565.36 l +547.04 563.1509 545.2491 561.36 543.04 561.36 c +52.24 561.36 l +50.0309 561.36 48.24 563.1509 48.24 565.36 c +48.24 608.84 l +48.24 611.0491 50.0309 612.84 52.24 612.84 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 612.84 m +543.04 612.84 l +545.2491 612.84 547.04 611.0491 547.04 608.84 c +547.04 565.36 l +547.04 563.1509 545.2491 561.36 543.04 561.36 c +52.24 561.36 l +50.0309 561.36 48.24 563.1509 48.24 565.36 c +48.24 608.84 l +48.24 611.0491 50.0309 612.84 52.24 612.84 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 590.015 Td +/F4.0 11 Tf +<7661722048545450526571756573742072203a3d207b206d6574686f64203a3d2022474554222c20757269203a3d20222f222c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 575.275 Td +/F4.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 537.396 Td +/F1.0 10.5 Tf +<68617320746f206265206d6f64696669656420746f3a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 521.58 m +543.04 521.58 l +545.2491 521.58 547.04 519.7891 547.04 517.58 c +547.04 474.1 l +547.04 471.8909 545.2491 470.1 543.04 470.1 c +52.24 470.1 l +50.0309 470.1 48.24 471.8909 48.24 474.1 c +48.24 517.58 l +48.24 519.7891 50.0309 521.58 52.24 521.58 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 521.58 m +543.04 521.58 l +545.2491 521.58 547.04 519.7891 547.04 517.58 c +547.04 474.1 l +547.04 471.8909 545.2491 470.1 543.04 470.1 c +52.24 470.1 l +50.0309 470.1 48.24 471.8909 48.24 474.1 c +48.24 517.58 l +48.24 519.7891 50.0309 521.58 52.24 521.58 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 498.755 Td +/F4.0 11 Tf +<7661722048545450526571756573742072203a3d207b20636c69656e745f6964203a3d206f6d69742c206d6574686f64203a3d2022474554222c20757269203a3d20222f222c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 484.015 Td +/F4.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.393 Tw + +BT +48.24 446.136 Td +/F1.0 10.5 Tf +[<546865206e6577204153507320617265206f6e6c792072656365697665642062> 20.0195 <792074686520746573742069662074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.393 Tw + +BT +297.1502 446.136 Td +/F4.0 10.5 Tf +<7573655f6e6f74696669636174696f6e2041535073203a3d202279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.393 Tw + +BT +455.8293 446.136 Td +/F1.0 10.5 Tf +<2069732073706563696669656420696e20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 430.356 Td +/F1.0 10.5 Tf +[<72756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 380.904 Td +/F2.0 27 Tf +<4572726f72204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 350.256 Td +/F1.0 10.5 Tf +[<546865206572726f72206d6573736167657320686176652074686520666f6c6c6f77696e672067656e6572> 20.0195 <616c20666f726d3a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 324.66 Td +/F8.0 10.5 Tf +<6044796e616d696320746573742063617365206572726f723a203c6572726f7220746578743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +247.74 324.66 Td +/F4.0 10.5 Tf +<60> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.8885 Tw + +BT +48.24 298.476 Td +/F1.0 10.5 Tf +[<546865206c697374206f662074686520706f737369626c65206572726f72206d657373616765732069732073686f776e2062656c6f77> 69.8242 <2e204e6f746520746861742074686973206c69737420636f6e7461696e7320746865206572726f72>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 282.696 Td +/F1.0 10.5 Tf +[<6d657373616765732070726f64756365642062> 20.0195 <7920746865207465737420706f72742e20546865206572726f72206d6573736167657320636f6d696e672066726f6d2074686520544954> 60.0586 <414e20617265206e6f742073686f776e3a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 257.1 Td +/F8.0 10.5 Tf +<506172616d657465722076616c7565203c76616c75653e206e6f74207265636f676e697a656420666f7220706172616d65746572203c6e616d653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8706 Tw + +BT +48.24 230.916 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.8706 Tw + +BT +118.7037 230.916 Td +/F4.0 10.5 Tf +<3c76616c75653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8706 Tw + +BT +155.4537 230.916 Td +/F1.0 10.5 Tf +[<20696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c65206973206e6f74207265636f676e697a656420666f722074686520706172> 20.0195 <616d6574657220>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.8706 Tw + +BT +512.915 230.916 Td +/F4.0 10.5 Tf +<3c6e616d653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8706 Tw + +BT +544.415 230.916 Td +/F1.0 10.5 Tf +<2e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 215.136 Td +/F1.0 10.5 Tf +<53656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +67.896 215.136 Td +/F1.0 10.5 Tf +[<485454502054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e207468652052> 20.0195 <544520436f6e6669677572> 20.0195 <6174696f6e2046696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +349.2136 215.136 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1517 Tw + +BT +48.24 189.54 Td +/F8.0 10.5 Tf +<3c706f7274206e616d653e3a2048545450207465737420706f7274206973206e6f7420636f6d70696c656420746f20737570706f72742053534c20636f6e6e656374696f6e732e20506c6561736520636865636b207468652055736572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1517 Tw + +BT +538.766 189.54 Td +/F7.0 10.5 Tf + Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1517 Tw + +BT +541.79 189.54 Td +/F8.0 10.5 Tf +<73> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 176.595 Td +/F8.0 10.5 Tf +<477569646520666f7220696e737472756374696f6e73206f6e20636f6d70696c696e67207468652048545450207465737420706f727420776974682053534c20737570706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +3.6213 Tw + +BT +48.24 150.411 Td +/F4.0 10.5 Tf +<2d4441535f5553455f53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6213 Tw + +BT +111.24 150.411 Td +/F1.0 10.5 Tf +<20616e64204f70656e53534c2072656c6174656420636f6d70696c696e6720696e737472756374696f6e7320617265206d697373696e672066726f6d2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6213 Tw + +BT +479.4004 150.411 Td +/F3.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6213 Tw + +BT +521.1377 150.411 Td +/F1.0 10.5 Tf +<2e20536565> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +48.24 134.631 Td +/F1.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +91.6153 134.631 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 109.035 Td +/F8.0 10.5 Tf +<43616e6e6f7420636f6e6e65637420746f20736572766572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 82.851 Td +/F1.0 10.5 Tf +[<54686520436f6e6e656374206f706572> 20.0195 <6174696f6e206661696c65643b206c6f6f6b20666f722074686520726561736f6e2061626f76652074686973206d65737361676520696e20746865206c6f672e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 57.255 Td +/F8.0 10.5 Tf +<43616e6e6f74206c697374656e20617420706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<37> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +74 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 73 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F3.0 19 0 R +/F1.0 8 0 R +/F4.0 39 0 R +/F5.0 43 0 R +/F7.0 57 0 R +/F2.0 17 0 R +/F8.0 76 0 R +>> +/XObject << /Stamp1 177 0 R +>> +>> +/Annots [77 0 R 78 0 R] +>> +endobj +75 0 obj +[74 0 R /XYZ 0 414.54 null] +endobj +76 0 obj +<< /Type /Font +/BaseFont /439c15+mplus1mn-bold +/Subtype /TrueType +/FontDescriptor 242 0 R +/FirstChar 32 +/LastChar 255 +/Widths 244 0 R +/ToUnicode 243 0 R +>> +endobj +77 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (2_the_test_port.pdf#HTTP_test_port_parameters_in_the_RTE_configuration_file) +>> +/Subtype /Link +/Rect [67.896 212.07 349.2136 226.35] +/Type /Annot +>> +endobj +78 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (8_examples.pdf#makefile) +>> +/Subtype /Link +/Rect [48.24 131.565 91.6153 145.845] +/Type /Annot +>> +endobj +79 0 obj +<< /Length 8225 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 793.926 Td +/F1.0 10.5 Tf +[<546865204c697374656e206f706572> 20.0195 <6174696f6e206661696c65643b206c6f6f6b20666f722074686520726561736f6e2061626f76652074686973206d65737361676520696e20746865206c6f672e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 768.33 Td +/F8.0 10.5 Tf +<43616e6e6f742061636365707420636f6e6e656374696f6e20617420706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8228 Tw + +BT +48.24 742.146 Td +/F1.0 10.5 Tf +<54686520736572766572206661696c656420746f2061636365707420616e20696e636f6d696e6720636f6e6e656374696f6e3b206c6f6f6b20666f722074686520726561736f6e2061626f76652074686973206d65737361676520696e20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 726.366 Td +/F1.0 10.5 Tf +<6c6f672e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 700.77 Td +/F8.0 10.5 Tf +<43616e6e6f74206f70656e20736f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4385 Tw + +BT +48.24 674.586 Td +/F1.0 10.5 Tf +[<54686572652077617320616e206572726f72207768696c6520616c6c6f636174696e67206120736f636b> 20.0195 <657420666f72206120636f6e6e656374696f6e3b206c6f6f6b20666f722074686520726561736f6e2061626f76652074686973>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 658.806 Td +/F1.0 10.5 Tf +<6d65737361676520696e20746865206c6f672e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 633.21 Td +/F8.0 10.5 Tf +<536574736f636b6f7074206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4385 Tw + +BT +48.24 607.026 Td +/F1.0 10.5 Tf +[<54686572652077617320616e206572726f72207768696c6520616c6c6f636174696e67206120736f636b> 20.0195 <657420666f72206120636f6e6e656374696f6e3b206c6f6f6b20666f722074686520726561736f6e2061626f76652074686973>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 591.246 Td +/F1.0 10.5 Tf +<6d65737361676520696e20746865206c6f672e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 565.65 Td +/F8.0 10.5 Tf +<43616e6e6f742062696e6420746f20706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.279 Tw + +BT +48.24 539.466 Td +/F1.0 10.5 Tf +<54686572652077617320616e206572726f72207768696c6520616c6c6f636174696e67207468652072657175657374656420706f7274206e756d62657220666f72206120636f6e6e656374696f6e3b206c6f6f6b20666f7220746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 523.686 Td +/F1.0 10.5 Tf +<726561736f6e2061626f76652074686973206d65737361676520696e20746865206c6f672e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 498.09 Td +/F8.0 10.5 Tf +<676574736f636b6e616d6528292073797374656d2063616c6c206661696c6564206f6e207468652073657276657220736f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.279 Tw + +BT +48.24 471.906 Td +/F1.0 10.5 Tf +<54686572652077617320616e206572726f72207768696c6520616c6c6f636174696e67207468652072657175657374656420706f7274206e756d62657220666f72206120636f6e6e656374696f6e3b206c6f6f6b20666f7220746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 456.126 Td +/F1.0 10.5 Tf +<726561736f6e2061626f76652074686973206d65737361676520696e20746865206c6f672e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 430.53 Td +/F8.0 10.5 Tf +<436c69656e74204964206e6f742073706563696669656420616c74686f756768206e6f74206f6e6c79203120636c69656e7420657869737473> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6569 Tw + +BT +48.24 404.346 Td +/F1.0 10.5 Tf +<53696e6365206d756c7469706c6520636f6e6e656374696f6e732061726520616c6976652c20796f75206861766520746f2073706563696679206120636c69656e74206964207768656e2073656e64696e672061206d65737361676520746f> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 388.566 Td +/F1.0 10.5 Tf +<64697374696e6775697368206265747765656e2074686520636f6e6e656374696f6e7320776865726520746865206d6573736167652068617320746f2062652073656e742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 362.97 Td +/F8.0 10.5 Tf +<5468657265206973206e6f20636f6e6e656374696f6e20616c6976652c207573652074686520274153505f5443505f436f6e6e65637427206265666f72652073656e64696e6720616e797468696e672e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 336.786 Td +/F1.0 10.5 Tf +<436f6e6e6563742068617320746f2062652073656e74206265666f72652073656e64696e672061206d6573736167652c206f7220746865207365727665722068617320746f20616363657074206120636f6e6e656374696f6e2066697273742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 311.19 Td +/F8.0 10.5 Tf +<53656e642073797374656d2063616c6c206661696c65643a205468657265206973206e6f20636c69656e74206e72203c636c69656e745f69643e20636f6e6e656374656420746f207468652054435020736572766572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 285.006 Td +/F1.0 10.5 Tf +[<412073656e64206f706572> 20.0195 <6174696f6e20697320706572666f726d656420746f2061206e6f6e2d6578697374696e6720636c69656e742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 259.41 Td +/F8.0 10.5 Tf +<53656e642073797374656d2063616c6c206661696c65643a203c616d6f756e743e20627974657320776572652073656e7420696e7374656164206f66203c616d6f756e743e203c726561736f6e3e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 233.226 Td +/F1.0 10.5 Tf +[<5468652073656e64206f706572> 20.0195 <6174696f6e206661696c65642062656361757365206f662074686520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +252.6328 233.226 Td +/F4.0 10.5 Tf +<3c726561736f6e3e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +294.6328 233.226 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 207.63 Td +/F8.0 10.5 Tf +<54686520686f7374206e616d65203c6e616d653e206973206e6f742076616c696420696e2074686520636f6e66696775726174696f6e2066696c652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 181.446 Td +/F1.0 10.5 Tf +[<54686520676976656e20686f7374206e616d6520696e2074686520436f6e6e656374202f204c697374656e204153502063616e6e6f74206265207265736f6c7665642062> 20.0195 <79207468652073797374656d2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 155.85 Td +/F8.0 10.5 Tf +<4e756d626572206f6620636c69656e74733c3e30206275742063616e6e6f742067657420666972737420636c69656e742c2070726f6772616d6d696e67206572726f72> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4684 Tw + +BT +48.24 129.666 Td +/F1.0 10.5 Tf +<4e657665722073686f756c642073686f772075702e20506c656173652073656e64206120627567207265706f727420696e636c7564696e67206c6f672066696c65732070726f6475636564207769746820616c6c20646562756767696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 113.886 Td +/F1.0 10.5 Tf +<706f73736962696c6974696573207475726e6564206f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 88.29 Td +/F8.0 10.5 Tf +<496e646578203c616d6f756e743e2065786365656473206c656e677468206f662070656572206c6973742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4684 Tw + +BT +48.24 62.106 Td +/F1.0 10.5 Tf +<4e657665722073686f756c642073686f772075702e20506c656173652073656e64206120627567207265706f727420696e636c7564696e67206c6f672066696c65732070726f6475636564207769746820616c6c20646562756767696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<38> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +80 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 79 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F8.0 76 0 R +/F4.0 39 0 R +>> +/XObject << /Stamp2 178 0 R +>> +>> +>> +endobj +81 0 obj +<< /Length 6563 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +<706f73736962696c6974696573207475726e6564206f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 769.08 Td +/F8.0 10.5 Tf +<41627374726163745f536f636b65743a3a6765745f706565723a20436c69656e74203c636c69656e745f69643e20646f6573206e6f74206578697374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4684 Tw + +BT +48.24 742.896 Td +/F1.0 10.5 Tf +<4e657665722073686f756c642073686f772075702e20506c656173652073656e64206120627567207265706f727420696e636c7564696e67206c6f672066696c65732070726f6475636564207769746820616c6c20646562756767696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 727.116 Td +/F1.0 10.5 Tf +<706f73736962696c6974696573207475726e6564206f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 701.52 Td +/F8.0 10.5 Tf +<496e76616c696420436c69656e7420496420697320676976656e3a203c636c69656e745f69643e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 675.336 Td +/F1.0 10.5 Tf +<506c656173652073656e64206120627567207265706f727420696e636c7564696e67206c6f672066696c65732070726f6475636564207769746820616c6c20646562756767696e6720706f73736962696c6974696573207475726e6564206f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 649.74 Td +/F8.0 10.5 Tf +<50656572203c636c69656e745f69643e20646f6573206e6f742065786973742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4684 Tw + +BT +48.24 623.556 Td +/F1.0 10.5 Tf +<4e657665722073686f756c642073686f772075702e20506c656173652073656e64206120627567207265706f727420696e636c7564696e67206c6f672066696c65732070726f6475636564207769746820616c6c20646562756767696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 607.776 Td +/F1.0 10.5 Tf +<706f73736962696c6974696573207475726e6564206f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 563.664 Td +/F2.0 22 Tf +[<41> 20.0195 <64646974696f6e616c204572726f72204d6573736167657320696e20636173652053534c>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 533.744 Td +/F2.0 22 Tf +<436f6e6e656374696f6e73204172652055736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 506.74 Td +/F8.0 10.5 Tf +<4e6f2053534c2043545820666f756e642c2053534c206e6f7420696e697469616c697a6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 480.556 Td +/F1.0 10.5 Tf +<4e657665722073686f756c642073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 454.96 Td +/F8.0 10.5 Tf +<4372656174696f6e206f662053534c206f626a656374206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 428.776 Td +/F1.0 10.5 Tf +<4e657665722073686f756c642073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 403.18 Td +/F8.0 10.5 Tf +<42696e64696e67206f662053534c206f626a65637420746f20736f636b6574206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 376.996 Td +/F1.0 10.5 Tf +[<5468652053534c206f626a65637420636f756c64206e6f7420626520626f756e6420746f207468652054> 20.0195 <435020736f636b> 20.0195 <6574>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 351.4 Td +/F8.0 10.5 Tf +<53534c206572726f72206f63637572726564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7782 Tw + +BT +48.24 325.216 Td +/F1.0 10.5 Tf +[<412067656e6572> 20.0195 <616c2053534c206572726f72206f636375727265642e20436865636b20746865207465737420706f7274206c6f677320746f207365652070726576696f7573206572726f72206d657373616765732073686f77696e6720746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 309.436 Td +/F1.0 10.5 Tf +<7265616c2070726f626c656d2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 283.84 Td +/F8.0 10.5 Tf +<3c6e616d653e206973206e6f7420646566696e656420696e2074686520636f6e66696775726174696f6e2066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 257.656 Td +/F1.0 10.5 Tf +[<546865207465737420706f727420706172> 20.0195 <616d657465722077697468203c6e616d653e206973206d616e6461746f7279> 89.8438 <2c20627574206973206e6f7420646566696e656420696e2074686520636f6e6669677572> 20.0195 <6174696f6e2066696c652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 232.06 Td +/F8.0 10.5 Tf +<4e6f2053534c206461746120617661696c61626c6520666f7220636c69656e74203c636c69656e745f69643e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 205.876 Td +/F1.0 10.5 Tf +<506c656173652073656e64206120627567207265706f727420696e636c7564696e67206c6f672066696c65732070726f6475636564207769746820616c6c20646562756767696e6720706f73736962696c6974696573207475726e6564206f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 180.28 Td +/F8.0 10.5 Tf +<436f756c64206e6f7420726561642066726f6d202f6465762f7572616e646f6d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 154.096 Td +/F1.0 10.5 Tf +[<5468652072656164206f706572> 20.0195 <6174696f6e206f6e2074686520696e7374616c6c65642072> 20.0195 <616e646f6d20646576696365206973206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 128.5 Td +/F8.0 10.5 Tf +<436f756c64206e6f7420726561642066726f6d202f6465762f72616e646f6d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 102.316 Td +/F1.0 10.5 Tf +[<5468652072656164206f706572> 20.0195 <6174696f6e206f6e2074686520696e7374616c6c65642072> 20.0195 <616e646f6d20646576696365206973206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 76.72 Td +/F8.0 10.5 Tf +<436f756c64206e6f742073656564207468652050736575646f2052616e646f6d204e756d6265722047656e657261746f72207769746820656e6f75676820646174612e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<39> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +82 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 81 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F8.0 76 0 R +/F2.0 17 0 R +>> +/XObject << /Stamp1 177 0 R +>> +>> +>> +endobj +83 0 obj +[82 0 R /XYZ 0 591.96 null] +endobj +84 0 obj +<< /Length 9395 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +0.2348 Tw + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +[<4173206e6f2072> 20.0195 <616e646f6d206465766963657320666f756e642c206120776f726b61726f756e64206973207573656420746f2073656564207468652053534c2050524e472e20436f6e73696465722075706772> 20.0195 <6164696e6720796f7572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 778.896 Td +/F1.0 10.5 Tf +[<73797374656d207769746820746865206c617465737420617661696c61626c6520706174636865732e2048656c704465736b2073686f756c6420636f727265637420746869732077697468696e2061206461> 20.0195 <79> 89.8438 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 753.3 Td +/F8.0 10.5 Tf +<5468652073656564696e67206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 727.116 Td +/F1.0 10.5 Tf +<506c656173652073656e64206120627567207265706f727420696e636c7564696e67206c6f672066696c65732070726f6475636564207769746820616c6c20646562756767696e6720706f73736962696c6974696573207475726e6564206f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 701.52 Td +/F8.0 10.5 Tf +<53534c206d6574686f64206372656174696f6e206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 675.336 Td +/F1.0 10.5 Tf +<546865206372656174696f6e206f66207468652053534c206d6574686f64206f626a656374206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 649.74 Td +/F8.0 10.5 Tf +<53534c20636f6e74657874206372656174696f6e206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 623.556 Td +/F1.0 10.5 Tf +<546865206372656174696f6e206f66207468652053534c20636f6e74657874206f626a656374206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 597.96 Td +/F8.0 10.5 Tf +<43616e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +63.99 597.96 Td +/F7.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +67.014 597.96 Td +/F8.0 10.5 Tf +<7420726561642063657274696669636174652066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 571.776 Td +/F1.0 10.5 Tf +<546865207370656369666965642063657274696669636174652066696c6520636f756c64206e6f7420626520726561642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 546.18 Td +/F8.0 10.5 Tf +<43616e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +63.99 546.18 Td +/F7.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +67.014 546.18 Td +/F8.0 10.5 Tf +<742072656164206b65792066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 519.996 Td +/F1.0 10.5 Tf +[<546865207370656369666965642070726976617465206b> 20.0195 <65792066696c6520636f756c64206e6f7420626520726561642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 494.4 Td +/F8.0 10.5 Tf +<43616e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +63.99 494.4 Td +/F7.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +67.014 494.4 Td +/F8.0 10.5 Tf +<742072656164207472757374656443416c6973742066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 468.216 Td +/F1.0 10.5 Tf +<54686520737065636966696564206365727469666963617465206f66207468652074727573746564204341732066696c6520636f756c64206e6f7420626520726561642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 442.62 Td +/F8.0 10.5 Tf +<436970686572206c697374207265737472696374696f6e206661696c656420666f72203c6e616d653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 416.436 Td +/F1.0 10.5 Tf +<5468652073706563696669656420636970686572207265737472696374696f6e206c69737420636f756c64206e6f74206265207365742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 390.84 Td +/F8.0 10.5 Tf +<556e6b6e6f776e2053534c206572726f7220636f64653a203c6572726f7220636f64653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 364.656 Td +/F1.0 10.5 Tf +<506c656173652073656e64206120627567207265706f727420696e636c7564696e67206c6f672066696c65732070726f6475636564207769746820616c6c20646562756767696e6720706f73736962696c6974696573207475726e6564206f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 315.204 Td +/F2.0 27 Tf +[<57> 49.8047 <61726e696e67204d65737361676573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 284.556 Td +/F1.0 10.5 Tf +[<54686520666f6c6c6f77696e67206c6973742073686f77732074686520706f737369626c65207761726e696e67206d657373616765732070726f64756365642062> 20.0195 <7920746865207465737420706f72743a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 258.96 Td +/F8.0 10.5 Tf +<485454506d73675f5f50543a3a7365745f706172616d6574657228293a20556e737570706f72746564205465737420506f727420706172616d657465723a203c6e616d653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.488 Tw + +BT +48.24 232.776 Td +/F1.0 10.5 Tf +[<5468652073706563696669656420706172> 20.0195 <616d65746572206973206e6f74207265636f676e697a65642062> 20.0195 <7920746865207465737420706f72742e20436865636b20>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +0.488 Tw + +BT +378.7925 232.776 Td +/F1.0 10.5 Tf +[<485454502054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +48.24 216.996 Td +/F1.0 10.5 Tf +[<52> 20.0195 <544520436f6e6669677572> 20.0195 <6174696f6e2046696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +161.0306 216.996 Td +/F1.0 10.5 Tf +[<20666f7220706172> 20.0195 <616d65746572206e616d65732e2054686520706172> 20.0195 <616d65746572206e616d6573206861766520746f20626520676976656e20636173652073656e7369746976652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.0231 Tw + +BT +48.24 191.4 Td +/F8.0 10.5 Tf +<3c706f7274206e616d653e3a20746f20737769746368206f6e2048545450207465737420706f727420646562756767696e672c2073657420746865202e3c706f7274206e616d653e2e687474705f646562756767696e67203a3d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 178.455 Td +/F8.0 10.5 Tf +<6060796573272720696e2074686520706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +147.99 178.455 Td +/F7.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +151.014 178.455 Td +/F8.0 10.5 Tf +<7320706172616d65746572732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1513 Tw + +BT +48.24 152.271 Td +/F1.0 10.5 Tf +<48545450207465737420706f72742070726f64756365732064657461696c6564206c6f677320696620796f75207370656369667920> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1513 Tw + +BT +307.4925 152.271 Td +/F4.0 10.5 Tf +<746865687474705f646562756767696e67203a3d202279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1513 Tw + +BT +444.2952 152.271 Td +/F1.0 10.5 Tf +[<20696e2074686520636f6e6669677572> 20.0195 <6174696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 136.491 Td +/F1.0 10.5 Tf +<66696c652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 110.895 Td +/F8.0 10.5 Tf +<4572726f72207768656e2072656164696e672074686520726563656976656420544350205044552e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6247 Tw + +BT +48.24 84.711 Td +/F1.0 10.5 Tf +<54686572652077617320616e206572726f72207768696c652072656164696e6720696e636f6d696e6720646174612066726f6d2074686520636f6e6e656374696f6e2e2054686520636f6e6e656374696f6e2067657473> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.906 Tw + +BT +48.24 68.931 Td +/F1.0 10.5 Tf +[<646973636f6e6e656374656420696d6d6564696174656c79> 89.8438 <2c20746865207465737420697320696e666f726d65642061626f75742074686520646973636f6e6e6563742062> 20.0195 <79206120436c6f736520415350207769746820746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 53.151 Td +/F1.0 10.5 Tf +<72656c6576616e7420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +92.844 53.151 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +140.094 53.151 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3130> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +85 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 84 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F8.0 76 0 R +/F7.0 57 0 R +/F2.0 17 0 R +/F4.0 39 0 R +>> +/XObject << /Stamp2 178 0 R +>> +>> +/Annots [87 0 R 88 0 R] +>> +endobj +86 0 obj +[85 0 R /XYZ 0 348.84 null] +endobj +87 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (2_the_test_port.pdf#HTTP_test_port_parameters_in_the_RTE_configuration_file) +>> +/Subtype /Link +/Rect [378.7925 229.71 547.04 243.99] +/Type /Annot +>> +endobj +88 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (2_the_test_port.pdf#HTTP_test_port_parameters_in_the_RTE_configuration_file) +>> +/Subtype /Link +/Rect [48.24 213.93 161.0306 228.21] +/Type /Annot +>> +endobj +89 0 obj +<< /Length 16197 +>> +stream +q +/DeviceRGB cs +0.6941 0.1294 0.2745 scn +/DeviceRGB CS +0.6941 0.1294 0.2745 SCN + +BT +48.24 796.11 Td +/F8.0 10.5 Tf +<43616e6e6f74206f70656e20736f636b6574207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a203c726561736f6e3e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 769.926 Td +/F1.0 10.5 Tf +[<546865204c697374656e206f706572> 20.0195 <6174696f6e206661696c65642062656361757365206f6620>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +241.0933 769.926 Td +/F4.0 10.5 Tf +<3c726561736f6e3e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +283.0933 769.926 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 744.33 Td +/F8.0 10.5 Tf +<536574736f636b6f7074206661696c6564207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a203c726561736f6e3e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3898 Tw + +BT +48.24 718.146 Td +/F1.0 10.5 Tf +[<54686572652077617320616e206572726f72207768696c6520616c6c6f636174696e67206120736f636b> 20.0195 <65742062656361757365206f6620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.3898 Tw + +BT +341.5427 718.146 Td +/F4.0 10.5 Tf +<3c726561736f6e3e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3898 Tw + +BT +383.5427 718.146 Td +/F1.0 10.5 Tf +<2e20546865207465737420697320696e666f726d65642061626f757420746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 702.366 Td +/F1.0 10.5 Tf +[<6661696c7572652062> 20.0195 <7920726563656976696e67206120>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +157.3138 702.366 Td +/F4.0 10.5 Tf +<4c697374656e5f726573756c74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +225.5638 702.366 Td +/F1.0 10.5 Tf +<20415350207769746820706f72746e756d626572203d20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +348.6973 702.366 Td +/F5.0 10.5 Tf +<222d3122> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +369.6973 702.366 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 676.77 Td +/F8.0 10.5 Tf +<43616e6e6f742062696e6420746f20706f7274207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a203c726561736f6e3e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1043 Tw + +BT +48.24 650.586 Td +/F1.0 10.5 Tf +<54686572652077617320616e206572726f72207768696c652062696e64696e6720746f207468652072657175657374656420706f72742062656361757365206f6620> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.1043 Tw + +BT +395.6228 650.586 Td +/F4.0 10.5 Tf +<3c726561736f6e3e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1043 Tw + +BT +437.6228 650.586 Td +/F1.0 10.5 Tf +<2e20546865207465737420697320696e666f726d6564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 634.806 Td +/F1.0 10.5 Tf +[<61626f757420746865206661696c7572652062> 20.0195 <7920726563656976696e67206120>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +207.4723 634.806 Td +/F4.0 10.5 Tf +<4c697374656e5f726573756c74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +275.7223 634.806 Td +/F1.0 10.5 Tf +<20415350207769746820706f72746e756d626572203d20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +398.8558 634.806 Td +/F5.0 10.5 Tf +<222d3122> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +419.8558 634.806 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 609.21 Td +/F8.0 10.5 Tf +<43616e6e6f74206c697374656e20617420706f7274207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a203c726561736f6e3e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6522 Tw + +BT +48.24 583.026 Td +/F1.0 10.5 Tf +<54686572652077617320616e206572726f72207768696c6520747279696e6720746f206c697374656e20666f7220696e636f6d696e6720636f6e6e656374696f6e732062656361757365206f6620> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.6522 Tw + +BT +447.7695 583.026 Td +/F4.0 10.5 Tf +<3c726561736f6e3e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6522 Tw + +BT +489.7695 583.026 Td +/F1.0 10.5 Tf +<2e205468652074657374206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 567.246 Td +/F1.0 10.5 Tf +[<696e666f726d65642061626f757420746865206661696c7572652062> 20.0195 <7920726563656976696e67206120>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +257.1583 567.246 Td +/F4.0 10.5 Tf +<4c697374656e5f726573756c74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +325.4083 567.246 Td +/F1.0 10.5 Tf +<20415350207769746820706f72746e756d626572203d20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +448.5418 567.246 Td +/F5.0 10.5 Tf +<222d3122> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +469.5418 567.246 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.8786 Tw + +BT +48.24 541.65 Td +/F8.0 10.5 Tf +<676574736f636b6e616d6528292073797374656d2063616c6c206661696c6564206f6e207468652073657276657220736f636b6574207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 528.705 Td +/F8.0 10.5 Tf +<3c726561736f6e3e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0745 Tw + +BT +48.24 502.521 Td +/F1.0 10.5 Tf +<54686572652077617320616e206572726f72207768696c6520747279696e6720746f206c697374656e206f6e207468652073706563696669656420706f72742062656361757365206f6620> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.0745 Tw + +BT +443.5024 502.521 Td +/F4.0 10.5 Tf +<3c726561736f6e3e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0745 Tw + +BT +485.5024 502.521 Td +/F1.0 10.5 Tf +<2e205468652074657374206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 486.741 Td +/F1.0 10.5 Tf +[<696e666f726d65642061626f757420746865206661696c7572652062> 20.0195 <7920726563656976696e67206120>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +257.1583 486.741 Td +/F4.0 10.5 Tf +<4c697374656e5f726573756c74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +325.4083 486.741 Td +/F1.0 10.5 Tf +<20415350207769746820706f72746e756d626572203d20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +448.5418 486.741 Td +/F5.0 10.5 Tf +<222d3122> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +469.5418 486.741 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 461.145 Td +/F8.0 10.5 Tf +<43616e6e6f74206f70656e20736f636b6574207768656e20747279696e6720746f206f70656e20636c69656e7420636f6e6e656374696f6e3a203c726561736f6e3e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.3571 Tw + +BT +48.24 434.961 Td +/F1.0 10.5 Tf +[<54686572652077617320616e206572726f72207768696c6520616c6c6f636174696e67206120736f636b> 20.0195 <657420666f72206120636f6e6e656374696f6e2062656361757365206f6620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.3571 Tw + +BT +442.6547 434.961 Td +/F4.0 10.5 Tf +<3c726561736f6e3e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.3571 Tw + +BT +484.6547 434.961 Td +/F1.0 10.5 Tf +<2e205468652074657374206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 419.181 Td +/F1.0 10.5 Tf +[<696e666f726d65642061626f757420746865206661696c7572652062> 20.0195 <7920726563656976696e67206120>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +257.1583 419.181 Td +/F4.0 10.5 Tf +<436f6e6e6563745f726573756c74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +330.6583 419.181 Td +/F1.0 10.5 Tf +<20415350207769746820636c69656e745f6964203d20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +434.7658 419.181 Td +/F5.0 10.5 Tf +<222d3122> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +455.7658 419.181 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 393.585 Td +/F8.0 10.5 Tf +<536574736f636b6f7074206661696c6564207768656e20747279696e6720746f206f70656e20636c69656e7420636f6e6e656374696f6e3a203c726561736f6e3e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.3571 Tw + +BT +48.24 367.401 Td +/F1.0 10.5 Tf +[<54686572652077617320616e206572726f72207768696c6520616c6c6f636174696e67206120736f636b> 20.0195 <657420666f72206120636f6e6e656374696f6e2062656361757365206f6620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.3571 Tw + +BT +442.6547 367.401 Td +/F4.0 10.5 Tf +<3c726561736f6e3e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.3571 Tw + +BT +484.6547 367.401 Td +/F1.0 10.5 Tf +<2e205468652074657374206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 351.621 Td +/F1.0 10.5 Tf +[<696e666f726d65642061626f757420746865206661696c7572652062> 20.0195 <7920726563656976696e67206120>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +257.1583 351.621 Td +/F4.0 10.5 Tf +<436f6e6e6563745f726573756c74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +330.6583 351.621 Td +/F1.0 10.5 Tf +<20415350207769746820636c69656e745f6964203d20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +434.7658 351.621 Td +/F5.0 10.5 Tf +<222d3122> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +455.7658 351.621 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 326.025 Td +/F8.0 10.5 Tf +<43616e6e6f742062696e6420746f20706f7274207768656e20747279696e6720746f206f70656e20636c69656e7420636f6e6e656374696f6e3a203c726561736f6e3e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1265 Tw + +BT +48.24 299.841 Td +/F1.0 10.5 Tf +[<54686572652077617320616e206572726f72207768696c652062696e64696e6720746f207468652072657175657374656420706f727420746f2074686520736f636b> 20.0195 <65742062656361757365206f6620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1265 Tw + +BT +449.3466 299.841 Td +/F4.0 10.5 Tf +<3c726561736f6e3e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1265 Tw + +BT +491.3466 299.841 Td +/F1.0 10.5 Tf +<2e205468652074657374206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 284.061 Td +/F1.0 10.5 Tf +[<696e666f726d65642061626f757420746865206661696c7572652062> 20.0195 <7920726563656976696e67206120>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +257.1583 284.061 Td +/F4.0 10.5 Tf +<436f6e6e6563745f726573756c74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +330.6583 284.061 Td +/F1.0 10.5 Tf +<20415350207769746820636c69656e745f6964203d20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +434.7658 284.061 Td +/F5.0 10.5 Tf +<222d3122> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +455.7658 284.061 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.4269 Tw + +BT +48.24 258.465 Td +/F8.0 10.5 Tf +<636f6e6e65637428292072657475726e6564206572726f7220636f6465204541444452494e5553452e205065726861707320746869732069732061206b65726e656c206275672e20547279696e6720746f20636f6e6e656374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 245.52 Td +/F8.0 10.5 Tf +<616761696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7008 Tw + +BT +48.24 219.336 Td +/F1.0 10.5 Tf +<49662074686520636f6e6e6563742073797374656d2063616c6c206661696c732062656361757365206f662074686520606164647265737320697320616c726561647920696e2075736527206572726f722c20746865207465737420706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 203.556 Td +/F1.0 10.5 Tf +[<6175746f6d61746963616c6c7920646f6573203136207265747279> 89.8438 <2e204d65616e7768696c652074686973207761726e696e67206973206c6f676765642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 177.96 Td +/F8.0 10.5 Tf +<43616e6e6f7420636f6e6e65637420746f20736572766572207768656e20747279696e6720746f206f70656e20636c69656e7420636f6e6e656374696f6e3a203c726561736f6e3e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1373 Tw + +BT +48.24 151.776 Td +/F1.0 10.5 Tf +[<54686520436f6e6e656374206f706572> 20.0195 <6174696f6e206661696c65643b206c6f6f6b20666f722074686520726561736f6e2061626f76652074686973206d65737361676520696e20746865206c6f672e204120>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.1373 Tw + +BT +473.54 151.776 Td +/F4.0 10.5 Tf +<436f6e6e6563745f726573756c74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1373 Tw + +BT +547.04 151.776 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 135.996 Td +/F1.0 10.5 Tf +<7769746820> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +73.7025 135.996 Td +/F4.0 10.5 Tf +<636c69656e745f6964203d202d31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +147.2025 135.996 Td +/F1.0 10.5 Tf +<2077696c6c2062652072657475726e656420746f2074686520746573742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 110.4 Td +/F8.0 10.5 Tf +<41627374726163745f536f636b65743a3a72656d6f76655f636c69656e743a203c636c69656e745f69643e2069732074686520736572766572206c697374656e696e6720706f72742c2063616e206e6f742062652072656d6f76656421> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5293 Tw + +BT +48.24 84.216 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.5293 Tw + +BT +120.0212 84.216 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5293 Tw + +BT +167.2712 84.216 Td +/F1.0 10.5 Tf +<20696e2074686520436c6f7365204153502062656c6f6e677320746f2074686520736572766572206c697374656e696e6720706f72742e2057726f6e6720> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.5293 Tw + +BT +487.4562 84.216 Td +/F4.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5293 Tw + +BT +534.7062 84.216 Td +/F1.0 10.5 Tf +<206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 68.436 Td +/F1.0 10.5 Tf +<7370656369666965642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3131> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +90 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 89 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F8.0 76 0 R +/F1.0 8 0 R +/F4.0 39 0 R +/F5.0 43 0 R +>> +/XObject << /Stamp1 177 0 R +>> +>> +>> +endobj +91 0 obj +<< /Length 8785 +>> +stream +q +/DeviceRGB cs +0.6941 0.1294 0.2745 scn +/DeviceRGB CS +0.6941 0.1294 0.2745 SCN + +BT +48.24 796.86 Td +/F8.0 10.5 Tf +<436c69656e74203c636c69656e745f69643e20686173206e6f74206265656e2072656d6f7665642c2070726f6772616d6d696e67206572726f72> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 770.676 Td +/F1.0 10.5 Tf +<506c656173652073656e64206120627567207265706f727420696e636c7564696e67206c6f672066696c65732070726f6475636564207769746820616c6c20646562756767696e6720706f73736962696c6974696573207475726e6564206f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 745.08 Td +/F8.0 10.5 Tf +<5761726e696e673a207261636520636f6e646974696f6e207768696c652073657474696e672063757272656e7420636c69656e74206f626a65637420706f696e746572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +399.99 745.08 Td +/F4.0 10.5 Tf +<60> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4662 Tw + +BT +48.24 718.896 Td +/F1.0 10.5 Tf +[<546865726520617265206d756c7469706c6520696e7374616e636573206f662074686520706f72742072756e6e696e6720747279696e6720746f20616363657373206120636f6d6d6f6e207265736f7572636520636f6e63757272656e746c79> 89.8438 <2e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 703.116 Td +/F1.0 10.5 Tf +[<54686973206d61> 20.0195 <792063617573652070726f626c656d2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 677.52 Td +/F8.0 10.5 Tf +<436f6e6e656374696f6e2066726f6d20636c69656e74203c636c69656e745f69643e2069732072656675736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 651.336 Td +/F1.0 10.5 Tf +<54686520636f6e6e656374696f6e2066726f6d206120636c69656e74206973207265667573656420696e20746865207365727665722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 625.74 Td +/F8.0 10.5 Tf +<436f6e6e656374696f6e20746f207365727665722069732072656675736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 599.556 Td +/F1.0 10.5 Tf +[<54686520636f6e6e656374696f6e2066726f6d2074686520636c69656e7420697320726566757365642062> 20.0195 <7920746865207365727665722e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 573.96 Td +/F8.0 10.5 Tf +<53657276657220646964206e6f742073656e6420612073657373696f6e204944> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 547.776 Td +/F1.0 10.5 Tf +[<54686520636f6e6e656374696f6e2066726f6d2074686520636c69656e7420697320726566757365642062> 20.0195 <7920746865207365727665722e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 522.18 Td +/F8.0 10.5 Tf +<566572696669636174696f6e206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 495.996 Td +/F1.0 10.5 Tf +<54686520766572696669636174696f6e206f6620746865206f746865722073696465206973206661696c65642e2054686520636f6e6e656374696f6e2077696c6c206265207368757420646f776e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 470.4 Td +/F8.0 10.5 Tf +<53534c206f626a656374206e6f7420666f756e6420666f7220636c69656e74203c636c69656e745f69643e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 444.216 Td +/F1.0 10.5 Tf +<506c656173652073656e64206120627567207265706f727420696e636c7564696e67206c6f672066696c65732070726f6475636564207769746820616c6c20646562756767696e6720706f73736962696c6974696573207475726e6564206f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 418.62 Td +/F8.0 10.5 Tf +<53534c5f536f636b65743a3a726563656976655f6d6573736167655f6f6e5f66643a2053534c20636f6e6e656374696f6e2077617320696e74657272757074656420627920746865206f746865722073696465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7244 Tw + +BT +48.24 392.436 Td +/F1.0 10.5 Tf +<54686520544c532f53534c20636f6e6e656374696f6e20686173206265656e20636c6f7365642e204966207468652070726f746f636f6c2076657273696f6e2069732053534c20332e30206f7220544c5320312e302c2074686973207761726e696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1929 Tw + +BT +48.24 376.656 Td +/F1.0 10.5 Tf +<61707065617273206f6e6c79206966206120636c6f7375726520616c65727420686173206f6363757272656420696e207468652070726f746f636f6c2c20692e652eca69662074686520636f6e6e656374696f6e20686173206265656e20636c6f736564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1041 Tw + +BT +48.24 360.876 Td +/F1.0 10.5 Tf +[<636c65616e6c79> 89.8438 <2e204e6f7465207468617420696e2074686973206361736520697420646f6573206e6f74206e65636573736172696c7920696e64696361746520746861742074686520756e6465726c79696e67207472> 20.0195 <616e73706f727420686173206265656e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 345.096 Td +/F1.0 10.5 Tf +<636c6f7365642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 319.5 Td +/F8.0 10.5 Tf +<53534c5f536f636b65743a3a73656e645f6d6573736167655f6f6e5f66643a2053534c20636f6e6e656374696f6e2077617320696e74657272757074656420627920746865206f746865722073696465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 293.316 Td +/F1.0 10.5 Tf +<5365652061626f76652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 267.72 Td +/F8.0 10.5 Tf +<4f74686572207369646520646f6573206e6f7420686176652063657274696669636174652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 241.536 Td +/F1.0 10.5 Tf +<546865206f746865722073696465206f66207468652053534c20636f6e6e656374696f6e20646f6573206e6f74206861766520612063657274696669636174652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +10.505 Tw + +BT +48.24 215.94 Td +/F8.0 10.5 Tf +<536f6c61726973207061746368657320746f2070726f766964652072616e646f6d2067656e65726174696f6e206465766963657320617265206e6f7420696e7374616c6c65642e20536565> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +2.105 Tw + +BT +48.24 202.995 Td +/F8.0 10.5 Tf +<687474703a2f2f7777772e6f70656e73736c2e6f72672f> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +2.105 Tw + +BT +168.99 202.995 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +2.105 Tw + +BT +168.99 202.995 Td +/F8.0 10.5 Tf +<737570706f72742f> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +2.105 Tw + +BT +210.99 202.995 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +2.105 Tw + +BT +210.99 202.995 Td +/F8.0 10.5 Tf +<6661712e68746d6c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.105 Tw + +BT +252.99 202.995 Td +/F8.0 10.5 Tf +<202257687920646f2049206765742061272750524e47206e6f742073656564656422206572726f72206d6573736167653f222041> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 190.05 Td +/F8.0 10.5 Tf +<776f726b61726f756e642077696c6c20626520757365642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3944 Tw + +BT +48.24 163.866 Td +/F1.0 10.5 Tf +[<536f6c61726973207061746368657320746f2070726f766964652072> 20.0195 <616e646f6d2067656e6572> 20.0195 <6174696f6e206465766963657320617265206e6f7420696e7374616c6c65642e204120776f726b61726f756e642077696c6c2062652075736564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 148.086 Td +/F1.0 10.5 Tf +<746f2073656564207468652050524e472e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 122.49 Td +/F8.0 10.5 Tf +<50726976617465206b657920646f6573206e6f74206d6174636820746865206365727469666963617465207075626c6963206b6579> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +326.49 122.49 Td +/F4.0 10.5 Tf +<60> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 96.306 Td +/F1.0 10.5 Tf +[<5468652070726976617465206b> 20.0195 <65792073706563696669656420666f7220746865207465737420706f727420646f6573206e6f74206d61746368207769746820746865207075626c6963206b> 20.0195 <6579> 89.8438 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3132> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +92 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 91 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F8.0 76 0 R +/F1.0 8 0 R +/F4.0 39 0 R +>> +/XObject << /Stamp2 178 0 R +>> +>> +/Annots [93 0 R 94 0 R 95 0 R 96 0 R 97 0 R] +>> +endobj +93 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (http://www.openssl.org/support/faq.html) +>> +/Subtype /Link +/Rect [48.24 201.525 168.99 212.025] +/Type /Annot +>> +endobj +94 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (http://www.openssl.org/support/faq.html) +>> +/Subtype /Link +/Rect [168.99 201.525 168.99 212.025] +/Type /Annot +>> +endobj +95 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (http://www.openssl.org/support/faq.html) +>> +/Subtype /Link +/Rect [168.99 201.525 210.99 212.025] +/Type /Annot +>> +endobj +96 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (http://www.openssl.org/support/faq.html) +>> +/Subtype /Link +/Rect [210.99 201.525 210.99 212.025] +/Type /Annot +>> +endobj +97 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (http://www.openssl.org/support/faq.html) +>> +/Subtype /Link +/Rect [210.99 201.525 252.99 212.025] +/Type /Annot +>> +endobj +98 0 obj +<< /Length 10709 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 777.054 Td +/F2.0 27 Tf +<4578616d706c6573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 730.074 Td +/F2.0 22 Tf +[<436f6e6669677572> 20.0195 <6174696f6e2046696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 700.886 Td +/F1.0 10.5 Tf +[<416e206578616d706c652052> 20.0195 <544520636f6e6669677572> 20.0195 <6174696f6e2066696c6520697320696e636c7564656420696e20746865202764656d6f27206469726563746f7279206f6620746865207465737420706f72742072656c656173652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 656.774 Td +/F2.0 22 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8756 Tw + +BT +48.24 627.586 Td +/F1.0 10.5 Tf +[<496e20746869732073656374696f6e20746865206d6f737420696d706f7274616e7420706172> 20.0195 <616d657465727320617265206c697374656420696e2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8756 Tw + +BT +370.5295 627.586 Td +/F3.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8756 Tw + +BT +412.2668 627.586 Td +/F1.0 10.5 Tf +<2e2054686520666f6c6c6f77696e6720676976657320736f6d65> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 611.806 Td +/F1.0 10.5 Tf +<64657461696c2061626f7574207468656d3a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 584.026 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 586.21 Td +/F4.0 10.5 Tf +<4f50454e53534c5f444952203d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5612 Tw + +BT +66.24 560.026 Td +/F1.0 10.5 Tf +[<53706563696669657320746865204f70656e53534c20696e7374616c6c6174696f6e206469726563746f7279> 89.8438 <2e2049742068617320746f20636f6e7461696e2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5612 Tw + +BT +396.2725 560.026 Td +/F3.0 10.5 Tf +<6c69622f6c696273736c2e61> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5612 Tw + +BT +445.486 560.026 Td +/F1.0 10.5 Tf +<2066696c6520616e642074686520696e636c756465> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.0604 Tw + +BT +66.24 544.246 Td +/F1.0 10.5 Tf +[<6469726563746f7279> 89.8438 <2e204974206973206e6f74206e6565646564206966204f70656e53534c20697320696e7374616c6c65642062> 20.0195 <7920726f6f7420696e207468652064656661756c74206c6f636174696f6e2e204974206973>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.6043 Tw + +BT +66.24 528.466 Td +/F1.0 10.5 Tf +[<7265636f6d6d656e64656420746f206368616e67652074686520616c72656164792d70726573656e74204f50454e53534c5f44495220656e747279> 89.8438 <2c20776869636820697320696e636c756465642062> 20.0195 <7920746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 512.686 Td +/F3.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +107.9773 512.686 Td +/F1.0 10.5 Tf +[<2067656e6572> 20.0195 <6174696f6e2070726f636573732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 484.906 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 487.09 Td +/F4.0 10.5 Tf +<435050464c414753203d202d442428504c4154464f524d29202d4924285454434e335f444952292f696e636c756465202d4441535f5553455f53534c2d4924284f50454e53534c5f444952292f696e636c756465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0314 Tw + +BT +66.24 460.906 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.0314 Tw + +BT +88.6914 460.906 Td +/F4.0 10.5 Tf +<4441535f5553455f53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0314 Tw + +BT +146.4414 460.906 Td +/F1.0 10.5 Tf +<2073776974636820616374697661746573207468652053534c2d737065636966696320636f646520696e20746865207465737420706f72742e2049662074686520737769746368206973206d697373696e672c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.079 Tw + +BT +66.24 445.126 Td +/F1.0 10.5 Tf +[<53534c2066756e6374696f6e616c6974792077696c6c206e6f7420626520617661696c61626c652c20616e6420746865207465737420706f72742077696c6c2067656e6572> 20.0195 <6174652064796e616d696320746573742063617365206572726f72>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 429.346 Td +/F1.0 10.5 Tf +[<7768656e20636f6e6e656374696e67206f72206c697374656e696e67207769746820706172> 20.0195 <616d6574657220696e636c7564696e6720>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +345.4978 429.346 Td +/F4.0 10.5 Tf +<7573655f73736c3d74727565> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +408.4978 429.346 Td +/F1.0 10.5 Tf +<2073657474696e672e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.53 Tw + +BT +66.24 401.566 Td +/F1.0 10.5 Tf +<5468697320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.53 Tw + +BT +92.6575 401.566 Td +/F4.0 10.5 Tf +<2d4924284f50454e53534c5f444952292f696e636c756465> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.53 Tw + +BT +218.6575 401.566 Td +/F1.0 10.5 Tf +<207377697463682074656c6c732074686520432b2b20636f6d70696c657220776865726520746f206c6f6f6b20666f7220746865204f70656e53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 385.786 Td +/F1.0 10.5 Tf +[<6865616465722066696c65732e204974206973206e6f74206e6565646564206966204f70656e53534c20697320696e7374616c6c65642062> 20.0195 <7920726f6f7420696e207468652064656661756c74206c6f636174696f6e2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 358.006 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 360.19 Td +/F4.0 10.5 Tf +<5454434e335f4d4f44554c4553203d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 334.006 Td +/F1.0 10.5 Tf +[<546865206c697374206f66205454> 20.0195 <434e2d33206d6f64756c6573206e65656465642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 306.226 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 308.41 Td +/F4.0 10.5 Tf +<555345525f534f5552434553203d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 282.226 Td +/F1.0 10.5 Tf +<546865206c697374206f66206f746865722065787465726e616c20432b2b20736f757263652066696c65732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 254.446 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 256.63 Td +/F4.0 10.5 Tf +<2428544152474554293a2024284f424a4543545329> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +74.954 236.446 Td +/F1.1 10.5 Tf +<21> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +84.24 238.63 Td +/F4.0 10.5 Tf +<2428435858292024284c44464c41475329202d6f2024402024284f424a4543545329202d4c24285454434e335f444952292f6c6962202d6c24285454434e335f4c494229205c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +74.954 218.446 Td +/F1.1 10.5 Tf +<21> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +84.24 220.63 Td +/F4.0 10.5 Tf +<2d4c24284f50454e53534c5f444952292f6c696220> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +194.49 220.63 Td +/F7.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +199.446 220.63 Td +/F4.0 10.5 Tf +<6c73736c202d6c63727970746f2024282428504c4154464f524d295f4c49425329> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5252 Tw + +BT +84.24 194.446 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5252 Tw + +BT +106.1852 194.446 Td +/F7.0 10.5 Tf + Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5252 Tw + +BT +111.1412 194.446 Td +/F4.0 10.5 Tf +<4c24284f50454e53534c5f444952292f6c6962> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5252 Tw + +BT +210.8912 194.446 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5252 Tw + +BT +236.4906 194.446 Td +/F7.0 10.5 Tf + Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5252 Tw + +BT +241.4466 194.446 Td +/F4.0 10.5 Tf +<6c73736c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5252 Tw + +BT +262.4466 194.446 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d657465722074656c6c7320746865206c696e6b> 20.0195 <657220746f207573652074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5252 Tw + +BT +450.2926 194.446 Td +/F3.0 10.5 Tf +<6c696273736c2e61> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5252 Tw + +BT +484.1971 194.446 Td +/F1.0 10.5 Tf +<20636f6d70696c656420696e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +84.24 178.666 Td +/F1.0 10.5 Tf +<74686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +102.93 178.666 Td +/F4.0 10.5 Tf +<24284f50454e53534c5f444952292f6c6962> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +197.43 178.666 Td +/F1.0 10.5 Tf +[<206469726563746f7279> 89.8438 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 123.214 Td +/F2.0 27 Tf +[<54> 29.7852 <65726d696e6f6c6f6779>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 92.566 Td +/F1.0 10.5 Tf +<4e6f6e652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3133> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +99 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 98 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 17 0 R +/F1.0 8 0 R +/F3.0 19 0 R +/F4.0 39 0 R +/F1.1 103 0 R +/F7.0 57 0 R +>> +/XObject << /Stamp1 177 0 R +>> +>> +>> +endobj +100 0 obj +[99 0 R /XYZ 0 841.89 null] +endobj +101 0 obj +[99 0 R /XYZ 0 758.37 null] +endobj +102 0 obj +[99 0 R /XYZ 0 685.07 null] +endobj +103 0 obj +<< /Type /Font +/BaseFont /427dad+NotoSerif +/Subtype /TrueType +/FontDescriptor 246 0 R +/FirstChar 32 +/LastChar 255 +/Widths 248 0 R +/ToUnicode 247 0 R +>> +endobj +104 0 obj +[99 0 R /XYZ 0 156.85 null] +endobj +105 0 obj +<< /Length 4437 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 777.054 Td +/F2.0 27 Tf +<416262726576696174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 746.406 Td +/F2.0 10.5 Tf +<415350> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 727.626 Td +/F1.0 10.5 Tf +[<4162737472> 20.0195 <6163742053657276696365205072696d6974697665>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 699.846 Td +/F2.0 10.5 Tf +<495554> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 681.066 Td +/F1.0 10.5 Tf +[<496d706c656d656e746174696f6e20556e6465722054> 29.7852 <65737420284854545020312e3120736572766572206f7220636c69656e7429>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 653.286 Td +/F2.0 10.5 Tf +[<52> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 634.506 Td +/F1.0 10.5 Tf +<52756e2d54696d6520456e7669726f6e6d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 606.726 Td +/F2.0 10.5 Tf +<48545450> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 587.946 Td +/F1.0 10.5 Tf +[<487970657274657874205472> 20.0195 <616e736665722050726f746f636f6c>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 560.166 Td +/F2.0 10.5 Tf +<535554> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 541.386 Td +/F1.0 10.5 Tf +[<53> 20.0195 <797374656d20556e6465722054> 29.7852 <657374>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 513.606 Td +/F2.0 10.5 Tf +<53534c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 494.826 Td +/F1.0 10.5 Tf +[<53656375726520536f636b> 20.0195 <657473204c61> 20.0195 <796572>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 467.046 Td +/F2.0 10.5 Tf +[<5454> 20.0195 <434e2d33>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 448.266 Td +/F1.0 10.5 Tf +[<54> 29.7852 <657374696e6720616e642054> 29.7852 <65737420436f6e74726f6c204e6f746174696f6e2076657273696f6e2033>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 398.814 Td +/F2.0 27 Tf +<5265666572656e636573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8862 Tw + +BT +48.24 368.166 Td +/F1.0 10.5 Tf +[<5b315d204554534920455320323031203837332d312076332e312e312028323030352d3036295468652054> 29.7852 <657374696e6720616e642054> 29.7852 <65737420436f6e74726f6c204e6f746174696f6e2076657273696f6e20333b205061727420313a20436f7265>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 352.386 Td +/F1.0 10.5 Tf +<4c616e6775616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 324.606 Td +/F1.0 10.5 Tf +[<5b325d20544954> 60.0586 <414e2055736572204775696465>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 296.826 Td +/F1.0 10.5 Tf +[<5b335d20485454506d73675f434e4c3131333331322054> 29.7852 <65737420506f727420666f72205454> 20.0195 <434e2d332054> 29.7852 <6f6f6c736574207769746820544954> 60.0586 <414e2c2046756e6374696f6e616c2053706563696669636174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 269.046 Td +/F1.0 10.5 Tf +<5b345d20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +64.368 269.046 Td +/F1.0 10.5 Tf +<5246432032363136> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 253.266 Td +/F1.0 10.5 Tf +[<487970657274657874205472> 20.0195 <616e736665722050726f746f636f6c20d020485454502f312e31>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 225.486 Td +/F1.0 10.5 Tf +<5b355d204f70656e53534c20746f6f6c6b6974> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 209.706 Td +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +48.24 209.706 Td +/F1.0 10.5 Tf +[<687474703a2f2f777777> 69.8242 <2e6f70656e73736c2e6f7267>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +106 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 105 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 17 0 R +/F1.0 8 0 R +>> +/XObject << /Stamp2 178 0 R +>> +>> +/Annots [113 0 R 116 0 R] +>> +endobj +107 0 obj +[106 0 R /XYZ 0 841.89 null] +endobj +108 0 obj +[106 0 R /XYZ 0 432.45 null] +endobj +109 0 obj +[106 0 R /XYZ 0 380.13 null] +endobj +110 0 obj +[106 0 R /XYZ 0 336.57 null] +endobj +111 0 obj +[106 0 R /XYZ 0 308.79 null] +endobj +112 0 obj +[106 0 R /XYZ 0 281.01 null] +endobj +113 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (http://www.ietf.org/rfc/rfc2616.txt) +>> +/Subtype /Link +/Rect [64.368 265.98 110.064 280.26] +/Type /Annot +>> +endobj +114 0 obj +[106 0 R /XYZ 0 237.45 null] +endobj +115 0 obj +<< /Limits [(_closing_connections) (_overview)] +/Names [(_closing_connections) 63 0 R (_configuration) 38 0 R (_configuration_file) 101 0 R (_connecting_to_a_server) 54 0 R (_error_messages) 75 0 R (_examples) 100 0 R (_fundamental_concepts) 27 0 R (_how_to_read_this_document) 18 0 R (_installation) 34 0 R (_migrating_test_suite_using_r1x) 71 0 R (_overview) 31 0 R] +>> +endobj +116 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (http://www.openssl.org) +>> +/Subtype /Link +/Rect [48.24 206.64 163.6788 220.92] +/Type /Annot +>> +endobj +117 0 obj +<< /Border [0 0 0] +/Dest (_about_this_document) +/Subtype /Link +/Rect [48.24 748.79 156.6105 763.07] +/Type /Annot +>> +endobj +118 0 obj +<< /Border [0 0 0] +/Dest (_about_this_document) +/Subtype /Link +/Rect [541.1705 748.79 547.04 763.07] +/Type /Annot +>> +endobj +119 0 obj +<< /Border [0 0 0] +/Dest (_how_to_read_this_document) +/Subtype /Link +/Rect [60.24 730.31 201.801 744.59] +/Type /Annot +>> +endobj +120 0 obj +<< /Border [0 0 0] +/Dest (_how_to_read_this_document) +/Subtype /Link +/Rect [541.1705 730.31 547.04 744.59] +/Type /Annot +>> +endobj +121 0 obj +<< /Border [0 0 0] +/Dest (_prerequisite_knowledge) +/Subtype /Link +/Rect [60.24 711.83 180.066 726.11] +/Type /Annot +>> +endobj +122 0 obj +<< /Border [0 0 0] +/Dest (_prerequisite_knowledge) +/Subtype /Link +/Rect [541.1705 711.83 547.04 726.11] +/Type /Annot +>> +endobj +123 0 obj +<< /Border [0 0 0] +/Dest (_system_requirements) +/Subtype /Link +/Rect [48.24 693.35 156.5683 707.63] +/Type /Annot +>> +endobj +124 0 obj +<< /Border [0 0 0] +/Dest (_system_requirements) +/Subtype /Link +/Rect [541.1705 693.35 547.04 707.63] +/Type /Annot +>> +endobj +125 0 obj +<< /Border [0 0 0] +/Dest (_fundamental_concepts) +/Subtype /Link +/Rect [48.24 674.87 162.984 689.15] +/Type /Annot +>> +endobj +126 0 obj +<< /Border [0 0 0] +/Dest (_fundamental_concepts) +/Subtype /Link +/Rect [541.1705 674.87 547.04 689.15] +/Type /Annot +>> +endobj +127 0 obj +<< /Border [0 0 0] +/Dest (_the_test_port) +/Subtype /Link +/Rect [48.24 656.39 113.5838 670.67] +/Type /Annot +>> +endobj +128 0 obj +<< /Border [0 0 0] +/Dest (_the_test_port) +/Subtype /Link +/Rect [541.1705 656.39 547.04 670.67] +/Type /Annot +>> +endobj +129 0 obj +<< /Border [0 0 0] +/Dest (_overview) +/Subtype /Link +/Rect [60.24 637.91 108.7605 652.19] +/Type /Annot +>> +endobj +130 0 obj +<< /Border [0 0 0] +/Dest (_overview) +/Subtype /Link +/Rect [541.1705 637.91 547.04 652.19] +/Type /Annot +>> +endobj +131 0 obj +<< /Border [0 0 0] +/Dest (_installation) +/Subtype /Link +/Rect [60.24 619.43 117.486 633.71] +/Type /Annot +>> +endobj +132 0 obj +<< /Border [0 0 0] +/Dest (_installation) +/Subtype /Link +/Rect [541.1705 619.43 547.04 633.71] +/Type /Annot +>> +endobj +133 0 obj +<< /Border [0 0 0] +/Dest (_configuration) +/Subtype /Link +/Rect [60.24 600.95 129.5503 615.23] +/Type /Annot +>> +endobj +134 0 obj +<< /Border [0 0 0] +/Dest (_configuration) +/Subtype /Link +/Rect [541.1705 600.95 547.04 615.23] +/Type /Annot +>> +endobj +135 0 obj +<< /Border [0 0 0] +/Dest (HTTP_test_port_parameters_in_the_RTE_configuration_file) +/Subtype /Link +/Rect [72.24 582.47 353.5576 596.75] +/Type /Annot +>> +endobj +136 0 obj +<< /Border [0 0 0] +/Dest (HTTP_test_port_parameters_in_the_RTE_configuration_file) +/Subtype /Link +/Rect [541.1705 582.47 547.04 596.75] +/Type /Annot +>> +endobj +137 0 obj +<< /Border [0 0 0] +/Dest (_start_procedure) +/Subtype /Link +/Rect [60.24 563.99 138.6855 578.27] +/Type /Annot +>> +endobj +138 0 obj +<< /Border [0 0 0] +/Dest (_start_procedure) +/Subtype /Link +/Rect [541.1705 563.99 547.04 578.27] +/Type /Annot +>> +endobj +139 0 obj +<< /Border [0 0 0] +/Dest (_ttcn_3_test_executor) +/Subtype /Link +/Rect [72.24 545.51 178.8066 559.79] +/Type /Annot +>> +endobj +140 0 obj +<< /Border [0 0 0] +/Dest (_ttcn_3_test_executor) +/Subtype /Link +/Rect [541.1705 545.51 547.04 559.79] +/Type /Annot +>> +endobj +141 0 obj +<< /Border [0 0 0] +/Dest (_connecting_to_a_server) +/Subtype /Link +/Rect [72.24 527.03 185.2515 541.31] +/Type /Annot +>> +endobj +142 0 obj +<< /Border [0 0 0] +/Dest (_connecting_to_a_server) +/Subtype /Link +/Rect [541.1705 527.03 547.04 541.31] +/Type /Annot +>> +endobj +143 0 obj +<< /Border [0 0 0] +/Dest (_starting_a_server_listening_for_client_connections) +/Subtype /Link +/Rect [72.24 508.55 321.6255 522.83] +/Type /Annot +>> +endobj +144 0 obj +<< /Border [0 0 0] +/Dest (_starting_a_server_listening_for_client_connections) +/Subtype /Link +/Rect [541.1705 508.55 547.04 522.83] +/Type /Annot +>> +endobj +145 0 obj +<< /Border [0 0 0] +/Dest (sending-receiving-http-messages) +/Subtype /Link +/Rect [60.24 490.07 229.8885 504.35] +/Type /Annot +>> +endobj +146 0 obj +<< /Border [0 0 0] +/Dest (sending-receiving-http-messages) +/Subtype /Link +/Rect [541.1705 490.07 547.04 504.35] +/Type /Annot +>> +endobj +147 0 obj +<< /Border [0 0 0] +/Dest (_stop_procedure) +/Subtype /Link +/Rect [60.24 471.59 136.638 485.87] +/Type /Annot +>> +endobj +148 0 obj +<< /Border [0 0 0] +/Dest (_stop_procedure) +/Subtype /Link +/Rect [541.1705 471.59 547.04 485.87] +/Type /Annot +>> +endobj +149 0 obj +<< /Border [0 0 0] +/Dest (_closing_connections) +/Subtype /Link +/Rect [72.24 453.11 172.6515 467.39] +/Type /Annot +>> +endobj +150 0 obj +<< /Border [0 0 0] +/Dest (_closing_connections) +/Subtype /Link +/Rect [541.1705 453.11 547.04 467.39] +/Type /Annot +>> +endobj +151 0 obj +<< /Border [0 0 0] +/Dest (ttcn-3-test-executor-0) +/Subtype /Link +/Rect [72.24 434.63 178.8066 448.91] +/Type /Annot +>> +endobj +152 0 obj +<< /Border [0 0 0] +/Dest (ttcn-3-test-executor-0) +/Subtype /Link +/Rect [541.1705 434.63 547.04 448.91] +/Type /Annot +>> +endobj +153 0 obj +<< /Border [0 0 0] +/Dest (_usage_as_protocol_module) +/Subtype /Link +/Rect [48.24 416.15 175.899 430.43] +/Type /Annot +>> +endobj +154 0 obj +<< /Border [0 0 0] +/Dest (_usage_as_protocol_module) +/Subtype /Link +/Rect [541.1705 416.15 547.04 430.43] +/Type /Annot +>> +endobj +155 0 obj +<< /Border [0 0 0] +/Dest (_usage_with_ipl4_test_port) +/Subtype /Link +/Rect [48.24 397.67 175.0928 411.95] +/Type /Annot +>> +endobj +156 0 obj +<< /Border [0 0 0] +/Dest (_usage_with_ipl4_test_port) +/Subtype /Link +/Rect [541.1705 397.67 547.04 411.95] +/Type /Annot +>> +endobj +157 0 obj +<< /Border [0 0 0] +/Dest (_migrating_test_suite_using_r1x) +/Subtype /Link +/Rect [48.24 379.19 200.0826 393.47] +/Type /Annot +>> +endobj +158 0 obj +<< /Border [0 0 0] +/Dest (_migrating_test_suite_using_r1x) +/Subtype /Link +/Rect [541.1705 379.19 547.04 393.47] +/Type /Annot +>> +endobj +159 0 obj +<< /Border [0 0 0] +/Dest (_error_messages) +/Subtype /Link +/Rect [48.24 360.71 125.226 374.99] +/Type /Annot +>> +endobj +160 0 obj +<< /Border [0 0 0] +/Dest (_error_messages) +/Subtype /Link +/Rect [541.1705 360.71 547.04 374.99] +/Type /Annot +>> +endobj +161 0 obj +<< /Border [0 0 0] +/Dest (_additional_error_messages_in_case_ssl_connections_are_used) +/Subtype /Link +/Rect [60.24 342.23 361.9048 356.51] +/Type /Annot +>> +endobj +162 0 obj +<< /Border [0 0 0] +/Dest (_additional_error_messages_in_case_ssl_connections_are_used) +/Subtype /Link +/Rect [541.1705 342.23 547.04 356.51] +/Type /Annot +>> +endobj +163 0 obj +<< /Border [0 0 0] +/Dest (_warning_messages) +/Subtype /Link +/Rect [48.24 323.75 141.6396 338.03] +/Type /Annot +>> +endobj +164 0 obj +<< /Border [0 0 0] +/Dest (_warning_messages) +/Subtype /Link +/Rect [535.301 323.75 547.04 338.03] +/Type /Annot +>> +endobj +165 0 obj +<< /Border [0 0 0] +/Dest (_examples) +/Subtype /Link +/Rect [48.24 305.27 96.708 319.55] +/Type /Annot +>> +endobj +166 0 obj +<< /Border [0 0 0] +/Dest (_examples) +/Subtype /Link +/Rect [535.301 305.27 547.04 319.55] +/Type /Annot +>> +endobj +167 0 obj +<< /Border [0 0 0] +/Dest (_configuration_file) +/Subtype /Link +/Rect [60.24 286.79 150.6763 301.07] +/Type /Annot +>> +endobj +168 0 obj +<< /Border [0 0 0] +/Dest (_configuration_file) +/Subtype /Link +/Rect [535.301 286.79 547.04 301.07] +/Type /Annot +>> +endobj +169 0 obj +<< /Border [0 0 0] +/Dest (makefile) +/Subtype /Link +/Rect [60.24 268.31 103.6153 282.59] +/Type /Annot +>> +endobj +170 0 obj +<< /Border [0 0 0] +/Dest (makefile) +/Subtype /Link +/Rect [535.301 268.31 547.04 282.59] +/Type /Annot +>> +endobj +171 0 obj +<< /Border [0 0 0] +/Dest (_terminology) +/Subtype /Link +/Rect [48.24 249.83 111.8933 264.11] +/Type /Annot +>> +endobj +172 0 obj +<< /Border [0 0 0] +/Dest (_terminology) +/Subtype /Link +/Rect [535.301 249.83 547.04 264.11] +/Type /Annot +>> +endobj +173 0 obj +<< /Border [0 0 0] +/Dest (_abbreviations) +/Subtype /Link +/Rect [48.24 231.35 119.0205 245.63] +/Type /Annot +>> +endobj +174 0 obj +<< /Border [0 0 0] +/Dest (_abbreviations) +/Subtype /Link +/Rect [535.301 231.35 547.04 245.63] +/Type /Annot +>> +endobj +175 0 obj +<< /Border [0 0 0] +/Dest (_references) +/Subtype /Link +/Rect [48.24 212.87 103.0815 227.15] +/Type /Annot +>> +endobj +176 0 obj +<< /Border [0 0 0] +/Dest (_references) +/Subtype /Link +/Rect [535.301 212.87 547.04 227.15] +/Type /Annot +>> +endobj +177 0 obj +<< /Type /XObject +/Subtype /Form +/BBox [0 0 595.28 841.89] +/Length 162 +>> +stream +q +/DeviceRGB cs +0.0 0.0 0.0 scn +/DeviceRGB CS +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +q +0.25 w +/DeviceRGB CS +0.8667 0.8667 0.8667 SCN +48.24 30.0 m +547.04 30.0 l +S +Q +Q + +endstream +endobj +178 0 obj +<< /Type /XObject +/Subtype /Form +/BBox [0 0 595.28 841.89] +/Length 162 +>> +stream +q +/DeviceRGB cs +0.0 0.0 0.0 scn +/DeviceRGB CS +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +q +0.25 w +/DeviceRGB CS +0.8667 0.8667 0.8667 SCN +48.24 30.0 m +547.04 30.0 l +S +Q +Q + +endstream +endobj +179 0 obj +<< /Type /Outlines +/Count 32 +/First 180 0 R +/Last 211 0 R +>> +endobj +180 0 obj +<< /Title +/Parent 179 0 R +/Count 0 +/Next 181 0 R +/Dest [7 0 R /XYZ 0 841.89 null] +>> +endobj +181 0 obj +<< /Title +/Parent 179 0 R +/Count 0 +/Next 182 0 R +/Prev 180 0 R +/Dest [10 0 R /XYZ 0 841.89 null] +>> +endobj +182 0 obj +<< /Title +/Parent 179 0 R +/Count 2 +/First 183 0 R +/Last 184 0 R +/Next 185 0 R +/Prev 181 0 R +/Dest [12 0 R /XYZ 0 841.89 null] +>> +endobj +183 0 obj +<< /Title +/Parent 182 0 R +/Count 0 +/Next 184 0 R +/Dest [12 0 R /XYZ 0 765.17 null] +>> +endobj +184 0 obj +<< /Title +/Parent 182 0 R +/Count 0 +/Prev 183 0 R +/Dest [12 0 R /XYZ 0 665.75 null] +>> +endobj +185 0 obj +<< /Title +/Parent 179 0 R +/Count 0 +/Next 186 0 R +/Prev 182 0 R +/Dest [12 0 R /XYZ 0 582.11 null] +>> +endobj +186 0 obj +<< /Title +/Parent 179 0 R +/Count 0 +/Next 187 0 R +/Prev 185 0 R +/Dest [12 0 R /XYZ 0 352.13 null] +>> +endobj +187 0 obj +<< /Title +/Parent 179 0 R +/Count 12 +/First 188 0 R +/Last 197 0 R +/Next 200 0 R +/Prev 186 0 R +/Dest [12 0 R /XYZ 0 247.27 null] +>> +endobj +188 0 obj +<< /Title +/Parent 187 0 R +/Count 0 +/Next 189 0 R +/Dest [12 0 R /XYZ 0 194.95 null] +>> +endobj +189 0 obj +<< /Title +/Parent 187 0 R +/Count 0 +/Next 190 0 R +/Prev 188 0 R +/Dest [33 0 R /XYZ 0 841.89 null] +>> +endobj +190 0 obj +<< /Title +/Parent 187 0 R +/Count 1 +/First 191 0 R +/Last 191 0 R +/Next 192 0 R +/Prev 189 0 R +/Dest [33 0 R /XYZ 0 587.15 null] +>> +endobj +191 0 obj +<< /Title +/Parent 190 0 R +/Count 0 +/Dest [33 0 R /XYZ 0 466.51 null] +>> +endobj +192 0 obj +<< /Title +/Parent 187 0 R +/Count 3 +/First 193 0 R +/Last 195 0 R +/Next 196 0 R +/Prev 190 0 R +/Dest [45 0 R /XYZ 0 268.29 null] +>> +endobj +193 0 obj +<< /Title +/Parent 192 0 R +/Count 0 +/Next 194 0 R +/Dest [45 0 R /XYZ 0 222.77 null] +>> +endobj +194 0 obj +<< /Title +/Parent 192 0 R +/Count 0 +/Next 195 0 R +/Prev 193 0 R +/Dest [52 0 R /XYZ 0 778.86 null] +>> +endobj +195 0 obj +<< /Title +/Parent 192 0 R +/Count 0 +/Prev 194 0 R +/Dest [52 0 R /XYZ 0 489.42 null] +>> +endobj +196 0 obj +<< /Title +/Parent 187 0 R +/Count 0 +/Next 197 0 R +/Prev 192 0 R +/Dest [52 0 R /XYZ 0 160.2 null] +>> +endobj +197 0 obj +<< /Title +/Parent 187 0 R +/Count 2 +/First 198 0 R +/Last 199 0 R +/Prev 196 0 R +/Dest [61 0 R /XYZ 0 425.04 null] +>> +endobj +198 0 obj +<< /Title +/Parent 197 0 R +/Count 0 +/Next 199 0 R +/Dest [61 0 R /XYZ 0 379.52 null] +>> +endobj +199 0 obj +<< /Title +/Parent 197 0 R +/Count 0 +/Prev 198 0 R +/Dest [61 0 R /XYZ 0 133.64 null] +>> +endobj +200 0 obj +<< /Title +/Parent 179 0 R +/Count 0 +/Next 201 0 R +/Prev 187 0 R +/Dest [66 0 R /XYZ 0 841.89 null] +>> +endobj +201 0 obj +<< /Title +/Parent 179 0 R +/Count 0 +/Next 202 0 R +/Prev 200 0 R +/Dest [66 0 R /XYZ 0 478.95 null] +>> +endobj +202 0 obj +<< /Title +/Parent 179 0 R +/Count 0 +/Next 203 0 R +/Prev 201 0 R +/Dest [66 0 R /XYZ 0 330.51 null] +>> +endobj +203 0 obj +<< /Title +/Parent 179 0 R +/Count 1 +/First 204 0 R +/Last 204 0 R +/Next 205 0 R +/Prev 202 0 R +/Dest [74 0 R /XYZ 0 414.54 null] +>> +endobj +204 0 obj +<< /Title +/Parent 203 0 R +/Count 0 +/Dest [82 0 R /XYZ 0 591.96 null] +>> +endobj +205 0 obj +<< /Title +/Parent 179 0 R +/Count 0 +/Next 206 0 R +/Prev 203 0 R +/Dest [85 0 R /XYZ 0 348.84 null] +>> +endobj +206 0 obj +<< /Title +/Parent 179 0 R +/Count 2 +/First 207 0 R +/Last 208 0 R +/Next 209 0 R +/Prev 205 0 R +/Dest [99 0 R /XYZ 0 841.89 null] +>> +endobj +207 0 obj +<< /Title +/Parent 206 0 R +/Count 0 +/Next 208 0 R +/Dest [99 0 R /XYZ 0 758.37 null] +>> +endobj +208 0 obj +<< /Title +/Parent 206 0 R +/Count 0 +/Prev 207 0 R +/Dest [99 0 R /XYZ 0 685.07 null] +>> +endobj +209 0 obj +<< /Title +/Parent 179 0 R +/Count 0 +/Next 210 0 R +/Prev 206 0 R +/Dest [99 0 R /XYZ 0 156.85 null] +>> +endobj +210 0 obj +<< /Title +/Parent 179 0 R +/Count 0 +/Next 211 0 R +/Prev 209 0 R +/Dest [106 0 R /XYZ 0 841.89 null] +>> +endobj +211 0 obj +<< /Title +/Parent 179 0 R +/Count 0 +/Prev 210 0 R +/Dest [106 0 R /XYZ 0 432.45 null] +>> +endobj +212 0 obj +<< /Nums [0 << /P (i) +>> 1 << /P (ii) +>> 2 << /P (1) +>> 3 << /P (2) +>> 4 << /P (3) +>> 5 << /P (4) +>> 6 << /P (5) +>> 7 << /P (6) +>> 8 << /P (7) +>> 9 << /P (8) +>> 10 << /P (9) +>> 11 << /P (10) +>> 12 << /P (11) +>> 13 << /P (12) +>> 14 << /P (13) +>> 15 << /P (14) +>>] +>> +endobj +213 0 obj +<< /Length1 13164 +/Length 8335 +/Filter [/FlateDecode] +>> +stream +xz \׵3m$ЊXľͬb5F؀0KlLI8Rn9nu]?YiKI_4yN/_~63# &mo4;3{ιW0BHl&}'3aЉVE&B#?x-L#3MفPZ/>22[_]hAlnf}֣;I̥PF79ε"dFCd-Bvh#'1~0A2'#Q˜XX"JTjVOFc) g-VDYȎΜܼ|WSXT\RZV^QY~6q"~73_-+{*""!ԓž"dR!Y7zzRadzBiK9GɜY*sVy5O]_ߠ ̽<F&J R!Y‘-Ւ=~7?O) o^Pԓ{:־ +V&#d5ee[CEeRBy%_Y\~~Mx'r{.\ee\i' h3HR]y]E/*Gyp;uro>78pG'quEBCiZ]s<7~ `!vd[(G1>ܸ{'Nf$xw4+R&M4]m7*bߡ q(h/>#A(gG] {qgwD=ss_X 62CX0/(bXܞ hTkׅ/ξwv5CJe`upQ"q_{_|Kڶ-㗞􅶶>}雧Z[O B;7x I.E܅enXQVՅ'TX@omjw&_npI^Fʌ 샵 ZɀFGV}o#85KA +&*Yі%6ٔ#cyl?AS ##VZ&Qj5Xm츟Nz<2]՚|׎CgV%m 9yjhdVuU>4q+j,V'7NٖS0zWvGřevV;9U$@xXDIa/GEJzB ɍXeIrqT-Uy#X@TbғIṹrnO[n 7<@qÇs +b]2AxCǭDl*2؄IlŤ$r+eT ]J|:o:qxDAG[E67:ٓIy'ZѰO,\j>zo&- W0ɘGDH+Z ftL3mqV4[% +ۢPZ:aL-mWNiWUε-PU#1?*Ʒ/Ĝ~OS9p_}ʐt[u͠G!n +ߐ{E PsgJ[qJB^WCȷvL*Dqũg/ -/|ӒukO.dgP66CE,}{%aBuv-_lLG,4E|(_Թnv~?'*yg; A/VjFq0wA⃙G]xB(:GAH17Img_p 2e$3:ՠd2lAV);xsӰ|n diVA%׃<u)1 "!&o׿N}{G^qg˟@R~RvJUgn>9IlMO,AN*_Kv];p/yQV3CL(u84Je +&f : ?݇^Ys#(x0agU (}`u9)z&XA(ˍw)"h3"<~sQquϝ qUAxԎ-9F!iiQfVˋش|=Ƣ_~)qhX)Kqn&BcQ} +A3+9"S#Ct6H9:.m\%OSUl=;NgwƩ`긍auPQcu%AԱ{|SU+ܱC<>Ϲϯ9->{_O44uٛZ|`xnj:1h^n}u㧧SP:[AZzQbb!mf^Xr%*, SabT0&az QleV7*]-MZ [gc ?H|=ɤk㣓蛅8X0lzc n06q$)ZBvAA +ۗVjYiٵFTeL ҎBfTO~G':yZTDI_&^rECCo!rR^o|nˊ%67*e$&Aoz.X I \B!ѨBV`eʃmU/\L֎k{ +U@?ֈ4U]Ee?bTj 6nMVȥamA-Qm3[\{.*;8r8;x w3 +z޺P-ry\=- bj.g۱AWo+.:RƊs|ނcrhW"x{cVwbGգ +[Ieu+f:J2vʿd^ c'ǜ)7qL}XTeCgR^>CE]lֲ'_>FkWyù ٛ6o!cl(JMW@/up5"0BnO1Z]MiŐ#_]fqQ$IPu^`ʟ?K SXi7+f&a [}H^|vş|µ%Lu]ybaBFW7>ܛ}gwc5y_Hf|=PW2s ׄ2將,X3;qnx[&JU f!Zmp%`-! ͔dkӓb.KxηXi)PCΪV݄QHvqW6pn9öy6ҙI! wfRh))Ҥz&XΪsW _9_UveiQEF5PΌIrfU҉[tJG鍅);3$-:Θ$EGE϶q`LbA*Eq,;Jw?TYJsji^{ǣ}ّX6NdoJV^VK>[>Ё@ khp{ 5Mrakwt!wx=E[*憠}CQV^?ґ*mn`*@jYϬr" Putա'WŚ4DNOHӈF,w@-)JTd8GG'AS`[~ajv|`ژK͂Xfb#/[|',\{}΁@*Il<`/G\"h97c"7Y@Z #mBioU.4M^ois.|%Pn/mi67ic1^@W$zY[}! +ΥX~-\C0`X׶oʃ+t?7pkJ}~uO\ZmYunH]a]U攇5Kr\˚n1o N9ϙ-0ٽdqR8s8pD!FF)Tnlah,3*'| {ȏfìXpl১@S|?7_@Un[I=#!NJ{L|OL-(=;5uf:? O q}I_&LޒS qa]q5|w + +<$[n)tm(I;,Sr-sNRD`#ƒJa\d + Ԏy99kjg"ÀDSh,O)3h)Se/6Nauela o d|ȐB*8]Silr\fʶ>s-/fit+5N&kX#PPLURye~Uٺ=6,ny}՛gkSrk4YRWڕ 68JYLMroH9NS&SiRfRrlY}qblS^[:<Ql̳u%}E S' +foU,ho(HNtOV:tEjms;QmvLJ2yiv~[a^fUkx]c1*D怍fOP, g~Ȇ*SQ1ke7!lm͵_LJu Xw,IC]3j=@ +? xyZxXQZ_N`Yr'oy6H/$( qfaei ye)@;ì(6UГ VAϯD)nDzYZ. =,8u@y o+ݞHn N t\}*[ZaF?VXQz} ΁^/,mrV(d a_żG ,Y.[pB+)VeZb1E`+V/<!sx!7+K 6Z( %\b -34~cI0:=^G!4{qp?y{ Ⱦ8_7@\f{GL4y#]#B6q"8iT,Dq[?"-;%jL +Aȓ}!?))|FڗaRU- ׉&l,JID[k/4<&>ַ,߽Xqb@,Z s>`}Z_AsҪrLĵr|eGJUQ/A |BIG^r"3Oš.PHipfO3H;[I:91_*Z4Fo_!G w3x E֒Rbz:A]~sF8g9p{x^.)8~%⡈WBpBEd\dvdIdw䅨بڨSQNOJ#<&Uc1H#%:-)viI~#7/!E.Yf,q=J(Z9Gv8%9 8F pcQcd)b.TO}f9y Kٓ嶣z3hs MSW\ Oy9C9 tZϩxڇ@ p}GAB9T=r@8f@Hd0Cf~/G'43 .c-t8|3> xLPoN"v Ll<4ÎqČPfNӧA}^L[A0K?nux>gX@*O15(yΝX3uwiCffdPS0²S |p_ YY"cMfi) +kZpR0aRQV,pm)"φwo/*t"@ ~?H +endstream +endobj +214 0 obj +<< /Type /FontDescriptor +/FontName /b45cdd+NotoSerif +/FontFile2 213 0 R +/FontBBox [-212 -250 1246 1047] +/Flags 6 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 1068 +/Descent -292 +/CapHeight 1462 +/XHeight 1098 +>> +endobj +215 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +216 0 obj +[259 333 408 1000 1000 1000 1000 220 346 346 500 559 250 310 250 288 559 559 559 559 559 559 559 559 559 559 286 286 559 559 559 1000 1000 705 653 613 727 623 589 713 792 367 1000 700 623 937 763 742 604 1000 655 543 612 716 674 1046 1000 625 1000 359 1000 359 1000 458 577 562 613 492 613 535 369 538 634 319 299 584 310 944 645 577 613 613 471 451 352 634 579 861 578 564 511 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 535 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 361 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 259 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 250 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +217 0 obj +<< /Length1 9656 +/Length 6276 +/Filter [/FlateDecode] +>> +stream +xY{tՙwfl˖%H$˲Ӳ,?qǎ-?boBWBHJSYBJ=> -JCr 6fH~3c;_+3#Dȅxhr ?yiMPEKc;=U)61GG(7 go^##~I 8BRoDi`Lt8ݟ߁7`7913k}?xxARDi(]22%,+HuZz2̖|kp^gu@JГLL|e|^ǭwWە +E,0eC-6ٵY*2g9˃_!#D(˧{9~ܹ=tO4e={/BXSB_<2'F0#ivRmVYj+:լSJ?Oz,j. BgvK 8^Dixx,Wo$PhrrV!Z=˳Oyr\FSb5VkuZAG:f7 Nw2*Wtuj65Y~F*Zϩ +m˿:Q=y{tcK]~aٞZejQm].duF 襝FFP<=6>xI֓42z4횅_8B#O]\%:Q<.ҕv"2߼7}ٝ['SV6b@Rl뱖>91 -BBIZ/,E[Rf-٦ ZƯ8U S5qiUJ`i^di* q]kK99v{:gYPZ̚h3"?ovF0.gRX9vV初 qʩ͖+HE­G01ն-ثXX긩b\x?>|C Sg@_jd}>eLFp-RHyp)aɼ3=?`o =9'33׬ǟ?`N;;73zlO|zo!H<)lګk6i@.H5/ y,Łz^9+xg\m(̹9fe> 3O㋌z hcą|BoNJӿA;QR&V,%ٔQ$j)g~+n_%IJ+&DTx~OȭٓY-Qrpw81|$ǬZs$fyxH%x%"N?{,53-ݙ7q1uKyl5LYX(bɷvph7C 9 )lTHH RE]-'lk1.m o޾eb.mbmI)1?GBUErz6*9W93. +|4>Wǜ!c 9R~ևW*Gnɑ]RLFB?os^KQY޴߿/؈WWG +^i]Dg28/w5D5P8\`(aD_Q_X-|ޞ0_—m ҺK AHcG>YrYvwR#-D'H G}( YsԲ\ɦeՐ{̵c>+>MWfgK=&S[vw ej gcc?cC|!8wtÆB<QpCSY8- C l;:[RdB0x$E ~kPVLjG f 㱸H[줌>(ehAw67lG#=Ů/wi}}6ȩ~k=lXZ+^ʉ*s~ 4J3 ղ2ਭ90p& +|l,vdd0IbԐiH&+j { b(~ʩCUJnyE2UQ cWuΨL +@@`exs^Kr:Sp*DyxV;}ę[IK@! I~[#gw|[_etpՙvMaKik3 {,1FgtEͱŮr_xh]-<6jį7myxد +U[ L_&;AQEh+ڞpN"?S] ^t&6LDNRn)>XɐXRy̢R 0]#O>:?ᣗzZη goXS5?7]ϰ7χ~k_/JiEX 4ǘh[\%T^g(9֡fRKE]ph7&o(37L^.ޠPK<KScae,ezى 6opܶ!1x|ɪ5&rf͛˖.m*i1J{x1\)5g-fidp*rfN k*xXb.ΓJ,pN7ϟLTפSȿBK /Gkq󔹓О I& 򀇠݁3EQ^C9օO,ANQi[lPwl:lkkN=P6tqj%E%,|䒁 t|o(9P(ox̼b빪-~҈8W:f:6-]56W81^?TR'j_@ēwt?qkamھW.kh2\Lg8@;jw?ۀ3p+{JO{(Qpv22݃Xk?w0~b2<j<{T/r#OV]z"cZ +E5a.I.6ֳ&O?hJQ@ ~kpB(|$M~ƍp;+2wpW}U.uw>|nƵN9BHx$f<cGێxXܽg~t|Ȧs ;r{rQDPjװy%Gc Bϣ̲BCؙÖmӂmxÆdfdq +IZlcMUÇ~Z*H>Wϰ;{ͳoPbI?2!+^5'DO7(>U$sUo*1})JKn7ON)>mZh)cZr}[HAE"/XPlרc53 Y^E6V ՙO紫r+;joikCS{pKr"k2^=Ҳ;yxȹNCAܕ@gzGFtg0R`4C_x`k_ؽ9@#4ϼ"zVI>HW߾u{¯eڋ|ZɃJcګotZ|ajZm{5qG-'Iy`KҸ|G'(+ҳB-u l'Y?~R̴najugSՆB-ҔSM"if:OѩR j;d6uӌW ]]-ǍK|jjnR{MDgC%r.fr$W43J_F?;X@&w]||^u:b,̦gTsde>:L0-w vH֐Lxj'a;BExuZ6mFUxmmE"S銓ߊ G? kdz1@r_ ^:(}裞9tf^sK).2ͨq쑑j@֐$Kk|dHϐ "M,&Pnbc6wxd&۷' g-ͳ{lriEu_fF^,X1{BA4'ߒ^r8R> +YE8?7GqS(nOⅈ;ƒ"34/H"VnYهZZD̵Fy/ wm ԍ=Y"R@XP>HAzFՠZ:TP#ZP3jA Cى֣ڀFԍ6NR.z}NN*j #+Bt7tQ{I:}$D$Lt +e$BZ\ޘ1I#9)y-@?9Gj$]s.'s'Iz +EIz +'jtr$]zǒT%$驨̾E_Kv&i@Nӑ<IPIuR['&wLnWE]=:tj4&Q4F,;ijL;(0j@h\?̼ 79 +Ah;ӣC0kfup3FPDlRp\71>1cGLJi;0\39.;qOQ*r:)F_99./=7NI,4=yjD[X;˟7:Cӳx=1&r*c&8d n|&:3:gGtdw +E7t;\_GK$5qsLV#v*A^?KV>S:5sXŌ΢X}ˤ:4 Z].}(MxP7!j!d9\6âя%q+']> +endobj +219 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +220 0 obj +[259 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 293 310 1000 288 1000 559 1000 559 559 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 752 1000 667 767 652 621 1000 818 400 1000 733 653 952 788 787 638 1000 707 585 652 747 1000 1066 1000 1000 1000 1000 1000 1000 1000 1000 1000 599 648 526 648 570 407 560 666 352 1000 636 352 985 666 612 645 647 522 487 404 666 605 855 645 579 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +221 0 obj +<< /Length1 6200 +/Length 4041 +/Filter [/FlateDecode] +>> +stream +xX{\w?I< +""B-GU0 !(ERW.ZʵVVjU׮emzWkug&7|ߙߜs|9/*4W!J$f?k{'ZX#|'zj1 Y\4/I7\wZypjo0Ukl=̕7$KXTWSmÃ/>Oo~,'yL$kv>'?  +~j8x'ߵ!`p%xb1Jᆌ Lg \.vT ,LClF`At*90DꯜHdj>&Ψ3j&7VcMV|Z5=^]ݚl)#ڹd /m^0@c$!v&u{ddD&tV2Ӹ3ƒIMٻvz~EKUݸ:9  gCTB&l$oT l!;_\r~|YS%/e OӋ+رz0 =-LΩp)˸$#mZ+B2;2B*cd҈q~Tǎgε~w\ Net .֥dm4{3Q&uS7)BWs^D#fAjT jW+u |,;m'׉Ys:>RqD* _!!DJ^`K2L$5=FxcYA\FjqJb#Q-ӄ_7~Ay>gI 7L^B^A>R3j"-M+/~^n.^]Շh+cmrTJۙ>C=Clܔ$ϯ h{>m‡tl4H7+ӣ[XZ[u~ݶkc[l oj9{L;?+ K̫+8;_pvCQE篽ِF TC4H~IpPJgxxM\cb3B0{H 6#j.^aC]&Qr=AIzC[|2ax4||P1@)6Xbfti\veN s[6U}bGOCȷΪ&0i#&phaNv#p95Jez9ft",/(#kH|~ +꒵mj6LgEm$#f;\;!`{UcXǯ3Ct@:_rٜo{~YE9)+O/_#Ur Hkf_q2pO35)W*"¼DԼ]i/?*>/tN*C\L$ZA;k78RNԇ?oo=F;z/OAWCǔ Io vv/j꜃+s=5}!~N!qnbG.r!8}bz*,K.$G$R+'u3FDDy-kB$-?Iuf=k6 N&[C|ވS}Iz&>/'u7͒-V%d-H͠WLN[ lsojkwܽY"@/ GȘ#[ӊE}FV㹏٢Yɡ&ɽt~)rvی^ǁ\E Q$9aL +LJ$sXyxV/O҈bXyo7#F宋9 ՠ4Ź%ȂQ!Z-ݗ=8^c6Q6ԝEzszZ[Gjiy>~ߣxp[ONX?~IO_{ 7{ G7>7vJ_1w}Fffu \7v Q]d=2ӛ|ZOEy48tH8b'A:2Y) Wڲ-z6)E.q޾ۍ_ihI0 ;$az*te0ww׿M V64]? cH=uCcOn,u+ KGxzJ[bK닦%>r|YybJCӉ KlW k$?=1#cz^qcլ]튳 =VmjilS|o*<2wFbs#_VeG>M2—/Vkv9|tz<~ѵm̶FM.Gҙ͂mzgC]SXy0uTd|r/l,%q_CnŬ<NՓMKUM$=%FMxi 7*qjN_"K.7f,S̴22߰ =D}ݓIJJ, J^y tW"Wӹ:<Jv$K\\뒬uIcxsv͕ʽy\vAM=ɐ T`̀ 90 L0`.jN +8O<㊈xA('hq(g@ +D9Q΢?r=Ѣ02AK!EZ[=2H&rg0L(Q̯DFQQ>BXoQ>&c~= +a|0W!e?C`.{W{n(\naPŌQUHJPejTٖKBKUPP`!FHl ^];+ Ah*%x{FXYlA] 1hvU`]vܕ#( :ʠhfwU2[*JHJ? muۯJPl__UvR]SfbUV$5o0fZ\,^ՂXɛDfjTf\l4WWK穟eBXx8АCjV|L/)(ב{dKMYM尘+x:Y7uU&fUZfs D bUaOmq?CXj+7}0TPU8S<3VjNWd/hKk앺*:b u]ТEbx +yѢEJQ[\fB"OZբuԲ"#Vk+TV*\'XU/c"3QM(b158X$=3sf,Jr O~͂Z{uEnjFR(ދYբj]K}kP2c:V^ +`]p+^i> Zw}{vާyˣG'|j +endstream +endobj +222 0 obj +<< /Type /FontDescriptor +/FontName /7c8351+NotoSerif-Italic +/FontFile2 221 0 R +/FontBBox [-254 -250 1238 1047] +/Flags 70 +/StemV 0 +/ItalicAngle -12.0 +/Ascent 1068 +/Descent -292 +/CapHeight 1462 +/XHeight 1098 +>> +endobj +223 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +224 0 obj +[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 250 288 1000 559 559 559 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 705 1000 626 1000 1000 1000 1000 792 1000 1000 1000 623 937 763 1000 620 1000 1000 543 612 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 458 1000 579 562 486 1000 493 317 556 599 304 1000 568 304 895 599 574 577 1000 467 463 368 599 1000 1000 1000 527 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +225 0 obj +<< /Length1 7108 +/Length 4843 +/Filter [/FlateDecode] +>> +stream +x8 TSW I^1A@I $G% +1D ?ZA*hNJuñngvtTn봝=uc]Xi;ۿ}Aٳp~}!@I$<ַ|ϗNhoㇳq !vhXBQz|tՈ'!\inҊ7-˷o)7mxaB3pC<х (f!H\ӝξ}Os9BfpՓp*Y  $f!= 'AEJ8+cQcM&OH$'%̚6'}H2,Sv<2?L,yt,,*.z|*H%"{~ v*fjخ8`N+>C1C)38b'$dl֤Sy)ۑGMl +0n,cj_5p@8SƮy:P_5F9гFMk0 kLSCY2Q?[s'> h:mBS.8DPۆ|;weœ=W_U,z{MGxEq#+|}<(IqCk)p]V$#1FrdIE 6. σKq[LpfQ|W|>eHDS@,GQ ^"=~|~KC;<E3#*4m4frU.Ã!Z,SUmݴeeeyyv\{c MHDU[" nc6&j^gKƿb j+zP/PPG 1Jb7@fkPf=RѴ硫`MYqn o8.);7^O8N(7S%xNw9|pË2O2 i5s K(]@c*xHxunΟ{b-(1i=0!J4G,0oy{В_W8r3 7. 3v=G}"+GwuA'&C/ӂAdix\haYc yC'd|uWXNSWE{,Ǝj8|5H UФDU)Qks&2T{G"#v*=+~Yxjв{pTHb".=0%%Ɯ3É݊-嵖p{=89BMcʼANwknlws tx̄XG.)`B`)- ` \{SH(9%1iOі8z{Gc(6C]2NϢعOO43,Zx/w/1va;gyznc߹[Pn]/TkzywѭH!ιd u Bb>EjC9TZ%H'KEru]L-67ֿXUύ jCqL.}yYeg7bmy47v7is*׶&t;+3O>v\4 +'qOD`Wvh໋ +i;lÏ@|%{l. BJb>H,?\Ӗj*L^ mFvrw Z'Q&-Ils,;QeEiq{;YDbu{M#J#;9ϳZ{L3a5!Om9ħ<=g&:}9/XSY4؜%0!V2gVmlfmcjL[9!k>˫sYbDiY5GS8Y;ϝV +--%B 4PGl.֚,;~g>Z̚FTəU}eZyNgj҉c~,ObӲe~P{CA >ȩiAwQ~_9<~VۜmN!ܱ҅m|KLI-椞}H\tMC*}b"\xl\93ź!҉q|{DxruU9 Ss;=@n\ 3$;㨨dT8cT[6W6ٷ7פ&fڴGWupU5hEӒZ\k0%U 9f쪅L#)Ņ`ue`_QF+o }d H֒.MO)yWKkDZ?v7BIiX:׷mD$:Fm#+7TnaY 1F 6faR" >y#RC $p8aà27 + n5Yn|ݏ b8iu;r{#eL{`oa~ty7wt26@/G r`Jj#~\"v9i<}SmwR!?}⌰*s+՟9ķl-6Xr-8 GakzRh&6\4͉r[\.!Qb] :?oj4_74MQX`6\ȵD9j¼6UQ#o7Rq,M1$hjBz1-͖BA=--Qd2Ewkj -ifv5$c*jxCTiGIqcT)uX܅c8].15ш̆ՙa6Ghl[gh4DH$LY UÕmaxԋDlgEN%WRTÕa4Aieٌ"Z7\TcQ~7 mtMh"s0Bķ[=UvTgF%w3#:j6o8IӉ!7g_T彡`謎 ^zsh|XXĒ_> +endobj +227 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +228 0 obj +[500 1000 500 1000 500 1000 1000 1000 500 500 1000 1000 500 500 500 500 500 500 1000 500 1000 1000 1000 1000 1000 1000 500 1000 500 500 500 1000 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 1000 500 500 500 500 500 500 500 500 1000 500 500 500 1000 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 1000 500 1000 500 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +229 0 obj +<< /Length1 3844 +/Length 2621 +/Filter [/FlateDecode] +>> +stream +xV{lS?<'!n ^?B$p ^`8kq +l-3eFՉLPu1PסmTiPu$!uebUZ^j^;w~| rh<2ۺy(яMac nj&)ѿ -@x|~y%8x,Oc Ǖ,q + ]]Iw5Vn6c[<0d< +Sf;Bűctv,Zp|c}ٞ9X>ɀ/#w)&-mֺ\( `,*._Dd\ D,ִX49=&cI>y4.\f4)!V+Ӏ*(:0腢 +KXU8zVSX39Eȫ1+22 +ӽazY1_a,,ϽHo ;hm+4;"jhoP fOKύL$odz}4LAT 2KP,BũS!r7ȶ 4o]7 +{g1VbU@Cuxm=B[{5|t˝hĖ@z7ocz\1qUI%dk^p;-'ؽ 'O4SAoReX$6 Ы+g25ŜC31Qfn, :Sm)F.A2h9dS8 (^Z vkS~Rz;csiQjN(4\u.ZH }BmUQ 4H,Ec,`Bpco +Ёn]$~~D}eI޻i7g]- >ӮKd[9I #95d +;Oˤ P(,#MC@ I]Jp:%s%bp%bnH9VDmP6%mARyLoMZ1}6f)D8xܡAa;WAwАIɴTD"M6ڥ,8sr a8ISsRK`(KF8i0aSR#pʮT`FlN21!#\V!^.󌮹$מG$w<1䍱)Sb6w4D6)nfE-s卵\(g2K$Jb@|璝I> Tإ zc $YG&> 350,m]#|2S₡&8Sh^mi!K)X⇑=b†-yoo> +endobj +231 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +232 0 obj +[1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 1000 500 500 500 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 500 500 500 500 500 500 1000 500 500 1000 1000 500 500 500 500 500 1000 500 500 500 500 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +233 0 obj +<< /Length1 3536 +/Length 2105 +/Filter [/FlateDecode] +>> +stream +xVkh>w%[X~kGRHqpGp}@q(+m##VW+8@k|T; jhr ZKaѱzHGڸVO\:aZhÊ<2Uϔ4+|Y3hdk +Kybsm/a\fVZǠ+]–3sX(;h[CLWIՅh];=:M0b"7'6qꕉH6zXn;;9\Q^g8-t4<%{̱a8?S'v-~ifF+Ջ>+PwovwXK@굫~aVնQ[I8 s٭oF&=Prđ~G-{~;=|So~[CAxzU)zJckt#snk /ҧ&NY{3->p6V Rq-o`=xܖJX[y.rv6{G;k3WU3 wRG}KǮ&B(ۋSb ZE} }R.C##\UcןP?A^]3bzUP3@%Zԑ*Qr-x:N.|>C Uki&^jsu4‡ë^#P_7Wc{>EW47T3jR3o ڱ"y :C:Vl]V]'ݧ(.M_ОLuSSK5lp-A~v쭛s'N]&7R2kG/#p7pdr{ǃv 'rL[-*K^康gMmߦǷH|yPisW@ yq2%1P`iccҵ" +u\ro}vL?aK ߝ~zq$L\EL shq7'u ~`80kbߚ8 Qp1g`/9m,TK&΂0q 4 Vp+OMZ*l&MxjKK]6RSLG&^Nz`?}zv7Mx&^`smp[Χ)M:˜&3Da(PA9 Er yHCRq:)g@F+YoCdn*qJTaVΧ*Rq֬1# j&.D4)A=!vDͪr+R2M +–Ga#> +endobj +235 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +236 0 obj +[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 952 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 665 1000 1000 1000 535 403 1000 1000 354 1000 597 354 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +237 0 obj +<< /Length1 2308 +/Length 1328 +/Filter [/FlateDecode] +>> +stream +xV]lU>wflavf@  tݖf4a;qwK(`d/|MDxS41h@x t=w|=?9{] Pwr""s4M/|;@L1gAl& #۰ q5y Ně $*⃈p<:z$Gb3g_*>،DSGXޙ( ӘY!J 64{yI-HCw(Iti?kD,~OvsPHmW\11/cd렦;r$WNnAHT$ImX]!F)wj&w`TBo%V"-T[.DD'ʂ g/t ^-pQ2dl֓#K~_|"/ rRA/yWan{§dQ4B>n+:󥩉J{n Mv$Slzh0dv@y(L$Tr#v@F;̙phɞJ9I)&1̀pȮ$JXi2A';Εc"̢<0IH_4$tؿ=jSYuQ<*%`tه|̕<6[sMǦo, q|КeԙF9 `֞ƓȻEG^ڝ!ʿ>^=x̷ aho2d@B:56YKF&k04 6/czq~HsMgD7ؚ$m0kVMEg6FY*iS|UTm33~ƣȯfDU?ja;0M,-l":=56aifJ-S!>*EbgU|0Z]E1#5 G +f^;k4gA{Դ5M :~XtTWNY +=?N4xz)J^sq ԏj mVS5Q\pDa4\l_uUj!|Y M74M섇6k؄:;#WE{R$K/.{+wo5kP8Tָ/{P9aVƐŹ kB +I7@y +endstream +endobj +238 0 obj +<< /Type /FontDescriptor +/FontName /ebad8f+mplus-1p-regular +/FontFile2 237 0 R +/FontBBox [-109 -288 1403 1075] +/Flags 4 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 860 +/Descent -140 +/CapHeight 860 +/XHeight 0 +>> +endobj +239 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +240 0 obj +[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 472 1000 1000 1000 1000 288 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +241 0 obj +<< /Length1 6204 +/Length 4350 +/Filter [/FlateDecode] +>> +stream +x7itTU$$U%KeyU/,UVBLB!P!fRّiNGf".Gg4>4C8"apЃy@N>Ťȳ=#c_#|H$ot,q/3<=|d0B6aLm}+ \0d` IH1؀\sME-'qwH'T"#ac!-B"޸#ĸ }cM׏㺰o$W2AI c'AMP*ՐEqwOD-% FbJN!$IFfgPv-7/pϿli2%Q +z(PDw+xm<}@;=@/ 1QKpp +l7ýi͊x"8 IaE'f1,G,3߭iy[\_]\ v#`A}:m300+a7t$!OE'[ȓ%<~kQ~x_ U7]Wp^!qH]Mk!h}f(ޚFCr&]L[QQ떾gK$e⠠W 8VUu 2 @~_wr̕CRvr5^[wxuæ}6fWBI^}`v +(ZJeTs9pFW>~IxZG +Oٚ+M2jd/|hoN/X q+ꪅb߿?ɉt^A:z\XuZoT${m8{i;OLˆG|>%&ԶUBlzԥ̶BRtXgG]cv.ғ;{؝@}7m,pƕ+7砋>x]z-< 0Fx[$(6( 4Z̻?k켳UyOuιu)>v$z{2@ D4cHGDk/93qXL8%JV:gC_a|bp4iކ톨Lʮa$Vi) +`V*)b}xpzRsҎ vLƙ˦P(3$l.+ʇǧMxڭck}fM;aR |$V `>s%\*O=M%厵}`T8wMe2k +'7so~,/Jufd=yEWK4Ot{U:u;D7=m9_T%)EC z3-)1Y5(]|E2)QZm^4- a?5K/0XKr[fiC^[ץX:E`wpJq o6$B/^+餝laYk"f![O axkeVkQv'~D`DQ|xq#7U>Y#O?r4M*s* Db)HƄ ۑo۞[z*SdhRm.ܱ^4'n<̯xyJ̡4:-54ѽ*tul4>nN- E~M0c(R!..y ']]6eR)}CA2\|devFa<匬Y M7R^-F|sȗ- aY9W?XVVz I,ԅTc@m +Q^91A$Hmig:4[e}k6_4QIDG3\ep/ j->90_47=XF;n._m[גh ?bׯ$CQ +?T!ɜ,RiR{T6 ƝL/[mKZӶ /G?w]$2acIVZ ž'_KuACpE0 ߴŋD`!g^Kh$"#zC ;%ydUK qdt32Ohh*5`N [jji+kF8h6@ȷ$pׇr3"p~j7$t0߽4fˤU[m$c / \xjrҤ=•={ ]8t2! JB 0蓵V9cٹHc ?M>3*}%~6F5)Uާ_;}' +D)}%L"U$ }b<#X/đjع|tl`T^O>*.phMm\svydmd ~2Gz75XzʡޚPWm%U=js9iC%#Hp/{лb42bt?̹ +2NF½#v.' 2 d&,2Qlph@p^dzgҹ yu͟^yOLFb4|N"QD%K<Ҟ}dlxz:7#"qه2NNNOCc.PeEHw )N#z'$$4A}/$CϬ + |ݍ_~O|;.)):6n,Ea:| k+% 8ʈP`'$JQ_-hF뷄/Bޮw1 +ghՁ`-8 +` +lF!gT`W-e{?7O[*{0bKH<ʱs3vfH;iDq-nUۊq$"gtňh"gE(i΄g96YbXBqV`ĝ֬ 8wA'E5[ɯ\f [(#in[9fxϐG+c0[ҲK)4jKv7K2q n5[ +Π@Y5w 68Zf$[` 0{hw%aWbf?S[}/?rrH%TVW3ZtGgAf䞯6|5j2> +endobj +243 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xenFὮBtHs&@nu{stԒ + }i /y_!ut~]snVyg쾝+|<.÷}v)[eO/_q9_ɯ}ഏOmt_LLv͵LJ1w9)e6=nPҪtN*eP)DT.ʕrU)BYTVʪQ6[ky ^#k5x5F^ky ^#k5x5F^kZy-^+kxZV^kZy-^+kxZV^:y^'uxu:N^:y^'uxu:N^zy=^/xz^^zy=^/xz^ހ7y o xo7 Aހ7y o xo7 Aވ7Fy#(oĻnuW.I$$*I$ITH$$QI"IDD%$JI$$*I$ITH$$III$$%I$I|›Mx o7M&Iބ7ɛ&y$o›Mx o7M.xyUo ުMMol x; +JÂ31x; +JJ특xxx+!ÊwBxbx+ށr;2kΜJYeY7+|x oS7+[ƛețךyޢoV浖 -㭌"RW*4XqC^J[(^1»y]k}YM-x Vz[YEVY_}/7*Y%eӫq+:.7JE/3Y(Y*AW RVJS:(u@cD]a*f)9J)o,#\Z>MU\jPS {HSMj{fkyGm[z*Esa>&ӫj%u; 2^W[®v[2쯲u[P:V̡Յ> MBi2 .Ħԇ!dk`=o qWޕwdJF(L164U)x0E~Z?=/ί~:o?$O +endstream +endobj +244 0 obj +[500 500 500 1000 1000 1000 1000 500 500 500 1000 1000 500 1000 500 500 500 500 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 500 500 500 500 1000 500 500 500 500 500 1000 500 500 500 1000 1000 500 1000 500 500 500 1000 500 500 500 500 500 500 500 1000 1000 1000 1000 1000 1000 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +245 0 obj +<< /Length1 2356 +/Length 1171 +/Filter [/FlateDecode] +>> +stream +xUMlE~IӀ Ҫ +m8i@Q*5W\UT Բwػ q#R[pGH zP!D\8 R $q!g֚}ޛoތQF)ArMS|Bˉ/^YG?L Oڵp' +`?϶M}ۮSO:=ɪa墖u6^ +_˯( :&E">Ї)? +uk@Kw:}~br<{XC]cIVrMÙ_zΚKʫk7KJe~ѰwYu;/4On +v~г%wa $F}Zbrdnb$ƑgǾ +M!7qE?$e"myayy.Rj{CrSʉ}]LIrw*TS,jժF VUk#ރp:6%(MoK\nX +g 'MSx)'(;/eXN]4[7 1_#$ O{(aS)E{)NMb PC LADC7FPP;yY5Uڕo ttdI >\93p,^;+R4U!*F2/5FS(-R [q Dq*!<); SV Sj٫iu x(SM4,,*85U^x͕{Iu&%a8uShNt(p m^F'G +̪O\8L5` ufOǼ9 k8puVmehٹBqn$ʢz*}hA< +oPEGZݎpVӿ+Iq}LJv{QV$n[ o +endstream +endobj +246 0 obj +<< /Type /FontDescriptor +/FontName /427dad+NotoSerif +/FontFile2 245 0 R +/FontBBox [-212 -250 1246 1047] +/Flags 6 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 1068 +/Descent -292 +/CapHeight 1462 +/XHeight 1098 +>> +endobj +247 0 obj +<< /Length 228 +/Filter [/FlateDecode] +>> +stream +x]n <"ANi.9liD!o?CNЏyx/?r4#p>،kܲAp7Z7N7Wl9SvJ1U/}p0 +endstream +endobj +248 0 obj +[259 354 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +xref +0 249 +0000000000 65535 f +0000000015 00000 n +0000000398 00000 n +0000000602 00000 n +0000000766 00000 n +0000000817 00000 n +0000001089 00000 n +0000002071 00000 n +0000002367 00000 n +0000002534 00000 n +0000024625 00000 n +0000025425 00000 n +0000034574 00000 n +0000034988 00000 n +0000035032 00000 n +0000035081 00000 n +0000035133 00000 n +0000035177 00000 n +0000035350 00000 n +0000035394 00000 n +0000035569 00000 n +0000035684 00000 n +0000035728 00000 n +0000035844 00000 n +0000035961 00000 n +0000036005 00000 n +0000036120 00000 n +0000036236 00000 n +0000036280 00000 n +0000036394 00000 n +0000036507 00000 n +0000036551 00000 n +0000036595 00000 n +0000050586 00000 n +0000051012 00000 n +0000051056 00000 n +0000051173 00000 n +0000051288 00000 n +0000051451 00000 n +0000051495 00000 n +0000051670 00000 n +0000051783 00000 n +0000051827 00000 n +0000051944 00000 n +0000052118 00000 n +0000067502 00000 n +0000067920 00000 n +0000068036 00000 n +0000068080 00000 n +0000068124 00000 n +0000068303 00000 n +0000068419 00000 n +0000086081 00000 n +0000086493 00000 n +0000086610 00000 n +0000086654 00000 n +0000086822 00000 n +0000086989 00000 n +0000087164 00000 n +0000087208 00000 n +0000087251 00000 n +0000103057 00000 n +0000103425 00000 n +0000103469 00000 n +0000103513 00000 n +0000103557 00000 n +0000122311 00000 n +0000122709 00000 n +0000122753 00000 n +0000122797 00000 n +0000123234 00000 n +0000123791 00000 n +0000123835 00000 n +0000123965 00000 n +0000140412 00000 n +0000140843 00000 n +0000140887 00000 n +0000141059 00000 n +0000141277 00000 n +0000141443 00000 n +0000149721 00000 n +0000150076 00000 n +0000156692 00000 n +0000157047 00000 n +0000157091 00000 n +0000166539 00000 n +0000166944 00000 n +0000166988 00000 n +0000167206 00000 n +0000167423 00000 n +0000183674 00000 n +0000184042 00000 n +0000192880 00000 n +0000193280 00000 n +0000193461 00000 n +0000193643 00000 n +0000193825 00000 n +0000194007 00000 n +0000194189 00000 n +0000204952 00000 n +0000205347 00000 n +0000205392 00000 n +0000205437 00000 n +0000205482 00000 n +0000205651 00000 n +0000205696 00000 n +0000210187 00000 n +0000210557 00000 n +0000210603 00000 n +0000210649 00000 n +0000210695 00000 n +0000210741 00000 n +0000210787 00000 n +0000210833 00000 n +0000211011 00000 n +0000211057 00000 n +0000211446 00000 n +0000211611 00000 n +0000211744 00000 n +0000211878 00000 n +0000212016 00000 n +0000212156 00000 n +0000212291 00000 n +0000212428 00000 n +0000212561 00000 n +0000212695 00000 n +0000212828 00000 n +0000212963 00000 n +0000213090 00000 n +0000213218 00000 n +0000213340 00000 n +0000213463 00000 n +0000213588 00000 n +0000213715 00000 n +0000213842 00000 n +0000213970 00000 n +0000214138 00000 n +0000214307 00000 n +0000214436 00000 n +0000214566 00000 n +0000214700 00000 n +0000214835 00000 n +0000214971 00000 n +0000215108 00000 n +0000215272 00000 n +0000215437 00000 n +0000215581 00000 n +0000215726 00000 n +0000215853 00000 n +0000215982 00000 n +0000216115 00000 n +0000216249 00000 n +0000216384 00000 n +0000216520 00000 n +0000216657 00000 n +0000216796 00000 n +0000216935 00000 n +0000217075 00000 n +0000217219 00000 n +0000217364 00000 n +0000217491 00000 n +0000217620 00000 n +0000217792 00000 n +0000217965 00000 n +0000218095 00000 n +0000218225 00000 n +0000218345 00000 n +0000218467 00000 n +0000218599 00000 n +0000218731 00000 n +0000218852 00000 n +0000218973 00000 n +0000219098 00000 n +0000219223 00000 n +0000219350 00000 n +0000219477 00000 n +0000219601 00000 n +0000219725 00000 n +0000219996 00000 n +0000220267 00000 n +0000220345 00000 n +0000220730 00000 n +0000220922 00000 n +0000221151 00000 n +0000221361 00000 n +0000221559 00000 n +0000221759 00000 n +0000221963 00000 n +0000222169 00000 n +0000222311 00000 n +0000222483 00000 n +0000222688 00000 n +0000223004 00000 n +0000223217 00000 n +0000223407 00000 n +0000223619 00000 n +0000223933 00000 n +0000224180 00000 n +0000224375 00000 n +0000224561 00000 n +0000224751 00000 n +0000224971 00000 n +0000225195 00000 n +0000225439 00000 n +0000225648 00000 n +0000225976 00000 n +0000226164 00000 n +0000226349 00000 n +0000226531 00000 n +0000226673 00000 n +0000226841 00000 n +0000227018 00000 n +0000227169 00000 n +0000227452 00000 n +0000235879 00000 n +0000236095 00000 n +0000237458 00000 n +0000238514 00000 n +0000244881 00000 n +0000245102 00000 n +0000246465 00000 n +0000247556 00000 n +0000251688 00000 n +0000251914 00000 n +0000253277 00000 n +0000254382 00000 n +0000259316 00000 n +0000259530 00000 n +0000260893 00000 n +0000261959 00000 n +0000264671 00000 n +0000264884 00000 n +0000266247 00000 n +0000267361 00000 n +0000269557 00000 n +0000269787 00000 n +0000271150 00000 n +0000272282 00000 n +0000273701 00000 n +0000273919 00000 n +0000275282 00000 n +0000276419 00000 n +0000280860 00000 n +0000281071 00000 n +0000282434 00000 n +0000283510 00000 n +0000284772 00000 n +0000284988 00000 n +0000285292 00000 n +trailer +<< /Size 249 +/Root 2 0 R +/Info 1 0 R +>> +startxref +286429 +%%EOF diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/UG/images/Overview.png b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/UG/images/Overview.png new file mode 100644 index 0000000000000000000000000000000000000000..8cd7437f84f8640658b9c7d71cd99e712cd579c1 Binary files /dev/null and b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/UG/images/Overview.png differ diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/change.log b/ttcn/modules/titan.TestPorts.HTTPmsg/module/doc/change.log new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_MessageLen.ttcn b/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_MessageLen.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..a2c49c37c5853c0e1d30328684d33bde80888c7b --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_MessageLen.ttcn @@ -0,0 +1,24 @@ +/****************************************************************************** +* Copyright (c) 2000-2019 Ericsson Telecom AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v2.0 +* which accompanies this distribution, and is available at +* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html +* +* Contributors: +* Eduard Czimbalmos - initial implementation and initial documentation +* Istvan Ovary +* Peter Dimitrov +* Balasko Jeno +* Gabor Szalai +******************************************************************************/ +/////////////////////////////////////////////////////////////////////////////// +// +// File: HTTPmsg_MessageLen.ttcn +// Description: HTTP Message length calculator +// Rev: R9B +// Prodnr: CNL 113 469 + +module HTTPmsg_MessageLen{ + external function f_HTTPMessage_len(in octetstring stream) return integer +} diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_MessageLen_Function.cc b/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_MessageLen_Function.cc new file mode 100644 index 0000000000000000000000000000000000000000..0284415705fd9e8a7a04dc1e8f191de15b894d7f --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_MessageLen_Function.cc @@ -0,0 +1,49 @@ +/****************************************************************************** +* Copyright (c) 2000-2019 Ericsson Telecom AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v2.0 +* which accompanies this distribution, and is available at +* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html +* +* Contributors: +* Eduard Czimbalmos - initial implementation and initial documentation +* Istvan Ovary +* Peter Dimitrov +* Balasko Jeno +* Gabor Szalai +******************************************************************************/ +// +// File: HTTPmsg_MessageLen_Function.cc +// Description: HTTP Message length calculator +// Rev: R9B +// Prodnr: CNL 113 469 + +#include "HTTPmsg_PT.hh" +#include "HTTPmsg_Types.hh" +#include "HTTPmsg_MessageLen.hh" + +using namespace HTTPmsg__Types; +using namespace HTTPmsg__PortType; + +namespace HTTPmsg__MessageLen { +INTEGER f__HTTPMessage__len(OCTETSTRING const& stream) { + HTTPMessage msg; + TTCN_Buffer *buf_p = new TTCN_Buffer() ; + buf_p->put_os(stream); + + int buf_len = buf_p->get_read_len(); + if( buf_len > 0) + { + if(f_HTTP_decodeCommon(buf_p, msg, true, false, NULL, NULL)) + { + buf_len -= buf_p->get_read_len(); + } + else + buf_len = -1; + + + } else buf_len = -1; + delete buf_p; + return buf_len; +} +} diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_PT.cc b/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_PT.cc new file mode 100644 index 0000000000000000000000000000000000000000..3daf3c85e7bf312718fbab47cf2bce0118752408 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_PT.cc @@ -0,0 +1,1270 @@ +/****************************************************************************** +* Copyright (c) 2000-2019 Ericsson Telecom AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v2.0 +* which accompanies this distribution, and is available at +* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html +* +* Contributors: +* Eduard Czimbalmos - initial implementation and initial documentation +* Istvan Ovary +* Peter Dimitrov +* Balasko Jeno +* Gabor Szalai +******************************************************************************/ +// +// File: HTTPmsg_PT.cc +// Description: HTTP test port implementation +// Rev: R9B +// Prodnr: CNL 113 469 + + +#include "HTTPmsg_PT.hh" + +#include +#include + +#ifdef AS_USE_SSL +#include +#include +#include +#endif + +static bool report_lf=true; + +namespace HTTPmsg__PortType { + +HTTPmsg__PT::HTTPmsg__PT(const char *par_port_name) + : HTTPmsg__PT_BASE(par_port_name) +{ + parameter_set(use_connection_ASPs_name(), "yes"); + parameter_set(server_backlog_name(), "1024"); + use_notification_ASPs = false; + set_ttcn_buffer_usercontrol(true); + set_handle_half_close(true); + adding_client_connection = false; + adding_ssl_connection = false; + server_use_ssl = false; +#ifdef AS_USE_SSL + + set_ssl_use_ssl(true); +#endif + use_send_failed = false; + last_msg = NULL; +} + +HTTPmsg__PT::~HTTPmsg__PT() +{ + +} + +void HTTPmsg__PT::set_parameter(const char *parameter_name, + const char *parameter_value) +{ + log_debug("entering HTTPmsg__PT::set_parameter(%s, %s)", parameter_name, parameter_value); + if(strcasecmp(parameter_name, use_notification_ASPs_name()) == 0) { + if (strcasecmp(parameter_value,"yes")==0) use_notification_ASPs = true; + else if (strcasecmp(parameter_value,"no")==0) use_notification_ASPs = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, use_notification_ASPs_name()); + } else if(strcasecmp(parameter_name, "report_failed_message") == 0){ + if (strcasecmp(parameter_value,"yes")==0) use_send_failed = true; + else if (strcasecmp(parameter_value,"no")==0) use_send_failed = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, "report_failed_message"); + } + else if((strcasecmp(parameter_name, use_connection_ASPs_name()) == 0) || !parameter_set(parameter_name ,parameter_value)) { + log_warning("HTTPmsg__PT::set_parameter(): Unsupported Test Port parameter: %s", parameter_name); + } + log_debug("leaving HTTPmsg__PT::set_parameter(%s, %s)", parameter_name, parameter_value); +} + +void HTTPmsg__PT::Handle_Fd_Event(int fd, + boolean is_readable, boolean is_writable, boolean is_error) +{ + log_debug("-------------- entering HTTPmsg__PT::Handle_Fd_Event() - event received on a connection"); + Handle_Socket_Event(fd, is_readable, is_writable, is_error); + log_debug("leaving HTTPmsg__PT::Handle_Fd_Event()"); +} + +void HTTPmsg__PT::Handle_Timeout(double time_since_last_call) +{ + log_debug("entering HTTPmsg__PT::Handle_Timeout()"); + Handle_Timeout_Event(time_since_last_call); + log_debug("leaving HTTPmsg__PT::Handle_Timeout()"); +} + +void HTTPmsg__PT::user_map(const char *system_port) +{ + log_debug("entering HTTPmsg__PT::user_map(%s)",system_port); + if(TTCN_Logger::log_this_event(TTCN_DEBUG)) { + if(!get_socket_debugging()) + log_warning("%s: to switch on HTTP test port debugging, set the '*.%s.http_debugging := \"yes\" in the port's parameters.", get_name(), get_name()); + } + map_user(); + log_debug("leaving HTTPmsg__PT::user_map()"); +} + +void HTTPmsg__PT::user_unmap(const char *system_port) +{ + log_debug("entering HTTPmsg__PT::user_unmap(%s)",system_port); + + unmap_user(); + + log_debug("leaving HTTPmsg__PT::user_unmap()"); +} + +void HTTPmsg__PT::user_start() +{ +} + +void HTTPmsg__PT::user_stop() +{ +} + +void HTTPmsg__PT::outgoing_send(const HTTPmsg__Types::Close& send_par) +{ + log_debug("entering HTTPmsg__PT::outgoing_send(Close)"); + + if(send_par.client__id().ispresent()) + remove_client((int)send_par.client__id()()); + else + remove_all_clients(); + + log_debug("leaving HTTPmsg__PT::outgoing_send(Close)"); +} + +void HTTPmsg__PT::outgoing_send(const HTTPmsg__Types::Connect& send_par) +{ + log_debug("entering HTTPmsg__PT::outgoing_send(Connect)"); + + adding_ssl_connection = send_par.use__ssl(); + adding_client_connection = true; + +#ifndef AS_USE_SSL + if(adding_ssl_connection) + { + log_error("%s: HTTP test port is not compiled to support SSL connections. Please check the User's Guide for instructions on compiling the HTTP test port with SSL support.", get_name()); + } +#endif + + int client_id = open_client_connection(send_par.hostname(),int2str((INTEGER)send_par.portnumber()),NULL,NULL); + + adding_ssl_connection = false; + adding_client_connection = false; + + log_debug("leaving HTTPmsg__PT::outgoing_send(Connect),client_id: %d", client_id); +} + +void HTTPmsg__PT::outgoing_send(const HTTPmsg__Types::Listen& send_par) +{ + log_debug("entering HTTPmsg__PT::outgoing_send(Listen)"); + + server_use_ssl = send_par.use__ssl(); + + if(server_use_ssl) + { + #ifndef AS_USE_SSL + log_error("%s: HTTP test port is not compiled to support SSL connections. Please check the User's Guide for instructions on compiling the HTTP test port with SSL support.", get_name()); + #endif + } + + if(send_par.local__hostname().ispresent()) + { + + open_listen_port(send_par.local__hostname()(),int2str((INTEGER)send_par.portnumber())); + + } + else + { + log_debug("using IN_ADDR_ANY as local host name"); + open_listen_port(NULL,int2str((INTEGER)send_par.portnumber())); + + } + + log_debug("leaving HTTPmsg__PT::outgoing_send(Listen)"); + +} + +void HTTPmsg__PT::outgoing_send(const HTTPmsg__Types::Half__close& send_par) +{ + log_debug("entering HTTPmsg__PT::outgoing_send(Half_close)"); + + if(send_par.client__id().ispresent()) + send_shutdown((int)send_par.client__id()()); + else + send_shutdown(); + + log_debug("leaving HTTPmsg__PT::outgoing_send(Half_close)"); + +} + +void HTTPmsg__PT::outgoing_send(const HTTPmsg__Types::Shutdown& /*send_par*/) +{ + log_debug("entering HTTPmsg__PT::outgoing_send(Shutdown)"); + + close_listen_port(); + + log_debug("leaving HTTPmsg__PT::outgoing_send(Shutdown)"); +} + +void HTTPmsg__PT::outgoing_send(const HTTPmsg__Types::HTTPMessage& send_par) +{ + log_debug("entering HTTPmsg__PT::outgoing_send(HTTPMessage)"); + + TTCN_Buffer snd_buf; + int client_id = -1; + last_msg = &send_par; + + switch(send_par.get_selection()) + { + case HTTPmsg__Types::HTTPMessage::ALT_request: + { + if(send_par.request().client__id().ispresent()) + client_id = send_par.request().client__id()(); + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_request__binary: + { + if(send_par.request__binary().client__id().ispresent()) + client_id = send_par.request__binary().client__id()(); + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_response: + { + if(send_par.response().client__id().ispresent()) + client_id = send_par.response().client__id()(); + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_response__binary: + { + if(send_par.response__binary().client__id().ispresent()) + client_id = send_par.response__binary().client__id()(); + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_erronous__msg: + { + if(send_par.erronous__msg().client__id().ispresent()) + client_id = send_par.erronous__msg().client__id()(); + break; + } + default: + TTCN_error("Unknown HTTP_Message type to encode and send!"); + } + + f_HTTP_encodeCommon(send_par, snd_buf); + + if(client_id >= 0) + send_outgoing(snd_buf.get_data(), snd_buf.get_len(), client_id); + else + send_outgoing(snd_buf.get_data(), snd_buf.get_len()); + + last_msg = NULL; + log_debug("leaving HTTPmsg__PT::outgoing_send(HTTPMessage)"); +} + +void HTTPmsg__PT::report_unsent(int client_id, int /*msg_length*/, int /*sent_length*/, const unsigned char* /*msg*/, const char* /*error_text*/) +{ + if(use_send_failed && last_msg){ + HTTPmsg__Types::Send__failed asp; + asp.msg()=*last_msg; + asp.already__half__closed()= (get_peer(client_id,true)->tcp_state) == CLOSE_WAIT ; + + incoming_message(asp); + } +} + + +void HTTPmsg__PT::client_connection_opened(int client_id) +{ + log_debug("entering HTTPmsg__PT::client_connection_opened(%d)", client_id); + + if(use_notification_ASPs) + { + HTTPmsg__Types::Connect__result asp; + asp.client__id() = client_id; + incoming_message(asp); + } + else if(client_id < 0) + log_error("Cannot connect to server"); + + log_debug("leaving HTTPmsg__PT::client_connection_opened()"); +} + +void HTTPmsg__PT::listen_port_opened(int port_number) +{ + log_debug("entering HTTPmsg__PT::listen_port_opened(%d)", port_number); + + if(use_notification_ASPs) + { + HTTPmsg__Types::Listen__result asp; + asp.portnumber() = port_number; + incoming_message(asp); + } + else if(port_number < 0) + log_error("Cannot listen at port"); + + log_debug("leaving HTTPmsg__PT::listen_port_opened()"); +} + +void HTTPmsg__PT::message_incoming(const unsigned char* /*msg*/, int /*messageLength*/, int client_id) +{ + log_debug("entering HTTPmsg__PT::message_incoming()"); + + TTCN_Buffer* buf_p = get_buffer(client_id); + + while(buf_p->get_read_len() > 0) + { + log_debug("HTTPmsg__PT::message_incoming(): decoding next message, len: %d", (int)buf_p->get_read_len()); + if(!HTTP_decode(buf_p, client_id)) + break; + } + + log_debug("leaving HTTPmsg__PT::message_incoming()"); +} + +void HTTPmsg__PT::peer_half_closed(int client_id) +{ + log_debug("entering HTTPmsg__PT::peer_half_closed(client_id: %d)", client_id); + + TTCN_Buffer* buf_p = get_buffer(client_id); + buf_p->rewind(); + while(buf_p->get_read_len() > 0) + { + log_debug("HTTPmsg__PT::remove_client(): decoding next message, len: %d", (int)buf_p->get_read_len()); + if(!HTTP_decode(buf_p, client_id,true)) + break; + } + + HTTPmsg__Types::Half__close asp; + asp.client__id() = client_id; + incoming_message(asp); + + log_debug("leaving HTTPmsg__PT::peer_half_closed(client_id: %d)", client_id); +} + +void HTTPmsg__PT::peer_disconnected(int client_id) +{ + log_debug("entering HTTPmsg__PT::peer_disconnected(client_id: %d)", client_id); + + if(use_notification_ASPs) + { + HTTPmsg__Types::Close asp; + asp.client__id() = client_id; + incoming_message(asp); + } + else Abstract_Socket::peer_disconnected(client_id); + + log_debug("leaving HTTPmsg__PT::peer_disconnected(client_id: %d)", client_id); +} + +//void HTTPmsg__PT::peer_connected(int client_id, sockaddr_in& addr) + +void HTTPmsg__PT::peer_connected(int client_id, const char * host, const int port) +{ + log_debug("entering HTTPmsg__PT::peer_connected(%d)", client_id); + + if(use_notification_ASPs) + { + HTTPmsg__Types::Client__connected asp; + asp.hostname() = host; + asp.portnumber() = port; + asp.client__id() = client_id; + + incoming_message(asp); + } + else Abstract_Socket::peer_connected(client_id, host, port); + + log_debug("leaving HTTPmsg__PT::peer_connected()"); +} + +bool HTTPmsg__PT::add_user_data(int client_id) +{ + log_debug("entering HTTPmsg__PT::add_user_data(client_id: %d, use_ssl: %s)", + client_id, (adding_client_connection && adding_ssl_connection) || (server_use_ssl && !adding_ssl_connection) ? "yes" : "no"); + + set_server_mode(!adding_client_connection); + + if((adding_client_connection && !adding_ssl_connection) || (!adding_client_connection && !server_use_ssl)) + { + log_debug("leaving HTTPmsg__PT::add_user_data() with returning Abstract_Socket::add_user_data()"); + return Abstract_Socket::add_user_data(client_id); + } + else + { +#ifdef AS_USE_SSL + log_debug("leaving HTTPmsg__PT::add_user_data() with returning SSL_Socket::add_user_data()"); + return SSL_Socket::add_user_data(client_id); +#else + log_error("%s: HTTP test port is not compiled to support SSL connections. Please check the User's Guide for instructions on compiling the HTTP test port with SSL support.", get_name()); +#endif + } + + // Programming error in HTTPmsg__PT::add_user_data() + return false; +} + +bool HTTPmsg__PT::remove_user_data(int client_id) +{ + log_debug("entering HTTPmsg__PT::remove_user_data(client_id: %d", client_id); + +#ifdef AS_USE_SSL + if(get_user_data(client_id)) + { + // INFO: it is assumed that only SSL_Socket assigns user data to each peer + log_debug("leaving HTTPmsg__PT::remove_user_data() with returning SSL_Socket::remove_user_data()"); + return SSL_Socket::remove_user_data(client_id); + } +#endif + + log_debug("leaving HTTPmsg__PT::remove_user_data() with returning Abstract_Socket::remove_user_data()"); + return Abstract_Socket::remove_user_data(client_id); +} + +int HTTPmsg__PT::receive_message_on_fd(int client_id) +{ + log_debug("entering HTTPmsg__PT::receive_message_on_fd(client_id: %d)", client_id); + +#ifdef AS_USE_SSL + if(get_user_data(client_id)) + { + // INFO: it is assumed that only SSL_Socket assigns user data to each peer + log_debug("leaving HTTPmsg__PT::receive_message_on_fd() with returning SSL_Socket::receive_message_on_fd()"); + return SSL_Socket::receive_message_on_fd(client_id); + } +#endif + + log_debug("leaving HTTPmsg__PT::receive_message_on_fd() with returning Abstract_Socket::receive_message_on_fd()"); + return Abstract_Socket::receive_message_on_fd(client_id); +} + +void HTTPmsg__PT::remove_client(int client_id) +{ + log_debug("entering HTTPmsg__PT::remove_client(client_id: %d)", client_id); + + TTCN_Buffer* buf_p = get_buffer(client_id); + + while(buf_p->get_read_len() > 0) + { + log_debug("HTTPmsg__PT::remove_client(): decoding next message, len: %d", (int)buf_p->get_read_len()); + if(!HTTP_decode(buf_p, client_id,true)) + break; + } + +#ifdef AS_USE_SSL + if(get_user_data(client_id)) + { + // INFO: it is assumed that only SSL_Socket assigns user data to each peer + log_debug("leaving HTTPmsg__PT::remove_client() with returning SSL_Socket::remove_client()"); + return SSL_Socket::remove_client(client_id); + } +#endif + + log_debug("leaving HTTPmsg__PT::remove_client() with returning Abstract_Socket::remove_client()"); + return Abstract_Socket::remove_client(client_id); +} + +int HTTPmsg__PT::send_message_on_fd(int client_id, const unsigned char * message_buffer, int length_of_message) +{ + log_debug("entering HTTPmsg__PT::send_message_on_fd(client_id: %d)", client_id); + +#ifdef AS_USE_SSL + if(get_user_data(client_id)) + { + // INFO: it is assumed that only SSL_Socket assigns user data to each peer + log_debug("leaving HTTPmsg__PT::send_message_on_fd() with returning SSL_Socket::send_message_on_fd()"); + return SSL_Socket::send_message_on_fd(client_id, message_buffer, length_of_message); + } +#endif + + log_debug("leaving HTTPmsg__PT::send_message_on_fd() with returning Abstract_Socket::send_message_on_fd()"); + return Abstract_Socket::send_message_on_fd(client_id, message_buffer, length_of_message); +} + +int HTTPmsg__PT::send_message_on_nonblocking_fd(int client_id, const unsigned char * message_buffer, int length_of_message) +{ + log_debug("entering HTTPmsg__PT::(client_id: %d)", client_id); + +#ifdef AS_USE_SSL + if(get_user_data(client_id)) + { + // INFO: it is assumed that only SSL_Socket assigns user data to each peer + log_debug("leaving HTTPmsg__PT::send_message_on_nonblocking_fd() with returning SSL_Socket::send_message_on_nonblocking_fd()"); + return SSL_Socket::send_message_on_nonblocking_fd(client_id, message_buffer, length_of_message); + } +#endif + + log_debug("leaving HTTPmsg__PT::send_message_on_nonblocking_fd() with returning Abstract_Socket::send_message_on_nonblocking_fd()"); + return Abstract_Socket::send_message_on_nonblocking_fd(client_id, message_buffer, length_of_message); +} + +// HTTP specific functions + +// replaced by f_HTTP_encodeCommon: +// void HTTPmsg__PT::HTTP_encode(const HTTPmsg__Types::HTTPMessage& msg, TTCN_Buffer& buf) +// { +// f_HTTP_encodeCommon( msg, buf); +// } + +//Encodes msg type of "HTTPMessage" into buffer +void f_HTTP_encodeCommon(const HTTPmsg__Types::HTTPMessage& msg, TTCN_Buffer& buf) +{ + buf.clear(); + if( msg.get_selection() == HTTPmsg__Types::HTTPMessage::ALT_erronous__msg ) + buf.put_cs(msg.erronous__msg().msg()); + else + { + const HTTPmsg__Types::HeaderLines* header = NULL; + const HTTPmsg__Types::HTTPRequest* request = NULL; + const HTTPmsg__Types::HTTPResponse* response = NULL; + const HTTPmsg__Types::HTTPRequest__binary__body* request_binary = NULL; + const HTTPmsg__Types::HTTPResponse__binary__body* response_binary = NULL; + const CHARSTRING* body = NULL; + const OCTETSTRING* body_binary = NULL; + + if(msg.get_selection() == HTTPmsg__Types::HTTPMessage::ALT_request) + { + request = &msg.request(); + header = &request->header(); + body = &request->body(); + buf.put_cs(request->method()); + buf.put_c(' '); + buf.put_cs(request->uri()); + buf.put_cs(" HTTP/"); + buf.put_cs(int2str(request->version__major())); + buf.put_c('.'); + buf.put_cs(int2str(request->version__minor())); + buf.put_cs("\r\n"); + } + else if(msg.get_selection() == HTTPmsg__Types::HTTPMessage::ALT_response) + { + response = &msg.response(); + header = &response->header(); + body = &response->body(); + buf.put_cs("HTTP/"); + buf.put_cs(int2str(response->version__major())); + buf.put_c('.'); + buf.put_cs(int2str(response->version__minor())); + buf.put_c(' '); + buf.put_cs(int2str(response->statuscode())); + buf.put_c(' '); + buf.put_cs(response->statustext()); + buf.put_cs("\r\n"); + } + else if(msg.get_selection() == HTTPmsg__Types::HTTPMessage::ALT_request__binary) + { + request_binary = &msg.request__binary(); + header = &request_binary->header(); + body_binary = &request_binary->body(); + buf.put_cs(request_binary->method()); + buf.put_c(' '); + buf.put_cs(request_binary->uri()); + buf.put_cs(" HTTP/"); + buf.put_cs(int2str(request_binary->version__major())); + buf.put_c('.'); + buf.put_cs(int2str(request_binary->version__minor())); + buf.put_cs("\r\n"); + } + else if(msg.get_selection() == HTTPmsg__Types::HTTPMessage::ALT_response__binary) + { + response_binary = &msg.response__binary(); + header = &response_binary->header(); + body_binary = &response_binary->body(); + buf.put_cs("HTTP/"); + buf.put_cs(int2str(response_binary->version__major())); + buf.put_c('.'); + buf.put_cs(int2str(response_binary->version__minor())); + buf.put_c(' '); + buf.put_cs(int2str(response_binary->statuscode())); + buf.put_c(' '); + buf.put_cs(response_binary->statustext()); + buf.put_cs("\r\n"); + } + + for( int i = 0; i < header->size_of(); i++ ) + { + buf.put_cs((*header)[i].header__name()); + buf.put_cs(": "); + buf.put_cs((*header)[i].header__value()); + buf.put_cs("\r\n"); + } + + buf.put_cs("\r\n"); + + if(body && body->lengthof() > 0) + { + buf.put_cs(*body); + } + else if(body_binary && body_binary->lengthof() > 0) + { + buf.put_os(*body_binary); + } + } +} + +bool HTTPmsg__PT::HTTP_decode(TTCN_Buffer* buffer, const int client_id, const bool connection_closed) +{ + + //HTTPmsg__Types::HTTPMessage * msg = new HTTPmsg__Types::HTTPMessage(); + + HTTPmsg__Types::HTTPMessage msg; + + if(f_HTTP_decodeCommon(buffer, msg, connection_closed, get_socket_debugging(), test_port_type, test_port_name )) + { + TTCN_Logger::log(TTCN_DEBUG,"HTTPmsg__PT::HTTP_decode, before calling incoming_message"); + f_setClientId(msg,client_id); + incoming_message(msg); + TTCN_Logger::log(TTCN_DEBUG,"HTTPmsg__PT::HTTP_decode, after calling incoming_message"); + return true; + } + return false; +} + +void f_setClientId( HTTPmsg__Types::HTTPMessage& msg, const int client_id) +{ + switch(msg.get_selection()) + { + case HTTPmsg__Types::HTTPMessage::ALT_request: + { + msg.request().client__id()=client_id; + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_request__binary: + { + msg.request__binary().client__id()=client_id; + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_response: + { + msg.response().client__id()=client_id; + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_response__binary: + { + msg.response__binary().client__id()=client_id; + break; + } + case HTTPmsg__Types::HTTPMessage::ALT_erronous__msg: //is this case redundant code(?) + { + msg.erronous__msg().client__id()=OMIT_VALUE; + break; + } + default: + break; + }//switch + return; +}//f_setClientId + +// +// returns with true if the buffer is not empty and it contain valid message +// Postcondition: if buffer contains valid message, msg will contain the first decoded HTTP message, the decoded part will be removed from the buffer +bool f_HTTP_decodeCommon( TTCN_Buffer* buffer, HTTPmsg__Types::HTTPMessage& msg, const bool connection_closed, + const bool socket_debugging, const char *test_port_type, const char *test_port_name) +{ + + TTCN_Logger::log(TTCN_DEBUG, "starting f_HTTP_decodeCommon "); + if(buffer->get_read_len() <= 0) + return FALSE; + + buffer->rewind(); + + Decoding_Params decoding_params; + decoding_params.non_persistent_connection = FALSE; + decoding_params.chunked_body = FALSE; + decoding_params.content_length = -1; + decoding_params.error = FALSE; + decoding_params.isMessage = TRUE; + + if (TTCN_Logger::log_this_event(TTCN_DEBUG)) + { + if( test_port_name!= NULL) + TTCN_Logger::log(TTCN_DEBUG, "%s DECODER: <%s>\n", test_port_name, + (const char*)CHARSTRING(buffer->get_read_len(), (const char*)buffer->get_read_data())); + else + TTCN_Logger::log(TTCN_DEBUG, "DECODER: <%s>\n", + (const char*)CHARSTRING(buffer->get_read_len(), (const char*)buffer->get_read_data())); + } + + CHARSTRING first; + bool isResponse; + + // Decoding the first line + + switch(get_line(buffer, first, false)) + { + case TRUE: // The first line is available + { + //HTTPmsg__Types::HTTPMessage msg; + HTTPmsg__Types::HeaderLines header = NULL_VALUE; + OCTETSTRING body=OCTETSTRING(0, (const unsigned char*)""); + const char *cc_first = (const char *)first; + //fprintf(stderr, "first: %s\n", cc_first); + int version__major, version__minor, statusCode; + + char* method_name; + const char* pos = strchr(cc_first, ' '); + if(pos == NULL) + { + TTCN_Logger::log(TTCN_DEBUG, "could not find space in the first line of response: <%s>", cc_first); + decoding_params.isMessage = FALSE; + decoding_params.error = TRUE; + break; + } + method_name = (char*)Malloc(pos - cc_first + 1); + strncpy(method_name, cc_first, pos - cc_first); + method_name[pos - cc_first] = '\0'; + + char* stext = (char*)Malloc(strlen(cc_first)); + stext[0] = '\0'; + + TTCN_Logger::log(TTCN_DEBUG, "method_name: <%s>", method_name); + if(strncasecmp(method_name, "HTTP/", 5) == 0) + { + // The first line contains a response like HTTP/1.1 200 OK + isResponse = true; + + if(sscanf(cc_first, "HTTP/%d.%d %d %[^\r]", &version__major, &version__minor, + &statusCode, stext) < 3) + { + decoding_params.isMessage = FALSE; + decoding_params.error = TRUE; + Free(method_name); + Free(stext); + break; + } + if (version__minor == 0) + decoding_params.non_persistent_connection = TRUE; + } + else + { + isResponse = false; + // The first line contains a request + // like "POST / HTTP/1.0" + if(sscanf(pos + 1, "%s HTTP/%d.%d", + stext, &version__major, &version__minor ) != 3) + { + decoding_params.isMessage = FALSE; + decoding_params.error = TRUE; + Free(method_name); + Free(stext); + break; + } + } + + // Additional header lines + TTCN_Logger::log(TTCN_DEBUG, "Decoding the headers"); + HTTP_decode_header(buffer, header, decoding_params, socket_debugging, isResponse, test_port_type, test_port_name); + TTCN_Logger::log(TTCN_DEBUG, "Headers decoded. %s headers.", decoding_params.isMessage ? "Valid" : "Invalid"); + + if(isResponse && decoding_params.content_length==-1){ + if( (statusCode>99 && statusCode <200) || statusCode==204 || statusCode==304 ) decoding_params.content_length=0; + } + + if(decoding_params.isMessage) + HTTP_decode_body(buffer, body, decoding_params, connection_closed, socket_debugging, test_port_type, test_port_name); + + if(decoding_params.isMessage) + { + TTCN_Logger::log(TTCN_DEBUG, "Message successfully decoded"); + bool foundBinaryCharacter = false; + + int len = body.lengthof(); + const unsigned char* ptr = (const unsigned char*)body; + for(int i = 0; i < len && !foundBinaryCharacter; i++) + { + if(!isascii(ptr[i])) + foundBinaryCharacter = true; + } + if(foundBinaryCharacter) + TTCN_Logger::log(TTCN_DEBUG, "Binary data found"); + if(isResponse) + { + if(foundBinaryCharacter) + { + HTTPmsg__Types::HTTPResponse__binary__body& response_binary = msg.response__binary(); + response_binary.client__id() = OMIT_VALUE; + response_binary.version__major() = version__major; + response_binary.version__minor() = version__minor; + response_binary.statuscode() = statusCode; + if(strlen(stext) > 0) + response_binary.statustext() = CHARSTRING(stext); + else + response_binary.statustext() = ""; + response_binary.header() = header; + response_binary.body() = body; + } + else + { + HTTPmsg__Types::HTTPResponse& response = msg.response(); + response.client__id() = OMIT_VALUE; + response.version__major() = version__major; + response.version__minor() = version__minor; + response.statuscode() = statusCode; + if(strlen(stext) > 0) + response.statustext() = CHARSTRING(stext); + else + response.statustext() = ""; + response.header() = header; + response.body() = oct2char(body); + } + } + else + { + if(foundBinaryCharacter) + { + HTTPmsg__Types::HTTPRequest__binary__body& request_binary = msg.request__binary(); + request_binary.client__id() = OMIT_VALUE; + request_binary.method() = CHARSTRING(method_name); + request_binary.uri() = CHARSTRING(stext); + request_binary.version__major() = version__major; + request_binary.version__minor() = version__minor; + request_binary.header() = header; + request_binary.body() = body; + } + else + { + HTTPmsg__Types::HTTPRequest& request = msg.request(); + request.client__id() = OMIT_VALUE; + request.method() = CHARSTRING(method_name); + request.uri() = CHARSTRING(stext); + request.version__major() = version__major; + request.version__minor() = version__minor; + request.header() = header; + request.body() = oct2char(body); + } + } + //incoming_message(msg); <- outer function calls if necessary + } + Free(method_name); + Free(stext); + } + break; + case BUFFER_CRLF: + case BUFFER_FAIL: + decoding_params.error = TRUE; + case FALSE: + decoding_params.isMessage = FALSE; + } + + if(decoding_params.error) + { + + if(buffer->get_read_len() > 0) + msg.erronous__msg().msg() = CHARSTRING(buffer->get_read_len(), (const char*)buffer->get_read_data()); + else + msg.erronous__msg().msg() = "The previous message is erronous."; + msg.erronous__msg().client__id() = OMIT_VALUE; + //incoming_message(msg); + buffer->clear(); + decoding_params.isMessage = TRUE; + } + + if(decoding_params.isMessage) + { + buffer->cut(); + } + + return decoding_params.isMessage; +} + +void HTTP_decode_header(TTCN_Buffer* buffer, HTTPmsg__Types::HeaderLines& headers, Decoding_Params& decoding_params, + const bool socket_debugging, const bool resp, const char *test_port_type, const char *test_port_name) +{ + CHARSTRING cstr; + const char* separator; + char* header_name = NULL; + bool length_received = false; + + for(int i = 0; ; i++) + { + switch(get_line(buffer, cstr, true)) + { + case TRUE: + { + char h[cstr.lengthof() + 1]; + strcpy(h, (const char*)cstr); + separator = strchr(h, ':'); + if(separator) + { + header_name = (char*)Realloc(header_name, separator - h + 1); + strncpy(header_name, h, separator - h); + header_name[separator - h] = '\0'; + separator++; + while(*separator && isspace(separator[0])) + separator++; + char* end = h + strlen(h); + while(isspace((end - 1)[0])) + { + end--; + *end = '\0'; + } + headers[i] = HTTPmsg__Types::HeaderLine(header_name, separator); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "+Header line: <%s: %s>", header_name, separator); + + if(!strcasecmp(header_name, "Content-Length")) + { sscanf(separator, "%d", &decoding_params.content_length); length_received=true;} + else if(!strcasecmp(header_name, "Connection") && !strcasecmp(separator, "close")) + decoding_params.non_persistent_connection = TRUE; + else if(!strcasecmp(header_name, "Connection") && !strcasecmp(separator, "keep-alive")) + decoding_params.non_persistent_connection = FALSE; + else if(!strcasecmp(header_name, "Transfer-Encoding") && !strcasecmp(separator, "chunked")) + decoding_params.chunked_body = TRUE; + + } + continue; + } + case BUFFER_FAIL: + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "BUFFER_FAIL in HTTP_decode_header!"); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "whole bufer now: <%s>", (const char*)buffer->get_data()); + log_to_hexa(buffer); + decoding_params.error = TRUE; + case FALSE: + decoding_params.isMessage = FALSE; + case BUFFER_CRLF: + break; + } + break; + } + if(decoding_params.isMessage && !resp && !length_received && !decoding_params.chunked_body) decoding_params.content_length=0; + Free(header_name); +} + +void HTTP_decode_body(TTCN_Buffer* buffer, OCTETSTRING& body, Decoding_Params& decoding_params, const bool connection_closed, + const bool socket_debugging, const char *test_port_type, const char *test_port_name) +{ + if(buffer->get_read_len() > 0) + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "Decoding body, buffer length: %d", buffer->get_read_len()); + + if (decoding_params.chunked_body) + { + HTTP_decode_chunked_body(buffer, body, decoding_params, socket_debugging, test_port_type, test_port_name); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "--------- After chunked body decoding:"); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "--------- non_persistent_connection: %s", decoding_params.non_persistent_connection ? "yes" : "no"); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "--------- chunked_body: %s", decoding_params.chunked_body ? "yes" : "no"); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "--------- content_length: %d", decoding_params.content_length); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "--------- error: %s", decoding_params.error ? "yes" : "no"); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "--------- isMessage: %s", decoding_params.isMessage ? "yes" : "no"); + + } + else if(decoding_params.content_length >= 0) + { + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "lengthof body: %d, content_length given: %d", buffer->get_read_len(), decoding_params.content_length); + if(buffer->get_read_len() >= (unsigned)decoding_params.content_length) + { + body = OCTETSTRING(decoding_params.content_length, buffer->get_read_data()); + buffer->set_pos(buffer->get_pos() + decoding_params.content_length); + } + else + { + decoding_params.isMessage = FALSE; + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "The decoder's body length %d is less than the Content_length in the message header %d; The HTTP port is waiting for additional data.", buffer->get_read_len(), decoding_params.content_length); + buffer->set_pos(buffer->get_pos() + buffer->get_read_len()); + } + } + else if(connection_closed) + { + /* if(buffer->get_read_len() >= 0)*/ // Always true + { + body = OCTETSTRING(buffer->get_read_len(), buffer->get_read_data()); + buffer->set_pos(buffer->get_pos() + buffer->get_read_len()); + } + } else { + decoding_params.isMessage = FALSE; + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "The HTTP port is waiting for additional data."); + buffer->set_pos(buffer->get_pos() + buffer->get_read_len()); + } +} + +void HTTP_decode_chunked_body(TTCN_Buffer* buffer, OCTETSTRING& body, Decoding_Params& decoding_params, + const bool socket_debugging, const char *test_port_type, const char *test_port_name) +{ + OCTETSTRING chunk; + CHARSTRING line; + unsigned int chunk_size = 1; + + while(chunk_size > 0) + { + switch(get_line(buffer, line, false)) + { + case TRUE: + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "line: <%s>", (const char*)line); + if(sscanf((const char *)line, "%x", &chunk_size) != 1) + { + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "No chunksize found"); + body = body + OCTETSTRING(line.lengthof(), (const unsigned char*)(const char*)line); + chunk_size = 0; + decoding_params.error = TRUE; + } + else + { + if(chunk_size == 0) + { + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "chunk_size 0 -> closing chunk"); + if(get_line(buffer, line, false) == BUFFER_CRLF) + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "Trailing \\r\\n ok!"); + else + TTCN_Logger::log(TTCN_WARNING,"Trailing \\r\\n after the closing chunk is not present, instead it is <%s>!", (const char*)line); + } +/* else if(chunk_size < 0) // the chunk_size is unsigned, never true + { + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "chunk_size less than 0"); + decoding_params.error = TRUE; + chunk_size = 0; + }*/ + else // chunk_size > 0 + { + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "processing next chunk, size: %d", chunk_size); + if(buffer->get_read_len() < chunk_size) + { + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "chunk size is greater than the buffer length, more data is needed"); + decoding_params.isMessage = FALSE; + chunk_size = 0; + } + } + } + break; + case FALSE: + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "buffer does not contain a whole line, more data is needed"); + decoding_params.isMessage = FALSE; + chunk_size = 0; + break; + case BUFFER_CRLF: + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "beginning CRLF removed"); + continue; + case BUFFER_FAIL: + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "BUFFER_FAIL"); + decoding_params.error = FALSE; + chunk_size = 0; + break; + default: + decoding_params.isMessage = FALSE; + chunk_size = 0; + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "more data is needed"); + } + + body = body + OCTETSTRING(chunk_size, buffer->get_read_data()); + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "pull %d bytes from %d", chunk_size, buffer->get_read_len()); + buffer->set_pos(buffer->get_pos() + chunk_size); + // hack + if(buffer->get_read_len() && buffer->get_read_data()[0] == '\n') // don't read from the buffer if there is nothing in it. + { + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name,"hack: adjusted buffer position after the '\\n'"); + buffer->set_pos(buffer->get_pos() + 1); + } + HTTPmsg__Types::log_debug(socket_debugging, test_port_type, test_port_name, "remaining data: <%s>, len: %d", (const char *)CHARSTRING(buffer->get_read_len(), (const char*)buffer->get_read_data()), buffer->get_read_len()); + } +} + +int get_line(TTCN_Buffer* buffer, CHARSTRING& to, const bool concatenate_header_lines) +{ + unsigned int i = 0; + const unsigned char *cc_to = buffer->get_read_data(); + + if(!buffer->get_read_len()) + return FALSE; + + while(1) + { + for( ; i < buffer->get_read_len() && cc_to[i] != '\0' && cc_to[i] != '\r' && cc_to[i] != '\n'; i++); + + if(i >= buffer->get_read_len()) + { + to = CHARSTRING(""); + return FALSE; + } + else + { + if(cc_to[i] == '\n') {// + if(report_lf){ + switch(HTTPmsg__Types::crlf__mode){ + case HTTPmsg__Types::strict__crlf__mode::ERROR_: + return BUFFER_FAIL; + break; + case HTTPmsg__Types::strict__crlf__mode::WARNING__ONCE: + report_lf=false; + // no break + case HTTPmsg__Types::strict__crlf__mode::WARNING: + TTCN_warning("Missing '\\r'."); + break; + default: + break; + } + } + if(i > 0 && (i + 1) < buffer->get_read_len() && concatenate_header_lines && (cc_to[i+1] == ' ' || cc_to[i+1] == '\t')) + i += 1; + else + { + to = CHARSTRING(i, (const char*)cc_to); + buffer->set_pos(buffer->get_pos() + i + 1); + return i == 0 ? BUFFER_CRLF : TRUE; + } + + } else + { + if((i + 1) < buffer->get_read_len() && cc_to[i + 1] != '\n') + return BUFFER_FAIL; + else if(i > 0 && (i + 2) < buffer->get_read_len() && concatenate_header_lines && (cc_to[i+2] == ' ' || cc_to[i+2] == '\t')) + i += 2; + else + { + to = CHARSTRING(i, (const char*)cc_to); + buffer->set_pos(buffer->get_pos() + i + 2); + return i == 0 ? BUFFER_CRLF : TRUE; + } + } + } + } +} + +void log_to_hexa(TTCN_Buffer* buffer) +{ + int len = buffer->get_read_len(); + const unsigned char* ptr = buffer->get_read_data(); + for(int i = buffer->get_pos(); i < len; i++) + { + TTCN_Logger::log_event(" %02X", ptr[i]); + } +} + + +const char* HTTPmsg__PT::local_port_name() { return "";} +const char* HTTPmsg__PT::remote_address_name() { return "";} +const char* HTTPmsg__PT::local_address_name() { return "";} +const char* HTTPmsg__PT::remote_port_name() { return "";} +const char* HTTPmsg__PT::use_notification_ASPs_name() { return "use_notification_ASPs";} +const char* HTTPmsg__PT::halt_on_connection_reset_name(){ return "";} +const char* HTTPmsg__PT::server_mode_name() { return "";} +const char* HTTPmsg__PT::socket_debugging_name() { return "http_debugging";} +const char* HTTPmsg__PT::nagling_name() { return "";} +const char* HTTPmsg__PT::server_backlog_name() { return "server_backlog";} +const char* HTTPmsg__PT::ssl_use_ssl_name() { return "";} +const char* HTTPmsg__PT::ssl_use_session_resumption_name() { return "";} +const char* HTTPmsg__PT::ssl_private_key_file_name() { return "KEYFILE";} +const char* HTTPmsg__PT::ssl_trustedCAlist_file_name() { return "TRUSTEDCALIST_FILE";} +const char* HTTPmsg__PT::ssl_certificate_file_name() { return "CERTIFICATEFILE";} +const char* HTTPmsg__PT::ssl_password_name() { return "PASSWORD";} +const char* HTTPmsg__PT::ssl_verifycertificate_name() { return "VERIFYCERTIFICATE";} + + +} //eof namespace "HTTPmsg__PortType" + +namespace HTTPmsg__Types { + +using namespace HTTPmsg__PortType; + +//========================================================================= +//==== Working Functions independent from sending and receiving:=== +//========================================================================= + +//from AbstractSocket +void log_debug(const bool socket_debugging, const char *test_port_type, const char *test_port_name, const char *fmt, ...) +{ + if (socket_debugging) { + TTCN_Logger::begin_event(TTCN_DEBUG); + if ((test_port_type!=NULL && test_port_name!=NULL)&&(strlen(test_port_type)!=0 && strlen(test_port_name)!=0)) + TTCN_Logger::log_event("%s test port (%s): ", test_port_type, test_port_name); + va_list args; + va_start(args, fmt); + TTCN_Logger::log_event_va_list(fmt, args); + va_end(args); + TTCN_Logger::end_event(); + } +} + +void log_warning(const char *test_port_type, const char *test_port_name, const char *fmt, ...) +{ + TTCN_Logger::begin_event(TTCN_WARNING); + if (test_port_type!=NULL && test_port_name!=NULL) + TTCN_Logger::log_event("%s test port (%s): ", test_port_type, test_port_name); + va_list args; + va_start(args, fmt); + TTCN_Logger::log_event_va_list(fmt, args); + va_end(args); + TTCN_Logger::end_event(); +} + +//========================================================================= +//==== Encoder-decoder Functions independent from sending and receiving:=== +//========================================================================= + +/********************************************************* +* Function: enc__HTTPMessage +* +* Purpose: +* To encode msg type of HTTPMessage into OCTETSTRING separated from sending functionality +* It is for users using this test port as a protocol module +* +* References: +* RFC2616 +* +* Precondition: +* msg is filled in properly +* Postcondition: +* +* +* Parameters: +* msg - the HTTP Message to be encoded +* +* Return Value: +* OCTETSTRING - the encoded message +* Detailed Comments: +* - +* +*********************************************************/ +OCTETSTRING enc__HTTPMessage( const HTTPmsg__Types::HTTPMessage& msg ) { + TTCN_Buffer buf; + buf.clear(); + HTTPmsg__PortType::f_HTTP_encodeCommon( msg, buf); + return OCTETSTRING(buf.get_len(), buf.get_data()); +} +/********************************************************* +* Function: dec__HTTPMessage +* +* Purpose: +* To decode msg type of OCTETSTRING into HTTPMessage separated from receiving functionality +* It is for users using this test port as a protocol module +* +* References: +* RFC2616 +* +* Precondition: +* stream is filled in properly +* Postcondition: +* - +* +* Parameters: +* stream - the message to be decoded +* msg - reference to the record type of HTTPMessage which will contain the decoded value if the return value less than the length of the original stream +* Return Value: +* integer - the length of the remaining data which is not decoded yet. +* Detailed Comments: +* If the full stream is decoded, the return value is zero +* If nothing is decoded (decoding failed) the return value equals to the original length of the stream +* +*********************************************************/ + +INTEGER dec__HTTPMessage(OCTETSTRING const& stream, HTTPMessage& msg, const BOOLEAN& socket_debugging = dec__HTTPMessage_socket__debugging_defval ) +{ + TTCN_Logger::log(TTCN_DEBUG, "starting HTTPmsg__Types::dec__HTTPMessage"); + TTCN_Buffer *buf_p = new TTCN_Buffer() ; + buf_p->put_os(stream); + + int buf_len = buf_p->get_read_len(); + if( buf_len > 0) + { + if(f_HTTP_decodeCommon(buf_p, msg, true, socket_debugging, NULL, NULL)) + { + log_debug(socket_debugging,"","","dec__HTTPMessage, after decoding:\nbuf_len: %d\nget_len: %d\nget_read_len:%d", + buf_len, + buf_p->get_len(), + buf_p->get_read_len()); + buf_len = buf_p->get_read_len(); //remaining data length + } + else + buf_len = -1; + + + } else buf_len = -1; + delete buf_p; + return buf_len; +} + +}//namespace diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_PT.hh b/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_PT.hh new file mode 100644 index 0000000000000000000000000000000000000000..f0eab18728259fa66e91bd0ef71b0eda04254b27 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_PT.hh @@ -0,0 +1,166 @@ +/****************************************************************************** +* Copyright (c) 2000-2019 Ericsson Telecom AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v2.0 +* which accompanies this distribution, and is available at +* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html +* +* Contributors: +* Eduard Czimbalmos - initial implementation and initial documentation +* Istvan Ovary +* Peter Dimitrov +* Balasko Jeno +* Gabor Szalai +******************************************************************************/ +// +// File: HTTPmsg_PT.hh +// Description: HTTP test port header file +// Rev: R9B +// Prodnr: CNL 113 469 + + +#ifndef HTTPmsg__PT_HH +#define HTTPmsg__PT_HH + +#include "HTTPmsg_PortType.hh" +#include "Abstract_Socket.hh" + +#define BUFFER_FAIL 2 +#define BUFFER_CRLF 3 +//============================== +namespace HTTPmsg__PortType { +//============================== +typedef struct { + bool non_persistent_connection; + bool chunked_body; + int content_length; + bool error; + bool isMessage; +} Decoding_Params; + +#ifdef AS_USE_SSL +class HTTPmsg__PT : public SSL_Socket, public HTTPmsg__PT_BASE { +#else + class HTTPmsg__PT : public Abstract_Socket, public HTTPmsg__PT_BASE { +#endif + +public: + + HTTPmsg__PT(const char *par_port_name = NULL); + ~HTTPmsg__PT(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + +protected: + void user_map(const char *system_port); + void user_unmap(const char *system_port); + + void user_start(); + void user_stop(); + + void outgoing_send(const HTTPmsg__Types::Close& send_par); + void outgoing_send(const HTTPmsg__Types::Connect& send_par); + void outgoing_send(const HTTPmsg__Types::Listen& send_par); + void outgoing_send(const HTTPmsg__Types::Half__close& send_par); + void outgoing_send(const HTTPmsg__Types::Shutdown& send_par); + void outgoing_send(const HTTPmsg__Types::HTTPMessage& send_par); + + const char* local_port_name(); + const char* remote_address_name(); + const char* local_address_name(); + const char* remote_port_name(); + const char* use_notification_ASPs_name(); + const char* halt_on_connection_reset_name(); + const char* server_mode_name(); + const char* socket_debugging_name(); + const char* nagling_name(); + const char* server_backlog_name(); + const char* ssl_use_ssl_name(); + const char* ssl_use_session_resumption_name(); + const char* ssl_private_key_file_name(); + const char* ssl_trustedCAlist_file_name(); + const char* ssl_certificate_file_name(); + const char* ssl_password_name(); + const char* ssl_verifycertificate_name(); + + void message_incoming(const unsigned char* msg, int length, int client_id = -1); + void Add_Fd_Read_Handler(int fd) { Handler_Add_Fd_Read(fd); } + void Add_Fd_Write_Handler(int fd) { Handler_Add_Fd_Write(fd); } + void Remove_Fd_Read_Handler(int fd) { Handler_Remove_Fd_Read(fd); } + void Remove_Fd_Write_Handler(int fd) { Handler_Remove_Fd_Write(fd); } + void Remove_Fd_All_Handlers(int fd) { Handler_Remove_Fd(fd); } + void Handler_Uninstall() { Uninstall_Handler(); } + void Timer_Set_Handler(double call_interval, boolean is_timeout = TRUE, + boolean call_anyway = TRUE, boolean is_periodic = TRUE) { + Handler_Set_Timer(call_interval, is_timeout, call_anyway, is_periodic); + } + +// overriden functions in order to distinguish between normal and SSL connections + virtual bool add_user_data(int client_id); + virtual bool remove_user_data(int client_id); + virtual int send_message_on_fd(int client_id, const unsigned char * message_buffer, int length_of_message); + virtual int send_message_on_nonblocking_fd(int client_id, const unsigned char * message_buffer, int length_of_message); + virtual int receive_message_on_fd(int client_id); + virtual void client_connection_opened(int client_id); + virtual void listen_port_opened(int port_number); + virtual void peer_connected(int client_id, const char * host, const int port); + + + virtual void peer_disconnected(int client_id); + virtual void peer_half_closed(int client_id); + virtual void remove_client(int client_id); + virtual void report_unsent(int client_id, int msg_length, int sent_length, const unsigned char* msg, const char* error_text); + +// HTTP specific functions + + // returns encoded message in buf + //void HTTP_encode(const HTTPmsg__Types::HTTPMessage &msg, TTCN_Buffer& buf); //replaced by f_HTTP_encodeCommon + bool HTTP_decode(TTCN_Buffer*, const int, const bool connection_closed = false); + //void HTTP_decode_header(TTCN_Buffer*, HTTPmsg__Types::HeaderLines&, Decoding_Params&); //moved outside the class + //void HTTP_decode_body(TTCN_Buffer*, OCTETSTRING&, Decoding_Params&, const bool); //moved outside the class + //void HTTP_decode_chunked_body(TTCN_Buffer*, OCTETSTRING&, Decoding_Params&); //moved outside the class + +private: + void Handle_Fd_Event(int fd, boolean is_readable, boolean is_writable, boolean is_error); + void Handle_Timeout(double time_since_last_call); + + //int get_line(TTCN_Buffer*, CHARSTRING&, const bool concatenate_header_lines = true); + //void log_to_hexa(TTCN_Buffer*); + + bool adding_ssl_connection; + bool adding_client_connection; + bool server_use_ssl; + + bool use_notification_ASPs; + + bool use_send_failed; + const HTTPmsg__Types::HTTPMessage* last_msg; +}; +//=================================== +//== Functions outside the class: === +//=================================== +void f_setClientId( HTTPmsg__Types::HTTPMessage& msg, const int client_id); +void f_HTTP_encodeCommon(const HTTPmsg__Types::HTTPMessage& msg, TTCN_Buffer& buf); +bool f_HTTP_decodeCommon(TTCN_Buffer* buffer,HTTPmsg__Types::HTTPMessage& msg, const bool connection_closed, + const bool socket_debugging, const char *test_port_type, const char *test_port_name); +int get_line(TTCN_Buffer* buffer, CHARSTRING& to, const bool concatenate_header_lines); +void log_to_hexa(TTCN_Buffer*); + +void HTTP_decode_header(TTCN_Buffer*, HTTPmsg__Types::HeaderLines&, Decoding_Params&,const bool socket_debugging, const bool resp,const char *test_port_type, const char *test_port_name); + +void HTTP_decode_body(TTCN_Buffer*, OCTETSTRING&, Decoding_Params&, const bool, + const bool socket_debugging, const char *test_port_type, const char *test_port_name); + +void HTTP_decode_chunked_body(TTCN_Buffer*, OCTETSTRING&, Decoding_Params&, + const bool socket_debugging, const char *test_port_type, const char *test_port_name); +}//namespace + +//============================== +namespace HTTPmsg__Types +//=============================== +{ +void log_debug(const bool socket_debugging, const char *test_port_type, const char *test_port_name, const char *fmt, ...); +void log_warning(const char *test_port_type, const char *test_port_name, const char *fmt, ...); +} + +#endif diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_PortType.ttcn b/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_PortType.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..747f614fa9f14d5992d79fcf605ba6e29296ef17 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_PortType.ttcn @@ -0,0 +1,43 @@ +/****************************************************************************** +* Copyright (c) 2000-2019 Ericsson Telecom AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v2.0 +* which accompanies this distribution, and is available at +* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html +* +* Contributors: +* Eduard Czimbalmos - initial implementation and initial documentation +* Istvan Ovary +* Peter Dimitrov +* Balasko Jeno +* Gabor Szalai +******************************************************************************/ +// +// File: HTTPmsg_Types.ttcn +// Description: HTTP port type definition +// Rev: R9B +// Prodnr: CNL 113 469 + + +module HTTPmsg_PortType +{ + import from HTTPmsg_Types all; + + type port HTTPmsg_PT message + { + // Connection handling ASPs + inout Close; + out Connect; + in Connect_result; + in Client_connected; + inout Half_close; + out Listen; + in Listen_result; + inout Shutdown; + + in Send_failed; + + // Message to send and receive + inout HTTPMessage; + }; +} diff --git a/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_Types.ttcn b/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_Types.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..493440fab99ad53f48f23b53492e011e808be6a9 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.HTTPmsg/module/src/HTTPmsg_Types.ttcn @@ -0,0 +1,163 @@ +/****************************************************************************** +* Copyright (c) 2000-2019 Ericsson Telecom AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v2.0 +* which accompanies this distribution, and is available at +* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html +* +* Contributors: +* Eduard Czimbalmos - initial implementation and initial documentation +* Istvan Ovary +* Peter Dimitrov +* Balasko Jeno +* Gabor Szalai +******************************************************************************/ +// +// File: HTTPmsg_Types.ttcn +// Description: HTTP Message and TCP connection handling ASP types +// Rev: R9B +// Prodnr: CNL 113 469 + + +module HTTPmsg_Types { + +modulepar { + boolean tsp_socket_debugging := false; + strict_crlf_mode crlf_mode:=WARNING_ONCE; +} + +external function enc_HTTPMessage( in HTTPMessage msg) return octetstring; +external function dec_HTTPMessage( in octetstring stream, inout HTTPMessage msg, in boolean socket_debugging := tsp_socket_debugging) return integer; + + +type enumerated strict_crlf_mode {ERROR, WARNING, WARNING_ONCE, ACCEPT}; +/* Basic types */ + +type record HeaderLine { + charstring header_name, + charstring header_value +}; + +type record of HeaderLine HeaderLines; + +type record HTTPResponse { + // client_id is used only in case of multiple connections, otherwise set it to omit + integer client_id optional, + integer version_major, + integer version_minor, + integer statuscode, + charstring statustext, + HeaderLines header, + charstring body +}; + +type record HTTPRequest { + // client_id is used only in case of multiple connections, otherwise set it to omit + integer client_id optional, + charstring method, + charstring uri, + integer version_major, + integer version_minor, + HeaderLines header, + charstring body +}; + +type record HTTPResponse_binary_body { + // client_id is used only in case of multiple connections, otherwise set it to omit + integer client_id optional, + integer version_major, + integer version_minor, + integer statuscode, + charstring statustext, + HeaderLines header, + octetstring body +}; + +type record HTTPRequest_binary_body { + // client_id is used only in case of multiple connections, otherwise set it to omit + integer client_id optional, + charstring method, + charstring uri, + integer version_major, + integer version_minor, + HeaderLines header, + octetstring body +}; + +type record HTTP_erronous_msg { + // client_id is used only in case of multiple connections, otherwise set it to omit + integer client_id optional, + charstring msg +} + +type union HTTPMessage { + HTTPResponse response, + HTTPRequest request, + HTTPResponse_binary_body response_binary, + HTTPRequest_binary_body request_binary, + HTTP_erronous_msg erronous_msg +}; + +/* + * Connection handling ASPs + */ + +// Closes all connections, or the specified one only. +// client_id = omit means close all connections. +// Close comes when a connection gets disconnected +type record Close { + // when sending, client_id shall be used in case of multiple connections + // when receiving, client_id determines the client which has disconnected + integer client_id optional +}; + +type record Connect { + charstring hostname, + integer portnumber, + boolean use_ssl +}; + +// Received by the client after Connect is sent. +// The client_id will be filled with -1 if unsuccessful. +// Returned client_id shall be used to distinguish between the open connections. +type record Connect_result { + integer client_id +} + +// Received when the server has accepted an incoming connection. +type record Client_connected { + charstring hostname, + integer portnumber (1..65535), + integer client_id +}; + +// Sent when the local end of the connection has to be shut down for writing. +// Received when the remote end of the connection has been shut down for writing. +type record Half_close { + integer client_id optional +}; + +type record Listen { + charstring local_hostname optional, + integer portnumber, + boolean use_ssl +}; + +// Received after Listen. Sends back the listening port number, -1 on fail +type record Listen_result { + integer portnumber (-1..65535) +}; + +type record Shutdown {}; + +// Used to report messages, which can't be sent because fo the broken connection +// Set the "report_failed_message" test port parameter to "yes" to enable the sending of this message !!!! +type record Send_failed { + HTTPMessage msg, // The unsent message + boolean already_half_closed // the connection already half closed + // true: the test port already enqued the half_close message + // false: the half_close is not enqued yet +} + + +} diff --git a/ttcn/patch_lib_common_titan/module.mk b/ttcn/patch_lib_common_titan/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..3b3b66029142802a399c0aa3a7b66eb989ddbe3b --- /dev/null +++ b/ttcn/patch_lib_common_titan/module.mk @@ -0,0 +1,9 @@ +sources := \ + ttcn/LibCommon_AbstractData.ttcn \ + ttcn/LibCommon_BasicTypesAndValues.ttcn \ + ttcn/LibCommon_DataStrings.ttcn \ + ttcn/LibCommon_Sync.ttcn \ + ttcn/LibCommon_TextStrings.ttcn \ + ttcn/LibCommon_Time.ttcn \ + ttcn/LibCommon_VerdictControl.ttcn + diff --git a/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn index 97d375e1c4b34ea52cd3db624b8c7a4d8d07b248..fc1f256717977d987360f4623892191742c015d8 100644 --- a/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn +++ b/ttcn/patch_lib_http/LibItsHttp_JsonMessageBodyTypes.ttcn @@ -8,8 +8,8 @@ module LibItsHttp_JsonMessageBodyTypes { import from UEidentityAPI_TypesAndValues all; // LibMec/RnisAPI import from RnisAPI_TypesAndValues all; - // LibMec/BwManagementApi - import from BwManagementAPI_TypesAndValues all; + // LibMec/TrafficManagementApi + import from TrafficManagementAPI_TypesAndValues all; // LibMec/Ams import from Ams_TypesAndValues all; // LibMec/AppEnablementAPI @@ -22,10 +22,14 @@ module LibItsHttp_JsonMessageBodyTypes { import from MepmPkgm_TypesAndValues all; // LibMec/AppLCMAPI import from AppLCM_TypesAndValues all; - // LibMec/UEAppInterfaceAPI import from UEAppInterfaceAPI_TypesAndValues all; - + // LibMec/DeviceApplicationInterfaceAPI + import from DeviceApplicationInterfaceAPI_TypesAndValues all; + // LibMec/WlanInformationAPI + import from WlanInformationAPI_TypesAndValues all; + // LibMec/V2XInformationServiceAPI + import from V2XInformationServiceAPI_TypesAndValues all; /** * This file volontary contains a trivial declaration of the type JsonBody. @@ -34,7 +38,6 @@ module LibItsHttp_JsonMessageBodyTypes { // TODO Add here your custom RFCs import type union JsonBody { - // TODO Add here your custom variants UserInfo userInfo, UserList userList, ZoneInfo zoneInfo, @@ -61,7 +64,12 @@ module LibItsHttp_JsonMessageBodyTypes { CaReConfSubscription caReConfSubscription, S1BearerSubscription s1BearerSubscription, L2Meas l2Meas, + BwInfoList bwInfoList, BwInfo bwInfo, + BwInfoDeltas bwInfoDeltas, + MtsCapabilityInfo mtsCapabilityInfo, + MtsSessionInfo mtsSessionInfo, + MtsSessionInfos mtsSessionInfos, TransportInfoList transportInfoList, TrafficRuleList trafficRuleList, TrafficRule trafficRule, @@ -109,7 +117,7 @@ module LibItsHttp_JsonMessageBodyTypes { AppLCM_TypesAndValues.SubscriptionInfoList subscriptionInfoList, AppLCM_TypesAndValues.SubscriptionInfo subscriptionInfo, AppLCM_TypesAndValues.Notification lcmNotification, - AppContext appContext, + UEAppInterfaceAPI_TypesAndValues.AppContext appContext, AppInfo appInfo, Ams_TypesAndValues.RegistrationRequestWithError registrationRequestWithError_ams, ServiceInfoList serviceInfoList, @@ -121,11 +129,34 @@ module LibItsHttp_JsonMessageBodyTypes { SerAvailabilityNotificationSubscription serAvailabilityNotificationSubscription, TimingCaps timingCaps, CurrentTime currentTime, + DeviceApplicationInterfaceAPI_TypesAndValues.ApplicationList applicationList, + DeviceApplicationInterfaceAPI_TypesAndValues.AppContext appContext_device_info, + ApplicationLocationAvailability applicationLocationAvailability, + ApInfoList apInfoList, + StaInfoList staInfoList, + AssocStaSubscription assocStaSubscription, + StaDataRateSubscription staDataRateSubscription, + WlanInformationAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_wlan, + UuUnicastProvisioningInfo uuUnicastProvisioningInfo, + UuMbmsProvisioningInfo uuMbmsProvisioningInfo, + Pc5ProvisioningInfo pc5ProvisioningInfo, + PredictedQos predictedQos, + V2xMsgPublication v2xMsgPublication, + V2XInformationServiceAPI_TypesAndValues.SubscriptionLinkList subscriptionLinkList_v2x, + ProvChgUuUniSubscription provChgUuUniSubscription, + ProvChgUuMbmsSubscription provChgUuMbmsSubscription, + ProvChgPc5Subscription provChgPc5Subscription, + V2xMsgSubscription v2xMsgSubscription, + ProvChgUuUniNotification provChgUuUniNotification, + ProvChgUuMbmsNotification provChgUuMbmsNotification, + ProvChgPc5Notification provChgPc5Notification, + // TODO Add here your custom variants universal charstring raw } with { variant "" } } with { + encode "JSON"; variant "" } // End of module LibItsHttp_JsonMessageBodyTypes diff --git a/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn index 2ae706fa1f8e1998c83d00ace96436cc88587915..c12ca444bd0692ef26c1f9a01983366ae372ed54 100644 --- a/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn +++ b/ttcn/patch_lib_http/LibItsHttp_JsonTemplates.ttcn @@ -1,13 +1,13 @@ /** -* @author ETSI / STF569 -* @version $URL$ -* $ID:$ -* @desc This module provides the custom templates for ITS HTTP based protocols. -* @copyright ETSI Copyright Notification -* No part may be reproduced except as authorized by written permission. -* The copyright and the foregoing restriction extend to reproduction in all media. -* All rights reserved. -*/ + * @author ETSI / STF569 + * @version $URL$ + * $ID:$ + * @desc This module provides the custom templates for ITS HTTP based protocols. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + */ module LibItsHttp_JsonTemplates { // LibMec @@ -22,9 +22,9 @@ module LibItsHttp_JsonTemplates { // LibMec/RnisAPI import from RnisAPI_TypesAndValues all; import from RnisAPI_Templates all; - // LibMec/BwManagementAPI - import from BwManagementAPI_TypesAndValues all; - import from BwManagementAPI_Templates all; + // LibMec/TrafficManagementAPI + import from TrafficManagementAPI_TypesAndValues all; + import from TrafficManagementAPI_Templates all; // LibMec/AppEnablementAPI import from AppEnablementAPI_TypesAndValues all; import from AppEnablementAPI_Templates all; @@ -43,9 +43,19 @@ module LibItsHttp_JsonTemplates { import from AppLCM_TypesAndValues all; import from AppLCM_Templates all; + // LibMec/UEAppInterfaceAPI import from UEAppInterfaceAPI_TypesAndValues all; import from UEAppInterfaceAPI_Templates all; + + // LibMec/DeviceApplicationInterfaceAPI + import from DeviceApplicationInterfaceAPI_TypesAndValues all; + + // LibMec/WlanInformationAPI + import from WlanInformationAPI_TypesAndValues all; + + // LibMec/V2XInformationServiceAPI + import from V2XInformationServiceAPI_TypesAndValues all; // TODO Add here your custom RFCs import @@ -507,27 +517,27 @@ group ams_api { } // End of template mw_body_json_terminal_distance template (value) JsonBody m_body_json_distance_notification_subscription( - in template (value) DistanceNotificationSubscription p_distance_notification_subscription - ) := { + in template (value) DistanceNotificationSubscription p_distance_notification_subscription + ) := { distanceNotificationSubscription := p_distance_notification_subscription } // End of template m_body_json_distance_notification_subscription template (present) JsonBody mw_body_json_distance_notification_subscription( - template (present) DistanceNotificationSubscription p_distance_notification_subscription := ? - ) := { + template (present) DistanceNotificationSubscription p_distance_notification_subscription := ? + ) := { distanceNotificationSubscription := p_distance_notification_subscription } // End of template mw_body_json_distance_notification_subscription template (value) JsonBody m_body_json_periodic_notification_subscription( in template (value) PeriodicNotificationSubscription p_periodic_notification_subscription ) := { - distanceNotificationSubscription := p_periodic_notification_subscription + periodicNotificationSubscription := p_periodic_notification_subscription } // End of template m_body_json_periodic_notification_subscription template (present) JsonBody mw_body_json_periodic_notification_subscription( template (present) PeriodicNotificationSubscription p_periodic_notification_subscription := ? ) := { - distanceNotificationSubscription := p_periodic_notification_subscription + periodicNotificationSubscription := p_periodic_notification_subscription } // End of template mw_body_json_periodic_notification_subscription } // End of group location_api @@ -712,7 +722,7 @@ group ams_api { } // End of group rnis_notifications - group bw_management_api { + group traffic_management_api { template (value) JsonBody m_body_json_bw_info( in template (value) BwInfo p_bwInfo @@ -726,7 +736,55 @@ group ams_api { bwInfo := p_bwInfo } // End of template mw_body_json_bw_info - } // End of group bw_management_api + template (value) JsonBody m_body_json_bw_info_deltas( + in template (value) BwInfoDeltas p_bwInfoDeltas + ) := { + bwInfoDeltas := p_bwInfoDeltas + } // End of template m_body_json_bw_info_deltas + + template (present) JsonBody mw_body_json_bw_info_deltas( + template (present) BwInfoDeltas p_bwInfoDeltas := ? + ) := { + bwInfoDeltas := p_bwInfoDeltas + } // End of template mw_body_json_bw_info_deltas + + template (present) JsonBody mw_body_json_bw_info_list( + template (present) BwInfoList p_bwInfoList := ? + ) := { + bwInfoList := p_bwInfoList + } // End of template mw_body_json_bw_info_list + + template (value) JsonBody m_body_json_mts_capability_info( + in template (value) MtsCapabilityInfo p_mtsCapabilityInfo + ) := { + mtsCapabilityInfo := p_mtsCapabilityInfo + } // End of template m_body_json_mts_capability_info + + template (present) JsonBody mw_body_json_mts_capability_info( + template (present) MtsCapabilityInfo p_mtsCapabilityInfo := ? + ) := { + mtsCapabilityInfo := p_mtsCapabilityInfo + } // End of template mw_body_json_mts_capability_info + + template (value) JsonBody m_body_json_mts_session_info( + in template (value) MtsSessionInfo p_mtsSessionInfo + ) := { + mtsSessionInfo := p_mtsSessionInfo + } // End of template m_body_json_mts_session_info + + template (present) JsonBody mw_body_json_mts_session_info( + template (present) MtsSessionInfo p_mtsSessionInfo := ? + ) := { + mtsSessionInfo := p_mtsSessionInfo + } // End of template mw_body_json_mts_session_info + + template (present) JsonBody mw_body_json_mts_session_info_list( + template (present) MtsSessionInfos p_mtsSessionInfos := ? + ) := { + mtsSessionInfos := p_mtsSessionInfos + } // End of template mw_body_json_mts_session_info_list + + } // End of group traffic_management_api group app_enablement_api { @@ -879,13 +937,13 @@ group ams_api { group ue_app_ctx { template (value) JsonBody m_body_json_app_context( - in template (value) AppContext p_appContext + in template (value) UEAppInterfaceAPI_TypesAndValues.AppContext p_appContext ) := { appContext := p_appContext } // End of template m_body_json_app_context template (present) JsonBody mw_body_json_app_context( - template (present) AppContext p_appContext := ? + template (present) UEAppInterfaceAPI_TypesAndValues.AppContext p_appContext := ? ) := { appContext := p_appContext } // End of template mw_body_json_app_context @@ -902,6 +960,270 @@ group ams_api { appInfo := p_appInfo } // End of template mw_body_json_app_info - } // End of group ue_app_ctx - + } // End of group ue_app_ctx + + group device_information { + + template (value) JsonBody m_body_json_device_info_app_list( + in template (value) DeviceApplicationInterfaceAPI_TypesAndValues.ApplicationList p_application_list + ) := { + applicationList := p_application_list + } // End of template m_body_json_device_info_app_list + + template (present) JsonBody mw_body_json_device_info_app_list( + template (present) DeviceApplicationInterfaceAPI_TypesAndValues.ApplicationList p_application_list := ? + ) := { + applicationList := p_application_list + } // End of template mw_body_json_device_info_app_list + + template (value) JsonBody m_body_json_device_info_app_context( + in template (value) DeviceApplicationInterfaceAPI_TypesAndValues.AppContext p_appContext + ) := { + appContext_device_info := p_appContext + } // End of template m_body_json_device_info_app_context + + template (present) JsonBody mw_body_json_device_info_app_context( + template (present) DeviceApplicationInterfaceAPI_TypesAndValues.AppContext p_appContext := ? + ) := { + appContext_device_info := p_appContext + } // End of template mw_body_json_device_info_app_context + + template (value) JsonBody m_body_json_device_info_app_location_availability( + in template (value) ApplicationLocationAvailability p_applicationLocationAvailability + ) := { + applicationLocationAvailability := p_applicationLocationAvailability + } // End of template m_body_json_device_info_app_location_availability + + template (present) JsonBody mw_body_json_device_info_app_location_availability( + template (present) ApplicationLocationAvailability p_applicationLocationAvailability := ? + ) := { + applicationLocationAvailability := p_applicationLocationAvailability + } // End of template mw_body_json_device_info_app_location_availability + + } // End of group device_information + + group wlan_information { + + template (value) JsonBody m_body_json_ap_info_list( + in template (value) ApInfoList p_apInfoList + ) := { + apInfoList := p_apInfoList + } // End of template m_body_json_ap_info_list + + template (present) JsonBody mw_body_json_ap_info_list( + template (present) ApInfoList p_apInfoList := ? + ) := { + apInfoList := p_apInfoList + } // End of template mw_body_json_ap_info_list + + template (value) JsonBody m_body_json_sta_info_list( + in template (value) StaInfoList p_staInfoList + ) := { + staInfoList := p_staInfoList + } // End of template m_body_json_sta_info_list + + template (present) JsonBody mw_body_json_sta_info_list( + template (present) StaInfoList p_staInfoList := ? + ) := { + staInfoList := p_staInfoList + } // End of template mw_body_json_sta_info_list + + template (value) JsonBody m_body_json_assoc_sta_subscription( + in template (value) AssocStaSubscription p_assocStaSubscription + ) := { + assocStaSubscription := p_assocStaSubscription + } // End of template m_body_json_assoc_sta_subscription + + template (present) JsonBody mw_body_json_assoc_sta_subscription( + template (present) AssocStaSubscription p_assocStaSubscription := ? + ) := { + assocStaSubscription := p_assocStaSubscription + } // End of template mw_body_json_assoc_sta_subscription + + template (value) JsonBody m_body_json_sta_data_rate_subscription( + in template (value) StaDataRateSubscription p_staDataRateSubscription + ) := { + staDataRateSubscription := p_staDataRateSubscription + } // End of template m_body_json_sta_data_rate_subscription + + template (present) JsonBody mw_body_json_sta_data_rate_subscription( + template (present) StaDataRateSubscription p_staDataRateSubscription := ? + ) := { + staDataRateSubscription := p_staDataRateSubscription + } // End of template mw_body_json_sta_data_rate_subscription + + template (value) JsonBody m_body_json_wlan_subscription_link_list( + in template (value) WlanInformationAPI_TypesAndValues.SubscriptionLinkList p_subscription_link_list + ) := { + subscriptionLinkList_wlan := p_subscription_link_list + } // End of template m_body_json_wlan_subscription_link_list + + template (present) JsonBody mw_body_json_wlan_subscription_link_list( + template (present) WlanInformationAPI_TypesAndValues.SubscriptionLinkList p_subscription_link_list := ? + ) := { + subscriptionLinkList_wlan := p_subscription_link_list + } // End of template mw_body_json_wlan_subscription_link_list + + } // End of group wlan_information + + group v2x_information_service { + + template (value) JsonBody m_body_json_uu_unicast_provisioning_info( + in template (value) UuUnicastProvisioningInfo p_uuUnicastProvisioningInfo + ) := { + uuUnicastProvisioningInfo := p_uuUnicastProvisioningInfo + } // End of template m_body_json_uu_unicast_provisioning_info + + template (present) JsonBody mw_body_json_uu_unicast_provisioning_info( + template (present) UuUnicastProvisioningInfo p_uuUnicastProvisioningInfo := ? + ) := { + uuUnicastProvisioningInfo := p_uuUnicastProvisioningInfo + } // End of template mw_body_json_uu_unicast_provisioning_info + + template (value) JsonBody m_body_json_uu_mbms_provisioning_info( + in template (value) UuMbmsProvisioningInfo p_uuMbmsProvisioningInfo + ) := { + uuMbmsProvisioningInfo := p_uuMbmsProvisioningInfo + } // End of template m_body_json_uu_mbms_provisioning_info + + template (present) JsonBody mw_body_json_uu_mbms_provisioning_info( + template (present) UuMbmsProvisioningInfo p_uuMbmsProvisioningInfo := ? + ) := { + uuMbmsProvisioningInfo := p_uuMbmsProvisioningInfo + } // End of template mw_body_json_uu_mbms_provisioning_info + + template (value) JsonBody m_body_json_pc5_provisioning_info( + in template (value) Pc5ProvisioningInfo p_pc5ProvisioningInfo + ) := { + pc5ProvisioningInfo := p_pc5ProvisioningInfo + } // End of template m_body_json_pc5_provisioning_info + + template (present) JsonBody mw_body_json_pc5_provisioning_info( + template (present) Pc5ProvisioningInfo p_pc5ProvisioningInfo := ? + ) := { + pc5ProvisioningInfo := p_pc5ProvisioningInfo + } // End of template mw_body_json_pc5_provisioning_info + + template (value) JsonBody m_body_json_v2x_predicted_qos( + in template (value) PredictedQos p_predicted_qos + ) := { + predictedQos := p_predicted_qos + } // End of template m_body_json_v2x_predicted_qos + + template (present) JsonBody mw_body_json_v2x_predicted_qos( + template (present) PredictedQos p_predicted_qos := ? + ) := { + predictedQos := p_predicted_qos + } // End of template mw_body_json_v2x_predicted_qos + + template (value) JsonBody m_body_json_v2x_message( + in template (value) V2xMsgPublication p_message + ) := { + v2xMsgPublication := p_message + } // End of template m_body_json_v2x_message + + template (present) JsonBody mw_body_json_v2x_message( + template (present) V2xMsgPublication p_message := ? + ) := { + v2xMsgPublication := p_message + } // End of template mw_body_json_v2x_message + + template (value) JsonBody m_body_json_v2x_subscription_link_list( + in template (value) V2XInformationServiceAPI_TypesAndValues.SubscriptionLinkList p_subscription_link_list + ) := { + subscriptionLinkList_v2x := p_subscription_link_list + } // End of template m_body_json_v2x_subscription_link_list + + template (present) JsonBody mw_body_json_v2x_subscription_link_list( + template (present) V2XInformationServiceAPI_TypesAndValues.SubscriptionLinkList p_subscription_link_list := ? + ) := { + subscriptionLinkList_v2x := p_subscription_link_list + } // End of template mw_body_json_v2x_subscription_link_list + + template (value) JsonBody m_body_json_prov_chg_uu_uni_subscription( + in template (value) ProvChgUuUniSubscription p_provChgUuUniSubscription + ) := { + provChgUuUniSubscription := p_provChgUuUniSubscription + } // End of template m_body_json_prov_chg_uu_uni_subscription + + template (present) JsonBody mw_body_json_prov_chg_uu_uni_subscription( + template (present) ProvChgUuUniSubscription p_provChgUuUniSubscription := ? + ) := { + provChgUuUniSubscription := p_provChgUuUniSubscription + } // End of template mw_body_json_prov_uu_uni_subscription + + template (value) JsonBody m_body_json_prov_chg_uu_mbms_subscription( + in template (value) ProvChgUuMbmsSubscription p_provChgUuMbmsSubscription + ) := { + provChgUuMbmsSubscription := p_provChgUuMbmsSubscription + } // End of template m_body_json_prov_chg_uu_mbms_subscription + + template (present) JsonBody mw_body_json_prov_chg_uu_mbms_subscription( + template (present) ProvChgUuMbmsSubscription p_provChgUuMbmsSubscription := ? + ) := { + provChgUuMbmsSubscription := p_provChgUuMbmsSubscription + } // End of template mw_body_json_prov_uu_mbms_subscription + + template (value) JsonBody m_body_json_prov_chg_pc5_subscription( + in template (value) ProvChgPc5Subscription p_provChgPc5Subscription + ) := { + provChgPc5Subscription := p_provChgPc5Subscription + } // End of template m_body_json_prov_chg_pc5_subscription + + template (present) JsonBody mw_body_json_prov_chg_pc5_subscription( + template (present) ProvChgPc5Subscription p_provChgPc5Subscription := ? + ) := { + provChgPc5Subscription := p_provChgPc5Subscription + } // End of template mw_body_json_prov_pc5_subscription + + template (value) JsonBody m_body_json_v2x_msg_subscription( + in template (value) V2xMsgSubscription p_v2xMsgSubscription + ) := { + v2xMsgSubscription := p_v2xMsgSubscription + } // End of template m_body_json_v2x_msg_subscription + + template (present) JsonBody mw_body_json_v2x_msg_subscription( + template (present) V2xMsgSubscription p_v2xMsgSubscription := ? + ) := { + v2xMsgSubscription := p_v2xMsgSubscription + } // End of template mw_body_json_v2x_msg_subscription + + template (value) JsonBody m_body_json_prov_chg_uu_uni_notification( + in template (value) ProvChgUuUniNotification p_provChgUuUniNotification + ) := { + provChgUuUniNotification := p_provChgUuUniNotification + } // End of template m_body_json_prov_chg_uu_uni_notification + + template (present) JsonBody mw_body_json_prov_chg_uu_uni_notification( + template (present) ProvChgUuUniNotification p_provChgUuUniNotification := ? + ) := { + provChgUuUniNotification := p_provChgUuUniNotification + } // End of template mw_body_json_prov_uu_uni_notification + + template (value) JsonBody m_body_json_prov_chg_uu_mbms_notification( + in template (value) ProvChgUuMbmsNotification p_provChgUuMbmsNotification + ) := { + provChgUuMbmsNotification := p_provChgUuMbmsNotification + } // End of template m_body_json_prov_chg_uu_mbms_notification + + template (present) JsonBody mw_body_json_prov_chg_uu_mbms_notification( + template (present) ProvChgUuMbmsNotification p_provChgUuMbmsNotification := ? + ) := { + provChgUuMbmsNotification := p_provChgUuMbmsNotification + } // End of template mw_body_json_prov_uu_mbms_notification + + template (value) JsonBody m_body_json_prov_chg_pc5_notification( + in template (value) ProvChgPc5Notification p_provChgPc5Notification + ) := { + provChgPc5Notification := p_provChgPc5Notification + } // End of template m_body_json_prov_chg_pc5_notification + + template (present) JsonBody mw_body_json_prov_chg_pc5_notification( + template (present) ProvChgPc5Notification p_provChgPc5Notification := ? + ) := { + provChgPc5Notification := p_provChgPc5Notification + } // End of template mw_body_json_prov_pc5_notification + + } // End of group v2x_information_service + } // End of module LibItsHttp_JsonTemplates diff --git a/ttcn/patch_lib_its/module.mk b/ttcn/patch_lib_its/module.mk new file mode 100644 index 0000000000000000000000000000000000000000..65c5047e2d3deb0df8369ee21613d3577cfa1257 --- /dev/null +++ b/ttcn/patch_lib_its/module.mk @@ -0,0 +1 @@ +modules := ttcn/Http