From 23beba030a29ec4f2471bd49d809132fa42409db Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Wed, 5 Jun 2024 14:13:37 -0700 Subject: [PATCH 01/28] feat: support task deadlines (#58) --- builtins/web/timers.cpp | 4 ++++ include/extension-api.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/builtins/web/timers.cpp b/builtins/web/timers.cpp index 340c852b..1923d1e9 100644 --- a/builtins/web/timers.cpp +++ b/builtins/web/timers.cpp @@ -68,6 +68,10 @@ class TimerTask final : public api::AsyncTask { return true; } + [[nodiscard]] uint64_t deadline() override { + return deadline_; + } + void trace(JSTracer *trc) override { TraceEdge(trc, &callback_, "Timer callback"); for (auto &arg : arguments_) { diff --git a/include/extension-api.h b/include/extension-api.h index f6558b4b..98a47838 100644 --- a/include/extension-api.h +++ b/include/extension-api.h @@ -127,6 +127,10 @@ class AsyncTask { return handle_; } + [[nodiscard]] virtual uint64_t deadline() { + return 0; + } + virtual void trace(JSTracer *trc) = 0; /** From 63a0464af343fb6facaac2fe14c7e54b6e08cd28 Mon Sep 17 00:00:00 2001 From: Till Schneidereit Date: Fri, 21 Jun 2024 13:49:13 +0200 Subject: [PATCH 02/28] Overhaul fetch implementation and host API (#52) This is a large-scale rewrite of significant parts of the fetch API implementation that addresses a range of shortcomings and bugs in the previous code. Key changes are a better abstraction of host handles in the `host_api.h` header, cleaner handling of all the different object types involved in the fetch API, improved handling of strings and streams, and a whole bunch of bug fixes all over the place. Additionally, this includes various build system tweaks and some facilities for making debugging easier, such as the introduction of a way to build a component that doesn't include pre-evaluated JS and instead supports runtime evaluation of a script supplied in the incoming request's body. --- CMakeLists.txt | 9 +- README.md | 4 +- builtins/web/fetch/fetch-api.cpp | 119 ++-- builtins/web/fetch/fetch_event.cpp | 263 +++++--- builtins/web/fetch/fetch_event.h | 3 + builtins/web/fetch/headers.cpp | 845 ++++++++++++++---------- builtins/web/fetch/headers.h | 105 ++- builtins/web/fetch/request-response.cpp | 515 +++++++-------- builtins/web/fetch/request-response.h | 91 ++- builtins/web/url.cpp | 9 +- componentize.sh | 65 +- crates/rust-url/rust-url.h | 11 + host-apis/wasi-0.2.0/host_api.cpp | 757 ++++++++++++++------- include/extension-api.h | 11 + include/host_api.h | 134 ++-- runtime/decode.cpp | 10 + runtime/decode.h | 10 + runtime/engine.cpp | 75 ++- runtime/js.cpp | 34 +- runtime/script_loader.cpp | 126 ++-- runtime/script_loader.h | 5 +- spin.toml | 2 +- tests/wpt-harness/run-wpt.mjs | 15 +- tests/wpt-harness/tests.json | 2 +- tests/wpt-harness/wpt.cmake | 5 +- tests/wpt-harness/wpt_builtins.cpp | 2 +- 26 files changed, 1977 insertions(+), 1250 deletions(-) create mode 100644 runtime/decode.cpp create mode 100644 runtime/decode.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0691f3d6..98c3e9d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,13 +36,14 @@ include("openssl") include("host_api") include("build-crates") -add_library(extension_api INTERFACE include/extension-api.h runtime/encode.h) +add_library(extension_api INTERFACE include/extension-api.h runtime/encode.h runtime/decode.h) target_link_libraries(extension_api INTERFACE rust-url spidermonkey) target_include_directories(extension_api INTERFACE include deps/include runtime) include("builtins") -if (DEFINED ENV{WPT}) +option(ENABLE_WPT "Enable WPT harness support" OFF) +if (ENABLE_WPT) include("tests/wpt-harness/wpt.cmake") endif() @@ -50,6 +51,7 @@ add_executable(starling.wasm runtime/js.cpp runtime/allocator.cpp runtime/encode.cpp + runtime/decode.cpp runtime/engine.cpp runtime/event_loop.cpp runtime/builtin.cpp @@ -94,7 +96,7 @@ function(componentize OUTPUT) add_custom_command( OUTPUT ${OUTPUT}.wasm WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E env "PATH=${WASM_TOOLS_DIR};${WIZER_DIR};$ENV{PATH}" ${RUNTIME_DIR}/componentize.sh ${SOURCES} ${OUTPUT}.wasm + COMMAND ${CMAKE_COMMAND} -E env "PATH=${WASM_TOOLS_DIR};${WIZER_DIR};$ENV{PATH}" ${RUNTIME_DIR}/componentize.sh ${SOURCES} -o ${OUTPUT}.wasm DEPENDS ${ARG_SOURCES} ${RUNTIME_DIR}/componentize.sh starling.wasm VERBATIM ) @@ -102,5 +104,6 @@ function(componentize OUTPUT) endfunction() componentize(smoke-test SOURCES tests/cases/smoke/smoke.js) +componentize(runtime-eval) include("tests/tests.cmake") diff --git a/README.md b/README.md index 46133736..c0bde81f 100644 --- a/README.md +++ b/README.md @@ -80,12 +80,12 @@ StarlingMonkey includes a test runner for the [Web Platform Tests](https://web-p ### Requirements -The WPT runner requires `Node.js` to be installed, and during build configuration the environment variable `WPT` must be defined. +The WPT runner requires `Node.js` to be installed, and during build configuration the option `ENABLE_WPT:BOOL=ON` must be set. When running the test, `WPT_ROOT` must be set to the path of a checkout of the WPT suite at revision `1014eae5e66f8f334610d5a1521756f7a2fb769f`: ```bash -WPT=1 WPT_ROOT=[path to your WPT checkout] cmake -S . -B cmake-build-debug -DCMAKE_BUILD_TYPE=Debug +WPT_ROOT=[path to your WPT checkout] cmake -S . -B cmake-build-debug -DENABLE_WPT:BOOL=ON -DCMAKE_BUILD_TYPE=Debug cmake --build cmake-build-debug --parallel 8 --target wpt-runtime cd cmake-build-debug ctest --verbose # Note: some of the tests run fairly slowly in debug builds, so be patient diff --git a/builtins/web/fetch/fetch-api.cpp b/builtins/web/fetch/fetch-api.cpp index 9f45119d..58d2f64f 100644 --- a/builtins/web/fetch/fetch-api.cpp +++ b/builtins/web/fetch/fetch-api.cpp @@ -3,67 +3,13 @@ #include "headers.h" #include "request-response.h" -namespace builtins::web::fetch { - -static api::Engine *ENGINE; - -class ResponseFutureTask final : public api::AsyncTask { - Heap request_; - host_api::FutureHttpIncomingResponse *future_; - -public: - explicit ResponseFutureTask(const HandleObject request, - host_api::FutureHttpIncomingResponse *future) - : request_(request), future_(future) { - auto res = future->subscribe(); - MOZ_ASSERT(!res.is_err(), "Subscribing to a future should never fail"); - handle_ = res.unwrap(); - } +#include - [[nodiscard]] bool run(api::Engine *engine) override { - // MOZ_ASSERT(ready()); - JSContext *cx = engine->cx(); - - const RootedObject request(cx, request_); - RootedObject response_promise(cx, Request::response_promise(request)); - - auto res = future_->maybe_response(); - if (res.is_err()) { - JS_ReportErrorUTF8(cx, "NetworkError when attempting to fetch resource."); - return RejectPromiseWithPendingError(cx, response_promise); - } - - auto maybe_response = res.unwrap(); - MOZ_ASSERT(maybe_response.has_value()); - auto response = maybe_response.value(); - RootedObject response_obj( - cx, JS_NewObjectWithGivenProto(cx, &Response::class_, Response::proto_obj)); - if (!response_obj) { - return false; - } +#include - response_obj = Response::create(cx, response_obj, response); - if (!response_obj) { - return false; - } - - RequestOrResponse::set_url(response_obj, RequestOrResponse::url(request)); - RootedValue response_val(cx, ObjectValue(*response_obj)); - if (!ResolvePromise(cx, response_promise, response_val)) { - return false; - } - - return cancel(engine); - } - - [[nodiscard]] bool cancel(api::Engine *engine) override { - // TODO(TS): implement - handle_ = -1; - return true; - } +namespace builtins::web::fetch { - void trace(JSTracer *trc) override { TraceEdge(trc, &request_, "Request for response future"); } -}; +static api::Engine *ENGINE; // TODO: throw in all Request methods/getters that rely on host calls once a // request has been sent. The host won't let us act on them anymore anyway. @@ -80,30 +26,59 @@ bool fetch(JSContext *cx, unsigned argc, Value *vp) { return ReturnPromiseRejectedWithPendingError(cx, args); } - RootedObject requestInstance( - cx, JS_NewObjectWithGivenProto(cx, &Request::class_, Request::proto_obj)); - if (!requestInstance) - return false; + RootedObject request_obj(cx, Request::create(cx)); + if (!request_obj) { + return ReturnPromiseRejectedWithPendingError(cx, args); + } + + if (!Request::initialize(cx, request_obj, args[0], args.get(1))) { + return ReturnPromiseRejectedWithPendingError(cx, args); + } + + RootedString method_str(cx, Request::method(cx, request_obj)); + if (!method_str) { + return ReturnPromiseRejectedWithPendingError(cx, args); + } - RootedObject request(cx, Request::create(cx, requestInstance, args[0], args.get(1))); - if (!request) { + host_api::HostString method = core::encode(cx, method_str); + if (!method.ptr) { return ReturnPromiseRejectedWithPendingError(cx, args); } + RootedValue url_val(cx, RequestOrResponse::url(request_obj)); + host_api::HostString url = core::encode(cx, url_val); + if (!url.ptr) { + return ReturnPromiseRejectedWithPendingError(cx, args); + } + + unique_ptr headers = RequestOrResponse::headers_handle_clone(cx, + request_obj, host_api::HttpHeadersGuard::Request); + if (!headers) { + return ReturnPromiseRejectedWithPendingError(cx, args); + } + + auto request = host_api::HttpOutgoingRequest::make(method, std::move(url), + std::move(headers)); + MOZ_RELEASE_ASSERT(request); + JS_SetReservedSlot(request_obj, static_cast(Request::Slots::Request), + PrivateValue(request)); + RootedObject response_promise(cx, JS::NewPromiseObject(cx, nullptr)); if (!response_promise) return ReturnPromiseRejectedWithPendingError(cx, args); bool streaming = false; - if (!RequestOrResponse::maybe_stream_body(cx, request, &streaming)) { + if (!RequestOrResponse::maybe_stream_body(cx, request_obj, &streaming)) { return false; } + if (streaming) { + // Ensure that the body handle is stored before making the request handle invalid by sending it. + request->body(); + } host_api::FutureHttpIncomingResponse *pending_handle; { - auto request_handle = Request::outgoing_handle(request); - auto res = request_handle->send(); - + auto res = request->send(); if (auto *err = res.to_err()) { HANDLE_ERROR(cx, *err); return ReturnPromiseRejectedWithPendingError(cx, args); @@ -115,11 +90,13 @@ bool fetch(JSContext *cx, unsigned argc, Value *vp) { // If the request body is streamed, we need to wait for streaming to complete // before marking the request as pending. if (!streaming) { - ENGINE->queue_async_task(new ResponseFutureTask(request, pending_handle)); + ENGINE->queue_async_task(new ResponseFutureTask(request_obj, pending_handle)); } - JS::SetReservedSlot(request, static_cast(Request::Slots::ResponsePromise), - JS::ObjectValue(*response_promise)); + SetReservedSlot(request_obj, static_cast(Request::Slots::ResponsePromise), + ObjectValue(*response_promise)); + SetReservedSlot(request_obj, static_cast(Request::Slots::PendingResponseHandle), + PrivateValue(pending_handle)); args.rval().setObject(*response_promise); return true; diff --git a/builtins/web/fetch/fetch_event.cpp b/builtins/web/fetch/fetch_event.cpp index 87724642..91e0712b 100644 --- a/builtins/web/fetch/fetch_event.cpp +++ b/builtins/web/fetch/fetch_event.cpp @@ -3,10 +3,13 @@ #include "../url.h" #include "../worker-location.h" #include "encode.h" -#include "exports.h" #include "request-response.h" #include "bindings.h" + +#include +#include + #include #include @@ -20,8 +23,6 @@ api::Engine *ENGINE; PersistentRooted INSTANCE; JS::PersistentRootedObjectVector *FETCH_HANDLERS; - -host_api::HttpOutgoingResponse::ResponseOutparam RESPONSE_OUT; host_api::HttpOutgoingBody *STREAMING_BODY; void inc_pending_promise_count(JSObject *self) { @@ -31,6 +32,9 @@ void inc_pending_promise_count(JSObject *self) { .toInt32(); count++; MOZ_ASSERT(count > 0); + if (count == 1) { + ENGINE->incr_event_loop_interest(); + } JS::SetReservedSlot(self, static_cast(FetchEvent::Slots::PendingPromiseCount), JS::Int32Value(count)); } @@ -42,8 +46,9 @@ void dec_pending_promise_count(JSObject *self) { .toInt32(); MOZ_ASSERT(count > 0); count--; - if (count == 0) + if (count == 0) { ENGINE->decr_event_loop_interest(); + } JS::SetReservedSlot(self, static_cast(FetchEvent::Slots::PendingPromiseCount), JS::Int32Value(count)); } @@ -66,11 +71,11 @@ bool add_pending_promise(JSContext *cx, JS::HandleObject self, JS::HandleObject } // namespace JSObject *FetchEvent::prepare_downstream_request(JSContext *cx) { - JS::RootedObject requestInstance( - cx, JS_NewObjectWithGivenProto(cx, &Request::class_, Request::proto_obj)); - if (!requestInstance) + JS::RootedObject request(cx, Request::create(cx)); + if (!request) return nullptr; - return Request::create(cx, requestInstance, nullptr); + Request::init_slots(request); + return request; } bool FetchEvent::init_incoming_request(JSContext *cx, JS::HandleObject self, @@ -149,7 +154,7 @@ bool send_response(host_api::HttpOutgoingResponse *response, JS::HandleObject se FetchEvent::State new_state) { MOZ_ASSERT(FetchEvent::state(self) == FetchEvent::State::unhandled || FetchEvent::state(self) == FetchEvent::State::waitToRespond); - auto result = response->send(RESPONSE_OUT); + auto result = response->send(); FetchEvent::set_state(self, new_state); if (auto *err = result.to_err()) { @@ -161,26 +166,43 @@ bool send_response(host_api::HttpOutgoingResponse *response, JS::HandleObject se } bool start_response(JSContext *cx, JS::HandleObject response_obj, bool streaming) { - auto generic_response = Response::response_handle(response_obj); - host_api::HttpOutgoingResponse *response; - - if (generic_response->is_incoming()) { - auto incoming_response = static_cast(generic_response); - auto status = incoming_response->status(); - MOZ_RELEASE_ASSERT(!status.is_err(), "Incoming response must have a status code"); - auto headers = new host_api::HttpHeaders(*incoming_response->headers().unwrap()); - response = host_api::HttpOutgoingResponse::make(status.unwrap(), headers); - auto *source_body = incoming_response->body().unwrap(); - auto *dest_body = response->body().unwrap(); - - auto res = dest_body->append(ENGINE, source_body); - if (auto *err = res.to_err()) { - HANDLE_ERROR(cx, *err); - return false; + auto status = Response::status(response_obj); + auto headers = RequestOrResponse::headers_handle_clone(cx, response_obj, + host_api::HttpHeadersGuard::Response); + if (!headers) { + return false; + } + + host_api::HttpOutgoingResponse* response = + host_api::HttpOutgoingResponse::make(status, std::move(headers)); + if (streaming) { + // Get the body here, so it will be stored on the response object. + // Otherwise, it'd not be available anymore, because the response handle itself + // is consumed by sending it off. + auto body = response->body().unwrap(); + MOZ_RELEASE_ASSERT(body); + } + MOZ_RELEASE_ASSERT(response); + + auto existing_handle = Response::response_handle(response_obj); + if (existing_handle) { + MOZ_ASSERT(existing_handle->is_incoming()); + if (streaming) { + auto *source_body = static_cast(existing_handle)->body().unwrap(); + auto *dest_body = response->body().unwrap(); + + // TODO: check if we should add a callback here and do something in response to body + // streaming being finished. + auto res = dest_body->append(ENGINE, source_body, nullptr, nullptr); + if (auto *err = res.to_err()) { + HANDLE_ERROR(cx, *err); + return false; + } + MOZ_RELEASE_ASSERT(RequestOrResponse::mark_body_used(cx, response_obj)); } - MOZ_RELEASE_ASSERT(RequestOrResponse::mark_body_used(cx, response_obj)); } else { - response = static_cast(generic_response); + SetReservedSlot(response_obj, static_cast(Response::Slots::Response), + PrivateValue(response)); } if (streaming && response->has_body()) { @@ -217,17 +239,6 @@ bool response_promise_then_handler(JSContext *cx, JS::HandleObject event, JS::Ha // very different.) JS::RootedObject response_obj(cx, &args[0].toObject()); - // Ensure that all headers are stored client-side, so we retain access to them - // after sending the response off. - // TODO(TS): restore proper headers handling - // if (Response::is_upstream(response_obj)) { - // JS::RootedObject headers(cx); - // headers = - // RequestOrResponse::headers(cx, response_obj); - // if (!Headers::delazify(cx, headers)) - // return false; - // } - bool streaming = false; if (!RequestOrResponse::maybe_stream_body(cx, response_obj, &streaming)) { return false; @@ -304,8 +315,8 @@ bool FetchEvent::respondWith(JSContext *cx, unsigned argc, JS::Value *vp) { bool FetchEvent::respondWithError(JSContext *cx, JS::HandleObject self) { MOZ_RELEASE_ASSERT(state(self) == State::unhandled || state(self) == State::waitToRespond); - auto headers = std::make_unique(); - auto *response = host_api::HttpOutgoingResponse::make(500, headers.get()); + auto headers = std::make_unique(host_api::HttpHeadersGuard::Response); + auto *response = host_api::HttpOutgoingResponse::make(500, std::move(headers)); auto body_res = response->body(); if (auto *err = body_res.to_err()) { @@ -354,6 +365,14 @@ bool FetchEvent::waitUntil(JSContext *cx, unsigned argc, JS::Value *vp) { return true; } +void FetchEvent::increase_interest() { + inc_pending_promise_count(INSTANCE); +} + +void FetchEvent::decrease_interest() { + dec_pending_promise_count(INSTANCE); +} + const JSFunctionSpec FetchEvent::static_methods[] = { JS_FS_END, }; @@ -509,94 +528,77 @@ static void dispatch_fetch_event(HandleObject event, double *total_compute) { // LOG("Request handler took %fms\n", diff / 1000); } -bool install(api::Engine *engine) { - ENGINE = engine; - FETCH_HANDLERS = new JS::PersistentRootedObjectVector(engine->cx()); +/** + * Reads the incoming request's body and evaluates it as a script. + * + * Mainly useful for debugging purposes, and only even reachable in components that + * were created without an input script during wizening. + */ +bool eval_request_body(host_api::HttpIncomingRequest *request) { + JS::SourceText source; + auto body = request->body().unwrap(); + auto pollable = body->subscribe().unwrap(); + size_t len = 0; + vector chunks; + + while (true) { + host_api::block_on_pollable_handle(pollable); + auto result = body->read(4096); + if (result.unwrap().done) { + break; + } - if (!JS_DefineFunction(engine->cx(), engine->global(), "addEventListener", addEventListener, 2, - 0)) { - MOZ_RELEASE_ASSERT(false); + auto chunk = std::move(result.unwrap().bytes); + len += chunk.size(); + chunks.push_back(std::move(chunk)); } - if (!FetchEvent::init_class(engine->cx(), engine->global())) - return false; - - if (!FetchEvent::create(engine->cx())) { - MOZ_RELEASE_ASSERT(false); + // Merge all chunks into one buffer + auto buffer = new char[len]; + size_t offset = 0; + for (auto &chunk : chunks) { + memcpy(buffer + offset, chunk.ptr.get(), chunk.size()); + offset += chunk.size(); } - // TODO(TS): restore validation - // if (FETCH_HANDLERS->length() == 0) { - // RootedValue val(engine->cx()); - // if (!JS_GetProperty(engine->cx(), engine->global(), "onfetch", &val) || !val.isObject() - // || !JS_ObjectIsFunction(&val.toObject())) { - // // The error message only mentions `addEventListener`, even though we also - // // support an `onfetch` top-level function as an alternative. We're - // // treating the latter as undocumented functionality for the time being. - // fprintf( - // stderr, - // "Error: no `fetch` event handler registered during initialization. " - // "Make sure to call `addEventListener('fetch', your_handler)`.\n"); - // exit(1); - // } - // if (!FETCH_HANDLERS->append(&val.toObject())) { - // engine->abort("Adding onfetch as a fetch event handler"); - // } - // } + if (!source.init(CONTEXT, buffer, len, JS::SourceOwnership::TakeOwnership)) { + return false; + } + RootedValue rval(ENGINE->cx()); + if (!ENGINE->eval_toplevel(source, "", &rval)) { + if (JS_IsExceptionPending(ENGINE->cx())) { + ENGINE->dump_pending_exception("Runtime script evaluation"); + } + return false; + } return true; } -} // namespace builtins::web::fetch::fetch_event +bool handle_incoming_request(host_api::HttpIncomingRequest * request) { +#ifdef DEBUG + fprintf(stderr, "Warning: Using a DEBUG build. Expect things to be SLOW.\n"); +#endif -// #define S_TO_NS(s) ((s) * 1000000000) -// static int64_t now_ns() { -// timespec now{}; -// clock_gettime(CLOCK_MONOTONIC, &now); -// return S_TO_NS(now.tv_sec) + now.tv_nsec; -// } -using namespace builtins::web::fetch::fetch_event; -// TODO: change this to fully work in terms of host_api. -void exports_wasi_http_incoming_handler(exports_wasi_http_incoming_request request_handle, - exports_wasi_http_response_outparam response_out) { - - // auto begin = now_ns(); - // auto id1 = host_api::MonotonicClock::subscribe(begin + 1, true); - // auto id2 = host_api::MonotonicClock::subscribe(begin + 1000000*1000, true); - // bindings_borrow_pollable_t handles[2] = {bindings_borrow_pollable_t{id2}, - // bindings_borrow_pollable_t{id1}}; auto list = bindings_list_borrow_pollable_t{handles, 2}; - // bindings_list_u32_t res = {.ptr = nullptr,.len = 0}; - // wasi_io_0_2_0_rc_2023_10_18_poll_poll_list(&list, &res); - // fprintf(stderr, "first ready after first poll: %d. diff: %lld\n", handles[res.ptr[0]].__handle, - // (now_ns() - begin) / 1000); - // - // wasi_io_0_2_0_rc_2023_10_18_poll_pollable_drop_own(bindings_own_pollable_t{id1}); - // - // bindings_borrow_pollable_t handles2[1] = {bindings_borrow_pollable_t{id2}}; - // list = bindings_list_borrow_pollable_t{handles2, 1}; - // wasi_io_0_2_0_rc_2023_10_18_poll_poll_list(&list, &res); - // fprintf(stderr, "first ready after second poll: %d. diff: %lld\n", - // handles2[res.ptr[0]].__handle, (now_ns() - begin) / 1000); - // - // return; - - RESPONSE_OUT = response_out.__handle; - - auto *request = new host_api::HttpIncomingRequest(request_handle.__handle); HandleObject fetch_event = FetchEvent::instance(); MOZ_ASSERT(FetchEvent::is_instance(fetch_event)); + + if (!ENGINE->toplevel_evaluated()) { + if (!eval_request_body(request)) { + FetchEvent::respondWithError(ENGINE->cx(), fetch_event); + return true; + } + } + if (!FetchEvent::init_incoming_request(ENGINE->cx(), fetch_event, request)) { ENGINE->dump_pending_exception("initialization of FetchEvent"); - return; + return false; } double total_compute = 0; dispatch_fetch_event(fetch_event, &total_compute); - // track fetch event interest, which when decremented ends the event loop - ENGINE->incr_event_loop_interest(); - bool success = ENGINE->run_event_loop(); if (JS_IsExceptionPending(ENGINE->cx())) { @@ -615,10 +617,53 @@ void exports_wasi_http_incoming_handler(exports_wasi_http_incoming_request reque if (!FetchEvent::response_started(fetch_event)) { FetchEvent::respondWithError(ENGINE->cx(), fetch_event); - return; + return true; } if (STREAMING_BODY && STREAMING_BODY->valid()) { STREAMING_BODY->close(); } + + return true; } + +bool install(api::Engine *engine) { + ENGINE = engine; + FETCH_HANDLERS = new JS::PersistentRootedObjectVector(engine->cx()); + + if (!JS_DefineFunction(engine->cx(), engine->global(), "addEventListener", addEventListener, 2, + 0)) { + MOZ_RELEASE_ASSERT(false); + } + + if (!FetchEvent::init_class(engine->cx(), engine->global())) + return false; + + if (!FetchEvent::create(engine->cx())) { + MOZ_RELEASE_ASSERT(false); + } + + // TODO(TS): restore validation + // if (FETCH_HANDLERS->length() == 0) { + // RootedValue val(engine->cx()); + // if (!JS_GetProperty(engine->cx(), engine->global(), "onfetch", &val) || !val.isObject() + // || !JS_ObjectIsFunction(&val.toObject())) { + // // The error message only mentions `addEventListener`, even though we also + // // support an `onfetch` top-level function as an alternative. We're + // // treating the latter as undocumented functionality for the time being. + // fprintf( + // stderr, + // "Error: no `fetch` event handler registered during initialization. " + // "Make sure to call `addEventListener('fetch', your_handler)`.\n"); + // exit(1); + // } + // if (!FETCH_HANDLERS->append(&val.toObject())) { + // engine->abort("Adding onfetch as a fetch event handler"); + // } + // } + + host_api::HttpIncomingRequest::set_handler(handle_incoming_request); + return true; +} + +} // namespace builtins::web::fetch::fetch_event diff --git a/builtins/web/fetch/fetch_event.h b/builtins/web/fetch/fetch_event.h index 6714ce9b..c1e95ed6 100644 --- a/builtins/web/fetch/fetch_event.h +++ b/builtins/web/fetch/fetch_event.h @@ -65,6 +65,9 @@ class FetchEvent final : public BuiltinNoConstructor { static bool response_started(JSObject *self); static JS::HandleObject instance(); + + static void increase_interest(); + static void decrease_interest(); }; bool install(api::Engine *engine); diff --git a/builtins/web/fetch/headers.cpp b/builtins/web/fetch/headers.cpp index 32f3d8fc..632a2f7b 100644 --- a/builtins/web/fetch/headers.cpp +++ b/builtins/web/fetch/headers.cpp @@ -1,22 +1,17 @@ #include "headers.h" -// #include "request-response.h" #include "encode.h" +#include "decode.h" #include "sequence.hpp" #include "js/Conversions.h" -namespace builtins { -namespace web { -namespace fetch { - +namespace builtins::web::fetch { namespace { -using Handle = host_api::HttpHeaders; - #define HEADERS_ITERATION_METHOD(argc) \ METHOD_HEADER(argc) \ - JS::RootedObject backing_map(cx, get_backing_map(self)); \ - if (!ensure_all_header_values_from_handle(cx, self, backing_map)) { \ + JS::RootedObject entries(cx, get_entries(cx, self)); \ + if (!entries) { \ return false; \ } @@ -43,35 +38,24 @@ const char VALID_NAME_CHARS[128] = { }; #define NORMALIZE_NAME(name, fun_name) \ - JS::RootedValue normalized_name(cx, name); \ - auto name_chars = normalize_header_name(cx, &normalized_name, fun_name); \ + bool name_changed; \ + auto name_chars = normalize_header_name(cx, name, &name_changed, fun_name); \ if (!name_chars) { \ return false; \ } #define NORMALIZE_VALUE(value, fun_name) \ - JS::RootedValue normalized_value(cx, value); \ - auto value_chars = normalize_header_value(cx, &normalized_value, fun_name); \ - if (!value_chars) { \ + bool value_changed; \ + auto value_chars = normalize_header_value(cx, value, &value_changed, fun_name); \ + if (!value_chars.ptr) { \ return false; \ } -JSObject *get_backing_map(JSObject *self) { - MOZ_ASSERT(Headers::is_instance(self)); - return &JS::GetReservedSlot(self, static_cast(Headers::Slots::BackingMap)).toObject(); -} - -bool lazy_values(JSObject *self) { - MOZ_ASSERT(Headers::is_instance(self)); - return JS::GetReservedSlot(self, static_cast(Headers::Slots::HasLazyValues)) - .toBoolean(); -} - -Handle *get_handle(JSObject *self) { +host_api::HttpHeadersReadOnly *get_handle(JSObject *self) { MOZ_ASSERT(Headers::is_instance(self)); auto handle = JS::GetReservedSlot(self, static_cast(Headers::Slots::Handle)).toPrivate(); - return static_cast(handle); + return static_cast(handle); } /** @@ -82,14 +66,10 @@ Handle *get_handle(JSObject *self) { * See * https://searchfox.org/mozilla-central/rev/9f76a47f4aa935b49754c5608a1c8e72ee358c46/netwerk/protocol/http/nsHttp.cpp#172-215 * For details on validation. - * - * Mutates `name_val` in place, and returns the name as UniqueChars. - * This is done because most uses of header names require handling of both the - * JSString and the char* version, so they'd otherwise have to recreate one of - * the two. */ -host_api::HostString normalize_header_name(JSContext *cx, JS::MutableHandleValue name_val, +host_api::HostString normalize_header_name(JSContext *cx, HandleValue name_val, bool* named_changed, const char *fun_name) { + *named_changed = !name_val.isString(); JS::RootedString name_str(cx, JS::ToString(cx, name_val)); if (!name_str) { return nullptr; @@ -105,42 +85,42 @@ host_api::HostString normalize_header_name(JSContext *cx, JS::MutableHandleValue return nullptr; } - bool changed = false; - char *name_chars = name.begin(); for (size_t i = 0; i < name.len; i++) { - unsigned char ch = name_chars[i]; + const unsigned char ch = name_chars[i]; if (ch > 127 || !VALID_NAME_CHARS[ch]) { JS_ReportErrorUTF8(cx, "%s: Invalid header name '%s'", fun_name, name_chars); return nullptr; } if (ch >= 'A' && ch <= 'Z') { + *named_changed = true; name_chars[i] = ch - 'A' + 'a'; - changed = true; } } - if (changed) { - name_str = JS_NewStringCopyN(cx, name_chars, name.len); - if (!name_str) { - return nullptr; - } - } - - name_val.setString(name_str); return name; } -host_api::HostString normalize_header_value(JSContext *cx, JS::MutableHandleValue value_val, - const char *fun_name) { +/** + * Validates and normalizes the given header value, by + * - stripping leading and trailing whitespace + * - checking for interior line breaks and `\0` + * + * See + * https://searchfox.org/mozilla-central/rev/9f76a47f4aa935b49754c5608a1c8e72ee358c46/netwerk/protocol/http/nsHttp.cpp#247-260 + * For details on validation. + */ +host_api::HostString normalize_header_value(JSContext *cx, HandleValue value_val, + bool* value_changed, const char *fun_name) { + *value_changed = !value_val.isString(); JS::RootedString value_str(cx, JS::ToString(cx, value_val)); if (!value_str) { return nullptr; } auto value = core::encode(cx, value_str); - if (!value) { + if (!value.ptr) { return nullptr; } @@ -148,11 +128,6 @@ host_api::HostString normalize_header_value(JSContext *cx, JS::MutableHandleValu size_t start = 0; size_t end = value.len; - // We follow Gecko's interpretation of what's a valid header value. After - // stripping leading and trailing whitespace, all interior line breaks and - // `\0` are considered invalid. See - // https://searchfox.org/mozilla-central/rev/9f76a47f4aa935b49754c5608a1c8e72ee358c46/netwerk/protocol/http/nsHttp.cpp#247-260 - // for details. while (start < end) { unsigned char ch = value_chars[start]; if (ch == '\t' || ch == ' ' || ch == '\r' || ch == '\n') { @@ -171,6 +146,10 @@ host_api::HostString normalize_header_value(JSContext *cx, JS::MutableHandleValu } } + if (start != 0 || end != value.len) { + *value_changed = true; + } + for (size_t i = start; i < end; i++) { unsigned char ch = value_chars[i]; if (ch == '\r' || ch == '\n' || ch == '\0') { @@ -179,91 +158,21 @@ host_api::HostString normalize_header_value(JSContext *cx, JS::MutableHandleValu } } - if (start != 0 || end != value.len) { - value_str = JS_NewStringCopyUTF8N(cx, JS::UTF8Chars(value_chars + start, end - start)); - if (!value_str) { - return nullptr; - } + if (*value_changed) { + memmove(value_chars, value_chars + start, end - start); + value.len = end - start; } - value_val.setString(value_str); - return value; } JS::PersistentRooted comma; -// Append an already normalized value for an already normalized header name -// to the JS side map, but not the host. -// -// Returns the resulting combined value in `normalized_value`. -bool append_header_value_to_map(JSContext *cx, JS::HandleObject self, - JS::HandleValue normalized_name, - JS::MutableHandleValue normalized_value) { - JS::RootedValue existing(cx); - JS::RootedObject map(cx, get_backing_map(self)); - if (!JS::MapGet(cx, map, normalized_name, &existing)) - return false; - - // Existing value must only be null if we're in the process if applying - // header values from a handle. - if (!existing.isNullOrUndefined()) { - if (!comma.get()) { - comma.init(cx, JS_NewStringCopyN(cx, ", ", 2)); - if (!comma) { - return false; - } - } - - JS::RootedString str(cx, existing.toString()); - str = JS_ConcatStrings(cx, str, comma); - if (!str) { - return false; - } - - JS::RootedString val_str(cx, normalized_value.toString()); - str = JS_ConcatStrings(cx, str, val_str); - if (!str) { - return false; - } - - normalized_value.setString(str); - } - - return JS::MapSet(cx, map, normalized_name, normalized_value); -} - -bool get_header_names_from_handle(JSContext *cx, Handle *handle, JS::HandleObject backing_map) { - - auto names = handle->names(); - if (auto *err = names.to_err()) { - HANDLE_ERROR(cx, *err); - return false; - } - - JS::RootedString name(cx); - JS::RootedValue name_val(cx); - for (auto &str : names.unwrap()) { - // TODO: can `name` take ownership of the buffer here instead? - name = JS_NewStringCopyN(cx, str.ptr.get(), str.len); - if (!name) { - return false; - } - - name_val.setString(name); - JS::MapSet(cx, backing_map, name_val, JS::NullHandleValue); - } - - return true; -} - bool retrieve_value_for_header_from_handle(JSContext *cx, JS::HandleObject self, - JS::HandleValue name, JS::MutableHandleValue value) { + const host_api::HostString &name, + MutableHandleValue value) { auto handle = get_handle(self); - - JS::RootedString name_str(cx, name.toString()); - auto name_chars = core::encode(cx, name_str); - auto ret = handle->get(name_chars); + auto ret = handle->get(name); if (auto *err = ret.to_err()) { HANDLE_ERROR(cx, *err); @@ -272,75 +181,33 @@ bool retrieve_value_for_header_from_handle(JSContext *cx, JS::HandleObject self, auto &values = ret.unwrap(); if (!values.has_value()) { + value.setNull(); return true; } - JS::RootedString val_str(cx); + RootedString res_str(cx); + RootedString val_str(cx); for (auto &str : values.value()) { val_str = JS_NewStringCopyUTF8N(cx, JS::UTF8Chars(str.ptr.get(), str.len)); if (!val_str) { return false; } - value.setString(val_str); - if (!append_header_value_to_map(cx, self, name, value)) { - return false; + if (!res_str) { + res_str = val_str; + } else { + res_str = JS_ConcatStrings(cx, res_str, comma); + if (!res_str) { + return false; + } + res_str = JS_ConcatStrings(cx, res_str, val_str); + if (!res_str) { + return false; + } } } - return true; -} - -/** - * Ensures that a value for the given header is available to client code. - * - * The calling code must ensure that a header with the given name exists, but - * might not yet have been retrieved from the host, i.e., it might be a "lazy" - * value. - * - * The value is returned via the `values` outparam, but *only* if the Headers - * object has lazy values at all. This is to avoid the map lookup in those cases - * where none is necessary in this function, and the consumer wouldn't use the - * value anyway. - */ -bool ensure_value_for_header(JSContext *cx, JS::HandleObject self, JS::HandleValue normalized_name, - JS::MutableHandleValue values) { - if (!lazy_values(self)) - return true; - - JS::RootedObject map(cx, get_backing_map(self)); - if (!JS::MapGet(cx, map, normalized_name, values)) - return false; - - // Value isn't lazy, just return it. - if (!values.isNull()) - return true; - - return retrieve_value_for_header_from_handle(cx, self, normalized_name, values); -} - -bool get_header_value_for_name(JSContext *cx, JS::HandleObject self, JS::HandleValue name, - JS::MutableHandleValue rval, const char *fun_name) { - NORMALIZE_NAME(name, fun_name) - - if (!ensure_value_for_header(cx, self, normalized_name, rval)) { - return false; - } - - if (rval.isString()) { - return true; - } - - JS::RootedObject map(cx, get_backing_map(self)); - if (!JS::MapGet(cx, map, normalized_name, rval)) { - return false; - } - - // Return `null` for non-existent headers. - if (rval.isUndefined()) { - rval.setNull(); - } - + value.setString(res_str); return true; } @@ -358,7 +225,7 @@ std::vector splitCookiesString(std::string_view cookiesString) start = currentPosition; // Iterate until we find a comma that might be used as a separator. - while ((currentPosition = cookiesString.find_first_of(",", currentPosition)) != + while ((currentPosition = cookiesString.find_first_of(',', currentPosition)) != std::string_view::npos) { // ',' is a cookie separator only if we later have '=', before having ';' or ',' lastComma = currentPosition; @@ -390,145 +257,314 @@ std::vector splitCookiesString(std::string_view cookiesString) return cookiesStrings; } -bool ensure_all_header_values_from_handle(JSContext *cx, JS::HandleObject self, - JS::HandleObject backing_map) { - if (!lazy_values(self)) +} // namespace + +bool redecode_str_if_changed(JSContext* cx, HandleValue str_val, string_view chars, + bool changed, MutableHandleValue rval) { + if (!changed) { + rval.set(str_val); return true; + } - JS::RootedValue iterable(cx); - if (!JS::MapKeys(cx, backing_map, &iterable)) + RootedString str(cx, core::decode(cx, chars)); + if (!str) { return false; + } - JS::ForOfIterator it(cx); - if (!it.init(iterable)) - return false; + rval.setString(str); + return true; +} - JS::RootedValue name(cx); - JS::RootedValue v(cx); - while (true) { - bool done; - if (!it.next(&name, &done)) +static bool switch_mode(JSContext* cx, HandleObject self, const Headers::Mode mode) { + auto current_mode = Headers::mode(self); + if (mode == current_mode) { + return true; + } + + if (current_mode == Headers::Mode::Uninitialized) { + if (mode == Headers::Mode::ContentOnly) { + RootedObject map(cx, JS::NewMapObject(cx)); + if (!map) { + return false; + } + SetReservedSlot(self, static_cast(Headers::Slots::Entries), ObjectValue(*map)); + } else { + MOZ_ASSERT(mode == Headers::Mode::HostOnly); + auto handle = new host_api::HttpHeaders(Headers::guard(self)); + SetReservedSlot(self, static_cast(Headers::Slots::Handle), PrivateValue(handle)); + } + + SetReservedSlot(self, static_cast(Headers::Slots::Mode), JS::Int32Value(static_cast(mode))); + return true; + } + + if (current_mode == Headers::Mode::ContentOnly) { + MOZ_ASSERT(mode == Headers::Mode::CachedInContent, + "Switching from ContentOnly to HostOnly is wasteful and not implemented"); + RootedObject entries(cx, Headers::get_entries(cx, self)); + MOZ_ASSERT(entries); + RootedValue iterable(cx); + if (!MapEntries(cx, entries, &iterable)) { return false; + } - if (done) - break; + JS::ForOfIterator it(cx); + if (!it.init(iterable)) { + return false; + } - if (!ensure_value_for_header(cx, self, name, &v)) + using host_api::HostString; + vector> string_entries; + + RootedValue entry_val(cx); + RootedObject entry(cx); + RootedValue name_val(cx); + RootedString name_str(cx); + RootedValue value_val(cx); + RootedString value_str(cx); + while (true) { + bool done; + if (!it.next(&entry_val, &done)) { + return false; + } + + if (done) { + break; + } + + entry = &entry_val.toObject(); + JS_GetElement(cx, entry, 0, &name_val); + JS_GetElement(cx, entry, 1, &value_val); + name_str = name_val.toString(); + value_str = value_val.toString(); + + auto name = core::encode(cx, name_str); + if (!name.ptr) { + return false; + } + + auto value = core::encode(cx, value_str); + if (!value.ptr) { + return false; + } + + string_entries.emplace_back(std::move(name), std::move(value)); + } + + auto handle = host_api::HttpHeaders::FromEntries(Headers::guard(self), string_entries); + if (handle.is_err()) { + JS_ReportErrorASCII(cx, "Failed to clone headers"); + return false; + } + SetReservedSlot(self, static_cast(Headers::Slots::Handle), + PrivateValue(handle.unwrap())); + } + + // Regardless of whether we're switching to CachedInContent or ContentOnly, + // get all entries into content. + if (current_mode == Headers::Mode::HostOnly) { + auto handle = get_handle(self); + MOZ_ASSERT(handle); + auto res = handle->entries(); + if (res.is_err()) { + HANDLE_ERROR(cx, *res.to_err()); return false; + } + + RootedObject map(cx, JS::NewMapObject(cx)); + if (!map) { + return false; + } + + RootedString key(cx); + RootedValue key_val(cx); + RootedString value(cx); + RootedValue value_val(cx); + for (auto &entry : std::move(res.unwrap())) { + key = core::decode(cx, std::get<0>(entry)); + if (!key) { + return false; + } + value = core::decode(cx, std::get<1>(entry)); + if (!value) { + return false; + } + key_val.setString(key); + value_val.setString(value); + if (!MapSet(cx, map, key_val, value_val)) { + return false; + } + } + + SetReservedSlot(self, static_cast(Headers::Slots::Entries), ObjectValue(*map)); } - JS_SetReservedSlot(self, static_cast(Headers::Slots::HasLazyValues), - JS::BooleanValue(false)); + if (mode == Headers::Mode::ContentOnly) { + auto handle = get_handle(self); + delete handle; + SetReservedSlot(self, static_cast(Headers::Slots::Handle), PrivateValue(nullptr)); + SetReservedSlot(self, static_cast(Headers::Slots::Mode), + JS::Int32Value(static_cast(Headers::Mode::CachedInContent))); + } + SetReservedSlot(self, static_cast(Headers::Slots::Mode), + JS::Int32Value(static_cast(mode))); return true; } -} // namespace +bool prepare_for_entries_modification(JSContext* cx, JS::HandleObject self) { + auto mode = Headers::mode(self); + if (mode == Headers::Mode::HostOnly) { + auto handle = get_handle(self); + if (!handle->is_writable()) { + auto new_handle = handle->clone(Headers::guard(self)); + if (!new_handle) { + JS_ReportErrorASCII(cx, "Failed to clone headers"); + return false; + } + delete handle; + SetReservedSlot(self, static_cast(Headers::Slots::Handle), PrivateValue(new_handle)); + } + } else if (mode == Headers::Mode::CachedInContent || mode == Headers::Mode::Uninitialized) { + return switch_mode(cx, self, Headers::Mode::ContentOnly); + } + return true; +} + +bool append_single_normalized_header_value(JSContext *cx, HandleObject self, + HandleValue name, string_view name_chars, bool name_changed, + HandleValue value, string_view value_chars, bool value_changed, + const char *fun_name) { + Headers::Mode mode = Headers::mode(self); + if (mode == Headers::Mode::HostOnly) { + auto handle = get_handle(self)->as_writable(); + MOZ_ASSERT(handle); + auto res = handle->append(name_chars, value_chars); + if (auto *err = res.to_err()) { + HANDLE_ERROR(cx, *err); + return false; + } + } else { + MOZ_ASSERT(mode == Headers::Mode::ContentOnly); + auto guard = Headers::guard(self); + if (!host_api::HttpHeaders::check_guard(guard, name_chars)) { + return true; + } + + RootedObject entries(cx, Headers::get_entries(cx, self)); + if (!entries) { + return false; + } + + RootedValue name_val(cx); + if (!redecode_str_if_changed(cx, name, name_chars, name_changed, &name_val)) { + return false; + } + + RootedValue value_val(cx); + if (!redecode_str_if_changed(cx, value, value_chars, value_changed, &value_val)) { + return false; + } + + RootedValue entry(cx); + if (!MapGet(cx, entries, name_val, &entry)) { + return false; + } + + if (!entry.isUndefined()) { + RootedString entry_str(cx, JS::ToString(cx, entry)); + entry_str = JS_ConcatStrings(cx, entry_str, comma); + if (!entry_str) { + return false; + } + RootedString val_str(cx, value_val.toString()); + entry_str = JS_ConcatStrings(cx, entry_str, val_str); + if (!entry_str) { + return false; + } + value_val.setString(entry_str); + } + + if (!MapSet(cx, entries, name_val, value_val)) { + return false; + } + } + + return true; +} bool Headers::append_header_value(JSContext *cx, JS::HandleObject self, JS::HandleValue name, JS::HandleValue value, const char *fun_name) { NORMALIZE_NAME(name, fun_name) NORMALIZE_VALUE(value, fun_name) - // Ensure that any host-side values have been applied JS-side. - JS::RootedValue v(cx); - if (!ensure_value_for_header(cx, self, normalized_name, &v)) { + if (!prepare_for_entries_modification(cx, self)) { return false; } - auto handle = get_handle(self); - if (handle) { - std::string_view name = name_chars; - if (name == "set-cookie") { - std::string_view value = value_chars; - for (auto value : splitCookiesString(value)) { - auto res = handle->append(name, value); - if (auto *err = res.to_err()) { - HANDLE_ERROR(cx, *err); - return false; - } - } - } else { - std::string_view value = value_chars; - auto res = handle->append(name, value); - if (auto *err = res.to_err()) { - HANDLE_ERROR(cx, *err); + std::string_view name_str = name_chars; + if (name_str == "set-cookie") { + for (auto value : splitCookiesString(value_chars)) { + if (!append_single_normalized_header_value(cx, self, name, name_chars, name_changed, UndefinedHandleValue, + value, true, fun_name)) { return false; } } + } else { + if (!append_single_normalized_header_value(cx, self, name, name_chars, name_changed, value, + value_chars, value_changed, fun_name)) { + return false; + } } - return append_header_value_to_map(cx, self, normalized_name, &normalized_value); + return true; } -bool Headers::delazify(JSContext *cx, JS::HandleObject headers) { - JS::RootedObject backing_map(cx, get_backing_map(headers)); - return ensure_all_header_values_from_handle(cx, headers, backing_map); +void init_from_handle(JSObject* self, host_api::HttpHeadersReadOnly* handle) { + MOZ_ASSERT(Headers::is_instance(self)); + MOZ_ASSERT(Headers::mode(self) == Headers::Mode::Uninitialized); + SetReservedSlot(self, static_cast(Headers::Slots::Mode), + JS::Int32Value(static_cast(Headers::Mode::HostOnly))); + SetReservedSlot(self, static_cast(Headers::Slots::Handle), PrivateValue(handle)); } -JSObject *Headers::create(JSContext *cx, JS::HandleObject self, host_api::HttpHeaders *handle, - JS::HandleObject init_headers) { - JS::RootedObject headers(cx, create(cx, self, handle)); - if (!headers) { +JSObject *Headers::create(JSContext *cx, host_api::HttpHeadersGuard guard) { + JSObject* self = JS_NewObjectWithGivenProto(cx, &class_, proto_obj); + if (!self) { return nullptr; } - if (!init_headers) { - return headers; - } + SetReservedSlot(self, static_cast(Slots::Guard), + JS::Int32Value(static_cast(guard))); + SetReservedSlot(self, static_cast(Slots::Mode), + JS::Int32Value(static_cast(Mode::Uninitialized))); + return self; +} - if (!Headers::delazify(cx, init_headers)) { +JSObject *Headers::create(JSContext *cx, host_api::HttpHeadersReadOnly *handle, host_api::HttpHeadersGuard guard) { + RootedObject self(cx, create(cx, guard)); + if (!self) { return nullptr; } - JS::RootedObject headers_map(cx, get_backing_map(headers)); - JS::RootedObject init_map(cx, get_backing_map(init_headers)); - - JS::RootedValue iterable(cx); - if (!JS::MapEntries(cx, init_map, &iterable)) { - return nullptr; - } + init_from_handle(self, handle); + return self; +} - JS::ForOfIterator it(cx); - if (!it.init(iterable)) { +JSObject *Headers::create(JSContext *cx, HandleValue init_headers, host_api::HttpHeadersGuard guard) { + RootedObject self(cx, create(cx, guard)); + if (!self) { return nullptr; } - - JS::RootedObject entry(cx); - JS::RootedValue entry_val(cx); - JS::RootedValue name_val(cx); - JS::RootedValue value_val(cx); - while (true) { - bool done; - if (!it.next(&entry_val, &done)) { - return nullptr; - } - - if (done) { - break; - } - - entry = &entry_val.toObject(); - JS_GetElement(cx, entry, 0, &name_val); - JS_GetElement(cx, entry, 1, &value_val); - - if (!Headers::append_header_value(cx, headers, name_val, value_val, "Headers constructor")) { - return nullptr; - } - } - - return headers; + return init_entries(cx, self, init_headers); } -JSObject *Headers::create(JSContext *cx, JS::HandleObject self, host_api::HttpHeaders *handle, - JS::HandleValue initv) { - JS::RootedObject headers(cx, create(cx, self, handle)); - if (!headers) - return nullptr; - +JSObject *Headers::init_entries(JSContext *cx, HandleObject self, HandleValue initv) { + // TODO: check if initv is a Headers instance and clone its handle if so. + // TODO: But note: forbidden headers have to be applied correctly. bool consumed = false; - if (!core::maybe_consume_sequence_or_record(cx, initv, headers, - &consumed, "Headers")) { + if (!core::maybe_consume_sequence_or_record(cx, initv, self, + &consumed, "Headers")) { return nullptr; } @@ -537,7 +573,7 @@ JSObject *Headers::create(JSContext *cx, JS::HandleObject self, host_api::HttpHe return nullptr; } - return headers; + return self; } bool Headers::get(JSContext *cx, unsigned argc, JS::Value *vp) { @@ -545,7 +581,34 @@ bool Headers::get(JSContext *cx, unsigned argc, JS::Value *vp) { NORMALIZE_NAME(args[0], "Headers.get") - return get_header_value_for_name(cx, self, normalized_name, args.rval(), "Headers.get"); + Mode mode = Headers::mode(self); + if (mode == Headers::Mode::Uninitialized) { + args.rval().setNull(); + return true; + } + + if (mode == Mode::HostOnly) { + return retrieve_value_for_header_from_handle(cx, self, name_chars, args.rval()); + } + + RootedObject entries(cx, get_entries(cx, self)); + if (!entries) { + return false; + } + + RootedValue name_val(cx); + if (!redecode_str_if_changed(cx, args[0], name_chars, name_changed, &name_val)) { + return false; + } + if (!MapGet(cx, entries, name_val, args.rval())) { + return false; + } + + if (args.rval().isUndefined()) { + args.rval().setNull(); + } + + return true; } bool Headers::set(JSContext *cx, unsigned argc, JS::Value *vp) { @@ -554,20 +617,39 @@ bool Headers::set(JSContext *cx, unsigned argc, JS::Value *vp) { NORMALIZE_NAME(args[0], "Headers.set") NORMALIZE_VALUE(args[1], "Headers.set") - auto handle = get_handle(self); - if (handle) { - std::string_view name = name_chars; - std::string_view val = value_chars; - auto res = handle->set(name, val); + if (!prepare_for_entries_modification(cx, self)) { + return false; + } + + Mode mode = Headers::mode(self); + if (mode == Mode::HostOnly) { + auto handle = get_handle(self)->as_writable(); + MOZ_ASSERT(handle); + auto res = handle->set(name_chars, value_chars); if (auto *err = res.to_err()) { HANDLE_ERROR(cx, *err); return false; } - } + } else { + MOZ_ASSERT(mode == Mode::ContentOnly); + RootedObject entries(cx, get_entries(cx, self)); + if (!entries) { + return false; + } - JS::RootedObject map(cx, get_backing_map(self)); - if (!JS::MapSet(cx, map, normalized_name, normalized_value)) { - return false; + RootedValue name_val(cx); + if (!redecode_str_if_changed(cx, args[0], name_chars, name_changed, &name_val)) { + return false; + } + + RootedValue value_val(cx); + if (!redecode_str_if_changed(cx, args[1], value_chars, value_changed, &value_val)) { + return false; + } + + if (!MapSet(cx, entries, name_val, value_val)) { + return false; + } } args.rval().setUndefined(); @@ -578,20 +660,43 @@ bool Headers::has(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(1) NORMALIZE_NAME(args[0], "Headers.has") - bool has; - JS::RootedObject map(cx, get_backing_map(self)); - if (!JS::MapHas(cx, map, normalized_name, &has)) { - return false; + + Mode mode = Headers::mode(self); + if (mode == Mode::Uninitialized) { + args.rval().setBoolean(false); + return true; + } + + if (mode == Mode::HostOnly) { + auto handle = get_handle(self); + MOZ_ASSERT(handle); + auto res = handle->has(name_chars); + MOZ_ASSERT(!res.is_err()); + args.rval().setBoolean(res.unwrap()); + } else { + RootedObject entries(cx, get_entries(cx, self)); + if (!entries) { + return false; + } + + RootedValue name_val(cx); + if (!redecode_str_if_changed(cx, args[0], name_chars, name_changed, &name_val)) { + return false; + } + bool has; + if (!MapHas(cx, entries, name_val, &has)) { + return false; + } + args.rval().setBoolean(has); } - args.rval().setBoolean(has); return true; } bool Headers::append(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(2) - if (!Headers::append_header_value(cx, self, args[0], args[1], "Headers.append")) { + if (!append_header_value(cx, self, args[0], args[1], "Headers.append")) { return false; } @@ -599,59 +704,86 @@ bool Headers::append(JSContext *cx, unsigned argc, JS::Value *vp) { return true; } -bool Headers::maybe_add(JSContext *cx, JS::HandleObject self, const char *name, const char *value) { - MOZ_ASSERT(Headers::is_instance(self)); - JS::RootedString name_str(cx, JS_NewStringCopyN(cx, name, strlen(name))); +bool Headers::set_if_undefined(JSContext *cx, HandleObject self, string_view name, string_view value) { + if (!prepare_for_entries_modification(cx, self)) { + return false; + } + + if (mode(self) == Mode::HostOnly) { + auto handle = get_handle(self)->as_writable(); + auto has = handle->has(name); + MOZ_ASSERT(!has.is_err()); + if (has.unwrap()) { + return true; + } + + auto res = handle->append(name, value); + if (auto *err = res.to_err()) { + HANDLE_ERROR(cx, *err); + return false; + } + return true; + } + + MOZ_ASSERT(mode(self) == Mode::ContentOnly); + RootedObject entries(cx, get_entries(cx, self)); + RootedString name_str(cx, core::decode(cx, name)); if (!name_str) { return false; } - JS::RootedValue name_val(cx, JS::StringValue(name_str)); + RootedValue name_val(cx, StringValue(name_str)); - JS::RootedObject map(cx, get_backing_map(self)); bool has; - if (!JS::MapHas(cx, map, name_val, &has)) { + if (!MapHas(cx, entries, name_val, &has)) { return false; } if (has) { return true; } - JS::RootedString value_str(cx, JS_NewStringCopyN(cx, value, strlen(value))); + RootedString value_str(cx, core::decode(cx, value)); if (!value_str) { return false; } - JS::RootedValue value_val(cx, JS::StringValue(value_str)); + RootedValue value_val(cx, StringValue(value_str)); - return Headers::append_header_value(cx, self, name_val, value_val, "internal_maybe_add"); + return JS::MapSet(cx, entries, name_val, value_val); } bool Headers::delete_(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER_WITH_NAME(1, "delete") - NORMALIZE_NAME(args[0], "Headers.delete") - - bool has; - JS::RootedObject map(cx, get_backing_map(self)); - if (!JS::MapDelete(cx, map, normalized_name, &has)) { + if (!prepare_for_entries_modification(cx, self)) { return false; } - // If no header with the given name exists, `delete` is a no-op. - if (!has) { - args.rval().setUndefined(); - return true; - } - - auto handle = get_handle(self); - if (handle) { + NORMALIZE_NAME(args[0], "Headers.delete") + Mode mode = Headers::mode(self); + if (mode == Mode::HostOnly) { + auto handle = get_handle(self)->as_writable(); + MOZ_ASSERT(handle); std::string_view name = name_chars; auto res = handle->remove(name); if (auto *err = res.to_err()) { HANDLE_ERROR(cx, *err); return false; } + } else { + MOZ_ASSERT(mode == Mode::ContentOnly); + RootedObject entries(cx, get_entries(cx, self)); + if (!entries) { + return false; + } + + RootedValue name_val(cx); + if (!redecode_str_if_changed(cx, args[0], name_chars, name_changed, &name_val)) { + return false; + } + bool had; + return MapDelete(cx, entries, name_val, &had); } + args.rval().setUndefined(); return true; } @@ -671,7 +803,7 @@ bool Headers::forEach(JSContext *cx, unsigned argc, JS::Value *vp) { JS::RootedValue rval(cx); JS::RootedValue iterable(cx); - if (!JS::MapEntries(cx, backing_map, &iterable)) + if (!JS::MapEntries(cx, entries, &iterable)) return false; JS::ForOfIterator it(cx); @@ -700,19 +832,19 @@ bool Headers::forEach(JSContext *cx, unsigned argc, JS::Value *vp) { return true; } -bool Headers::entries(JSContext *cx, unsigned argc, JS::Value *vp) { +bool Headers::entries(JSContext *cx, unsigned argc, Value *vp) { HEADERS_ITERATION_METHOD(0) - return JS::MapEntries(cx, backing_map, args.rval()); + return MapEntries(cx, entries, args.rval()); } -bool Headers::keys(JSContext *cx, unsigned argc, JS::Value *vp) { +bool Headers::keys(JSContext *cx, unsigned argc, Value *vp) { HEADERS_ITERATION_METHOD(0) - return JS::MapKeys(cx, backing_map, args.rval()); + return MapKeys(cx, entries, args.rval()); } -bool Headers::values(JSContext *cx, unsigned argc, JS::Value *vp) { +bool Headers::values(JSContext *cx, unsigned argc, Value *vp) { HEADERS_ITERATION_METHOD(0) - return JS::MapValues(cx, backing_map, args.rval()); + return MapValues(cx, entries, args.rval()); } const JSFunctionSpec Headers::static_methods[] = { @@ -743,8 +875,14 @@ const JSPropertySpec Headers::properties[] = { bool Headers::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { CTOR_HEADER("Headers", 0); - JS::RootedObject headersInstance(cx, JS_NewObjectForConstructor(cx, &class_, args)); - JS::RootedObject headers(cx, create(cx, headersInstance, nullptr, args.get(0))); + HandleValue headersInit = args.get(0); + RootedObject headersInstance(cx, JS_NewObjectForConstructor(cx, &class_, args)); + if (!headersInstance) { + return false; + } + SetReservedSlot(headersInstance, static_cast(Slots::Guard), + JS::Int32Value(static_cast(host_api::HttpHeadersGuard::None))); + JS::RootedObject headers(cx, init_entries(cx, headersInstance, headersInit)); if (!headers) { return false; } @@ -758,6 +896,12 @@ bool Headers::init_class(JSContext *cx, JS::HandleObject global) { if (!ok) return false; + auto comma_str = JS_NewStringCopyN(cx, ", ", 2); + if (!comma_str) { + return false; + } + comma.init(cx, comma_str); + JS::RootedValue entries(cx); if (!JS_GetProperty(cx, proto_obj, "entries", &entries)) return false; @@ -767,29 +911,38 @@ bool Headers::init_class(JSContext *cx, JS::HandleObject global) { return JS_DefinePropertyById(cx, proto_obj, iteratorId, entries, 0); } -JSObject *Headers::create(JSContext *cx, JS::HandleObject self, host_api::HttpHeaders *handle) { - JS_SetReservedSlot(self, static_cast(Slots::Handle), JS::PrivateValue(handle)); - - JS::RootedObject backing_map(cx, JS::NewMapObject(cx)); - if (!backing_map) { +JSObject *Headers::get_entries(JSContext *cx, HandleObject self) { + MOZ_ASSERT(is_instance(self)); + if (mode(self) == Mode::Uninitialized && !switch_mode(cx, self, Mode::ContentOnly)) { + return nullptr; + } + if (mode(self) == Mode::HostOnly && !switch_mode(cx, self, Mode::CachedInContent)) { return nullptr; } - JS::SetReservedSlot(self, static_cast(Slots::BackingMap), - JS::ObjectValue(*backing_map)); - bool lazy = false; - if (handle) { - lazy = true; - if (!get_header_names_from_handle(cx, handle, backing_map)) { - return nullptr; - } + return &GetReservedSlot(self, static_cast(Slots::Entries)).toObject(); +} + +unique_ptr Headers::handle_clone(JSContext* cx, HandleObject self) { + auto mode = Headers::mode(self); + + // If this instance uninitialized, return an empty handle without initializing this instance. + if (mode == Mode::Uninitialized) { + return std::make_unique(guard(self)); } - JS_SetReservedSlot(self, static_cast(Slots::HasLazyValues), JS::BooleanValue(lazy)); + if (mode == Mode::ContentOnly && !switch_mode(cx, self, Mode::CachedInContent)) { + // Switch to Mode::CachedInContent to ensure that the latest data is available on the handle, + // but without discarding the existing entries, in case content reads them later. + return nullptr; + } - return self; + auto handle = unique_ptr(get_handle(self)->clone(guard(self))); + if (!handle) { + JS_ReportErrorASCII(cx, "Failed to clone headers"); + return nullptr; + } + return handle; } -} // namespace fetch -} // namespace web -} // namespace builtins +} // namespace builtins::web::fetch diff --git a/builtins/web/fetch/headers.h b/builtins/web/fetch/headers.h index 8bfdf69f..ab4fd10c 100644 --- a/builtins/web/fetch/headers.h +++ b/builtins/web/fetch/headers.h @@ -22,47 +22,112 @@ class Headers final : public BuiltinImpl { public: static constexpr const char *class_name = "Headers"; + /// Headers instances can be in one of three modes: + /// - `HostOnly`: Headers are stored in the host only. + /// - `CachedInContent`: Host holds canonical headers, content a cached copy. + /// - `ContentOnly`: Headers are stored in a Map held by the `Entries` slot. + /// + /// For Headers instances created in-content, the mode is determined by the `HeadersInit` + /// argument: + /// - If `HeadersInit` is a `Headers` instance, the mode is inherited from that instance, + /// as is the underlying data. + /// - If `HeadersInit` is empty or a sequence of header name/value pairs, the mode is + /// `ContentOnly`. + /// + /// The mode of Headers instances created via the `headers` accessor on `Request` and `Response` + /// instances is determined by how those instances themselves were created: + /// - If a `Request` or `Response` instance represents an incoming request or response, the mode + /// will initially be `HostOnly`. + /// - If a `Request` or `Response` instance represents an outgoing request or response, the mode + /// of the `Headers` instance depends on the `HeadersInit` argument passed to the `Request` or + /// `Response` constructor (see above). + /// + /// A `Headers` instance can transition from `HostOnly` to `CachedInContent` or `ContentOnly` + /// mode: + /// Iterating over headers (as keys, values, or entries) would be extremely slow if we retrieved + /// all of them from the host for each iteration step. + /// Instead, when iterating over the headers of a `HostOnly` mode `Headers` instance, the instance + /// is transitioned to `CachedInContent` mode, and the entries are stored in a Map in the + /// `Entries` slot. + /// + /// If a header is added, deleted, or replaced on an instance in `CachedInContent` mode, the + /// instance transitions to `ContentOnly` mode, and the underlying resource handle is discarded. + enum class Mode { + HostOnly, // Headers are stored in the host. + CachedInContent, // Host holds canonical headers, content a cached copy. + ContentOnly, // Headers are stored in a Map held by the `Entries` slot. + Uninitialized, // Headers have not been initialized. + }; + enum class Slots { - BackingMap, Handle, - HasLazyValues, + Entries, // Map holding headers if they are available in-content. + Mode, + Guard, Count, }; - static bool delazify(JSContext *cx, JS::HandleObject headers); - /** * Adds the given header name/value to `self`'s list of headers iff `self` * doesn't already contain a header with that name. - * - * Assumes that both the name and value are valid and normalized. - * TODO(performance): fully skip normalization. - * https://github.com/fastly/js-compute-runtime/issues/221 */ - static bool maybe_add(JSContext *cx, JS::HandleObject self, const char *name, const char *value); + static bool set_if_undefined(JSContext *cx, JS::HandleObject self, string_view name, + string_view value); - // Appends a non-normalized value for a non-normalized header name to both - // the JS side Map and, in non-standalone mode, the host. + /// Appends a value for a header name. // - // Verifies and normalizes the name and value. + /// Validates and normalizes the name and value. static bool append_header_value(JSContext *cx, JS::HandleObject self, JS::HandleValue name, JS::HandleValue value, const char *fun_name); + static Mode mode(JSObject* self) { + MOZ_ASSERT(Headers::is_instance(self)); + Value modeVal = JS::GetReservedSlot(self, static_cast(Slots::Mode)); + if (modeVal.isUndefined()) { + return Mode::Uninitialized; + } + return static_cast(modeVal.toInt32()); + } + + static host_api::HttpHeadersGuard guard(JSObject* self) { + MOZ_ASSERT(Headers::is_instance(self)); + Value modeVal = JS::GetReservedSlot(self, static_cast(Slots::Guard)); + return static_cast(modeVal.toInt32()); + } + static const JSFunctionSpec static_methods[]; static const JSPropertySpec static_properties[]; static const JSFunctionSpec methods[]; static const JSPropertySpec properties[]; - static const unsigned ctor_length = 1; + static constexpr unsigned ctor_length = 1; + + static bool init_class(JSContext *cx, HandleObject global); + static bool constructor(JSContext *cx, unsigned argc, Value *vp); - static bool init_class(JSContext *cx, JS::HandleObject global); - static bool constructor(JSContext *cx, unsigned argc, JS::Value *vp); + static JSObject *create(JSContext *cx, host_api::HttpHeadersGuard guard); + static JSObject *create(JSContext *cx, HandleValue init_headers, + host_api::HttpHeadersGuard guard); + static JSObject *create(JSContext *cx, host_api::HttpHeadersReadOnly *handle, + host_api::HttpHeadersGuard guard); - static JSObject *create(JSContext *cx, JS::HandleObject headers, host_api::HttpHeaders *handle, - JS::HandleObject init_headers); - static JSObject *create(JSContext *cx, JS::HandleObject headers, host_api::HttpHeaders *handle, - JS::HandleValue initv); - static JSObject *create(JSContext *cx, JS::HandleObject self, host_api::HttpHeaders *handle); + static JSObject *init_entries(JSContext *cx, HandleObject self, HandleValue init_headers); + + /// Returns a Map object containing the headers. + /// + /// Depending on the `Mode` the instance is in, this can be a cache or the canonical store for + /// the headers. + static JSObject* get_entries(JSContext *cx, HandleObject self); + + /** + * Returns a cloned handle representing the contents of this Headers object. + * + * The main purposes for this function are use in sending outgoing requests/responses and + * in the constructor of request/response objects when a HeadersInit object is passed. + * + * The handle is guaranteed to be uniquely owned by the caller. + */ + static unique_ptr handle_clone(JSContext*, HandleObject self); }; } // namespace fetch diff --git a/builtins/web/fetch/request-response.cpp b/builtins/web/fetch/request-response.cpp index 36c66dfa..ceb2334d 100644 --- a/builtins/web/fetch/request-response.cpp +++ b/builtins/web/fetch/request-response.cpp @@ -127,66 +127,6 @@ class BodyFutureTask final : public api::AsyncTask { void trace(JSTracer *trc) override { TraceEdge(trc, &body_source_, "body source for future"); } }; -class ResponseFutureTask final : public api::AsyncTask { - Heap request_; - host_api::FutureHttpIncomingResponse *future_; - -public: - explicit ResponseFutureTask(const HandleObject request, - host_api::FutureHttpIncomingResponse *future) - : request_(request), future_(future) { - auto res = future->subscribe(); - MOZ_ASSERT(!res.is_err(), "Subscribing to a future should never fail"); - handle_ = res.unwrap(); - } - - ResponseFutureTask(const RootedObject &rooted); - - [[nodiscard]] bool run(api::Engine *engine) override { - // MOZ_ASSERT(ready()); - JSContext *cx = engine->cx(); - - const RootedObject request(cx, request_); - RootedObject response_promise(cx, Request::response_promise(request)); - - auto res = future_->maybe_response(); - if (res.is_err()) { - JS_ReportErrorUTF8(cx, "NetworkError when attempting to fetch resource."); - return RejectPromiseWithPendingError(cx, response_promise); - } - - auto maybe_response = res.unwrap(); - MOZ_ASSERT(maybe_response.has_value()); - auto response = maybe_response.value(); - RootedObject response_obj( - cx, JS_NewObjectWithGivenProto(cx, &Response::class_, Response::proto_obj)); - if (!response_obj) { - return false; - } - - response_obj = Response::create(cx, response_obj, response); - if (!response_obj) { - return false; - } - - RequestOrResponse::set_url(response_obj, RequestOrResponse::url(request)); - RootedValue response_val(cx, ObjectValue(*response_obj)); - if (!ResolvePromise(cx, response_promise, response_val)) { - return false; - } - - return cancel(engine); - } - - [[nodiscard]] bool cancel(api::Engine *engine) override { - // TODO(TS): implement - handle_ = -1; - return true; - } - - void trace(JSTracer *trc) override { TraceEdge(trc, &request_, "Request for response future"); } -}; - namespace { // https://fetch.spec.whatwg.org/#concept-method-normalize // Returns `true` if the method name was normalized, `false` otherwise. @@ -217,6 +157,7 @@ struct ReadResult { } // namespace host_api::HttpRequestResponseBase *RequestOrResponse::handle(JSObject *obj) { + MOZ_ASSERT(is_instance(obj)); auto slot = JS::GetReservedSlot(obj, static_cast(Slots::RequestOrResponse)); return static_cast(slot.toPrivate()); } @@ -225,9 +166,12 @@ bool RequestOrResponse::is_instance(JSObject *obj) { return Request::is_instance(obj) || Response::is_instance(obj); } -bool RequestOrResponse::is_incoming(JSObject *obj) { return handle(obj)->is_incoming(); } +bool RequestOrResponse::is_incoming(JSObject *obj) { + auto handle = RequestOrResponse::handle(obj); + return handle && handle->is_incoming(); +} -host_api::HttpHeaders *RequestOrResponse::headers_handle(JSObject *obj) { +host_api::HttpHeadersReadOnly *RequestOrResponse::headers_handle(JSObject *obj) { MOZ_ASSERT(is_instance(obj)); auto res = handle(obj)->headers(); MOZ_ASSERT(!res.is_err(), "TODO: proper error handling"); @@ -250,15 +194,11 @@ host_api::HttpIncomingBody *RequestOrResponse::incoming_body_handle(JSObject *ob host_api::HttpOutgoingBody *RequestOrResponse::outgoing_body_handle(JSObject *obj) { MOZ_ASSERT(!is_incoming(obj)); - host_api::Result res; - if (Request::is_instance(obj)) { - auto owner = reinterpret_cast(handle(obj)); - res = owner->body(); + if (handle(obj)->is_request()) { + return reinterpret_cast(handle(obj))->body().unwrap(); } else { - auto owner = reinterpret_cast(handle(obj)); - res = owner->body(); + return reinterpret_cast(handle(obj))->body().unwrap(); } - return res.unwrap(); } JSObject *RequestOrResponse::body_stream(JSObject *obj) { @@ -330,11 +270,6 @@ bool RequestOrResponse::body_unusable(JSContext *cx, JS::HandleObject body) { * Implementation of the `extract a body` algorithm at * https://fetch.spec.whatwg.org/#concept-bodyinit-extract * - * Note: our implementation is somewhat different from what the spec describes - * in that we immediately write all non-streaming body types to the host instead - * of creating a stream for them. We don't have threads, so there's nothing "in - * parallel" to be had anyway. - * * Note: also includes the steps applying the `Content-Type` header from the * Request and Response constructors in step 36 and 8 of those, respectively. */ @@ -345,6 +280,7 @@ bool RequestOrResponse::extract_body(JSContext *cx, JS::HandleObject self, MOZ_ASSERT(!body_val.isNullOrUndefined()); const char *content_type = nullptr; + mozilla::Maybe content_length; // We currently support five types of body inputs: // - byte sequence @@ -378,60 +314,99 @@ bool RequestOrResponse::extract_body(JSContext *cx, JS::HandleObject self, } } } else { - mozilla::Maybe maybeNoGC; - JS::UniqueChars text; - char *buf; - size_t length; + RootedValue chunk(cx); + RootedObject buffer(cx); + char *buf = nullptr; + size_t length = 0; if (body_obj && JS_IsArrayBufferViewObject(body_obj)) { - // Short typed arrays have inline data which can move on GC, so assert - // that no GC happens. (Which it doesn't, because we're not allocating - // before `buf` goes out of scope.) - maybeNoGC.emplace(cx); - JS::AutoCheckCannotGC &noGC = maybeNoGC.ref(); - bool is_shared; length = JS_GetArrayBufferViewByteLength(body_obj); - buf = (char *)JS_GetArrayBufferViewData(body_obj, &is_shared, noGC); - } else if (body_obj && JS::IsArrayBufferObject(body_obj)) { + buf = static_cast(js_malloc(length)); + if (!buf) { + return false; + } + bool is_shared; - JS::GetArrayBufferLengthAndData(body_obj, &length, &is_shared, (uint8_t **)&buf); + JS::AutoCheckCannotGC noGC(cx); + auto temp_buf = JS_GetArrayBufferViewData(body_obj, &is_shared, noGC); + memcpy(buf, temp_buf, length); + } else if (body_obj && IsArrayBufferObject(body_obj)) { + buffer = CopyArrayBuffer(cx, body_obj); + if (!buffer) { + return false; + } + length = GetArrayBufferByteLength(buffer); } else if (body_obj && url::URLSearchParams::is_instance(body_obj)) { auto slice = url::URLSearchParams::serialize(cx, body_obj); buf = (char *)slice.data; length = slice.len; content_type = "application/x-www-form-urlencoded;charset=UTF-8"; } else { - { - auto str = core::encode(cx, body_val); - text = std::move(str.ptr); - length = str.len; + auto text = core::encode(cx, body_val); + if (!text.ptr) { + return false; } + buf = text.ptr.release(); + length = text.len; + content_type = "text/plain;charset=UTF-8"; + } - if (!text) + if (!buffer) { + MOZ_ASSERT_IF(length, buf); + buffer = NewArrayBufferWithContents(cx, length, buf, + JS::NewArrayBufferOutOfMemory::CallerMustFreeMemory); + if (!buffer) { + js_free(buf); return false; - buf = text.get(); - content_type = "text/plain;charset=UTF-8"; + } } - auto body = RequestOrResponse::outgoing_body_handle(self); - auto write_res = body->write_all(reinterpret_cast(buf), length); + RootedObject array(cx, JS_NewUint8ArrayWithBuffer(cx, buffer, 0, length)); + if (!array) { + return false; + } + chunk.setObject(*array); - // Ensure that the NoGC is reset, so throwing an error in HANDLE_ERROR - // succeeds. - if (maybeNoGC.isSome()) { - maybeNoGC.reset(); + // Set a __proto__-less source so modifying Object.prototype doesn't change the behavior. + RootedObject source(cx, JS_NewObjectWithGivenProto(cx, nullptr, nullptr)); + if (!source) { + return false; + } + RootedObject body_stream(cx, JS::NewReadableDefaultStreamObject(cx, source, + nullptr, 0.0)); + if (!body_stream) { + return false; } - if (auto *err = write_res.to_err()) { - HANDLE_ERROR(cx, *err); + mozilla::DebugOnly disturbed; + MOZ_ASSERT(ReadableStreamIsDisturbed(cx, body_stream, &disturbed)); + MOZ_ASSERT(!disturbed); + + if (!ReadableStreamEnqueue(cx, body_stream, chunk) || + !ReadableStreamClose(cx, body_stream)) { return false; } + + JS_SetReservedSlot(self, static_cast(Slots::BodyStream), + ObjectValue(*body_stream)); + content_length.emplace(length); } - // Step 36.3 of Request constructor / 8.4 of Response constructor. - if (content_type) { + if (content_type || content_length.isSome()) { JS::RootedObject headers(cx, RequestOrResponse::headers(cx, self)); - if (!Headers::maybe_add(cx, headers, "content-type", content_type)) { + if (!headers) { + return false; + } + + if (content_length.isSome()) { + auto length_str = std::to_string(content_length.value()); + if (!Headers::set_if_undefined(cx, headers, "content-length", length_str)) { + return false; + } + } + + // Step 36.3 of Request constructor / 8.4 of Response constructor. + if (content_type && !Headers::set_if_undefined(cx, headers, "content-type", content_type)) { return false; } } @@ -445,24 +420,75 @@ JSObject *RequestOrResponse::maybe_headers(JSObject *obj) { return JS::GetReservedSlot(obj, static_cast(Slots::Headers)).toObjectOrNull(); } +unique_ptr RequestOrResponse::headers_handle_clone(JSContext* cx, + HandleObject self, host_api::HttpHeadersGuard guard) { + MOZ_ASSERT(is_instance(self)); + + RootedObject headers(cx, maybe_headers(self)); + if (headers) { + return Headers::handle_clone(cx, headers); + } + + auto handle = RequestOrResponse::handle(self); + if (!handle) { + return std::make_unique(guard); + } + + auto res = handle->headers(); + if (auto *err = res.to_err()) { + HANDLE_ERROR(cx, *err); + return nullptr; + } + return unique_ptr(res.unwrap()->clone(guard)); +} + +bool finish_outgoing_body_streaming(JSContext* cx, HandleObject body_owner) { + // The only response we ever send is the one passed to + // `FetchEvent#respondWith` to send to the client. As such, we can be + // certain that if we have a response here, we can advance the FetchState to + // `responseDone`. + // TODO(TS): factor this out to remove dependency on fetch-event.h + auto body = RequestOrResponse::outgoing_body_handle(body_owner); + auto res = body->close(); + if (auto *err = res.to_err()) { + HANDLE_ERROR(cx, *err); + return false; + } + + if (Response::is_instance(body_owner)) { + fetch_event::FetchEvent::set_state(fetch_event::FetchEvent::instance(), + fetch_event::FetchEvent::State::responseDone); + } + + if (Request::is_instance(body_owner)) { + auto pending_handle = static_cast( + GetReservedSlot(body_owner, static_cast(Request::Slots::PendingResponseHandle)) + .toPrivate()); + SetReservedSlot(body_owner, static_cast(Request::Slots::PendingResponseHandle), + PrivateValue(nullptr)); + ENGINE->queue_async_task(new ResponseFutureTask(body_owner, pending_handle)); + } + + return true; +} + bool RequestOrResponse::append_body(JSContext *cx, JS::HandleObject self, JS::HandleObject source) { MOZ_ASSERT(!body_used(source)); MOZ_ASSERT(!body_used(self)); host_api::HttpIncomingBody *source_body = incoming_body_handle(source); host_api::HttpOutgoingBody *dest_body = outgoing_body_handle(self); - auto res = dest_body->append(ENGINE, source_body); + auto res = dest_body->append(ENGINE, source_body, finish_outgoing_body_streaming, self); if (auto *err = res.to_err()) { HANDLE_ERROR(cx, *err); return false; } - bool success = mark_body_used(cx, source); + mozilla::DebugOnly success = mark_body_used(cx, source); MOZ_ASSERT(success); if (body_stream(source) != body_stream(self)) { success = mark_body_used(cx, self); MOZ_ASSERT(success); } - (void)success; return true; } @@ -470,18 +496,15 @@ bool RequestOrResponse::append_body(JSContext *cx, JS::HandleObject self, JS::Ha JSObject *RequestOrResponse::headers(JSContext *cx, JS::HandleObject obj) { JSObject *headers = maybe_headers(obj); if (!headers) { - JS::RootedObject headersInstance( - cx, JS_NewObjectWithGivenProto(cx, &Headers::class_, Headers::proto_obj)); - - if (!headersInstance) { - return nullptr; - } - - auto *headers_handle = RequestOrResponse::headers_handle(obj); - if (!headers_handle) { - headers_handle = new host_api::HttpHeaders(); + host_api::HttpHeadersGuard guard = Request::is_instance(obj) + ? host_api::HttpHeadersGuard::Request + : host_api::HttpHeadersGuard::Response; + host_api::HttpHeadersReadOnly *handle; + if (is_incoming(obj) && (handle = headers_handle(obj))) { + headers = Headers::create(cx, handle, guard); + } else { + headers = Headers::create(cx, guard); } - headers = Headers::create(cx, headersInstance, headers_handle); if (!headers) { return nullptr; } @@ -817,7 +840,8 @@ template bool RequestOrResponse::bodyAll(JSContext *cx, JS::CallArgs args, JS::HandleObject self) { // TODO: mark body as consumed when operating on stream, too. if (body_used(self)) { - JS_ReportErrorASCII(cx, "Body has already been consumed"); + JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, + JSMSG_RESPONSE_BODY_DISTURBED_OR_LOCKED); return ReturnPromiseRejectedWithPendingError(cx, args); } @@ -840,10 +864,6 @@ bool RequestOrResponse::bodyAll(JSContext *cx, JS::CallArgs args, JS::HandleObje return true; } - if (!mark_body_used(cx, self)) { - return ReturnPromiseRejectedWithPendingError(cx, args); - } - JS::RootedValue body_parser(cx, JS::PrivateValue((void *)parse_body)); // TODO(performance): don't reify a ReadableStream for body handles—use an AsyncTask instead @@ -858,6 +878,7 @@ bool RequestOrResponse::bodyAll(JSContext *cx, JS::CallArgs args, JS::HandleObje return false; } + SetReservedSlot(self, static_cast(Slots::BodyUsed), JS::BooleanValue(true)); JS::RootedValue extra(cx, JS::ObjectValue(*stream)); if (!enqueue_internal_method(cx, self, extra)) { return ReturnPromiseRejectedWithPendingError(cx, args); @@ -914,14 +935,13 @@ bool RequestOrResponse::body_source_cancel_algorithm(JSContext *cx, JS::CallArgs return true; } -bool RequestOrResponse::body_reader_then_handler(JSContext *cx, JS::HandleObject body_owner, - JS::HandleValue extra, JS::CallArgs args) { +bool reader_for_outgoing_body_then_handler(JSContext *cx, JS::HandleObject body_owner, + JS::HandleValue extra, JS::CallArgs args) { JS::RootedObject then_handler(cx, &args.callee()); // The reader is stored in the catch handler, which we need here as well. // So we get that first, then the reader. JS::RootedObject catch_handler(cx, &extra.toObject()); JS::RootedObject reader(cx, &js::GetFunctionNativeReserved(catch_handler, 1).toObject()); - auto body = outgoing_body_handle(body_owner); // We're guaranteed to work with a native ReadableStreamDefaultReader here, // which in turn is guaranteed to vend {done: bool, value: any} objects to @@ -932,27 +952,8 @@ bool RequestOrResponse::body_reader_then_handler(JSContext *cx, JS::HandleObject return false; if (done_val.toBoolean()) { - // The only response we ever send is the one passed to - // `FetchEvent#respondWith` to send to the client. As such, we can be - // certain that if we have a response here, we can advance the FetchState to - // `responseDone`. - // TODO(TS): factor this out to remove dependency on fetch-event.h - if (Response::is_instance(body_owner)) { - fetch_event::FetchEvent::set_state(fetch_event::FetchEvent::instance(), - fetch_event::FetchEvent::State::responseDone); - } - - auto res = body->close(); - if (auto *err = res.to_err()) { - HANDLE_ERROR(cx, *err); - return false; - } - - if (Request::is_instance(body_owner)) { - ENGINE->queue_async_task(new BodyFutureTask(body_owner)); - } - - return true; + fetch_event::FetchEvent::decrease_interest(); + return finish_outgoing_body_streaming(cx, body_owner); } JS::RootedValue val(cx); @@ -964,16 +965,10 @@ bool RequestOrResponse::body_reader_then_handler(JSContext *cx, JS::HandleObject // reject the request promise if (Request::is_instance(body_owner)) { JS::RootedObject response_promise(cx, Request::response_promise(body_owner)); - JS::RootedValue exn(cx); // TODO: this should be a TypeError, but I'm not sure how to make that work JS_ReportErrorUTF8(cx, "TypeError"); - if (!JS_GetPendingException(cx, &exn)) { - return false; - } - JS_ClearPendingException(cx); - - return JS::RejectPromise(cx, response_promise, exn); + return RejectPromiseWithPendingError(cx, response_promise); } // TODO: should we also create a rejected promise if a response reads something that's not a @@ -984,15 +979,16 @@ bool RequestOrResponse::body_reader_then_handler(JSContext *cx, JS::HandleObject return false; } - host_api::Result res; - { - JS::AutoCheckCannotGC nogc; - JSObject *array = &val.toObject(); - bool is_shared; - uint8_t *bytes = JS_GetUint8ArrayData(array, &is_shared, nogc); - size_t length = JS_GetTypedArrayByteLength(array); - res = body->write_all(bytes, length); - } + RootedObject array(cx, &val.toObject()); + size_t length = JS_GetTypedArrayByteLength(array); + bool is_shared; + RootedObject buffer(cx, JS_GetArrayBufferViewBuffer(cx, array, &is_shared)); + MOZ_ASSERT(!is_shared); + auto bytes = static_cast(StealArrayBufferContents(cx, buffer)); + // TODO: change this to write in chunks, respecting backpressure. + auto body = RequestOrResponse::outgoing_body_handle(body_owner); + auto res = body->write_all(bytes, length); + js_free(bytes); // Needs to be outside the nogc block in case we need to create an exception. if (auto *err = res.to_err()) { @@ -1000,6 +996,7 @@ bool RequestOrResponse::body_reader_then_handler(JSContext *cx, JS::HandleObject return false; } + // Read the next chunk. JS::RootedObject promise(cx, JS::ReadableStreamDefaultReaderRead(cx, reader)); if (!promise) { @@ -1009,8 +1006,10 @@ bool RequestOrResponse::body_reader_then_handler(JSContext *cx, JS::HandleObject return JS::AddPromiseReactions(cx, promise, then_handler, catch_handler); } -bool RequestOrResponse::body_reader_catch_handler(JSContext *cx, JS::HandleObject body_owner, - JS::HandleValue extra, JS::CallArgs args) { +bool reader_for_outgoing_body_catch_handler(JSContext *cx, JS::HandleObject body_owner, + JS::HandleValue extra, JS::CallArgs args) { + fetch_event::FetchEvent::decrease_interest(); + // TODO: check if this should create a rejected promise instead, so an // in-content handler for unhandled rejections could deal with it. The body // stream errored during the streaming send. Not much we can do, but at least @@ -1028,11 +1027,13 @@ bool RequestOrResponse::body_reader_catch_handler(JSContext *cx, JS::HandleObjec // if (Response::is_instance(body_owner)) { // FetchEvent::set_state(FetchEvent::instance(), FetchEvent::State::responseDone); // } - return true; + return finish_outgoing_body_streaming(cx, body_owner); } bool RequestOrResponse::maybe_stream_body(JSContext *cx, JS::HandleObject body_owner, bool *requires_streaming) { + *requires_streaming = false; + if (is_incoming(body_owner) && has_body(body_owner)) { *requires_streaming = true; return true; @@ -1049,14 +1050,6 @@ bool RequestOrResponse::maybe_stream_body(JSContext *cx, JS::HandleObject body_o return false; } - if (streams::TransformStream::is_ts_readable(cx, stream)) { - JSObject *ts = streams::TransformStream::ts_from_readable(cx, stream); - if (streams::TransformStream::readable_used_as_body(ts)) { - *requires_streaming = true; - return true; - } - } - // If the body stream is backed by an HTTP body handle, we can directly pipe // that handle into the body we're about to send. if (streams::NativeStreamSource::stream_is_body(cx, stream)) { @@ -1077,17 +1070,6 @@ bool RequestOrResponse::maybe_stream_body(JSContext *cx, JS::HandleObject body_o if (!reader) return false; - bool is_closed; - if (!JS::ReadableStreamReaderIsClosed(cx, reader, &is_closed)) - return false; - - // It's ok for the stream to be closed, as its contents might - // already have fully been written to the body handle. - // In that case, we can do a blocking send instead. - if (is_closed) { - return true; - } - // Create handlers for both `then` and `catch`. // These are functions with two reserved slots, in which we store all // information required to perform the reactions. We store the actually @@ -1097,13 +1079,13 @@ bool RequestOrResponse::maybe_stream_body(JSContext *cx, JS::HandleObject body_o // perform another operation in this way. JS::RootedObject catch_handler(cx); JS::RootedValue extra(cx, JS::ObjectValue(*reader)); - catch_handler = create_internal_method(cx, body_owner, extra); + catch_handler = create_internal_method(cx, body_owner, extra); if (!catch_handler) return false; JS::RootedObject then_handler(cx); extra.setObject(*catch_handler); - then_handler = create_internal_method(cx, body_owner, extra); + then_handler = create_internal_method(cx, body_owner, extra); if (!then_handler) return false; @@ -1113,6 +1095,8 @@ bool RequestOrResponse::maybe_stream_body(JSContext *cx, JS::HandleObject body_o if (!JS::AddPromiseReactions(cx, promise, then_handler, catch_handler)) return false; + fetch_event::FetchEvent::increase_interest(); + *requires_streaming = true; return true; } @@ -1135,7 +1119,11 @@ JSObject *RequestOrResponse::create_body_stream(JSContext *cx, JS::HandleObject return nullptr; } - // TODO: immediately lock the stream if the owner's body is already used. + // If the body has already been used without being reified as a ReadableStream, + // lock the stream immediately. + if (body_used(owner)) { + MOZ_RELEASE_ASSERT(streams::NativeStreamSource::lock_stream(cx, body_stream)); + } JS_SetReservedSlot(owner, static_cast(Slots::BodyStream), JS::ObjectValue(*body_stream)); @@ -1168,20 +1156,24 @@ host_api::HttpRequest *Request::request_handle(JSObject *obj) { host_api::HttpOutgoingRequest *Request::outgoing_handle(JSObject *obj) { auto base = RequestOrResponse::handle(obj); + MOZ_ASSERT(base->is_outgoing()); return reinterpret_cast(base); } host_api::HttpIncomingRequest *Request::incoming_handle(JSObject *obj) { auto base = RequestOrResponse::handle(obj); + MOZ_ASSERT(base->is_incoming()); return reinterpret_cast(base); } JSObject *Request::response_promise(JSObject *obj) { + MOZ_ASSERT(is_instance(obj)); return &JS::GetReservedSlot(obj, static_cast(Request::Slots::ResponsePromise)) .toObject(); } JSString *Request::method(JSContext *cx, JS::HandleObject obj) { + MOZ_ASSERT(is_instance(obj)); return JS::GetReservedSlot(obj, static_cast(Slots::Method)).toString(); } @@ -1397,18 +1389,14 @@ bool Request::init_class(JSContext *cx, JS::HandleObject global) { return !!GET_atom; } -JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, - host_api::HttpRequest *request_handle) { - JS::SetReservedSlot(requestInstance, static_cast(Slots::Request), - JS::PrivateValue(request_handle)); +void Request::init_slots(JSObject *requestInstance) { + JS::SetReservedSlot(requestInstance, static_cast(Slots::Request), JS::PrivateValue(nullptr)); JS::SetReservedSlot(requestInstance, static_cast(Slots::Headers), JS::NullValue()); JS::SetReservedSlot(requestInstance, static_cast(Slots::BodyStream), JS::NullValue()); JS::SetReservedSlot(requestInstance, static_cast(Slots::HasBody), JS::FalseValue()); JS::SetReservedSlot(requestInstance, static_cast(Slots::BodyUsed), JS::FalseValue()); JS::SetReservedSlot(requestInstance, static_cast(Slots::Method), JS::StringValue(GET_atom)); - - return requestInstance; } /** @@ -1418,8 +1406,9 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, * "Roughly" because not all aspects of Request handling make sense in C@E. * The places where we deviate from the spec are called out inline. */ -JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::HandleValue input, - JS::HandleValue init_val) { +bool Request::initialize(JSContext *cx, JS::HandleObject request, JS::HandleValue input, + JS::HandleValue init_val) { + init_slots(request); JS::RootedString url_str(cx); JS::RootedString method_str(cx); bool method_needs_normalization = false; @@ -1460,7 +1449,7 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H // method: `request`’s method. method_str = Request::method(cx, input_request); if (!method_str) { - return nullptr; + return false; } // referrer: `request`’s referrer. @@ -1497,14 +1486,14 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H JS::RootedObject url_instance( cx, JS_NewObjectWithGivenProto(cx, &url::URL::class_, url::URL::proto_obj)); if (!url_instance) - return nullptr; + return false; JS::RootedObject parsedURL( cx, url::URL::create(cx, url_instance, input, worker_location::WorkerLocation::url)); // 2. If `parsedURL` is failure, then throw a `TypeError`. if (!parsedURL) { - return nullptr; + return false; } // 3. If `parsedURL` includes credentials, then throw a `TypeError`. @@ -1515,7 +1504,7 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H JS::RootedValue url_val(cx, JS::ObjectValue(*parsedURL)); url_str = JS::ToString(cx, url_val); if (!url_str) { - return nullptr; + return false; } // 5. Set `fallbackMode` to "`cors`". @@ -1544,16 +1533,17 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H host_api::HostString method; if (init_val.isObject()) { + // TODO: investigate special-casing native Request objects here to not reify headers and bodies. JS::RootedObject init(cx, init_val.toObjectOrNull()); if (!JS_GetProperty(cx, init, "method", &method_val) || !JS_GetProperty(cx, init, "headers", &headers_val) || !JS_GetProperty(cx, init, "body", &body_val)) { - return nullptr; + return false; } } else if (!init_val.isNullOrUndefined()) { JS_ReportErrorLatin1(cx, "Request constructor: |init| parameter can't be converted to " "a dictionary"); - return nullptr; + return false; } // 13. If `init` is not empty, then: @@ -1613,7 +1603,7 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H // 1. Let `method` be `init["method"]`. method_str = JS::ToString(cx, method_val); if (!method_str) { - return nullptr; + return false; } // 2. If `method` is not a method or `method` is a forbidden method, then @@ -1634,13 +1624,13 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H // This only needs to happen if the method was set explicitly and isn't the // default `GET`. if (method_str && !JS_StringEqualsLiteral(cx, method_str, "GET", &is_get)) { - return nullptr; + return false; } if (!is_get) { method = core::encode(cx, method_str); if (!method) { - return nullptr; + return false; } if (method_needs_normalization) { @@ -1648,7 +1638,7 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H // Replace the JS string with the normalized name. method_str = JS_NewStringCopyN(cx, method.begin(), method.len); if (!method_str) { - return nullptr; + return false; } } } @@ -1693,21 +1683,15 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H // `init["headers"]` exists, create the request's `headers` from that, // otherwise create it from the `init` object's `headers`, or create a new, // empty one. - auto *headers_handle = new host_api::HttpHeaders(); JS::RootedObject headers(cx); if (headers_val.isUndefined() && input_headers) { headers_val.setObject(*input_headers); } if (!headers_val.isUndefined()) { - JS::RootedObject headersInstance( - cx, JS_NewObjectWithGivenProto(cx, &Headers::class_, Headers::proto_obj)); - if (!headersInstance) - return nullptr; - - headers = Headers::create(cx, headersInstance, headers_handle, headers_val); + headers = Headers::create(cx, headers_val, host_api::HttpHeadersGuard::Request); if (!headers) { - return nullptr; + return false; } } @@ -1721,7 +1705,7 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H // TypeError. if ((input_has_body || !body_val.isNullOrUndefined()) && is_get_or_head) { JS_ReportErrorLatin1(cx, "Request constructor: HEAD or GET Request cannot have a body."); - return nullptr; + return false; } // 35. Let `initBody` be null. @@ -1734,16 +1718,7 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H auto url = core::encode(cx, url_str); if (!url) { - return nullptr; - } - - // Actually create the instance, now that we have all the parts required for - // it. We have to delay this step to here because the wasi-http API requires - // that all the request's properties are provided to the constructor. - auto request_handle = host_api::HttpOutgoingRequest::make(method, std::move(url), headers_handle); - RootedObject request(cx, create(cx, requestInstance, request_handle)); - if (!request) { - return nullptr; + return false; } // Store the URL, method, and headers derived above on the JS object. @@ -1768,7 +1743,7 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H // this’s headers. // Note: these steps are all inlined into RequestOrResponse::extract_body. if (!RequestOrResponse::extract_body(cx, request, body_val)) { - return nullptr; + return false; } } else if (input_has_body) { // 37. Let `inputOrInitBody` be `initBody` if it is non-null; otherwise @@ -1797,7 +1772,7 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H if (RequestOrResponse::body_used(input_request) || (inputBody && RequestOrResponse::body_unusable(cx, inputBody))) { JS_ReportErrorLatin1(cx, "Request constructor: the input request's body isn't usable."); - return nullptr; + return false; } if (!inputBody) { @@ -1809,7 +1784,7 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H } else { inputBody = streams::TransformStream::create_rs_proxy(cx, inputBody); if (!inputBody) { - return nullptr; + return false; } streams::TransformStream::set_readable_used_as_body(cx, inputBody, request); @@ -1823,22 +1798,21 @@ JSObject *Request::create(JSContext *cx, JS::HandleObject requestInstance, JS::H // 41. Set this’s requests body to `finalBody`. // (implicit) - return request; + return true; } -JSObject *Request::create_instance(JSContext *cx) { +JSObject *Request::create(JSContext *cx) { JS::RootedObject requestInstance( cx, JS_NewObjectWithGivenProto(cx, &Request::class_, Request::proto_obj)); return requestInstance; } bool Request::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { - REQUEST_HANDLER_ONLY("The Request builtin"); CTOR_HEADER("Request", 1); - JS::RootedObject requestInstance(cx, JS_NewObjectForConstructor(cx, &class_, args)); - JS::RootedObject request(cx, create(cx, requestInstance, args[0], args.get(1))); - if (!request) + JS::RootedObject request(cx, JS_NewObjectForConstructor(cx, &class_, args)); + if (!request || !initialize(cx, request, args[0], args.get(1))) { return false; + } args.rval().setObject(*request); return true; @@ -1853,8 +1827,7 @@ static_assert((int)Response::Slots::Response == (int)Request::Slots::Request); host_api::HttpResponse *Response::response_handle(JSObject *obj) { MOZ_ASSERT(is_instance(obj)); - return static_cast( - JS::GetReservedSlot(obj, static_cast(Slots::Response)).toPrivate()); + return static_cast(RequestOrResponse::handle(obj)); } uint16_t Response::status(JSObject *obj) { @@ -2448,8 +2421,6 @@ const JSPropertySpec Response::properties[] = { * The `Response` constructor https://fetch.spec.whatwg.org/#dom-response */ bool Response::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { - REQUEST_HANDLER_ONLY("The Response builtin"); - CTOR_HEADER("Response", 0); JS::RootedValue body_val(cx, args.get(0)); @@ -2496,39 +2467,20 @@ bool Response::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { // be consumed by the content creating it, so we're lenient about its format. // 3. Set `this`’s `response` to a new `response`. - // TODO(performance): consider not creating a host-side representation for responses - // eagerly. Some applications create Response objects purely for internal use, - // e.g. to represent cache entries. While that's perhaps not ideal to begin - // with, it exists, so we should handle it in a good way, and not be - // superfluously slow. - // https://github.com/fastly/js-compute-runtime/issues/219 - // TODO(performance): enable creating Response objects during the init phase, and only - // creating the host-side representation when processing requests. - // https://github.com/fastly/js-compute-runtime/issues/220 - // 5. (Reordered) Set `this`’s `response`’s `status` to `init`["status"]. // 7. (Reordered) If `init`["headers"] `exists`, then `fill` `this`’s `headers` with // `init`["headers"]. - JS::RootedObject headers(cx); - JS::RootedObject headersInstance( - cx, JS_NewObjectWithGivenProto(cx, &Headers::class_, Headers::proto_obj)); - if (!headersInstance) - return false; - - auto *headers_handle = new host_api::HttpHeaders(); - headers = Headers::create(cx, headersInstance, headers_handle, headers_val); + JS::RootedObject headers(cx, Headers::create(cx, headers_val, host_api::HttpHeadersGuard::Response)); if (!headers) { return false; } - auto *response_handle = host_api::HttpOutgoingResponse::make(status, headers_handle); - JS::RootedObject responseInstance(cx, JS_NewObjectForConstructor(cx, &class_, args)); if (!responseInstance) { return false; } - JS::RootedObject response(cx, create(cx, responseInstance, response_handle)); + JS::RootedObject response(cx, create(cx, responseInstance)); if (!response) { return false; } @@ -2581,13 +2533,6 @@ bool Response::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { if (!RequestOrResponse::extract_body(cx, response, body_val)) { return false; } - if (RequestOrResponse::has_body(response)) { - if (response_handle->body().is_err()) { - auto err = response_handle->body().to_err(); - HANDLE_ERROR(cx, *err); - return false; - } - } } args.rval().setObject(*response); @@ -2605,33 +2550,39 @@ bool Response::init_class(JSContext *cx, JS::HandleObject global) { (type_error_atom = JS_AtomizeAndPinString(cx, "error")); } -JSObject *Response::create(JSContext *cx, JS::HandleObject response, - host_api::HttpResponse *response_handle) { +JSObject *Response::create(JSContext *cx, JS::HandleObject response) { MOZ_ASSERT(cx); MOZ_ASSERT(is_instance(response)); - MOZ_ASSERT(response_handle); - JS::SetReservedSlot(response, static_cast(Slots::Response), - JS::PrivateValue(response_handle)); + JS::SetReservedSlot(response, static_cast(Slots::Response), JS::PrivateValue(nullptr)); JS::SetReservedSlot(response, static_cast(Slots::Headers), JS::NullValue()); JS::SetReservedSlot(response, static_cast(Slots::BodyStream), JS::NullValue()); JS::SetReservedSlot(response, static_cast(Slots::HasBody), JS::FalseValue()); JS::SetReservedSlot(response, static_cast(Slots::BodyUsed), JS::FalseValue()); JS::SetReservedSlot(response, static_cast(Slots::Redirected), JS::FalseValue()); - if (response_handle->is_incoming()) { - auto res = reinterpret_cast(response_handle)->status(); - MOZ_ASSERT(!res.is_err(), "TODO: proper error handling"); - auto status = res.unwrap(); - JS::SetReservedSlot(response, static_cast(Slots::Status), JS::Int32Value(status)); - set_status_message_from_code(cx, response, status); + return response; +} - if (!(status == 204 || status == 205 || status == 304)) { - JS::SetReservedSlot(response, static_cast(Slots::HasBody), JS::TrueValue()); - } +JSObject * Response::create_incoming(JSContext *cx, HandleObject obj, host_api::HttpIncomingResponse *response) { + RootedObject self(cx, create(cx, obj)); + if (!self) { + return nullptr; } - return response; + JS::SetReservedSlot(self, static_cast(Slots::Response), PrivateValue(response)); + + auto res = response->status(); + MOZ_ASSERT(!res.is_err(), "TODO: proper error handling"); + auto status = res.unwrap(); + JS::SetReservedSlot(self, static_cast(Slots::Status), JS::Int32Value(status)); + set_status_message_from_code(cx, self, status); + + if (!(status == 204 || status == 205 || status == 304)) { + JS::SetReservedSlot(self, static_cast(Slots::HasBody), JS::TrueValue()); + } + + return self; } namespace request_response { diff --git a/builtins/web/fetch/request-response.h b/builtins/web/fetch/request-response.h index e1b2f1d5..0a807a18 100644 --- a/builtins/web/fetch/request-response.h +++ b/builtins/web/fetch/request-response.h @@ -31,7 +31,7 @@ class RequestOrResponse final { static bool is_instance(JSObject *obj); static bool is_incoming(JSObject *obj); static host_api::HttpRequestResponseBase *handle(JSObject *obj); - static host_api::HttpHeaders *headers_handle(JSObject *obj); + static host_api::HttpHeadersReadOnly *headers_handle(JSObject *obj); static bool has_body(JSObject *obj); static host_api::HttpIncomingBody *incoming_body_handle(JSObject *obj); static host_api::HttpOutgoingBody *outgoing_body_handle(JSObject *obj); @@ -50,6 +50,17 @@ class RequestOrResponse final { */ static JSObject *maybe_headers(JSObject *obj); + /** + * Returns a handle to a clone of the RequestOrResponse's Headers. + * + * The main purposes for this function are use in sending outgoing requests/responses and + * in the constructor of request/response objects when a HeadersInit object is passed. + * + * The handle is guaranteed to be uniquely owned by the caller. + */ + static unique_ptr headers_handle_clone(JSContext *, HandleObject self, + host_api::HttpHeadersGuard guard); + /** * Returns the RequestOrResponse's Headers, reifying it if necessary. */ @@ -81,11 +92,6 @@ class RequestOrResponse final { JS::HandleValue reason); static bool body_source_pull_algorithm(JSContext *cx, JS::CallArgs args, JS::HandleObject source, JS::HandleObject body_owner, JS::HandleObject controller); - static bool body_reader_then_handler(JSContext *cx, JS::HandleObject body_owner, - JS::HandleValue extra, JS::CallArgs args); - - static bool body_reader_catch_handler(JSContext *cx, JS::HandleObject body_owner, - JS::HandleValue extra, JS::CallArgs args); /** * Ensures that the given |body_owner|'s body is properly streamed, if it @@ -129,6 +135,7 @@ class Request final : public BuiltinImpl { URL = static_cast(RequestOrResponse::Slots::URL), Method = static_cast(RequestOrResponse::Slots::Count), ResponsePromise, + PendingResponseHandle, Count, }; @@ -148,12 +155,11 @@ class Request final : public BuiltinImpl { static bool init_class(JSContext *cx, JS::HandleObject global); static bool constructor(JSContext *cx, unsigned argc, JS::Value *vp); - static JSObject *create(JSContext *cx, JS::HandleObject requestInstance, - host_api::HttpRequest *request_handle); - static JSObject *create(JSContext *cx, JS::HandleObject requestInstance, JS::HandleValue input, - JS::HandleValue init_val); + static JSObject *create(JSContext *cx); + static bool initialize(JSContext *cx, JS::HandleObject requestInstance, JS::HandleValue input, + JS::HandleValue init_val); - static JSObject *create_instance(JSContext *cx); + static void init_slots(JSObject *requestInstance); }; class Response final : public BuiltinImpl { @@ -198,8 +204,9 @@ class Response final : public BuiltinImpl { static bool init_class(JSContext *cx, JS::HandleObject global); static bool constructor(JSContext *cx, unsigned argc, JS::Value *vp); - static JSObject *create(JSContext *cx, JS::HandleObject response, - host_api::HttpResponse *response_handle); + static JSObject *create(JSContext *cx, JS::HandleObject response); + static JSObject* create_incoming(JSContext * cx, HandleObject self, + host_api::HttpIncomingResponse* response); static host_api::HttpResponse *response_handle(JSObject *obj); static uint16_t status(JSObject *obj); @@ -207,6 +214,64 @@ class Response final : public BuiltinImpl { static void set_status_message_from_code(JSContext *cx, JSObject *obj, uint16_t code); }; +class ResponseFutureTask final : public api::AsyncTask { + Heap request_; + host_api::FutureHttpIncomingResponse *future_; + +public: + explicit ResponseFutureTask(const HandleObject request, + host_api::FutureHttpIncomingResponse *future) + : request_(request), future_(future) { + auto res = future->subscribe(); + MOZ_ASSERT(!res.is_err(), "Subscribing to a future should never fail"); + handle_ = res.unwrap(); + } + + [[nodiscard]] bool run(api::Engine *engine) override { + // MOZ_ASSERT(ready()); + JSContext *cx = engine->cx(); + + const RootedObject request(cx, request_); + RootedObject response_promise(cx, Request::response_promise(request)); + + auto res = future_->maybe_response(); + if (res.is_err()) { + JS_ReportErrorUTF8(cx, "NetworkError when attempting to fetch resource."); + return RejectPromiseWithPendingError(cx, response_promise); + } + + auto maybe_response = res.unwrap(); + MOZ_ASSERT(maybe_response.has_value()); + auto response = maybe_response.value(); + RootedObject response_obj( + cx, JS_NewObjectWithGivenProto(cx, &Response::class_, Response::proto_obj)); + if (!response_obj) { + return false; + } + + response_obj = Response::create_incoming(cx, response_obj, response); + if (!response_obj) { + return false; + } + + RequestOrResponse::set_url(response_obj, RequestOrResponse::url(request)); + RootedValue response_val(cx, ObjectValue(*response_obj)); + if (!ResolvePromise(cx, response_promise, response_val)) { + return false; + } + + return cancel(engine); + } + + [[nodiscard]] bool cancel(api::Engine *engine) override { + // TODO(TS): implement + handle_ = -1; + return true; + } + + void trace(JSTracer *trc) override { TraceEdge(trc, &request_, "Request for response future"); } +}; + } // namespace fetch } // namespace web } // namespace builtins diff --git a/builtins/web/url.cpp b/builtins/web/url.cpp index e05fa15a..b326a536 100644 --- a/builtins/web/url.cpp +++ b/builtins/web/url.cpp @@ -24,7 +24,7 @@ bool URLSearchParamsIterator::next(JSContext *cx, unsigned argc, JS::Value *vp) if (!result) return false; - jsurl::JSSearchParam param{jsurl::SpecSlice(nullptr, 0), jsurl::SpecSlice(nullptr, 0), false}; + jsurl::JSSearchParam param{}; jsurl::params_at(params, index, ¶m); if (param.done) { @@ -635,9 +635,10 @@ JSObject *URL::create(JSContext *cx, JS::HandleObject self, JS::HandleValue url_ JSObject *URL::create(JSContext *cx, JS::HandleObject self, JS::HandleValue url_val, JS::HandleObject base_obj) { - MOZ_RELEASE_ASSERT(is_instance(base_obj)); - const auto *base = - static_cast(JS::GetReservedSlot(base_obj, Slots::Url).toPrivate()); + jsurl::JSUrl* base = nullptr; + if (is_instance(base_obj)) { + base = static_cast(JS::GetReservedSlot(base_obj, Slots::Url).toPrivate()); + } return create(cx, self, url_val, base); } diff --git a/componentize.sh b/componentize.sh index 22aff032..0d8419e7 100755 --- a/componentize.sh +++ b/componentize.sh @@ -1,18 +1,69 @@ #!/usr/bin/env bash -set -euo pipefail +#set -euo pipefail wizer="${WIZER:-wizer}" wasm_tools="${WASM_TOOLS:-wasm-tools}" -# Use $2 as output file if provided, otherwise use the input base name with a .wasm extension -if [ $# -gt 1 ] +usage() { + echo "Usage: $(basename "$0") [input.js] [-o output.wasm]" + echo " Providing an input file but no output uses the input base name with a .wasm extension" + echo " Providing an output file but no input creates a component without running any top-level script" + exit 1 +} + +if [ $# -lt 1 ] then - OUT_FILE="$2" -else - BASENAME="$(basename "$1")" + usage +fi + +IN_FILE="" +OUT_FILE="" + +while [ $# -gt 0 ] +do + case "$1" in + -o|--output) + OUT_FILE="$2" + shift 2 + ;; + *) + if [ -n "$IN_FILE" ] && [ -z "$OUT_FILE" ] && [ $# -eq 1 ] + then + OUT_FILE="$1" + else + IN_FILE="$1" + fi + shift + ;; + esac +done + +# Exit if neither input file nor output file is provided. +if [ -z "$IN_FILE" ] && [ -z "$OUT_FILE" ] +then + usage +fi + +# Use the -o param as output file if provided, otherwise use the input base name with a .wasm +# extension. +if [ -z "$OUT_FILE" ] +then + BASENAME="$(basename "$IN_FILE")" OUT_FILE="${BASENAME%.*}.wasm" fi -echo "$1" | WASMTIME_BACKTRACE_DETAILS=1 $wizer --allow-wasi --wasm-bulk-memory true --inherit-stdio true --dir "$(dirname "$1")" -o "$OUT_FILE" -- "$(dirname "$0")/starling.wasm" +PREOPEN_DIR="" +if [ -n "$IN_FILE" ] +then + PREOPEN_DIR="--dir "$(dirname "$IN_FILE")"" + echo "Componentizing $IN_FILE into $OUT_FILE" +else + echo "Creating runtime-script component $OUT_FILE" +fi + + +echo "$IN_FILE" | WASMTIME_BACKTRACE_DETAILS=1 $wizer --allow-wasi --wasm-bulk-memory true \ + --inherit-stdio true --inherit-env true $PREOPEN_DIR -o "$OUT_FILE" \ + -- "$(dirname "$0")/starling.wasm" $wasm_tools component new -v --adapt "wasi_snapshot_preview1=$(dirname "$0")/preview1-adapter.wasm" --output "$OUT_FILE" "$OUT_FILE" diff --git a/crates/rust-url/rust-url.h b/crates/rust-url/rust-url.h index 9a7cdb2e..5706b3f4 100644 --- a/crates/rust-url/rust-url.h +++ b/crates/rust-url/rust-url.h @@ -47,6 +47,11 @@ struct SpecSlice { const uint8_t *data; size_t len; + SpecSlice() + : data(nullptr), + len(0) + {} + SpecSlice(const uint8_t *const& data, size_t const& len) : data(data), @@ -60,6 +65,12 @@ struct JSSearchParam { SpecSlice value; bool done; + JSSearchParam() + : name(SpecSlice()), + value(SpecSlice()), + done(false) + {} + JSSearchParam(SpecSlice const& name, SpecSlice const& value, bool const& done) diff --git a/host-apis/wasi-0.2.0/host_api.cpp b/host-apis/wasi-0.2.0/host_api.cpp index 39b4f61a..32e73edd 100644 --- a/host-apis/wasi-0.2.0/host_api.cpp +++ b/host-apis/wasi-0.2.0/host_api.cpp @@ -1,8 +1,13 @@ #include "host_api.h" #include "bindings/bindings.h" -#include +#include +#include +#ifdef DEBUG +#include +#endif +using host_api::HostString; using std::optional; using std::string_view; using std::tuple; @@ -13,11 +18,6 @@ using std::vector; // pointer. static_assert(sizeof(uint32_t) == sizeof(void *)); -typedef wasi_http_0_2_0_types_own_incoming_request_t incoming_request_t; -typedef wasi_http_0_2_0_types_borrow_incoming_request_t borrow_incoming_request_t; -typedef wasi_http_0_2_0_types_own_incoming_response_t incoming_response_t; -typedef wasi_http_0_2_0_types_borrow_outgoing_request_t borrow_outgoing_request_t; - typedef wasi_http_0_2_0_types_own_future_incoming_response_t future_incoming_response_t; typedef wasi_http_0_2_0_types_borrow_future_incoming_response_t borrow_future_incoming_response_t; @@ -27,83 +27,233 @@ typedef wasi_http_0_2_0_types_own_outgoing_body_t outgoing_body_t; using field_key = wasi_http_0_2_0_types_field_key_t; using field_value = wasi_http_0_2_0_types_field_value_t; -typedef wasi_http_0_2_0_types_borrow_incoming_body_t borrow_incoming_body_t; -typedef wasi_http_0_2_0_types_borrow_outgoing_body_t borrow_outgoing_body_t; - typedef wasi_io_0_2_0_poll_own_pollable_t own_pollable_t; typedef wasi_io_0_2_0_poll_borrow_pollable_t borrow_pollable_t; typedef wasi_io_0_2_0_poll_list_borrow_pollable_t list_borrow_pollable_t; -typedef wasi_io_0_2_0_streams_own_input_stream_t own_input_stream_t; -typedef wasi_io_0_2_0_streams_borrow_input_stream_t borrow_input_stream_t; +#ifdef LOG_HANDLE_OPS +#define LOG_HANDLE_OP(...) fprintf(stderr, "%s", __PRETTY_FUNCTION__); fprintf(stderr, __VA_ARGS__) +#else +#define LOG_HANDLE_OP(...) +#endif -typedef wasi_io_0_2_0_streams_own_output_stream_t own_output_stream_t; +/// The type of handles used by the host interface. +typedef int32_t Handle; +constexpr Handle POISONED_HANDLE = -1; -namespace { +class host_api::HandleState { +protected: + HandleState() = default; + +public: + virtual ~HandleState() = default; + virtual bool valid() const = 0; +}; -/// This is the type contract for using the Own and Borrow templates. -template struct HandleOps {}; +template struct HandleOps {}; -/// A convenience wrapper for constructing a borrow. As we only create borrows of things we already -/// own, this wrapper will never explicitly drop borrows. -template class Borrow final { - static constexpr const typename HandleOps::borrow invalid{std::numeric_limits::max()}; - HandleOps::borrow handle{Borrow::invalid}; +template +class WASIHandle : public host_api::HandleState { +#ifdef DEBUG + static inline auto used_handles = std::set(); +#endif + +protected: + Handle handle_; +#ifdef DEBUG + bool owned_; +#endif public: - Borrow() = default; + using Borrowed = typename HandleOps::borrowed; + + explicit WASIHandle(typename HandleOps::owned handle) : handle_{handle.__handle} { + LOG_HANDLE_OP("Creating owned handle %d\n", handle.__handle); +#ifdef DEBUG + owned_ = true; + MOZ_ASSERT(!used_handles.contains(handle.__handle)); + used_handles.insert(handle.__handle); +#endif + } + + explicit WASIHandle(typename HandleOps::borrowed handle) : handle_{handle.__handle} { + LOG_HANDLE_OP("Creating borrowed handle %d\n", handle.__handle); +#ifdef DEBUG + owned_ = false; + MOZ_ASSERT(!used_handles.contains(handle.__handle)); + used_handles.insert(handle.__handle); +#endif + } + + ~WASIHandle() override { +#ifdef DEBUG + if (handle_ != POISONED_HANDLE) { + LOG_HANDLE_OP("Deleting (owned? %d) handle %d\n", owned_, handle_); + MOZ_ASSERT(used_handles.contains(handle_)); + used_handles.erase(handle_); + } +#endif + } + + static WASIHandle* cast(HandleState* handle) { + return reinterpret_cast*>(handle); + } + + typename HandleOps::borrowed borrow(HandleState *handle) { + return cast(handle)->borrow(); + } + + bool valid() const override { + bool valid = handle_ != POISONED_HANDLE; + MOZ_ASSERT_IF(valid, used_handles.contains(handle_)); + return valid; + } + + typename HandleOps::borrowed borrow() const { + MOZ_ASSERT(valid()); + LOG_HANDLE_OP("borrowing handle %d\n", handle_); + return {handle_}; + } + + typename HandleOps::owned take() { + MOZ_ASSERT(valid()); + MOZ_ASSERT(owned_); + LOG_HANDLE_OP("taking handle %d\n", handle_); + typename HandleOps::owned handle = { handle_ }; +#ifdef DEBUG + used_handles.erase(handle_); +#endif + handle_ = POISONED_HANDLE; + return handle; + } +}; - // Construct a borrow from an owned handle. - Borrow(HandleOps::own handle) : handle{HandleOps::borrow_owned(handle)} {} +template +struct Borrow { + static constexpr typename HandleOps::borrowed invalid{std::numeric_limits::max()}; + typename HandleOps::borrowed handle_{invalid}; - // Construct a borrow from a raw `Handle` value. - Borrow(host_api::Handle handle) : Borrow{typename HandleOps::own{handle}} {} + explicit Borrow(host_api::HandleState *handle) { + handle_ = WASIHandle::cast(handle)->borrow(); + } - // Convenience wrapper for constructing a borrow of a HandleState. - Borrow(host_api::HandleState *state) : Borrow{typename HandleOps::own{state->handle}} {} + explicit Borrow(typename HandleOps::borrowed handle) { + handle_ = handle; + } - bool valid() const { return this->handle.__handle != Borrow::invalid.__handle; } + explicit Borrow(typename HandleOps::owned handle) { + handle_ = {handle.__handle}; + } - operator bool() const { return this->valid(); } + operator typename HandleOps::borrowed() const { return handle_; } +}; - operator typename HandleOps::borrow() const { return this->handle; } +template <> struct HandleOps { + using owned = wasi_io_0_2_0_poll_own_pollable_t; + using borrowed = wasi_io_0_2_0_poll_borrow_pollable_t; }; template <> struct HandleOps { - using own = wasi_http_0_2_0_types_own_fields_t; - using borrow = wasi_http_0_2_0_types_borrow_fields_t; + using owned = wasi_http_0_2_0_types_own_headers_t; + using borrowed = wasi_http_0_2_0_types_borrow_fields_t; +}; - static constexpr const auto borrow_owned = wasi_http_0_2_0_types_borrow_fields; +template <> struct HandleOps { + using owned = wasi_http_0_2_0_types_own_incoming_request_t; + using borrowed = wasi_http_0_2_0_types_borrow_incoming_request_t; }; -struct OutputStream {}; +template <> struct HandleOps { + using owned = wasi_http_0_2_0_types_own_outgoing_request_t; + using borrowed = wasi_http_0_2_0_types_borrow_outgoing_request_t; +}; + +template <> struct HandleOps { + using owned = wasi_http_0_2_0_types_own_future_incoming_response_t; + using borrowed = wasi_http_0_2_0_types_borrow_future_incoming_response_t; +}; +template <> struct HandleOps { + using owned = wasi_http_0_2_0_types_own_incoming_response_t; + using borrowed = wasi_http_0_2_0_types_borrow_incoming_response_t; +}; + +template <> struct HandleOps { + using owned = wasi_http_0_2_0_types_own_outgoing_response_t; + using borrowed = wasi_http_0_2_0_types_borrow_outgoing_response_t; +}; + +template <> struct HandleOps { + using owned = wasi_http_0_2_0_types_own_incoming_body_t; + using borrowed = wasi_http_0_2_0_types_borrow_incoming_body_t; +}; + +template <> struct HandleOps { + using owned = wasi_http_0_2_0_types_own_outgoing_body_t; + using borrowed = wasi_http_0_2_0_types_borrow_outgoing_body_t; +}; + +struct OutputStream {}; template <> struct HandleOps { - using own = wasi_io_0_2_0_streams_own_output_stream_t; - using borrow = wasi_io_0_2_0_streams_borrow_output_stream_t; + using owned = wasi_io_0_2_0_streams_own_output_stream_t; + using borrowed = wasi_io_0_2_0_streams_borrow_output_stream_t; +}; - static constexpr const auto borrow_owned = wasi_io_0_2_0_streams_borrow_output_stream; +struct InputStream {}; +template <> struct HandleOps { + using owned = wasi_io_0_2_0_streams_own_input_stream_t; + using borrowed = wasi_io_0_2_0_streams_borrow_input_stream_t; }; -struct Pollable {}; +class IncomingBodyHandle final : public WASIHandle { + HandleOps::owned stream_handle_; + PollableHandle pollable_handle_; -template <> struct HandleOps { - using own = wasi_io_0_2_0_poll_own_pollable_t; - using borrow = wasi_io_0_2_0_poll_borrow_pollable_t; + friend host_api::HttpIncomingBody; - static constexpr const auto borrow_owned = wasi_io_0_2_0_poll_borrow_pollable; +public: + explicit IncomingBodyHandle(HandleOps::owned handle) + : WASIHandle(handle), pollable_handle_(INVALID_POLLABLE_HANDLE) { + HandleOps::owned stream{}; + if (!wasi_http_0_2_0_types_method_incoming_body_stream(borrow(), &stream)) { + MOZ_ASSERT_UNREACHABLE("Getting a body's stream should never fail"); + } + stream_handle_ = stream; + } + + static IncomingBodyHandle* cast(HandleState* handle) { + return reinterpret_cast(handle); + } }; -} // namespace +class OutgoingBodyHandle final : public WASIHandle { + HandleOps::owned stream_handle_; + PollableHandle pollable_handle_; + + friend host_api::HttpOutgoingBody; + +public: + explicit OutgoingBodyHandle(HandleOps::owned handle) + : WASIHandle(handle), pollable_handle_(INVALID_POLLABLE_HANDLE) { + HandleOps::owned stream{}; + if (!wasi_http_0_2_0_types_method_outgoing_body_write(borrow(), &stream)) { + MOZ_ASSERT_UNREACHABLE("Getting a body's stream should never fail"); + } + stream_handle_ = stream; + } + + static OutgoingBodyHandle* cast(HandleState* handle) { + return reinterpret_cast(handle); + } +}; -size_t api::AsyncTask::select(std::vector *tasks) { +size_t api::AsyncTask::select(std::vector *tasks) { auto count = tasks->size(); - vector> handles; + vector::Borrowed> handles; for (const auto task : *tasks) { handles.emplace_back(task->id()); } - auto list = list_borrow_pollable_t{ - reinterpret_cast::borrow *>(handles.data()), count}; + auto list = list_borrow_pollable_t{ handles.data(), count}; wasi_io_0_2_0_poll_list_u32_t result{nullptr, 0}; wasi_io_0_2_0_poll_poll(&list, &result); MOZ_ASSERT(result.len > 0); @@ -139,12 +289,12 @@ template T from_string_view(std::string_view str) { auto string_view_to_world_string = from_string_view; -HostString scheme_to_string(const wasi_http_0_2_0_types_scheme_t scheme) { +HostString scheme_to_string(const wasi_http_0_2_0_types_scheme_t &scheme) { if (scheme.tag == WASI_HTTP_0_2_0_TYPES_SCHEME_HTTP) { - return {"http:"}; + return {"http"}; } if (scheme.tag == WASI_HTTP_0_2_0_TYPES_SCHEME_HTTPS) { - return {"https:"}; + return {"https"}; } return to_host_string(scheme.val.other); } @@ -185,43 +335,115 @@ void MonotonicClock::unsubscribe(const int32_t handle_id) { wasi_io_0_2_0_poll_pollable_drop_own(own_pollable_t{handle_id}); } -HttpHeaders::HttpHeaders() { - this->handle_state_ = new HandleState(wasi_http_0_2_0_types_constructor_fields().__handle); +HttpHeaders::HttpHeaders(HttpHeadersGuard guard, std::unique_ptr state) + : HttpHeadersReadOnly(std::move(state)), guard_(guard) {} + +HttpHeaders::HttpHeaders(HttpHeadersGuard guard) : guard_(guard) { + handle_state_ = std::make_unique>(wasi_http_0_2_0_types_constructor_fields()); } -HttpHeaders::HttpHeaders(Handle handle) { handle_state_ = new HandleState(handle); } -// TODO: make this a factory function -HttpHeaders::HttpHeaders(const vector>> &entries) { +Result HttpHeaders::FromEntries(HttpHeadersGuard guard, + vector>& entries) { std::vector pairs; + pairs.reserve(entries.size()); - for (const auto &[name, values] : entries) { - for (const auto &value : values) { - pairs.emplace_back(from_string_view(name), from_string_view(value)); - } + for (const auto &[name, value] : entries) { + pairs.emplace_back(from_string_view(name), from_string_view(value)); } wasi_http_0_2_0_types_list_tuple2_field_key_field_value_t tuples{pairs.data(), entries.size()}; wasi_http_0_2_0_types_own_fields_t ret; wasi_http_0_2_0_types_header_error_t err; - wasi_http_0_2_0_types_static_fields_from_list(&tuples, &ret, &err); - // TODO: handle `err` + if (!wasi_http_0_2_0_types_static_fields_from_list(&tuples, &ret, &err)) { + // TODO: handle `err` + return Result::err(154); + } - this->handle_state_ = new HandleState(ret.__handle); + auto headers = new HttpHeaders(guard, std::make_unique>(ret)); + return Result::ok(headers); } -HttpHeaders::HttpHeaders(const HttpHeaders &headers) { - Borrow borrow(headers.handle_state_); +HttpHeaders::HttpHeaders(HttpHeadersGuard guard, const HttpHeadersReadOnly &headers) + : HttpHeadersReadOnly(nullptr), guard_(guard) { + Borrow borrow(headers.handle_state_.get()); auto handle = wasi_http_0_2_0_types_method_fields_clone(borrow); - this->handle_state_ = new HandleState(handle.__handle); + this->handle_state_ = std::unique_ptr(new WASIHandle(handle)); +} + +// We currently only guard against a single request header, instead of the full list in +// https://fetch.spec.whatwg.org/#forbidden-request-header. +static std::list forbidden_request_headers = { + "host", +}; + +// We currently only guard against a single response header, instead of the full list in +// https://fetch.spec.whatwg.org/#forbidden-request-header. +static std::list forbidden_response_headers = { + "host", +}; + +bool HttpHeaders::check_guard(HttpHeadersGuard guard, string_view header_name) { + std::list* forbidden_headers = nullptr; + switch (guard) { + case HttpHeadersGuard::None: + return true; + case HttpHeadersGuard::Request: + forbidden_headers = &forbidden_request_headers; + break; + case HttpHeadersGuard::Response: + forbidden_headers = &forbidden_response_headers; + break; + default: + MOZ_ASSERT_UNREACHABLE(); + } + + if (!forbidden_headers) { + return true; + } + + for (auto header : *forbidden_headers) { + if (header_name.compare(header) == 0) { + return false; + } + } + + return true; +} + +HttpHeaders *HttpHeadersReadOnly::clone(HttpHeadersGuard guard) { + auto headers = new HttpHeaders(guard, *this); + std::list* forbidden_headers = nullptr; + switch (guard) { + case HttpHeadersGuard::Request: + forbidden_headers = &forbidden_request_headers; + break; + case HttpHeadersGuard::Response: + break; + case HttpHeadersGuard::None: + break; + default: + MOZ_ASSERT_UNREACHABLE(); + } + + if (!forbidden_headers) { + return headers; + } + + for (auto header : *forbidden_headers) { + if (headers->has(header).unwrap()) { + headers->remove(header).unwrap(); + } + } + + return headers; } -Result>> HttpHeaders::entries() const { +Result>> HttpHeadersReadOnly::entries() const { Result>> res; - MOZ_ASSERT(valid()); wasi_http_0_2_0_types_list_tuple2_field_key_field_value_t entries; - Borrow borrow(this->handle_state_); + Borrow borrow(this->handle_state_.get()); wasi_http_0_2_0_types_method_fields_entries(borrow, &entries); vector> entries_vec; @@ -237,15 +459,15 @@ Result>> HttpHeaders::entries() const { return res; } -Result> HttpHeaders::names() const { +Result> HttpHeadersReadOnly::names() const { Result> res; - MOZ_ASSERT(valid()); wasi_http_0_2_0_types_list_tuple2_field_key_field_value_t entries; - Borrow borrow(this->handle_state_); + Borrow borrow(this->handle_state_.get()); wasi_http_0_2_0_types_method_fields_entries(borrow, &entries); vector names; + names.reserve(entries.len); for (int i = 0; i < entries.len; i++) { names.emplace_back(bindings_string_to_host_string(entries.ptr[i].f0)); } @@ -256,17 +478,17 @@ Result> HttpHeaders::names() const { return res; } -Result>> HttpHeaders::get(string_view name) const { +Result>> HttpHeadersReadOnly::get(string_view name) const { Result>> res; - MOZ_ASSERT(valid()); wasi_http_0_2_0_types_list_field_value_t values; auto hdr = string_view_to_world_string(name); - Borrow borrow(this->handle_state_); + Borrow borrow(this->handle_state_.get()); wasi_http_0_2_0_types_method_fields_get(borrow, &hdr, &values); if (values.len > 0) { std::vector names; + names.reserve(values.len); for (int i = 0; i < values.len; i++) { names.emplace_back(to_host_string(values.ptr[i])); } @@ -280,44 +502,65 @@ Result>> HttpHeaders::get(string_view name) const { return res; } +Result HttpHeadersReadOnly::has(string_view name) const { + auto hdr = string_view_to_world_string(name); + Borrow borrow(this->handle_state_.get()); + return Result::ok(wasi_http_0_2_0_types_method_fields_has(borrow, &hdr)); +} + Result HttpHeaders::set(string_view name, string_view value) { - MOZ_ASSERT(valid()); + if (!check_guard(guard_, name)) { + return {}; + } auto hdr = from_string_view(name); auto val = from_string_view(value); wasi_http_0_2_0_types_list_field_value_t host_values{&val, 1}; - Borrow borrow(this->handle_state_); + Borrow borrow(this->handle_state_.get()); wasi_http_0_2_0_types_header_error_t err; - wasi_http_0_2_0_types_method_fields_set(borrow, &hdr, &host_values, &err); - + if (!wasi_http_0_2_0_types_method_fields_set(borrow, &hdr, &host_values, &err)) { // TODO: handle `err` + return Result::err(154); + } + return {}; } Result HttpHeaders::append(string_view name, string_view value) { - MOZ_ASSERT(valid()); + if (!check_guard(guard_, name)) { + return {}; + } auto hdr = from_string_view(name); auto val = from_string_view(value); - Borrow borrow(this->handle_state_); + Borrow borrow(this->handle_state_.get()); + // TODO: properly handle `err` wasi_http_0_2_0_types_header_error_t err; - wasi_http_0_2_0_types_method_fields_append(borrow, &hdr, &val, &err); - - // TODO: handle `err` + if (!wasi_http_0_2_0_types_method_fields_append(borrow, &hdr, &val, &err)) { + switch (err.tag) { + case WASI_HTTP_0_2_0_TYPES_HEADER_ERROR_INVALID_SYNTAX: + case WASI_HTTP_0_2_0_TYPES_HEADER_ERROR_FORBIDDEN: + return Result::err(154); + case WASI_HTTP_0_2_0_TYPES_HEADER_ERROR_IMMUTABLE: + MOZ_ASSERT_UNREACHABLE("Headers should not be immutable"); + default: + MOZ_ASSERT_UNREACHABLE("Unknown header error type"); + } + } return {}; } Result HttpHeaders::remove(string_view name) { - MOZ_ASSERT(valid()); auto hdr = string_view_to_world_string(name); - Borrow borrow(this->handle_state_); + Borrow borrow(this->handle_state_.get()); wasi_http_0_2_0_types_header_error_t err; - wasi_http_0_2_0_types_method_fields_delete(borrow, &hdr, &err); - - // TODO: handle `err` + if (!wasi_http_0_2_0_types_method_fields_delete(borrow, &hdr, &err)) { + // TODO: handle `err` + return Result::err(154); + } return {}; } @@ -328,7 +571,7 @@ string_view HttpRequestResponseBase::url() { return string_view(*_url); } - auto borrow = borrow_incoming_request_t{handle_state_->handle}; + Borrow borrow(handle_state_.get()); wasi_http_0_2_0_types_scheme_t scheme; bool success; @@ -345,6 +588,7 @@ string_view HttpRequestResponseBase::url() { HostString scheme_str = scheme_to_string(scheme); _url = new std::string(scheme_str.ptr.release(), scheme_str.len); + _url->append("://"); _url->append(string_view(bindings_string_to_host_string(authority))); _url->append(string_view(bindings_string_to_host_string(path))); @@ -360,26 +604,8 @@ bool write_to_outgoing_body(Borrow borrow, const uint8_t *ptr, con return wasi_io_0_2_0_streams_method_output_stream_write(borrow, &list, &err); } -class OutgoingBodyHandleState final : HandleState { - Handle stream_handle_; - PollableHandle pollable_handle_; - - friend HttpOutgoingBody; - -public: - explicit OutgoingBodyHandleState(const Handle handle) - : HandleState(handle), pollable_handle_(INVALID_POLLABLE_HANDLE) { - const borrow_outgoing_body_t borrow = {handle}; - own_output_stream_t stream{}; - if (!wasi_http_0_2_0_types_method_outgoing_body_write(borrow, &stream)) { - MOZ_ASSERT_UNREACHABLE("Getting a body's stream should never fail"); - } - stream_handle_ = stream.__handle; - } -}; - -HttpOutgoingBody::HttpOutgoingBody(Handle handle) : Pollable() { - handle_state_ = new OutgoingBodyHandleState(handle); +HttpOutgoingBody::HttpOutgoingBody(std::unique_ptr state) : Pollable() { + handle_state_ = std::move(state); } Result HttpOutgoingBody::capacity() { if (!valid()) { @@ -387,7 +613,7 @@ Result HttpOutgoingBody::capacity() { return Result::err(154); } - auto *state = static_cast(this->handle_state_); + auto *state = static_cast(this->handle_state_.get()); Borrow borrow(state->stream_handle_); uint64_t capacity = 0; wasi_io_0_2_0_streams_stream_error_t err; @@ -406,7 +632,7 @@ Result HttpOutgoingBody::write(const uint8_t *bytes, size_t len) { auto capacity = res.unwrap(); auto bytes_to_write = std::min(len, static_cast(capacity)); - auto *state = static_cast(this->handle_state_); + auto *state = static_cast(this->handle_state_.get()); Borrow borrow(state->stream_handle_); if (!write_to_outgoing_body(borrow, bytes, bytes_to_write)) { return Result::err(154); @@ -418,10 +644,10 @@ Result HttpOutgoingBody::write(const uint8_t *bytes, size_t len) { Result HttpOutgoingBody::write_all(const uint8_t *bytes, size_t len) { if (!valid()) { // TODO: proper error handling for all 154 error codes. - return Result::err({}); + return Result::err(154); } - auto *state = static_cast(handle_state_); + auto *state = static_cast(handle_state_.get()); Borrow borrow(state->stream_handle_); while (len > 0) { @@ -456,16 +682,30 @@ class BodyAppendTask final : public api::AsyncTask { HttpOutgoingBody *outgoing_body_; PollableHandle incoming_pollable_; PollableHandle outgoing_pollable_; + + api::TaskCompletionCallback cb_; + Heap cb_receiver_; State state_; - void set_state(const State state) { + void set_state(JSContext* cx, const State state) { MOZ_ASSERT(state_ != State::Done); state_ = state; + if (state == State::Done && cb_) { + RootedObject receiver(cx, cb_receiver_); + cb_(cx, receiver); + cb_ = nullptr; + cb_receiver_ = nullptr; + } } public: - explicit BodyAppendTask(HttpIncomingBody *incoming_body, HttpOutgoingBody *outgoing_body) - : incoming_body_(incoming_body), outgoing_body_(outgoing_body) { + explicit BodyAppendTask(api::Engine *engine, + HttpIncomingBody *incoming_body, + HttpOutgoingBody *outgoing_body, + api::TaskCompletionCallback completion_callback, + HandleObject callback_receiver) + : incoming_body_(incoming_body), outgoing_body_(outgoing_body), + cb_(completion_callback) { auto res = incoming_body_->subscribe(); MOZ_ASSERT(!res.is_err()); incoming_pollable_ = res.unwrap(); @@ -474,7 +714,9 @@ class BodyAppendTask final : public api::AsyncTask { MOZ_ASSERT(!res.is_err()); outgoing_pollable_ = res.unwrap(); - state_ = State::BlockedOnBoth; + cb_receiver_ = callback_receiver; + + set_state(engine->cx(), State::BlockedOnBoth); } [[nodiscard]] bool run(api::Engine *engine) override { @@ -485,10 +727,10 @@ class BodyAppendTask final : public api::AsyncTask { MOZ_ASSERT(!res.is_err()); auto [done, _] = std::move(res.unwrap()); if (done) { - set_state(State::Done); + set_state(engine->cx(), State::Done); return true; } - set_state(State::BlockedOnOutgoing); + set_state(engine->cx(), State::BlockedOnOutgoing); } uint64_t capacity = 0; @@ -499,7 +741,7 @@ class BodyAppendTask final : public api::AsyncTask { } capacity = res.unwrap(); if (capacity > 0) { - set_state(State::Ready); + set_state(engine->cx(), State::Ready); } else { engine->queue_async_task(this); return true; @@ -517,12 +759,12 @@ class BodyAppendTask final : public api::AsyncTask { } auto [done, bytes] = std::move(res.unwrap()); if (bytes.len == 0 && !done) { - set_state(State::BlockedOnIncoming); + set_state(engine->cx(), State::BlockedOnIncoming); engine->queue_async_task(this); return true; } - auto offset = 0; + unsigned offset = 0; while (bytes.len - offset > 0) { // TODO: remove double checking of write-readiness // TODO: make this async by storing the remaining chunk in the task and marking it as @@ -536,7 +778,7 @@ class BodyAppendTask final : public api::AsyncTask { } if (done) { - set_state(State::Done); + set_state(engine->cx(), State::Done); return true; } @@ -548,7 +790,7 @@ class BodyAppendTask final : public api::AsyncTask { capacity = capacity_res.unwrap(); } while (capacity > 0); - set_state(State::BlockedOnOutgoing); + set_state(engine->cx(), State::BlockedOnOutgoing); engine->queue_async_task(this); return true; } @@ -569,20 +811,18 @@ class BodyAppendTask final : public api::AsyncTask { } void trace(JSTracer *trc) override { - // Nothing to trace. + JS::TraceEdge(trc, &cb_receiver_, "BodyAppendTask completion callback receiver"); } }; -Result HttpOutgoingBody::append(api::Engine *engine, HttpIncomingBody *other) { - MOZ_ASSERT(valid()); - engine->queue_async_task(new BodyAppendTask(other, this)); +Result HttpOutgoingBody::append(api::Engine *engine, HttpIncomingBody *other, + api::TaskCompletionCallback callback, HandleObject callback_receiver) { + engine->queue_async_task(new BodyAppendTask(engine, other, this, callback, callback_receiver)); return {}; } Result HttpOutgoingBody::close() { - MOZ_ASSERT(valid()); - - auto state = static_cast(handle_state_); + auto state = static_cast(handle_state_.get()); // A blocking flush is required here to ensure that all buffered contents are // actually written before finishing the body. Borrow borrow{state->stream_handle_}; @@ -590,8 +830,11 @@ Result HttpOutgoingBody::close() { { wasi_io_0_2_0_streams_stream_error_t err; bool success = wasi_io_0_2_0_streams_method_output_stream_blocking_flush(borrow, &err); - MOZ_RELEASE_ASSERT(success); - // TODO: handle `err` + if (!success) { + // TODO: validate that this condition applies if `content-length` bytes were written, and + // the host has auto-closed the body. + MOZ_RELEASE_ASSERT(err.tag == WASI_IO_0_2_0_STREAMS_STREAM_ERROR_CLOSED); + } } if (state->pollable_handle_ != INVALID_POLLABLE_HANDLE) { @@ -601,17 +844,14 @@ Result HttpOutgoingBody::close() { { wasi_http_0_2_0_types_error_code_t err; - wasi_http_0_2_0_types_static_outgoing_body_finish({state->handle}, nullptr, &err); + wasi_http_0_2_0_types_static_outgoing_body_finish({state->take()}, nullptr, &err); // TODO: handle `err` } - delete handle_state_; - handle_state_ = nullptr; - return {}; } Result HttpOutgoingBody::subscribe() { - auto state = static_cast(handle_state_); + auto state = static_cast(handle_state_.get()); if (state->pollable_handle_ == INVALID_POLLABLE_HANDLE) { Borrow borrow(state->stream_handle_); state->pollable_handle_ = wasi_io_0_2_0_streams_method_output_stream_subscribe(borrow).__handle; @@ -620,7 +860,7 @@ Result HttpOutgoingBody::subscribe() { } void HttpOutgoingBody::unsubscribe() { - auto state = static_cast(handle_state_); + auto state = static_cast(handle_state_.get()); if (state->pollable_handle_ == INVALID_POLLABLE_HANDLE) { return; } @@ -650,10 +890,10 @@ wasi_http_0_2_0_types_method_t http_method_to_host(string_view method_str) { return wasi_http_0_2_0_types_method_t{WASI_HTTP_0_2_0_TYPES_METHOD_OTHER, {val}}; } -HttpOutgoingRequest::HttpOutgoingRequest(HandleState *state) { this->handle_state_ = state; } +HttpOutgoingRequest::HttpOutgoingRequest(std::unique_ptr state) { this->handle_state_ = std::move(state); } HttpOutgoingRequest *HttpOutgoingRequest::make(string_view method_str, optional url_str, - HttpHeaders *headers) { + std::unique_ptr headers) { bindings_string_t path_with_query; wasi_http_0_2_0_types_scheme_t scheme; bindings_string_t authority; @@ -686,8 +926,9 @@ HttpOutgoingRequest *HttpOutgoingRequest::make(string_view method_str, optional< maybe_path_with_query = &path_with_query; } + auto headers_handle = WASIHandle::cast(headers->handle_state_.get())->take(); auto handle = - wasi_http_0_2_0_types_constructor_outgoing_request({headers->handle_state_->handle}); + wasi_http_0_2_0_types_constructor_outgoing_request(headers_handle); { auto borrow = wasi_http_0_2_0_types_borrow_outgoing_request(handle); @@ -706,69 +947,68 @@ HttpOutgoingRequest *HttpOutgoingRequest::make(string_view method_str, optional< maybe_path_with_query); } - auto *state = new HandleState(handle.__handle); - auto *resp = new HttpOutgoingRequest(state); - - resp->headers_ = headers; + auto *state = new WASIHandle(handle); + auto *resp = new HttpOutgoingRequest(std::unique_ptr(state)); return resp; } Result HttpOutgoingRequest::method() { - MOZ_ASSERT(valid()); - MOZ_ASSERT(headers_); return Result::ok(method_); } -Result HttpOutgoingRequest::headers() { - MOZ_ASSERT(valid()); - MOZ_ASSERT(headers_); - return Result::ok(headers_); +Result HttpOutgoingRequest::headers() { + if (!headers_) { + if (!valid()) { + return Result::err(154); + } + Borrow borrow(handle_state_.get()); + auto res = wasi_http_0_2_0_types_method_outgoing_request_headers(borrow); + headers_ = new HttpHeadersReadOnly(std::unique_ptr(new WASIHandle(res))); + } + + return Result::ok(headers_); } Result HttpOutgoingRequest::body() { typedef Result Res; - MOZ_ASSERT(valid()); if (!this->body_) { outgoing_body_t body; - if (!wasi_http_0_2_0_types_method_outgoing_request_body( - wasi_http_0_2_0_types_borrow_outgoing_request({handle_state_->handle}), &body)) { + Borrow borrow(handle_state_.get()); + if (!wasi_http_0_2_0_types_method_outgoing_request_body(borrow, &body)) { return Res::err(154); } - this->body_ = new HttpOutgoingBody(body.__handle); + body_ = new HttpOutgoingBody(std::unique_ptr(new OutgoingBodyHandle(body))); } return Res::ok(body_); } Result HttpOutgoingRequest::send() { - MOZ_ASSERT(valid()); + typedef Result Res; future_incoming_response_t ret; wasi_http_0_2_0_outgoing_handler_error_code_t err; - wasi_http_0_2_0_outgoing_handler_handle({handle_state_->handle}, nullptr, &ret, &err); - auto res = new FutureHttpIncomingResponse(ret.__handle); + auto request_handle = WASIHandle::cast(handle_state_.get())->take(); + if (!wasi_http_0_2_0_outgoing_handler_handle(request_handle, nullptr, &ret, &err)) { + return Res::err(154); + } + auto res = new FutureHttpIncomingResponse(std::unique_ptr(new WASIHandle(ret))); return Result::ok(res); } -class IncomingBodyHandleState final : HandleState { - Handle stream_handle_; - PollableHandle pollable_handle_; +void block_on_pollable_handle(PollableHandle handle) { + wasi_io_0_2_0_poll_method_pollable_block({handle}); +} - friend HttpIncomingBody; +HttpIncomingBody::HttpIncomingBody(std::unique_ptr state) : Pollable() { handle_state_ = std::move(state); } -public: - explicit IncomingBodyHandleState(const Handle handle) - : HandleState(handle), pollable_handle_(INVALID_POLLABLE_HANDLE) { - const borrow_incoming_body_t borrow = {handle}; - own_input_stream_t stream{}; - if (!wasi_http_0_2_0_types_method_incoming_body_stream(borrow, &stream)) { - MOZ_ASSERT_UNREACHABLE("Getting a body's stream should never fail"); - } - stream_handle_ = stream.__handle; +Resource::~Resource() { + if (handle_state_ != nullptr) { + handle_state_ = nullptr; } -}; +} -HttpIncomingBody::HttpIncomingBody(const Handle handle) : Pollable() { - handle_state_ = new IncomingBodyHandleState(handle); +bool Resource::valid() const { + return this->handle_state_ != nullptr && this->handle_state_->valid(); } Result HttpIncomingBody::read(uint32_t chunk_size) { @@ -776,8 +1016,8 @@ Result HttpIncomingBody::read(uint32_t chunk_size) wasi_io_0_2_0_streams_list_u8_t ret{}; wasi_io_0_2_0_streams_stream_error_t err{}; - auto borrow = borrow_input_stream_t( - {static_cast(handle_state_)->stream_handle_}); + auto body_handle = IncomingBodyHandle::cast(handle_state_.get()); + auto borrow = Borrow(body_handle->stream_handle_); bool success = wasi_io_0_2_0_streams_method_input_stream_read(borrow, chunk_size, &ret, &err); if (!success) { if (err.tag == WASI_IO_0_2_0_STREAMS_STREAM_ERROR_CLOSED) { @@ -792,13 +1032,13 @@ Result HttpIncomingBody::read(uint32_t chunk_size) Result HttpIncomingBody::close() { return {}; } Result HttpIncomingBody::subscribe() { - auto borrow = borrow_input_stream_t( - {static_cast(handle_state_)->stream_handle_}); + auto body_handle = IncomingBodyHandle::cast(handle_state_.get()); + auto borrow = Borrow(body_handle->stream_handle_); auto pollable = wasi_io_0_2_0_streams_method_input_stream_subscribe(borrow); return Result::ok(pollable.__handle); } void HttpIncomingBody::unsubscribe() { - auto state = static_cast(handle_state_); + auto state = static_cast(handle_state_.get()); if (state->pollable_handle_ == INVALID_POLLABLE_HANDLE) { return; } @@ -806,14 +1046,15 @@ void HttpIncomingBody::unsubscribe() { state->pollable_handle_ = INVALID_POLLABLE_HANDLE; } -FutureHttpIncomingResponse::FutureHttpIncomingResponse(Handle handle) { - handle_state_ = new HandleState(handle); +FutureHttpIncomingResponse::FutureHttpIncomingResponse(std::unique_ptr state) { + handle_state_ = std::move(state); } + Result> FutureHttpIncomingResponse::maybe_response() { typedef Result> Res; wasi_http_0_2_0_types_result_result_own_incoming_response_error_code_void_t res; - auto borrow = wasi_http_0_2_0_types_borrow_future_incoming_response({handle_state_->handle}); + Borrow borrow(handle_state_.get()); if (!wasi_http_0_2_0_types_method_future_incoming_response_get(borrow, &res)) { return Res::ok(std::nullopt); } @@ -826,11 +1067,12 @@ Result> FutureHttpIncomingResponse::maybe_respo return Res::err(154); } - return Res::ok(new HttpIncomingResponse(val.ok.__handle)); + auto state = new WASIHandle(val.ok); + return Res::ok(new HttpIncomingResponse(std::unique_ptr(state))); } Result FutureHttpIncomingResponse::subscribe() { - auto borrow = wasi_http_0_2_0_types_borrow_future_incoming_response({handle_state_->handle}); + Borrow borrow(handle_state_.get()); auto pollable = wasi_http_0_2_0_types_method_future_incoming_response_subscribe(borrow); return Result::ok(pollable.__handle); } @@ -838,32 +1080,41 @@ void FutureHttpIncomingResponse::unsubscribe() { // TODO: implement } +HttpHeadersReadOnly::HttpHeadersReadOnly() { + handle_state_ = nullptr; +} + +HttpHeadersReadOnly::HttpHeadersReadOnly(std::unique_ptr state) { + handle_state_ = std::move(state); +} + Result HttpIncomingResponse::status() { if (status_ == UNSET_STATUS) { if (!valid()) { return Result::err(154); } - auto borrow = wasi_http_0_2_0_types_borrow_incoming_response_t({handle_state_->handle}); + auto borrow = Borrow(handle_state_.get()); status_ = wasi_http_0_2_0_types_method_incoming_response_status(borrow); } return Result::ok(status_); } -HttpIncomingResponse::HttpIncomingResponse(Handle handle) { - handle_state_ = new HandleState(handle); +HttpIncomingResponse::HttpIncomingResponse(std::unique_ptr state) { + handle_state_ = std::move(state); } -Result HttpIncomingResponse::headers() { +Result HttpIncomingResponse::headers() { if (!headers_) { if (!valid()) { - return Result::err(154); + return Result::err(154); } - auto res = wasi_http_0_2_0_types_method_incoming_response_headers( - wasi_http_0_2_0_types_borrow_incoming_response({handle_state_->handle})); - headers_ = new HttpHeaders(res.__handle); + auto borrow = Borrow(handle_state_.get()); + auto res = wasi_http_0_2_0_types_method_incoming_response_headers(borrow); + auto state = new WASIHandle(res); + headers_ = new HttpHeadersReadOnly(std::unique_ptr(state)); } - return Result::ok(headers_); + return Result::ok(headers_); } Result HttpIncomingResponse::body() { @@ -871,89 +1122,76 @@ Result HttpIncomingResponse::body() { if (!valid()) { return Result::err(154); } + auto borrow = Borrow(handle_state_.get()); incoming_body_t body; - if (!wasi_http_0_2_0_types_method_incoming_response_consume( - wasi_http_0_2_0_types_borrow_incoming_response({handle_state_->handle}), &body)) { + if (!wasi_http_0_2_0_types_method_incoming_response_consume(borrow, &body)) { return Result::err(154); } - body_ = new HttpIncomingBody(body.__handle); + body_ = new HttpIncomingBody(std::unique_ptr(new IncomingBodyHandle(body))); } return Result::ok(body_); } -HttpOutgoingResponse::HttpOutgoingResponse(HandleState *state) { this->handle_state_ = state; } +HttpOutgoingResponse::HttpOutgoingResponse(std::unique_ptr state) { this->handle_state_ = std::move(state); } -HttpOutgoingResponse *HttpOutgoingResponse::make(const uint16_t status, HttpHeaders *headers) { - wasi_http_0_2_0_types_own_headers_t owned{headers->handle_state_->handle}; - auto handle = wasi_http_0_2_0_types_constructor_outgoing_response(owned); - auto borrow = wasi_http_0_2_0_types_borrow_outgoing_response(handle); +HttpOutgoingResponse *HttpOutgoingResponse::make(const uint16_t status, unique_ptr headers) { + auto owned_headers = WASIHandle::cast(headers->handle_state_.get())->take(); + auto handle = wasi_http_0_2_0_types_constructor_outgoing_response(owned_headers); - auto *state = new HandleState(handle.__handle); - auto *resp = new HttpOutgoingResponse(state); + auto *state = new WASIHandle(handle); + auto *resp = new HttpOutgoingResponse(std::unique_ptr(state)); // Set the status if (status != 200) { - // TODO: handle success result - wasi_http_0_2_0_types_method_outgoing_response_set_status_code(borrow, status); + // The DOM implementation is expected to have validated the status code already. + MOZ_RELEASE_ASSERT(wasi_http_0_2_0_types_method_outgoing_response_set_status_code(state->borrow(), status)); } - // Freshen the headers handle to point to an immutable version of the outgoing headers. - headers->handle_state_->handle = - wasi_http_0_2_0_types_method_outgoing_response_headers(borrow).__handle; - resp->status_ = status; - resp->headers_ = headers; - return resp; } -Result HttpOutgoingResponse::headers() { - if (!valid()) { - return Result::err(154); +Result HttpOutgoingResponse::headers() { + if (!headers_) { + if (!valid()) { + return Result::err(154); + } + auto borrow = Borrow(handle_state_.get()); + auto res = wasi_http_0_2_0_types_method_outgoing_response_headers(borrow); + auto state = new WASIHandle(res); + headers_ = new HttpHeadersReadOnly(std::unique_ptr(state)); } - return Result::ok(headers_); + + return Result::ok(headers_); } Result HttpOutgoingResponse::body() { typedef Result Res; - MOZ_ASSERT(valid()); if (!this->body_) { + auto borrow = Borrow(handle_state_.get()); outgoing_body_t body; - if (!wasi_http_0_2_0_types_method_outgoing_response_body( - wasi_http_0_2_0_types_borrow_outgoing_response({handle_state_->handle}), &body)) { + if (!wasi_http_0_2_0_types_method_outgoing_response_body(borrow, &body)) { return Res::err(154); } - this->body_ = new HttpOutgoingBody(body.__handle); + body_ = new HttpOutgoingBody(std::unique_ptr(new OutgoingBodyHandle(body))); } return Res::ok(this->body_); } Result HttpOutgoingResponse::status() { return Result::ok(status_); } -Result HttpOutgoingResponse::send(ResponseOutparam out_param) { - // Drop the headers that we eagerly grab in the factory function - wasi_http_0_2_0_types_fields_drop_own({this->headers_->handle_state_->handle}); - - wasi_http_0_2_0_types_result_own_outgoing_response_error_code_t result; - - result.is_err = false; - result.val.ok = {this->handle_state_->handle}; - - wasi_http_0_2_0_types_static_response_outparam_set({out_param}, &result); - - return {}; +HttpIncomingRequest::HttpIncomingRequest(std::unique_ptr state) { + handle_state_ = std::move(state); } -HttpIncomingRequest::HttpIncomingRequest(Handle handle) { handle_state_ = new HandleState(handle); } - Result HttpIncomingRequest::method() { if (method_.empty()) { if (!valid()) { return Result::err(154); } } + auto borrow = Borrow(handle_state_.get()); wasi_http_0_2_0_types_method_t method; - wasi_http_0_2_0_types_method_incoming_request_method( - borrow_incoming_request_t(handle_state_->handle), &method); + wasi_http_0_2_0_types_method_incoming_request_method(borrow, &method); if (method.tag != WASI_HTTP_0_2_0_TYPES_METHOD_OTHER) { method_ = std::string(http_method_names[method.tag], strlen(http_method_names[method.tag])); } else { @@ -963,17 +1201,18 @@ Result HttpIncomingRequest::method() { return Result::ok(method_); } -Result HttpIncomingRequest::headers() { +Result HttpIncomingRequest::headers() { if (!headers_) { if (!valid()) { - return Result::err(154); + return Result::err(154); } - borrow_incoming_request_t borrow(handle_state_->handle); + auto borrow = Borrow(handle_state_.get()); auto res = wasi_http_0_2_0_types_method_incoming_request_headers(borrow); - headers_ = new HttpHeaders(res.__handle); + auto state = new WASIHandle(res); + headers_ = new HttpHeadersReadOnly(std::unique_ptr(state)); } - return Result::ok(headers_); + return Result::ok(headers_); } Result HttpIncomingRequest::body() { @@ -981,14 +1220,44 @@ Result HttpIncomingRequest::body() { if (!valid()) { return Result::err(154); } + auto borrow = Borrow(handle_state_.get()); incoming_body_t body; - if (!wasi_http_0_2_0_types_method_incoming_request_consume( - borrow_incoming_request_t(handle_state_->handle), &body)) { + if (!wasi_http_0_2_0_types_method_incoming_request_consume(borrow, &body)) { return Result::err(154); } - body_ = new HttpIncomingBody(body.__handle); + body_ = new HttpIncomingBody(std::unique_ptr(new IncomingBodyHandle(body))); } return Result::ok(body_); } } // namespace host_api + +static host_api::HttpIncomingRequest::RequestHandler REQUEST_HANDLER = nullptr; +static exports_wasi_http_response_outparam RESPONSE_OUT; + +void host_api::HttpIncomingRequest::set_handler(RequestHandler handler) { + MOZ_ASSERT(!REQUEST_HANDLER); + REQUEST_HANDLER = handler; +} + +host_api::Result host_api::HttpOutgoingResponse::send() { + wasi_http_0_2_0_types_result_own_outgoing_response_error_code_t result; + + auto own = WASIHandle::cast(this->handle_state_.get())->take(); + + result.is_err = false; + result.val.ok = own; + + wasi_http_0_2_0_types_static_response_outparam_set(RESPONSE_OUT, &result); + + return {}; +} + +void exports_wasi_http_incoming_handler(exports_wasi_http_incoming_request request_handle, + exports_wasi_http_response_outparam response_out) { + RESPONSE_OUT = response_out; + auto state = new WASIHandle(request_handle); + auto *request = new host_api::HttpIncomingRequest(std::unique_ptr(state)); + auto res = REQUEST_HANDLER(request); + MOZ_RELEASE_ASSERT(res); +} diff --git a/include/extension-api.h b/include/extension-api.h index 98a47838..0b4e7b68 100644 --- a/include/extension-api.h +++ b/include/extension-api.h @@ -38,6 +38,9 @@ class Engine { JSContext *cx(); HandleObject global(); + /// Initialize the engine with the given filename + bool initialize(const char * filename); + /** * Define a new builtin module * @@ -62,6 +65,11 @@ class Engine { */ void enable_module_mode(bool enable); bool eval_toplevel(const char *path, MutableHandleValue result); + bool eval_toplevel(JS::SourceText &source, const char *path, + MutableHandleValue result); + + bool is_preinitializing(); + bool toplevel_evaluated(); /** * Run the async event loop as long as there's interest registered in keeping it running. @@ -112,6 +120,9 @@ class Engine { void dump_promise_rejection(HandleValue reason, HandleObject promise, FILE *fp); }; + +typedef bool (*TaskCompletionCallback)(JSContext* cx, HandleObject receiver); + class AsyncTask { protected: PollableHandle handle_ = -1; diff --git a/include/host_api.h b/include/host_api.h index 4e8abba7..55fa0e89 100644 --- a/include/host_api.h +++ b/include/host_api.h @@ -198,33 +198,25 @@ struct HostBytes final { operator std::span() const { return std::span(this->ptr.get(), this->len); } }; -/// The type of handles used by the host interface. -typedef int32_t Handle; - -/// An abstract base class to be used in classes representing host resources. +/// An opaque class to be used in classes representing host resources. /// /// Some host resources have different requirements for their client-side representation -/// depending on the host API. To accommodate this, we introduce a base class to use for -/// all of them, which the API-specific implementation can subclass as needed. -class HandleState { -public: - Handle handle; - HandleState() = delete; - explicit HandleState(Handle handle) : handle{handle} {} - virtual ~HandleState() = default; - - bool valid() const { return handle != -1; } -}; +/// depending on the host API. To accommodate this, we introduce an opaque class to use for +/// all of them, which the API-specific implementation can define as needed. +class HandleState; class Resource { protected: - HandleState *handle_state_; + std::unique_ptr handle_state_ = nullptr; public: - virtual ~Resource() = default; + virtual ~Resource(); - /// Returns true when this resource handle is valid. - virtual bool valid() const { return this->handle_state_ != nullptr; } + typedef uint8_t HandleNS; + static HandleNS next_handle_ns(const char* ns_name); + + /// Returns true if this resource handle has been initialized and is still valid. + bool valid() const; }; class Pollable : public Resource { @@ -238,10 +230,12 @@ class Pollable : public Resource { virtual void unsubscribe() = 0; }; +void block_on_pollable_handle(PollableHandle handle); + class HttpIncomingBody final : public Pollable { public: HttpIncomingBody() = delete; - explicit HttpIncomingBody(Handle handle); + explicit HttpIncomingBody(std::unique_ptr handle); class ReadResult final { public: @@ -267,7 +261,7 @@ class HttpIncomingBody final : public Pollable { class HttpOutgoingBody final : public Pollable { public: HttpOutgoingBody() = delete; - explicit HttpOutgoingBody(Handle handle); + explicit HttpOutgoingBody(std::unique_ptr handle); /// Get the body's stream's current capacity. Result capacity(); @@ -287,7 +281,8 @@ class HttpOutgoingBody final : public Pollable { Result write_all(const uint8_t *bytes, size_t len); /// Append an HttpIncomingBody to this one. - Result append(api::Engine *engine, HttpIncomingBody *incoming); + Result append(api::Engine *engine, HttpIncomingBody *other, + api::TaskCompletionCallback callback, HandleObject callback_receiver); /// Close this handle, and reset internal state to invalid. Result close(); @@ -310,10 +305,12 @@ class HttpBodyPipe { }; class HttpIncomingResponse; +class HttpHeaders; + class FutureHttpIncomingResponse final : public Pollable { public: FutureHttpIncomingResponse() = delete; - explicit FutureHttpIncomingResponse(Handle handle); + explicit FutureHttpIncomingResponse(std::unique_ptr handle); /// Returns the response if it is ready, or `nullopt` if it is not. Result> maybe_response(); @@ -322,36 +319,83 @@ class FutureHttpIncomingResponse final : public Pollable { void unsubscribe() override; }; -class HttpHeaders final : public Resource { +enum class HttpHeadersGuard { + None, + Request, + Response, +}; + +class HttpHeadersReadOnly : public Resource { friend HttpIncomingResponse; friend HttpIncomingRequest; friend HttpOutgoingResponse; friend HttpOutgoingRequest; + friend HttpHeaders; + +protected: + // It's never valid to create an HttpHeadersReadOnly without a handle, + // but a subclass can create a handle and then assign it. + explicit HttpHeadersReadOnly(); public: - HttpHeaders(); - explicit HttpHeaders(Handle handle); - explicit HttpHeaders(const vector>> &entries); - HttpHeaders(const HttpHeaders &headers); + explicit HttpHeadersReadOnly(std::unique_ptr handle); + HttpHeadersReadOnly(const HttpHeadersReadOnly &headers) = delete; + + /// Clone the headers, while removing the headers not passing the given `guard`, as specified + /// here: https://fetch.spec.whatwg.org/#headers-validate. + HttpHeaders* clone(HttpHeadersGuard guard); + + virtual bool is_writable() { return false; }; + virtual HttpHeaders* as_writable() { + MOZ_ASSERT_UNREACHABLE(); + return nullptr; + }; Result>> entries() const; Result> names() const; Result>> get(string_view name) const; + Result has(string_view name) const; +}; + +class HttpHeaders final : public HttpHeadersReadOnly { + friend HttpIncomingResponse; + friend HttpIncomingRequest; + friend HttpOutgoingResponse; + friend HttpOutgoingRequest; + + HttpHeadersGuard guard_; + + HttpHeaders(HttpHeadersGuard guard, std::unique_ptr handle); + +public: + HttpHeaders() = delete; + explicit HttpHeaders(HttpHeadersGuard guard); + explicit HttpHeaders(HttpHeadersGuard guard, const HttpHeadersReadOnly &headers); + + static Result FromEntries(HttpHeadersGuard guard, + vector> &entries); + + bool is_writable() override { return true; }; + HttpHeaders* as_writable() override { + return this; + }; Result set(string_view name, string_view value); Result append(string_view name, string_view value); Result remove(string_view name); + + static bool check_guard(HttpHeadersGuard guard, string_view header_name); }; class HttpRequestResponseBase : public Resource { protected: - HttpHeaders *headers_ = nullptr; + HttpHeadersReadOnly *headers_ = nullptr; std::string *_url = nullptr; public: ~HttpRequestResponseBase() override = default; - virtual Result headers() = 0; + virtual Result headers() = 0; virtual string_view url(); virtual bool is_incoming() = 0; @@ -393,31 +437,35 @@ class HttpRequest : public HttpRequestResponseBase { class HttpIncomingRequest final : public HttpRequest, public HttpIncomingBodyOwner { public: + using RequestHandler = bool (*)(HttpIncomingRequest* request); + HttpIncomingRequest() = delete; - explicit HttpIncomingRequest(Handle handle); + explicit HttpIncomingRequest(std::unique_ptr handle); bool is_incoming() override { return true; } bool is_request() override { return true; } [[nodiscard]] Result method() override; - Result headers() override; + Result headers() override; Result body() override; + + static void set_handler(RequestHandler handler); }; class HttpOutgoingRequest final : public HttpRequest, public HttpOutgoingBodyOwner { - HttpOutgoingRequest(HandleState *state); + HttpOutgoingRequest(std::unique_ptr handle); public: HttpOutgoingRequest() = delete; - static HttpOutgoingRequest *make(string_view method, optional url, - HttpHeaders *headers); + static HttpOutgoingRequest *make(string_view method_str, optional url_str, + std::unique_ptr headers); bool is_incoming() override { return false; } bool is_request() override { return true; } [[nodiscard]] Result method() override; - Result headers() override; + Result headers() override; Result body() override; Result send(); @@ -435,34 +483,32 @@ class HttpResponse : public HttpRequestResponseBase { class HttpIncomingResponse final : public HttpResponse, public HttpIncomingBodyOwner { public: HttpIncomingResponse() = delete; - explicit HttpIncomingResponse(Handle handle); + explicit HttpIncomingResponse(std::unique_ptr handle); bool is_incoming() override { return true; } bool is_request() override { return false; } - Result headers() override; + Result headers() override; Result body() override; [[nodiscard]] Result status() override; }; class HttpOutgoingResponse final : public HttpResponse, public HttpOutgoingBodyOwner { - HttpOutgoingResponse(HandleState *state); + HttpOutgoingResponse(std::unique_ptr handle); public: - using ResponseOutparam = Handle; - HttpOutgoingResponse() = delete; - static HttpOutgoingResponse *make(uint16_t status, HttpHeaders *headers); + static HttpOutgoingResponse *make(const uint16_t status, unique_ptr headers); bool is_incoming() override { return false; } bool is_request() override { return false; } - Result headers() override; + Result headers() override; Result body() override; [[nodiscard]] Result status() override; - Result send(ResponseOutparam out_param); + Result send(); }; class Random final { diff --git a/runtime/decode.cpp b/runtime/decode.cpp new file mode 100644 index 00000000..2bd7daf6 --- /dev/null +++ b/runtime/decode.cpp @@ -0,0 +1,10 @@ +#include "encode.h" + +namespace core { + +JSString* decode(JSContext* cx, string_view str) { + JS::UTF8Chars ret_chars(str.data(), str.length()); + return JS_NewStringCopyUTF8N(cx, ret_chars); +} + +} // namespace core diff --git a/runtime/decode.h b/runtime/decode.h new file mode 100644 index 00000000..e473fcd7 --- /dev/null +++ b/runtime/decode.h @@ -0,0 +1,10 @@ +#ifndef JS_COMPUTE_RUNTIME_DECODE_H +#define JS_COMPUTE_RUNTIME_DECODE_H + +namespace core { + +JSString* decode(JSContext *cx, string_view str); + +} // namespace core + +#endif diff --git a/runtime/engine.cpp b/runtime/engine.cpp index 8286cdf9..a61c7192 100644 --- a/runtime/engine.cpp +++ b/runtime/engine.cpp @@ -201,6 +201,8 @@ bool fix_math_random(JSContext *cx, HandleObject global) { return JS_DefineFunctions(cx, math, funs); } +static api::Engine *ENGINE; + bool init_js() { JS_Init(); @@ -253,8 +255,9 @@ bool init_js() { // generating bytecode for functions. // https://searchfox.org/mozilla-central/rev/5b2d2863bd315f232a3f769f76e0eb16cdca7cb0/js/public/CompileOptions.h#571-574 opts->setForceFullParse(); - scriptLoader = new ScriptLoader(cx, opts); + scriptLoader = new ScriptLoader(ENGINE, opts); + // TODO: restore in a way that doesn't cause a dependency on the Performance builtin in the core runtime. // builtins::Performance::timeOrigin.emplace( // std::chrono::high_resolution_clock::now()); @@ -329,6 +332,7 @@ static void abort(JSContext *cx, const char *description) { api::Engine::Engine() { // total_compute = 0; + ENGINE = this; bool result = init_js(); MOZ_RELEASE_ASSERT(result); JS::EnterRealm(cx(), global()); @@ -338,6 +342,46 @@ api::Engine::Engine() { JSContext *api::Engine::cx() { return CONTEXT; } HandleObject api::Engine::global() { return GLOBAL; } + +extern bool install_builtins(api::Engine *engine); + +#ifdef DEBUG +static bool trap(JSContext *cx, unsigned argc, JS::Value *vp) { + JS::CallArgs args = CallArgsFromVp(argc, vp); + ENGINE->dump_value(args.get(0)); + MOZ_ASSERT(false, "trap function called"); + return false; +} +#endif + +bool api::Engine::initialize(const char *filename) { + if (!install_builtins(this)) { + return false; + } + +#ifdef DEBUG + if (!JS_DefineFunction(cx(), global(), "trap", trap, 1, 0)) { + return false; + } +#endif + + if (!filename || strlen(filename) == 0) { + return true; + } + + RootedValue result(cx()); + + if (!eval_toplevel(filename, &result)) { + if (JS_IsExceptionPending(cx())) { + dump_pending_exception("pre-initializing"); + } + return false; + } + + js::ResetMathRandomSeed(cx()); + + return true; +} void api::Engine::enable_module_mode(bool enable) { scriptLoader->enable_module_mode(enable); } @@ -353,11 +397,14 @@ bool api::Engine::define_builtin_module(const char* id, HandleValue builtin) { return scriptLoader->define_builtin_module(id, builtin); } -bool api::Engine::eval_toplevel(const char *path, MutableHandleValue result) { +static bool TOPLEVEL_EVALUATED = false; + +bool api::Engine::eval_toplevel(JS::SourceText &source, const char *path, + MutableHandleValue result) { JSContext *cx = CONTEXT; RootedValue ns(cx); RootedValue tla_promise(cx); - if (!scriptLoader->load_top_level_script(path, &ns, &tla_promise)) { + if (!scriptLoader->eval_top_level_script(path, source, &ns, &tla_promise)) { return false; } @@ -401,8 +448,10 @@ bool api::Engine::eval_toplevel(const char *path, MutableHandleValue result) { // the shrinking GC causes them to be intermingled with other objects. I.e., // writes become more fragmented due to the shrinking GC. // https://github.com/fastly/js-compute-runtime/issues/224 - JS::PrepareForFullGC(cx); - JS::NonIncrementalGC(cx, JS::GCOptions::Normal, JS::GCReason::API); + if (isWizening()) { + JS::PrepareForFullGC(cx); + JS::NonIncrementalGC(cx, JS::GCOptions::Normal, JS::GCReason::API); + } // Ignore the first GC, but then print all others, because ideally GCs // should be rare, and developers should know about them. @@ -410,8 +459,24 @@ bool api::Engine::eval_toplevel(const char *path, MutableHandleValue result) { // dedicated log target for telemetry messages like this. JS_SetGCCallback(cx, gc_callback, nullptr); + TOPLEVEL_EVALUATED = true; + return true; } +bool api::Engine::is_preinitializing() { return isWizening(); } + +bool api::Engine::eval_toplevel(const char *path, MutableHandleValue result) { + JS::SourceText source; + if (!scriptLoader->load_script(CONTEXT, path, source)) { + return false; + } + + return eval_toplevel(source, path, result); +} + +bool api::Engine::toplevel_evaluated() { + return TOPLEVEL_EVALUATED; +} bool api::Engine::run_event_loop() { return core::EventLoop::run_event_loop(this, 0); diff --git a/runtime/js.cpp b/runtime/js.cpp index ba050fb4..49a0d4f0 100644 --- a/runtime/js.cpp +++ b/runtime/js.cpp @@ -16,42 +16,10 @@ bool WIZENED = false; extern "C" void __wasm_call_ctors(); api::Engine *engine; -extern bool install_builtins(api::Engine *engine); - -#ifdef DEBUG -static bool trap(JSContext *cx, unsigned argc, JS::Value *vp) { - JS::CallArgs args = CallArgsFromVp(argc, vp); - engine->dump_value(args.get(0)); - MOZ_ASSERT(false, "trap function called"); - return false; -} -#endif bool initialize(const char *filename) { auto engine = api::Engine(); - - if (!install_builtins(&engine)) { - return false; - } - -#ifdef DEBUG - if (!JS_DefineFunction(engine.cx(), engine.global(), "trap", trap, 1, 0)) { - return false; - } -#endif - - RootedValue result(engine.cx()); - - if (!engine.eval_toplevel(filename, &result)) { - if (JS_IsExceptionPending(engine.cx())) { - engine.dump_pending_exception("pre-initializing"); - } - return false; - } - - js::ResetMathRandomSeed(engine.cx()); - - return true; + return engine.initialize(filename); } extern "C" bool exports_wasi_cli_run_run() { diff --git a/runtime/script_loader.cpp b/runtime/script_loader.cpp index ad1f0a5a..fa4a472e 100644 --- a/runtime/script_loader.cpp +++ b/runtime/script_loader.cpp @@ -4,12 +4,12 @@ #include #include #include -#include #include #include +#include #include -static JSContext* CONTEXT; +static api::Engine* ENGINE; static ScriptLoader* SCRIPT_LOADER; JS::PersistentRootedObject moduleRegistry; JS::PersistentRootedObject builtinModules; @@ -135,50 +135,61 @@ static const char* resolve_path(const char* path, const char* base, size_t base_ static bool load_script(JSContext *cx, const char *script_path, const char* resolved_path, JS::SourceText &script); -static JSObject* get_module(JSContext* cx, const char* specifier, const char* resolved_path, - const JS::CompileOptions &opts) { - RootedString resolved_path_str(cx, JS_NewStringCopyZ(cx, resolved_path)); - if (!resolved_path_str) { +static JSObject* get_module(JSContext* cx, JS::SourceText &source, + const char* resolved_path, const JS::CompileOptions &opts) { + RootedObject module(cx, JS::CompileModule(cx, opts, source)); + if (!module) { return nullptr; } + RootedValue module_val(cx, ObjectValue(*module)); - RootedValue module_val(cx); - RootedValue resolved_path_val(cx, StringValue(resolved_path_str)); - if (!JS::MapGet(cx, moduleRegistry, resolved_path_val, &module_val)) { + RootedObject info(cx, JS_NewPlainObject(cx)); + if (!info) { return nullptr; } - if (!module_val.isUndefined()) { - return &module_val.toObject(); + RootedString resolved_path_str(cx, JS_NewStringCopyZ(cx, resolved_path)); + if (!resolved_path_str) { + return nullptr; } + RootedValue resolved_path_val(cx, StringValue(resolved_path_str)); - JS::SourceText source; - if (!load_script(cx, specifier, resolved_path, source)) { + if (!JS_DefineProperty(cx, info, "id", resolved_path_val, JSPROP_ENUMERATE)) { return nullptr; } - RootedObject module(cx, JS::CompileModule(cx, opts, source)); - if (!module) { + SetModulePrivate(module, ObjectValue(*info)); + + if (!MapSet(cx, moduleRegistry, resolved_path_val, module_val)) { return nullptr; } - module_val.setObject(*module); - RootedObject info(cx, JS_NewPlainObject(cx)); - if (!info) { + return module; +} + +static JSObject* get_module(JSContext* cx, const char* specifier, const char* resolved_path, + const JS::CompileOptions &opts) { + RootedString resolved_path_str(cx, JS_NewStringCopyZ(cx, resolved_path)); + if (!resolved_path_str) { return nullptr; } + RootedValue resolved_path_val(cx, StringValue(resolved_path_str)); - if (!JS_DefineProperty(cx, info, "id", resolved_path_val, JSPROP_ENUMERATE)) { + RootedValue module_val(cx); + if (!JS::MapGet(cx, moduleRegistry, resolved_path_val, &module_val)) { return nullptr; } - SetModulePrivate(module, ObjectValue(*info)); + if (!module_val.isUndefined()) { + return &module_val.toObject(); + } - if (!MapSet(cx, moduleRegistry, resolved_path_val, module_val)) { + JS::SourceText source; + if (!load_script(cx, specifier, resolved_path, source)) { return nullptr; } - return module; + return get_module(cx, source, resolved_path, opts); } static JSObject* get_builtin_module(JSContext* cx, HandleValue id, HandleObject builtin) { @@ -334,11 +345,12 @@ bool module_metadata_hook(JSContext* cx, HandleValue referencingPrivate, HandleO return true; } -ScriptLoader::ScriptLoader(JSContext *cx, JS::CompileOptions *opts) { +ScriptLoader::ScriptLoader(api::Engine* engine, JS::CompileOptions *opts) { MOZ_ASSERT(!SCRIPT_LOADER); + ENGINE = engine; SCRIPT_LOADER = this; - CONTEXT = cx; COMPILE_OPTS = opts; + JSContext* cx = engine->cx(); moduleRegistry.init(cx, JS::NewMapObject(cx)); builtinModules.init(cx, JS::NewMapObject(cx)); MOZ_RELEASE_ASSERT(moduleRegistry); @@ -349,21 +361,22 @@ ScriptLoader::ScriptLoader(JSContext *cx, JS::CompileOptions *opts) { } bool ScriptLoader::define_builtin_module(const char* id, HandleValue builtin) { - RootedString id_str(CONTEXT, JS_NewStringCopyZ(CONTEXT, id)); + JSContext* cx = ENGINE->cx(); + RootedString id_str(cx, JS_NewStringCopyZ(cx, id)); if (!id_str) { return false; } - RootedValue module_val(CONTEXT); - RootedValue id_val(CONTEXT, StringValue(id_str)); + RootedValue module_val(cx); + RootedValue id_val(cx, StringValue(id_str)); bool already_exists; - if (!MapHas(CONTEXT, builtinModules, id_val, &already_exists)) { + if (!MapHas(cx, builtinModules, id_val, &already_exists)) { return false; } if (already_exists) { fprintf(stderr, "Unable to define builtin %s, as it already exists", id); return false; } - if (!MapSet(CONTEXT, builtinModules, id_val, builtin)) { + if (!MapSet(cx, builtinModules, id_val, builtin)) { return false; } return true; @@ -377,8 +390,8 @@ static bool load_script(JSContext *cx, const char *specifier, const char* resolv JS::SourceText &script) { FILE *file = fopen(resolved_path, "r"); if (!file) { - std::cerr << "Error opening file " << specifier << " (resolved to " << resolved_path << ")" - << std::endl; + std::cerr << "Error opening file " << specifier << " (resolved to " << resolved_path << "): " + << std::strerror(errno) << std::endl; return false; } @@ -409,26 +422,31 @@ static bool load_script(JSContext *cx, const char *specifier, const char* resolv bool ScriptLoader::load_script(JSContext *cx, const char *script_path, JS::SourceText &script) { - auto resolved_path = resolve_path(script_path, BASE_PATH, strlen(BASE_PATH)); + const char *resolved_path; + if (!BASE_PATH) { + auto last_slash = strrchr(script_path, '/'); + size_t base_len; + if (last_slash) { + last_slash++; + base_len = last_slash - script_path; + BASE_PATH = new char[base_len + 1]; + MOZ_ASSERT(BASE_PATH); + strncpy(BASE_PATH, script_path, base_len); + BASE_PATH[base_len] = '\0'; + } else { + BASE_PATH = strdup("./"); + } + resolved_path = script_path; + } else { + resolved_path = resolve_path(script_path, BASE_PATH, strlen(BASE_PATH)); + } + return ::load_script(cx, script_path, resolved_path, script); } -bool ScriptLoader::load_top_level_script(const char *path, MutableHandleValue result, MutableHandleValue tla_promise) { - JSContext *cx = CONTEXT; - - MOZ_ASSERT(!BASE_PATH); - auto last_slash = strrchr(path, '/'); - size_t base_len; - if (last_slash) { - last_slash++; - base_len = last_slash - path; - BASE_PATH = new char[base_len + 1]; - MOZ_ASSERT(BASE_PATH); - strncpy(BASE_PATH, path, base_len); - BASE_PATH[base_len] = '\0'; - } else { - BASE_PATH = strdup("./"); - } +bool ScriptLoader::eval_top_level_script(const char *path, JS::SourceText &source, + MutableHandleValue result, MutableHandleValue tla_promise) { + JSContext *cx = ENGINE->cx(); JS::CompileOptions opts(cx, *COMPILE_OPTS); opts.setFileAndLine(strip_base(path, BASE_PATH), 1); @@ -440,7 +458,7 @@ bool ScriptLoader::load_top_level_script(const char *path, MutableHandleValue re // (Whereas disabling it during execution below meaningfully increases it, // which is why this is scoped to just compilation.) JS::AutoDisableGenerationalGC noGGC(cx); - module = get_module(cx, path, path, opts); + module = get_module(cx, source, path, opts); if (!module) { return false; } @@ -448,10 +466,6 @@ bool ScriptLoader::load_top_level_script(const char *path, MutableHandleValue re return false; } } else { - JS::SourceText source; - if (!::load_script(cx, path, path, source)) { - return false; - } // See comment above about disabling GGC during compilation. JS::AutoDisableGenerationalGC noGGC(cx); script = JS::Compile(cx, opts, source); @@ -470,8 +484,10 @@ bool ScriptLoader::load_top_level_script(const char *path, MutableHandleValue re // optimizing them for compactness makes sense and doesn't fragment writes // later on. // https://github.com/fastly/js-compute-runtime/issues/222 - JS::PrepareForFullGC(cx); - JS::NonIncrementalGC(cx, JS::GCOptions::Shrink, JS::GCReason::API); + if (ENGINE->is_preinitializing()) { + JS::PrepareForFullGC(cx); + JS::NonIncrementalGC(cx, JS::GCOptions::Shrink, JS::GCReason::API); + } // Execute the top-level module script. if (!MODULE_MODE) { diff --git a/runtime/script_loader.h b/runtime/script_loader.h index 4a645a4c..e7022ef6 100644 --- a/runtime/script_loader.h +++ b/runtime/script_loader.h @@ -14,12 +14,13 @@ class ScriptLoader { public: - ScriptLoader(JSContext* cx, JS::CompileOptions* opts); + ScriptLoader(api::Engine* engine, JS::CompileOptions* opts); ~ScriptLoader(); bool define_builtin_module(const char* id, HandleValue builtin); void enable_module_mode(bool enable); - bool load_top_level_script(const char *path, MutableHandleValue result, MutableHandleValue tla_promise); + bool eval_top_level_script(const char *path, JS::SourceText &source, + MutableHandleValue result, MutableHandleValue tla_promise); bool load_script(JSContext* cx, const char *script_path, JS::SourceText &script); }; diff --git a/spin.toml b/spin.toml index c63db163..a76fa6cd 100644 --- a/spin.toml +++ b/spin.toml @@ -12,7 +12,7 @@ component = "js-component" [component.js-component] source = "smoke-test.wasm" -allowed_outbound_hosts = ["https://fermyon.com/", "https://example.com:443"] +allowed_outbound_hosts = ["https://fermyon.com/", "https://example.com:443", "http://localhost:3000"] [component.js-component.build] command = "" watch = ["smoke-test.wasm"] diff --git a/tests/wpt-harness/run-wpt.mjs b/tests/wpt-harness/run-wpt.mjs index 0200109e..bad8b455 100644 --- a/tests/wpt-harness/run-wpt.mjs +++ b/tests/wpt-harness/run-wpt.mjs @@ -14,6 +14,7 @@ function relativePath(path) { return new URL(path, import.meta.url).pathname; } +const SKIP_PREFIX = "SKIP "; const SLOW_PREFIX = "SLOW "; const config = { @@ -280,9 +281,9 @@ async function startWptServer(root, logLevel) { async function ensureWasmtime(config, logLevel) { if (config.external) { - let wasmtime = { ...config }; + let wasmtime = { ...config, host: `http://${config.addr}/` }; if (logLevel > LogLevel.Quiet) { - console.info(`Using external Wasmtime host ${config.host}`); + console.info(`Using external Wasmtime host ${wasmtime.host}`); } return wasmtime; } else { @@ -379,6 +380,7 @@ function getTests(pattern) { console.log(`Loading tests list from ${config.tests.list}`); let testPaths = JSON.parse(readFileSync(config.tests.list, { encoding: "utf-8" })); + testPaths = testPaths.filter(path => !path.startsWith(SKIP_PREFIX)); let totalCount = testPaths.length; if (config.skipSlowTests) { testPaths = testPaths.filter(path => !path.startsWith(SLOW_PREFIX)); @@ -412,10 +414,11 @@ async function runTests(testPaths, wasmtime, resultCallback, errorCallback) { let t1 = Date.now(); let response, body; try { - response = await fetch(`${wasmtime.host}${path}`); - body = await response.text(); + if (config.logLevel >= LogLevel.VeryVerbose) { + console.log(`Sending request to ${wasmtime.host}${path}`); + } } catch (e) { - shutdown(`Wasmtime bailed while running test ${path}`); + shutdown(`Error while running test ${path}: ${e}`); } let stats = { count: 0, @@ -428,6 +431,8 @@ async function runTests(testPaths, wasmtime, resultCallback, errorCallback) { totalStats.duration += stats.duration; let results; try { + response = await fetch(`${wasmtime.host}${path}`); + body = await response.text(); results = JSON.parse(body); if (response.status == 500) { throw {message: results.error.message, stack: results.error.stack}; diff --git a/tests/wpt-harness/tests.json b/tests/wpt-harness/tests.json index 2545d8de..686903c3 100644 --- a/tests/wpt-harness/tests.json +++ b/tests/wpt-harness/tests.json @@ -72,7 +72,7 @@ "fetch/api/headers/headers-record.any.js", "fetch/api/headers/headers-structure.any.js", "fetch/api/request/forbidden-method.any.js", - "fetch/api/request/request-bad-port.any.js", + "SKIP [tests restrictions we're not imposing] fetch/api/request/request-bad-port.any.js", "fetch/api/request/request-cache-default-conditional.any.js", "fetch/api/request/request-cache-default.any.js", "fetch/api/request/request-cache-force-cache.any.js", diff --git a/tests/wpt-harness/wpt.cmake b/tests/wpt-harness/wpt.cmake index f0d2933f..bfb541d2 100644 --- a/tests/wpt-harness/wpt.cmake +++ b/tests/wpt-harness/wpt.cmake @@ -1,7 +1,8 @@ enable_testing() -add_builtin(wpt_builtins SRC "${CMAKE_CURRENT_LIST_DIR}/wpt_builtins.cpp") -target_include_directories(wpt_builtins PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/builtins/web/") +add_builtin(wpt_support + SRC "${CMAKE_CURRENT_LIST_DIR}/wpt_builtins.cpp" + INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/builtins/web/") if(NOT DEFINED ENV{WPT_ROOT}) message(FATAL_ERROR "WPT_ROOT environment variable is not set") diff --git a/tests/wpt-harness/wpt_builtins.cpp b/tests/wpt-harness/wpt_builtins.cpp index ab83cfc5..d62566b9 100644 --- a/tests/wpt-harness/wpt_builtins.cpp +++ b/tests/wpt-harness/wpt_builtins.cpp @@ -32,7 +32,7 @@ const JSPropertySpec properties[] = { JS_PSGS("baseURL", baseURL_get, baseURL_set, JSPROP_ENUMERATE), JS_PS_END}; -namespace wpt_builtins { +namespace wpt_support { bool install(api::Engine* engine) { engine->enable_module_mode(false); From 994686815629e88ae497710d006dcfccb0568ed7 Mon Sep 17 00:00:00 2001 From: Till Schneidereit Date: Fri, 21 Jun 2024 16:59:41 +0200 Subject: [PATCH 03/28] Implement Response.redirect (#62) This also applies some cleanups to Response creation overall. --- builtins/web/fetch/request-response.cpp | 190 +++++++++--------------- builtins/web/fetch/request-response.h | 14 +- builtins/web/url.cpp | 15 +- builtins/web/url.h | 2 + crates/rust-url/rust-url.h | 5 + include/host_api.h | 5 + 6 files changed, 98 insertions(+), 133 deletions(-) diff --git a/builtins/web/fetch/request-response.cpp b/builtins/web/fetch/request-response.cpp index ceb2334d..42a9ebcd 100644 --- a/builtins/web/fetch/request-response.cpp +++ b/builtins/web/fetch/request-response.cpp @@ -2112,121 +2112,68 @@ bool Response::bodyUsed_get(JSContext *cx, unsigned argc, JS::Value *vp) { // https://fetch.spec.whatwg.org/#dom-response-redirect // [NewObject] static Response redirect(USVString url, optional unsigned short status = 302); -// bool Response::redirect(JSContext *cx, unsigned argc, JS::Value *vp) { -// JS::CallArgs args = JS::CallArgsFromVp(argc, vp); -// if (!args.requireAtLeast(cx, "redirect", 1)) { -// return false; -// } -// // auto url = args.get(0); -// // // 1. Let parsedURL be the result of parsing url with current settings object’s API base -// URL. -// // JS::RootedObject urlInstance( -// // cx, JS_NewObjectWithGivenProto(cx, &url::URL::class_, url::URL::proto_obj)); -// // if (!urlInstance) { -// // return false; -// // } -// // JS::RootedObject parsedURL( -// // cx, url::URL::create(cx, urlInstance, url, worker_location::WorkerLocation::url)); -// // // 2. If parsedURL is failure, then throw a TypeError. -// // if (!parsedURL) { -// // JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, -// JSMSG_RESPONSE_REDIRECT_INVALID_URI); -// // return false; -// // } -// // JS::RootedValue url_val(cx, JS::ObjectValue(*parsedURL)); -// // auto url_str = core::encode(cx, url_val); -// // if (!url_str) { -// // return false; -// // } -// // 3. If status is not a redirect status, then throw a RangeError. -// // A redirect status is a status that is 301, 302, 303, 307, or 308. -// auto statusVal = args.get(1); -// uint16_t status; -// if (statusVal.isUndefined()) { -// status = 302; -// } else { -// if (!JS::ToUint16(cx, statusVal, &status)) { -// return false; -// } -// } -// if (status != 301 && status != 302 && status != 303 && status != 307 && status != 308) { -// JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, -// JSMSG_RESPONSE_REDIRECT_INVALID_STATUS); return false; -// } -// // 4. Let responseObject be the result of creating a Response object, given a new response, -// // "immutable", and this’s relevant Realm. -// auto response_handle_res = host_api::HttpResp::make(); -// if (auto *err = response_handle_res.to_err()) { -// HANDLE_ERROR(cx, *err); -// return false; -// } - -// auto response_handle = response_handle_res.unwrap(); -// if (!response_handle.is_valid()) { -// return false; -// } +bool Response::redirect(JSContext *cx, unsigned argc, Value *vp) { + CallArgs args = JS::CallArgsFromVp(argc, vp); + if (!args.requireAtLeast(cx, "redirect", 1)) { + return false; + } -// auto make_res = host_api::HttpBody::make(response_handle); -// if (auto *err = make_res.to_err()) { -// HANDLE_ERROR(cx, *err); -// return false; -// } + // 1. Let parsedURL be the result of parsing url with current settings object’s API base + // URL. + jsurl::SpecString url_str = core::encode(cx, args.get(0)); + if (!url_str.data) { + return false; + } + auto parsedURL = new_jsurl_with_base(&url_str, url::URL::url(worker_location::WorkerLocation::url)); + if (!parsedURL) { + JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, + JSMSG_RESPONSE_REDIRECT_INVALID_URI); + return false; + } -// auto body = make_res.unwrap(); -// JS::RootedObject response_instance(cx, JS_NewObjectWithGivenProto(cx, &Response::class_, -// Response::proto_obj)); -// if (!response_instance) { -// return false; -// } -// JS::RootedObject response( -// cx, create(cx, response_instance, response_handle, body, false)); -// if (!response) { -// return false; -// } + // 3. If status is not a redirect status, then throw a RangeError. + // A redirect status is a status that is 301, 302, 303, 307, or 308. + auto statusVal = args.get(1); + uint16_t status; + if (statusVal.isUndefined()) { + status = 302; + } else { + if (!ToUint16(cx, statusVal, &status)) { + return false; + } + } + if (status != 301 && status != 302 && status != 303 && status != 307 && status != 308) { + JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, + JSMSG_RESPONSE_REDIRECT_INVALID_STATUS); + return false; + } -// // 5. Set responseObject’s response’s status to status. -// auto set_res = response_handle.set_status(status); -// if (auto *err = set_res.to_err()) { -// HANDLE_ERROR(cx, *err); -// return false; -// } -// // To ensure that we really have the same status value as the host, -// // we always read it back here. -// auto get_res = response_handle.get_status(); -// if (auto *err = get_res.to_err()) { -// HANDLE_ERROR(cx, *err); -// return false; -// } -// status = get_res.unwrap(); + // 4. Let responseObject be the result of creating a Response object, given a new response, + // "immutable", and this’s relevant Realm. + RootedObject responseObject(cx, create(cx)); + if (!responseObject) { + return false; + } -// JS::SetReservedSlot(response, static_cast(Slots::Status), JS::Int32Value(status)); -// JS::SetReservedSlot(response, static_cast(Slots::StatusMessage), -// JS::StringValue(JS_GetEmptyString(cx))); -// // 6. Let value be parsedURL, serialized and isomorphic encoded. -// // 7. Append (`Location`, value) to responseObject’s response’s header list. -// JS::RootedObject headers(cx); -// JS::RootedObject headersInstance( -// cx, JS_NewObjectWithGivenProto(cx, &Headers::class_, Headers::proto_obj)); -// if (!headersInstance) -// return false; + // 5. Set responseObject’s response’s status to status. + SetReservedSlot(responseObject, static_cast(Slots::Status), JS::Int32Value(status)); + SetReservedSlot(responseObject, static_cast(Slots::StatusMessage), + JS::StringValue(JS_GetEmptyString(cx))); -// headers = Headers::create(cx, headersInstance, Headers::Mode::ProxyToResponse, -// response); -// if (!headers) { -// return false; -// } -// // TODO: support use of baseURL -// // if (!Headers::maybe_add(cx, headers, "location", url_str.begin())) { -// // return false; -// // } -// JS::SetReservedSlot(response, static_cast(Slots::Headers), -// JS::ObjectValue(*headers)); JS::SetReservedSlot(response, -// static_cast(Slots::Redirected), JS::FalseValue()); -// // 8. Return responseObject. + // 6. Let value be parsedURL, serialized and isomorphic encoded. + // 7. Append (`Location`, value) to responseObject’s response’s header list. + RootedObject headers(cx, RequestOrResponse::headers(cx, responseObject)); + if (!headers) { + return false; + } + if (!Headers::set_if_undefined(cx, headers, "location", url_str)) { + return false; + } -// args.rval().setObjectOrNull(response); -// return true; -// } + // 8. Return responseObject. + args.rval().setObjectOrNull(responseObject); + return true; +} // namespace { // bool callbackCalled; @@ -2386,7 +2333,7 @@ bool Response::bodyUsed_get(JSContext *cx, unsigned argc, JS::Value *vp) { // } const JSFunctionSpec Response::static_methods[] = { - // JS_FN("redirect", redirect, 1, JSPROP_ENUMERATE), + JS_FN("redirect", redirect, 1, JSPROP_ENUMERATE), // JS_FN("json", json, 1, JSPROP_ENUMERATE), JS_FS_END, }; @@ -2476,14 +2423,11 @@ bool Response::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { return false; } - JS::RootedObject responseInstance(cx, JS_NewObjectForConstructor(cx, &class_, args)); - if (!responseInstance) { - return false; - } - JS::RootedObject response(cx, create(cx, responseInstance)); + JS::RootedObject response(cx, JS_NewObjectForConstructor(cx, &class_, args)); if (!response) { return false; } + init_slots(response); JS::SetReservedSlot(response, static_cast(Slots::Headers), JS::ObjectValue(*headers)); @@ -2550,8 +2494,16 @@ bool Response::init_class(JSContext *cx, JS::HandleObject global) { (type_error_atom = JS_AtomizeAndPinString(cx, "error")); } -JSObject *Response::create(JSContext *cx, JS::HandleObject response) { - MOZ_ASSERT(cx); +JSObject *Response::create(JSContext *cx){ + RootedObject self(cx, JS_NewObjectWithGivenProto(cx, &class_, proto_obj)); + if (!self) { + return nullptr; + } + init_slots(self); + return self; +} + +JSObject *Response::init_slots(HandleObject response) { MOZ_ASSERT(is_instance(response)); JS::SetReservedSlot(response, static_cast(Slots::Response), JS::PrivateValue(nullptr)); @@ -2564,8 +2516,8 @@ JSObject *Response::create(JSContext *cx, JS::HandleObject response) { return response; } -JSObject * Response::create_incoming(JSContext *cx, HandleObject obj, host_api::HttpIncomingResponse *response) { - RootedObject self(cx, create(cx, obj)); +JSObject * Response::create_incoming(JSContext *cx, host_api::HttpIncomingResponse *response) { + RootedObject self(cx, create(cx)); if (!self) { return nullptr; } diff --git a/builtins/web/fetch/request-response.h b/builtins/web/fetch/request-response.h index 0a807a18..79bb2732 100644 --- a/builtins/web/fetch/request-response.h +++ b/builtins/web/fetch/request-response.h @@ -204,9 +204,9 @@ class Response final : public BuiltinImpl { static bool init_class(JSContext *cx, JS::HandleObject global); static bool constructor(JSContext *cx, unsigned argc, JS::Value *vp); - static JSObject *create(JSContext *cx, JS::HandleObject response); - static JSObject* create_incoming(JSContext * cx, HandleObject self, - host_api::HttpIncomingResponse* response); + static JSObject *create(JSContext *cx); + static JSObject *init_slots(HandleObject response); + static JSObject* create_incoming(JSContext * cx, host_api::HttpIncomingResponse* response); static host_api::HttpResponse *response_handle(JSObject *obj); static uint16_t status(JSObject *obj); @@ -243,13 +243,7 @@ class ResponseFutureTask final : public api::AsyncTask { auto maybe_response = res.unwrap(); MOZ_ASSERT(maybe_response.has_value()); auto response = maybe_response.value(); - RootedObject response_obj( - cx, JS_NewObjectWithGivenProto(cx, &Response::class_, Response::proto_obj)); - if (!response_obj) { - return false; - } - - response_obj = Response::create_incoming(cx, response_obj, response); + RootedObject response_obj(cx, Response::create_incoming(cx, response)); if (!response_obj) { return false; } diff --git a/builtins/web/url.cpp b/builtins/web/url.cpp index b326a536..01ea261f 100644 --- a/builtins/web/url.cpp +++ b/builtins/web/url.cpp @@ -540,9 +540,13 @@ const JSPropertySpec URL::properties[] = { JS_PS_END, }; +const jsurl::JSUrl *URL::url(JSObject *self) { + MOZ_ASSERT(is_instance(self)); + return static_cast(JS::GetReservedSlot(self, Url).toPrivate()); +} + jsurl::SpecString URL::origin(JSContext *cx, JS::HandleObject self) { - auto *url = static_cast(JS::GetReservedSlot(self, Slots::Url).toPrivate()); - return jsurl::origin(url); + return jsurl::origin(url(self)); } bool URL::origin(JSContext *cx, JS::HandleObject self, JS::MutableHandleValue rval) { @@ -564,12 +568,15 @@ bool URL::searchParams_get(JSContext *cx, unsigned argc, JS::Value *vp) { JS::Value params_val = JS::GetReservedSlot(self, Slots::Params); JS::RootedObject params(cx); if (params_val.isNullOrUndefined()) { - auto *url = static_cast(JS::GetReservedSlot(self, Slots::Url).toPrivate()); JS::RootedObject url_search_params_instance( cx, JS_NewObjectWithGivenProto(cx, &URLSearchParams::class_, URLSearchParams::proto_obj)); if (!url_search_params_instance) return false; - params = URLSearchParams::create(cx, url_search_params_instance, url); + + // The const-cast here is okay because we while normally callers of URL::url mustn't mutate + // the returned object, URLSearchParams is intended to. + params = URLSearchParams::create(cx, url_search_params_instance, + const_cast(url(self))); if (!params) return false; JS::SetReservedSlot(self, Slots::Params, JS::ObjectValue(*params)); diff --git a/builtins/web/url.h b/builtins/web/url.h index 6e38dddf..085e5c82 100644 --- a/builtins/web/url.h +++ b/builtins/web/url.h @@ -103,7 +103,9 @@ class URL : public BuiltinImpl { static const unsigned ctor_length = 1; + static const jsurl::JSUrl *url(JSObject *self); static jsurl::SpecString origin(JSContext *cx, JS::HandleObject self); + static bool origin(JSContext *cx, JS::HandleObject self, JS::MutableHandleValue rval); static bool hash(JSContext *cx, JS::HandleObject self, JS::MutableHandleValue rval); static bool host(JSContext *cx, JS::HandleObject self, JS::MutableHandleValue rval); diff --git a/crates/rust-url/rust-url.h b/crates/rust-url/rust-url.h index 5706b3f4..4da6db1c 100644 --- a/crates/rust-url/rust-url.h +++ b/crates/rust-url/rust-url.h @@ -40,6 +40,11 @@ struct SpecString { cap(cap) {} + + /// Conversion to a `jsurl::SpecString`. + operator const std::string_view() const { + return std::string_view(reinterpret_cast(this->data), this->len); + } }; /// This type exists to transfer &str-likes over FFI. diff --git a/include/host_api.h b/include/host_api.h index 55fa0e89..54ec4f38 100644 --- a/include/host_api.h +++ b/include/host_api.h @@ -146,6 +146,11 @@ struct HostString final { return jsurl::SpecString(reinterpret_cast(this->ptr.release()), this->len, this->len); } + + /// Conversion to a `jsurl::SpecString`. + operator const jsurl::SpecString() const { + return jsurl::SpecString(reinterpret_cast(this->ptr.get()), this->len, this->len); + } }; struct HostBytes final { From 416798e55b59cc66399c4f3df8e297f9597406f6 Mon Sep 17 00:00:00 2001 From: Till Schneidereit Date: Fri, 21 Jun 2024 18:50:33 +0200 Subject: [PATCH 04/28] Improve handling of GC managed array buffers (#61) Specifically, some of the `noGC` guards had issues that could lead to panics during exception throwing, and some of the loops over multiple buffers where overly complex. --- builtins/web/base64.cpp | 38 ++++++----- builtins/web/crypto/crypto.cpp | 1 + builtins/web/fetch/request-response.cpp | 71 +++++++-------------- builtins/web/streams/compression-stream.cpp | 2 +- 4 files changed, 42 insertions(+), 70 deletions(-) diff --git a/builtins/web/base64.cpp b/builtins/web/base64.cpp index 5b34dd23..956ad575 100644 --- a/builtins/web/base64.cpp +++ b/builtins/web/base64.cpp @@ -20,35 +20,33 @@ JS::Result convertJSValueToByteString(JSContext *cx, JS::Handle(JS::Error()); + } + + for (size_t i = 0; i < length; i++) { + if (chars[i] > 255) { + // Reset the nogc guard, since otherwise we can't throw errors. + nogc.reset(); JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_INVALID_CHARACTER_ERROR); return JS::Result(JS::Error()); } - - for (size_t i = 0; i < length; i++) { - if (chars[i] > 255) { - foundBadChar = true; - break; - } - } - } - - if (foundBadChar) { - JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_INVALID_CHARACTER_ERROR); - return JS::Result(JS::Error()); } + auto latin1_z = + JS::LossyTwoByteCharsToNewLatin1CharsZ(cx, chars, length); + result = UniqueChars(reinterpret_cast(latin1_z.get())); } else { length = JS::GetStringLength(s); + result = JS_EncodeStringToLatin1(cx, s); } - UniqueChars result = JS_EncodeStringToLatin1(cx, s); if (!result) { return JS::Result(JS::Error()); } diff --git a/builtins/web/crypto/crypto.cpp b/builtins/web/crypto/crypto.cpp index 773f9bc3..3504f9bb 100644 --- a/builtins/web/crypto/crypto.cpp +++ b/builtins/web/crypto/crypto.cpp @@ -54,6 +54,7 @@ bool Crypto::get_random_values(JSContext *cx, unsigned argc, JS::Value *vp) { auto res = host_api::Random::get_bytes(byte_length); if (auto *err = res.to_err()) { + noGC.reset(); HANDLE_ERROR(cx, *err); return false; } diff --git a/builtins/web/fetch/request-response.cpp b/builtins/web/fetch/request-response.cpp index 42a9ebcd..8bc34acc 100644 --- a/builtins/web/fetch/request-response.cpp +++ b/builtins/web/fetch/request-response.cpp @@ -621,71 +621,44 @@ bool RequestOrResponse::content_stream_read_then_handler(JSContext *cx, JS::Hand if (!JS::GetArrayLength(cx, contents, &contentsLength)) { return false; } - // TODO(performance): investigate whether we can infer the size directly from `contents` - size_t buf_size = HANDLE_READ_CHUNK_SIZE; - // TODO(performance): make use of malloc slack. - // https://github.com/fastly/js-compute-runtime/issues/217 - size_t offset = 0; - // In this loop we are finding the length of each entry in `contents` and resizing the `buf` - // until it is large enough to fit all the entries in `contents` - for (uint32_t index = 0; index < contentsLength; index++) { - JS::RootedValue val(cx); + + size_t total_length = 0; + RootedValue val(cx); + + for (size_t index = 0; index < contentsLength; index++) { if (!JS_GetElement(cx, contents, index, &val)) { return false; } - { - JS::AutoCheckCannotGC nogc; - MOZ_ASSERT(val.isObject()); - JSObject *array = &val.toObject(); - MOZ_ASSERT(JS_IsUint8Array(array)); - size_t length = JS_GetTypedArrayByteLength(array); - if (length) { - offset += length; - // if buf is not big enough to fit the next uint8array's bytes then resize - if (offset > buf_size) { - buf_size = - buf_size + (HANDLE_READ_CHUNK_SIZE * ((length / HANDLE_READ_CHUNK_SIZE) + 1)); - } - } - } + JSObject *array = &val.toObject(); + size_t length = JS_GetTypedArrayByteLength(array); + total_length += length; } - JS::UniqueChars buf{static_cast(JS_malloc(cx, buf_size + 1))}; + JS::UniqueChars buf{static_cast(JS_malloc(cx, total_length))}; if (!buf) { JS_ReportOutOfMemory(cx); return false; } - // reset the offset for the next loop - offset = 0; + + size_t offset = 0; // In this loop we are inserting each entry in `contents` into `buf` for (uint32_t index = 0; index < contentsLength; index++) { - JS::RootedValue val(cx); if (!JS_GetElement(cx, contents, index, &val)) { return false; } - { - JS::AutoCheckCannotGC nogc; - MOZ_ASSERT(val.isObject()); - JSObject *array = &val.toObject(); - MOZ_ASSERT(JS_IsUint8Array(array)); - bool is_shared; - size_t length = JS_GetTypedArrayByteLength(array); - if (length) { - static_assert(CHAR_BIT == 8, "Strange char"); - auto bytes = reinterpret_cast(JS_GetUint8ArrayData(array, &is_shared, nogc)); - memcpy(buf.get() + offset, bytes, length); - offset += length; - } - } - } - buf[offset] = '\0'; -#ifdef DEBUG - bool foundBodyParser; - if (!JS_HasElement(cx, catch_handler, 2, &foundBodyParser)) { - return false; + JSObject *array = &val.toObject(); + bool is_shared; + size_t length = JS_GetTypedArrayByteLength(array); + JS::AutoCheckCannotGC nogc(cx); + auto bytes = reinterpret_cast(JS_GetUint8ArrayData(array, &is_shared, nogc)); + memcpy(buf.get() + offset, bytes, length); + offset += length; } + + mozilla::DebugOnly foundBodyParser = false; + MOZ_ASSERT(JS_HasElement(cx, catch_handler, 2, &foundBodyParser)); MOZ_ASSERT(foundBodyParser); -#endif + // Now we can call parse_body on the result JS::RootedValue body_parser(cx); if (!JS_GetElement(cx, catch_handler, 2, &body_parser)) { diff --git a/builtins/web/streams/compression-stream.cpp b/builtins/web/streams/compression-stream.cpp index 7774f28a..90fc3281 100644 --- a/builtins/web/streams/compression-stream.cpp +++ b/builtins/web/streams/compression-stream.cpp @@ -129,7 +129,7 @@ bool deflate_chunk(JSContext *cx, JS::HandleObject self, JS::HandleValue chunk, { bool is_shared; - JS::AutoCheckCannotGC nogc; + JS::AutoCheckCannotGC nogc(cx); uint8_t *out_buffer = JS_GetUint8ArrayData(out_obj, &is_shared, nogc); memcpy(out_buffer, buffer, bytes); } From 827a10d54c3599aff5b06979651cbbe7b4171f65 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Fri, 21 Jun 2024 19:01:36 +0200 Subject: [PATCH 05/28] timers: allow clearTimeout and clearInterval during initialization (#63) --- builtins/web/timers.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/builtins/web/timers.cpp b/builtins/web/timers.cpp index 1923d1e9..5b482264 100644 --- a/builtins/web/timers.cpp +++ b/builtins/web/timers.cpp @@ -134,7 +134,6 @@ template bool setTimeout_or_interval(JSContext *cx, const unsigned * https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-clearinterval */ template bool clearTimeout_or_interval(JSContext *cx, unsigned argc, Value *vp) { - REQUEST_HANDLER_ONLY(interval ? "clearInterval" : "clearTimeout"); const CallArgs args = CallArgsFromVp(argc, vp); if (!args.requireAtLeast(cx, interval ? "clearInterval" : "clearTimeout", 1)) { return false; From 2d7031af6a75ad85a348d8130a2ff25c8573c930 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Fri, 21 Jun 2024 19:37:50 +0200 Subject: [PATCH 06/28] refactor: select to take a tasks vector reference (#60) --- host-apis/wasi-0.2.0-rc-2023-10-18/host_api.cpp | 6 +++--- host-apis/wasi-0.2.0-rc-2023-12-05/host_api.cpp | 6 +++--- host-apis/wasi-0.2.0/host_api.cpp | 6 +++--- include/extension-api.h | 2 +- runtime/event_loop.cpp | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/host_api.cpp b/host-apis/wasi-0.2.0-rc-2023-10-18/host_api.cpp index 732525fb..4c35cb16 100644 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/host_api.cpp +++ b/host-apis/wasi-0.2.0-rc-2023-10-18/host_api.cpp @@ -95,10 +95,10 @@ template <> struct HandleOps { } // namespace -size_t api::AsyncTask::select(std::vector *tasks) { - auto count = tasks->size(); +size_t api::AsyncTask::select(std::vector &tasks) { + auto count = tasks.size(); vector> handles; - for (const auto task : *tasks) { + for (const auto task : tasks) { handles.emplace_back(task->id()); } auto list = list_borrow_pollable_t{ diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/host_api.cpp b/host-apis/wasi-0.2.0-rc-2023-12-05/host_api.cpp index 263794ed..126ce52d 100644 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/host_api.cpp +++ b/host-apis/wasi-0.2.0-rc-2023-12-05/host_api.cpp @@ -99,10 +99,10 @@ template <> struct HandleOps { } // namespace -size_t api::AsyncTask::select(std::vector *tasks) { - auto count = tasks->size(); +size_t api::AsyncTask::select(std::vector &tasks) { + auto count = tasks.size(); vector> handles; - for (const auto task : *tasks) { + for (const auto task : tasks) { handles.emplace_back(task->id()); } auto list = list_borrow_pollable_t{ diff --git a/host-apis/wasi-0.2.0/host_api.cpp b/host-apis/wasi-0.2.0/host_api.cpp index 32e73edd..4e6410b2 100644 --- a/host-apis/wasi-0.2.0/host_api.cpp +++ b/host-apis/wasi-0.2.0/host_api.cpp @@ -247,10 +247,10 @@ class OutgoingBodyHandle final : public WASIHandle { } }; -size_t api::AsyncTask::select(std::vector *tasks) { - auto count = tasks->size(); +size_t api::AsyncTask::select(std::vector &tasks) { + auto count = tasks.size(); vector::Borrowed> handles; - for (const auto task : *tasks) { + for (const auto task : tasks) { handles.emplace_back(task->id()); } auto list = list_borrow_pollable_t{ handles.data(), count}; diff --git a/include/extension-api.h b/include/extension-api.h index 0b4e7b68..4f5360f2 100644 --- a/include/extension-api.h +++ b/include/extension-api.h @@ -147,7 +147,7 @@ class AsyncTask { /** * Select for the next available ready task, providing the oldest ready first. */ - static size_t select(std::vector *handles); + static size_t select(std::vector &handles); }; } // namespace api diff --git a/runtime/event_loop.cpp b/runtime/event_loop.cpp index ee8637e8..a66438dc 100644 --- a/runtime/event_loop.cpp +++ b/runtime/event_loop.cpp @@ -84,7 +84,7 @@ bool EventLoop::run_event_loop(api::Engine *engine, double total_compute) { } // Select the next task to run according to event-loop semantics of oldest-first. - size_t task_idx = api::AsyncTask::select(tasks); + size_t task_idx = api::AsyncTask::select(*tasks); auto task = tasks->at(task_idx); bool success = task->run(engine); From 4cd78b6ec565e3d43255c6fb6f262afc1790c8d8 Mon Sep 17 00:00:00 2001 From: Till Schneidereit Date: Fri, 21 Jun 2024 19:39:17 +0200 Subject: [PATCH 07/28] Bugfixes for `setTimeout` and `setInterval` (#66) Before this patch, timer (i.e., `setTimeout`/`setInterval`) returned the pollable handles as IDs. This is problematic, because pollable handles are reused, leading to content potentially clearing the wrong timer. Additionally, the code wasn't robust against a timer being cleared in its own callback, leading to a failing assertion. ----- This PR also includes the following changes: * Introduce an explicitly async test variant to the integration tests framework This cuts down on redundancy and is a bit easier to use, IMO. I didn't change all tests to use this instead of the existing async support, but we could consider doing that at some point. * Fix issues with timer subtest The test didn't properly clean up its timeout and interval, which meant that the former would throw an exception into the ether, and the latter would continue running the interval forever. (The exception thrown by the former also happened to be the wrong one, since `AssertionError` wasn't imported.) --- builtins/web/timers.cpp | 46 ++++++++++++++++++++--- runtime/event_loop.cpp | 7 +++- tests/integration/test-server.js | 15 ++++++++ tests/integration/timers/timers.js | 60 +++++++++++++++++------------- 4 files changed, 95 insertions(+), 33 deletions(-) diff --git a/builtins/web/timers.cpp b/builtins/web/timers.cpp index 5b482264..b785e62a 100644 --- a/builtins/web/timers.cpp +++ b/builtins/web/timers.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #define S_TO_NS(s) ((s) * 1000000000) @@ -15,6 +16,11 @@ static api::Engine *ENGINE; class TimerTask final : public api::AsyncTask { using TimerArgumentsVector = std::vector>; + + static std::map timer_ids_; + static int32_t next_timer_id; + + int32_t timer_id_; int64_t delay_; int64_t deadline_; bool repeat_; @@ -34,6 +40,8 @@ class TimerTask final : public api::AsyncTask { } handle_ = host_api::MonotonicClock::subscribe(deadline_, true); + timer_id_ = next_timer_id++; + timer_ids_.emplace(timer_id_, handle_); } [[nodiscard]] bool run(api::Engine *engine) override { @@ -55,14 +63,25 @@ class TimerTask final : public api::AsyncTask { return false; } - if (repeat_) { - engine->queue_async_task(new TimerTask(delay_, true, callback, argv)); + // The task might've been canceled during the callback. + if (handle_ != INVALID_POLLABLE_HANDLE) { + host_api::MonotonicClock::unsubscribe(handle_); } - return cancel(engine); + if (repeat_ && timer_ids_.contains(timer_id_)) { + deadline_ = host_api::MonotonicClock::now() + delay_; + handle_ = host_api::MonotonicClock::subscribe(deadline_, true); + engine->queue_async_task(this); + } + + return true; } [[nodiscard]] bool cancel(api::Engine *engine) override { + if (!timer_ids_.contains(timer_id_)) { + return false; + } + host_api::MonotonicClock::unsubscribe(id()); handle_ = -1; return true; @@ -72,14 +91,31 @@ class TimerTask final : public api::AsyncTask { return deadline_; } + [[nodiscard]] int32_t timer_id() const { + return timer_id_; + } + void trace(JSTracer *trc) override { TraceEdge(trc, &callback_, "Timer callback"); for (auto &arg : arguments_) { TraceEdge(trc, &arg, "Timer callback arguments"); } } + + static bool clear(int32_t timer_id) { + if (!timer_ids_.contains(timer_id)) { + return false; + } + + ENGINE->cancel_async_task(timer_ids_[timer_id]); + timer_ids_.erase(timer_id); + return true; + } }; +std::map TimerTask::timer_ids_ = {}; +int32_t TimerTask::next_timer_id = 0; + namespace builtins::web::timers { /** @@ -123,7 +159,7 @@ template bool setTimeout_or_interval(JSContext *cx, const unsigned const auto timer = new TimerTask(delay, repeat, handler, handler_args); ENGINE->queue_async_task(timer); - args.rval().setInt32(timer->id()); + args.rval().setInt32(timer->timer_id()); return true; } @@ -144,7 +180,7 @@ template bool clearTimeout_or_interval(JSContext *cx, unsigned a return false; } - ENGINE->cancel_async_task(id); + TimerTask::clear(id); args.rval().setUndefined(); return true; diff --git a/runtime/event_loop.cpp b/runtime/event_loop.cpp index a66438dc..6e95cbb1 100644 --- a/runtime/event_loop.cpp +++ b/runtime/event_loop.cpp @@ -23,7 +23,10 @@ static PersistentRooted queue; namespace core { -void EventLoop::queue_async_task(api::AsyncTask *task) { queue.get().tasks.emplace_back(task); } +void EventLoop::queue_async_task(api::AsyncTask *task) { + MOZ_ASSERT(task); + queue.get().tasks.emplace_back(task); +} bool EventLoop::cancel_async_task(api::Engine *engine, const int32_t id) { const auto tasks = &queue.get().tasks; @@ -87,8 +90,8 @@ bool EventLoop::run_event_loop(api::Engine *engine, double total_compute) { size_t task_idx = api::AsyncTask::select(*tasks); auto task = tasks->at(task_idx); - bool success = task->run(engine); tasks->erase(tasks->begin() + task_idx); + bool success = task->run(engine); if (!success) { exit_event_loop(); return false; diff --git a/tests/integration/test-server.js b/tests/integration/test-server.js index 4f1e81b2..2e75d1f4 100644 --- a/tests/integration/test-server.js +++ b/tests/integration/test-server.js @@ -35,6 +35,21 @@ export function serveTest (handler) { curSubtest = null; subtestCnt++; } + }, + async asyncTest (name, subtest) { + if (!filter(name)) + return; + curSubtest = name; + let resolve, reject; + let promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + subtest(resolve, reject); + evt.waitUntil(promise); + await promise; + curSubtest = null; + subtestCnt++; } }); } diff --git a/tests/integration/timers/timers.js b/tests/integration/timers/timers.js index feb85d1a..64470fc9 100644 --- a/tests/integration/timers/timers.js +++ b/tests/integration/timers/timers.js @@ -1,36 +1,41 @@ import { serveTest } from "../test-server.js"; -import { assert, strictEqual, throws, deepStrictEqual } from "../assert.js"; +import { assert, strictEqual, throws, deepStrictEqual, AssertionError } from "../assert.js"; export const handler = serveTest(async (t) => { - await t.test("setTimeout", async () => { + await t.asyncTest("setTimeout-order", (resolve, reject) => { let first = false; - return new Promise((resolve, reject) => { - setTimeout(() => { - first = true; - }, 10); - setTimeout(() => { - try { - assert(first, 'first timeout should trigger first'); - } catch (e) { - reject(e); - return; - } + setTimeout(() => { + first = true; + }, 10); + setTimeout(() => { + try { + assert(first, 'first timeout should trigger first'); + } catch (e) { + reject(e); + return; + } + resolve(); + }, 20); + }); + await t.asyncTest("setInterval-10-times", (resolve, reject) => { + let timeout = setTimeout(() => { + reject(new AssertionError("Expected setInterval to be called 10 times quickly")); + }, 1000); + let cnt = 0; + let interval = setInterval(() => { + cnt++; + if (cnt === 10) { + clearTimeout(timeout); + clearInterval(interval); resolve(); - }, 20); + } }); }); - await t.test("setInterval", async () => { - return new Promise((resolve, reject) => { - setTimeout(() => { - reject(new AssertionError("Expected setInterval to be called 10 times quickly")); - }, 1000); - let cnt = 0; - setInterval(() => { - cnt++; - if (cnt === 10) - resolve(); - }); - }); + await t.asyncTest("setTimeout-cleared-in-callback", (resolve, reject) => { + let id = setTimeout.call(undefined, () => { + clearTimeout(id); + resolve(); + }, 1); }); t.test("setInterval-exposed-as-global", () => { strictEqual(typeof setInterval, "function", `typeof setInterval`); @@ -343,6 +348,9 @@ export const handler = serveTest(async (t) => { t.test("setTimeout-called-unbound", () => { setTimeout.call(undefined, () => {}, 1); }); + t.test("setTimeout-cleared-in-callback", () => { + let id = setTimeout.call(undefined, () => { clearTimeout(id); }, 1); + }); t.test("clearInterval-exposed-as-global", () => { deepStrictEqual(typeof clearInterval, "function", `typeof clearInterval`); From 3e5585ede27771cec981fa0647457f21694bfa39 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Sat, 22 Jun 2024 12:34:39 +0200 Subject: [PATCH 08/28] fix: zero coercion timeout removal bug (#72) --- builtins/web/timers.cpp | 2 +- tests/integration/timers/timers.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/builtins/web/timers.cpp b/builtins/web/timers.cpp index b785e62a..bb80c16c 100644 --- a/builtins/web/timers.cpp +++ b/builtins/web/timers.cpp @@ -114,7 +114,7 @@ class TimerTask final : public api::AsyncTask { }; std::map TimerTask::timer_ids_ = {}; -int32_t TimerTask::next_timer_id = 0; +int32_t TimerTask::next_timer_id = 1; namespace builtins::web::timers { diff --git a/tests/integration/timers/timers.js b/tests/integration/timers/timers.js index 64470fc9..c46fb72a 100644 --- a/tests/integration/timers/timers.js +++ b/tests/integration/timers/timers.js @@ -2,6 +2,16 @@ import { serveTest } from "../test-server.js"; import { assert, strictEqual, throws, deepStrictEqual, AssertionError } from "../assert.js"; export const handler = serveTest(async (t) => { + await t.asyncTest("clearTimeout invalid", (resolve, reject) => { + // cleartimeout can be called with arbitrary stuff + clearTimeout('blah'); + + const dontDeleteTimeout = setTimeout(resolve, 100); + + // null converts to zero, which must not delete a real timer + clearTimeout(null); + }); + await t.asyncTest("setTimeout-order", (resolve, reject) => { let first = false; setTimeout(() => { From cdd2d4fb9dde609dd64462126d8c3b121fb5a23d Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Sat, 22 Jun 2024 12:35:10 +0200 Subject: [PATCH 09/28] deps: use latest rust url (#70) --- crates/rust-url/Cargo.lock | 24 ++++++++++++------------ crates/rust-url/Cargo.toml | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/crates/rust-url/Cargo.lock b/crates/rust-url/Cargo.lock index a2a53be0..e89e02ba 100644 --- a/crates/rust-url/Cargo.lock +++ b/crates/rust-url/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -23,9 +23,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "rust-url" @@ -51,24 +51,24 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] [[package]] name = "url" -version = "2.4.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", diff --git a/crates/rust-url/Cargo.toml b/crates/rust-url/Cargo.toml index 8e4c0d47..c8361f3e 100644 --- a/crates/rust-url/Cargo.toml +++ b/crates/rust-url/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" crate-type = ["staticlib"] [dependencies] -url = "2.4.1" +url = "2.5.2" [profile.release] lto = true From 35008af6e7b92358934dd4d55e235621f4b9ca83 Mon Sep 17 00:00:00 2001 From: Till Schneidereit Date: Sat, 22 Jun 2024 13:03:52 +0200 Subject: [PATCH 10/28] Remove host API implementations targeting WASIp2 prereleases (#68) Closes #65 --- README.md | 6 +- .../bindings/bindings.c | 5726 ----------- .../bindings/bindings.h | 2909 ------ .../bindings/bindings_component_type.o | Bin 41353 -> 0 bytes .../wasi-0.2.0-rc-2023-10-18/host_api.cpp | 963 -- .../wasi-0.2.0-rc-2023-10-18/host_call.cpp | 11 - .../include/exports.h | 13 - .../wasi_snapshot_preview1.wasm | Bin 2357703 -> 0 bytes .../wasi_snapshot_preview1.wasm | Bin 109319 -> 0 bytes .../wit/command-extended.wit | 37 - .../wit/deps/cli/command.wit | 7 - .../wit/deps/cli/environment.wit | 18 - .../wit/deps/cli/exit.wit | 4 - .../wit/deps/cli/reactor.wit | 32 - .../wit/deps/cli/run.wit | 4 - .../wit/deps/cli/stdio.wit | 17 - .../wit/deps/cli/terminal.wit | 47 - .../wit/deps/clocks/monotonic-clock.wit | 32 - .../wit/deps/clocks/timezone.wit | 48 - .../wit/deps/clocks/wall-clock.wit | 41 - .../wit/deps/clocks/world.wit | 7 - .../wit/deps/filesystem/preopens.wit | 6 - .../wit/deps/filesystem/types.wit | 810 -- .../wit/deps/filesystem/world.wit | 6 - .../wit/deps/http/incoming-handler.wit | 24 - .../wit/deps/http/outgoing-handler.wit | 20 - .../wit/deps/http/proxy.wit | 34 - .../wit/deps/http/types.wit | 214 - .../wit/deps/io/poll.wit | 34 - .../wit/deps/io/streams.wit | 289 - .../wit/deps/io/world.wit | 6 - .../wit/deps/logging/logging.wit | 37 - .../wit/deps/logging/world.wit | 5 - .../wit/deps/random/insecure-seed.wit | 24 - .../wit/deps/random/insecure.wit | 21 - .../wit/deps/random/random.wit | 25 - .../wit/deps/random/world.wit | 7 - .../wit/deps/sockets/instance-network.wit | 9 - .../wit/deps/sockets/ip-name-lookup.wit | 61 - .../wit/deps/sockets/network.wit | 146 - .../wit/deps/sockets/tcp-create-socket.wit | 26 - .../wit/deps/sockets/tcp.wit | 268 - .../wit/deps/sockets/udp-create-socket.wit | 26 - .../wit/deps/sockets/udp.wit | 213 - .../wit/deps/sockets/world.wit | 11 - .../wasi-0.2.0-rc-2023-10-18/wit/main.wit | 6 - .../wasi-0.2.0-rc-2023-10-18/wit/test.wit | 46 - .../bindings/bindings.c | 9144 ----------------- .../bindings/bindings.h | 3351 ------ .../bindings/bindings_component_type.o | Bin 32716 -> 0 bytes .../wasi-0.2.0-rc-2023-12-05/host_api.cpp | 1017 -- .../wasi-0.2.0-rc-2023-12-05/host_call.cpp | 11 - .../include/exports.h | 13 - .../wasi_snapshot_preview1.wasm | Bin 2468019 -> 0 bytes .../wasi_snapshot_preview1.wasm | Bin 98729 -> 0 bytes .../wit/command-extended.wit | 6 - .../wit/deps/cli/command.wit | 7 - .../wit/deps/cli/environment.wit | 18 - .../wit/deps/cli/exit.wit | 4 - .../wit/deps/cli/imports.wit | 20 - .../wit/deps/cli/run.wit | 4 - .../wit/deps/cli/stdio.wit | 17 - .../wit/deps/cli/terminal.wit | 47 - .../wit/deps/clocks/monotonic-clock.wit | 45 - .../wit/deps/clocks/wall-clock.wit | 42 - .../wit/deps/clocks/world.wit | 6 - .../wit/deps/filesystem/preopens.wit | 8 - .../wit/deps/filesystem/types.wit | 634 -- .../wit/deps/filesystem/world.wit | 6 - .../wit/deps/http/handler.wit | 43 - .../wit/deps/http/proxy.wit | 32 - .../wit/deps/http/types.wit | 570 - .../wit/deps/io/error.wit | 34 - .../wit/deps/io/poll.wit | 41 - .../wit/deps/io/streams.wit | 251 - .../wit/deps/io/world.wit | 6 - .../wit/deps/random/insecure-seed.wit | 25 - .../wit/deps/random/insecure.wit | 22 - .../wit/deps/random/random.wit | 26 - .../wit/deps/random/world.wit | 7 - .../wit/deps/sockets/instance-network.wit | 9 - .../wit/deps/sockets/ip-name-lookup.wit | 51 - .../wit/deps/sockets/network.wit | 147 - .../wit/deps/sockets/tcp-create-socket.wit | 26 - .../wit/deps/sockets/tcp.wit | 326 - .../wit/deps/sockets/udp-create-socket.wit | 26 - .../wit/deps/sockets/udp.wit | 277 - .../wit/deps/sockets/world.wit | 11 - .../wasi-0.2.0-rc-2023-12-05/wit/main.wit | 6 - 89 files changed, 5 insertions(+), 28627 deletions(-) delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/bindings/bindings.c delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/bindings/bindings.h delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/bindings/bindings_component_type.o delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/host_api.cpp delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/host_call.cpp delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/include/exports.h delete mode 100755 host-apis/wasi-0.2.0-rc-2023-10-18/preview1-adapter-debug/wasi_snapshot_preview1.wasm delete mode 100755 host-apis/wasi-0.2.0-rc-2023-10-18/preview1-adapter-release/wasi_snapshot_preview1.wasm delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/command-extended.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/command.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/environment.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/exit.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/reactor.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/run.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/stdio.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/terminal.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/monotonic-clock.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/timezone.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/wall-clock.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/world.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/filesystem/preopens.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/filesystem/types.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/filesystem/world.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/incoming-handler.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/outgoing-handler.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/proxy.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/types.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/io/poll.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/io/streams.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/io/world.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/logging/logging.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/logging/world.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/insecure-seed.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/insecure.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/random.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/world.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/instance-network.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/ip-name-lookup.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/network.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/tcp-create-socket.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/tcp.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/udp-create-socket.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/udp.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/world.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/main.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/wit/test.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/bindings/bindings.c delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/bindings/bindings.h delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/bindings/bindings_component_type.o delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/host_api.cpp delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/host_call.cpp delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/include/exports.h delete mode 100755 host-apis/wasi-0.2.0-rc-2023-12-05/preview1-adapter-debug/wasi_snapshot_preview1.wasm delete mode 100755 host-apis/wasi-0.2.0-rc-2023-12-05/preview1-adapter-release/wasi_snapshot_preview1.wasm delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/command-extended.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/command.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/environment.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/exit.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/imports.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/run.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/stdio.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/terminal.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/clocks/monotonic-clock.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/clocks/wall-clock.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/clocks/world.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/filesystem/preopens.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/filesystem/types.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/filesystem/world.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/http/handler.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/http/proxy.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/http/types.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/error.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/poll.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/streams.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/world.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/insecure-seed.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/insecure.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/random.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/world.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/instance-network.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/ip-name-lookup.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/network.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/tcp-create-socket.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/tcp.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/udp-create-socket.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/udp.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/world.wit delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/wit/main.wit diff --git a/README.md b/README.md index c0bde81f..4decfb3d 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,10 @@ If your builtin requires multiple `.cpp` files, you can pass all of them to `add ### Providing a custom host API implementation -The [host-apis](host-apis) directory contains implementations of the host API for different versions of WASI. Those can be selected by setting the `HOST_API` environment variable to the name of one of the directories. By default, the [wasi-0.2.0](host-apis/wasi-0.2.0) host API is used. +The [host-apis](host-apis) directory can contain implementations of the host API for different +versions of WASI—or in theory any other host interface. Those can be selected by setting the +`HOST_API` environment variable to the +name of one of the directories. Currently, only an implementation in terms of [wasi-0.2.0] +(host-apis/wasi-0.2.0) is provided, and used by default. To provide a custom host API implementation, you can set `HOST_API` to the (absolute) path of a directory containing that implementation. diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/bindings/bindings.c b/host-apis/wasi-0.2.0-rc-2023-10-18/bindings/bindings.c deleted file mode 100644 index d6d85cb2..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/bindings/bindings.c +++ /dev/null @@ -1,5726 +0,0 @@ -// Generated by `wit-bindgen` 0.16.0. DO NOT EDIT! -#include "bindings.h" - - -__attribute__((__import_module__("wasi:clocks/wall-clock@0.2.0-rc-2023-10-18"), __import_name__("now"))) -extern void __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_now(int32_t); - -__attribute__((__import_module__("wasi:clocks/wall-clock@0.2.0-rc-2023-10-18"), __import_name__("resolution"))) -extern void __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_resolution(int32_t); - -__attribute__((__import_module__("wasi:io/poll@0.2.0-rc-2023-10-18"), __import_name__("poll-list"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_poll_poll_list(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/poll@0.2.0-rc-2023-10-18"), __import_name__("poll-one"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_poll_poll_one(int32_t); - -__attribute__((__import_module__("wasi:clocks/monotonic-clock@0.2.0-rc-2023-10-18"), __import_name__("now"))) -extern int64_t __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_now(void); - -__attribute__((__import_module__("wasi:clocks/monotonic-clock@0.2.0-rc-2023-10-18"), __import_name__("resolution"))) -extern int64_t __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_resolution(void); - -__attribute__((__import_module__("wasi:clocks/monotonic-clock@0.2.0-rc-2023-10-18"), __import_name__("subscribe"))) -extern int32_t __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_subscribe(int64_t, int32_t); - -__attribute__((__import_module__("wasi:clocks/timezone@0.2.0-rc-2023-10-18"), __import_name__("display"))) -extern void __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_timezone_display(int64_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:clocks/timezone@0.2.0-rc-2023-10-18"), __import_name__("utc-offset"))) -extern int32_t __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_timezone_utc_offset(int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]error.to-debug-string"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_error_to_debug_string(int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]input-stream.read"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_read(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]input-stream.blocking-read"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_blocking_read(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]input-stream.skip"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_skip(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]input-stream.blocking-skip"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_blocking_skip(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]input-stream.subscribe"))) -extern int32_t __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_subscribe(int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]output-stream.check-write"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_check_write(int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]output-stream.write"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_write(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]output-stream.blocking-write-and-flush"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_write_and_flush(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]output-stream.flush"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_flush(int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]output-stream.blocking-flush"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_flush(int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]output-stream.subscribe"))) -extern int32_t __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_subscribe(int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]output-stream.write-zeroes"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_write_zeroes(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]output-stream.blocking-write-zeroes-and-flush"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_write_zeroes_and_flush(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]output-stream.splice"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_splice(int32_t, int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]output-stream.blocking-splice"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_splice(int32_t, int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[method]output-stream.forward"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_forward(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.read-via-stream"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_read_via_stream(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.write-via-stream"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_write_via_stream(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.append-via-stream"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_append_via_stream(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.advise"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_advise(int32_t, int64_t, int64_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.sync-data"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_sync_data(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.get-flags"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_get_flags(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.get-type"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_get_type(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.set-size"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_set_size(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.set-times"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_set_times(int32_t, int32_t, int64_t, int32_t, int32_t, int64_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.read"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_read(int32_t, int64_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.write"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_write(int32_t, int32_t, int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.read-directory"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_read_directory(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.sync"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_sync(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.create-directory-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_create_directory_at(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.stat"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_stat(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.stat-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_stat_at(int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.set-times-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_set_times_at(int32_t, int32_t, int32_t, int32_t, int32_t, int64_t, int32_t, int32_t, int64_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.link-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_link_at(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.open-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_open_at(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.readlink-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_readlink_at(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.remove-directory-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_remove_directory_at(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.rename-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_rename_at(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.symlink-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_symlink_at(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.access-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_access_at(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.unlink-file-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_unlink_file_at(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.change-file-permissions-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_change_file_permissions_at(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.change-directory-permissions-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_change_directory_permissions_at(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.lock-shared"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_lock_shared(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.lock-exclusive"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_lock_exclusive(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.try-lock-shared"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_try_lock_shared(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.try-lock-exclusive"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_try_lock_exclusive(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.unlock"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_unlock(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.is-same-object"))) -extern int32_t __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_is_same_object(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.metadata-hash"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_metadata_hash(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]descriptor.metadata-hash-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_metadata_hash_at(int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[method]directory-entry-stream.read-directory-entry"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_directory_entry_stream_read_directory_entry(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("filesystem-error-code"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_filesystem_error_code(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/preopens@0.2.0-rc-2023-10-18"), __import_name__("get-directories"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_preopens_get_directories(int32_t); - -__attribute__((__import_module__("wasi:sockets/instance-network@0.2.0-rc-2023-10-18"), __import_name__("instance-network"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_instance_network_instance_network(void); - -__attribute__((__import_module__("wasi:sockets/ip-name-lookup@0.2.0-rc-2023-10-18"), __import_name__("resolve-addresses"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_resolve_addresses(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/ip-name-lookup@0.2.0-rc-2023-10-18"), __import_name__("[method]resolve-address-stream.resolve-next-address"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_method_resolve_address_stream_resolve_next_address(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/ip-name-lookup@0.2.0-rc-2023-10-18"), __import_name__("[method]resolve-address-stream.subscribe"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_method_resolve_address_stream_subscribe(int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.start-bind"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_start_bind(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.finish-bind"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_finish_bind(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.start-connect"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_start_connect(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.finish-connect"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_finish_connect(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.start-listen"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_start_listen(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.finish-listen"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_finish_listen(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.accept"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_accept(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.local-address"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_local_address(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.remote-address"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_remote_address(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.address-family"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_address_family(int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.ipv6-only"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_ipv6_only(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.set-ipv6-only"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_ipv6_only(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.set-listen-backlog-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_listen_backlog_size(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.keep-alive"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_keep_alive(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.set-keep-alive"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_keep_alive(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.no-delay"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_no_delay(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.set-no-delay"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_no_delay(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.unicast-hop-limit"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_unicast_hop_limit(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.set-unicast-hop-limit"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_unicast_hop_limit(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.receive-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_receive_buffer_size(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.set-receive-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_receive_buffer_size(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.send-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_send_buffer_size(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.set-send-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_send_buffer_size(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.subscribe"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_subscribe(int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[method]tcp-socket.shutdown"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_shutdown(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp-create-socket@0.2.0-rc-2023-10-18"), __import_name__("create-tcp-socket"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_create_tcp_socket(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.start-bind"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_start_bind(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.finish-bind"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_finish_bind(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.start-connect"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_start_connect(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.finish-connect"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_finish_connect(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.receive"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_receive(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.send"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_send(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.local-address"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_local_address(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.remote-address"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_remote_address(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.address-family"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_address_family(int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.ipv6-only"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_ipv6_only(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.set-ipv6-only"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_ipv6_only(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.unicast-hop-limit"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_unicast_hop_limit(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.set-unicast-hop-limit"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_unicast_hop_limit(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.receive-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_receive_buffer_size(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.set-receive-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_receive_buffer_size(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.send-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_send_buffer_size(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.set-send-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_send_buffer_size(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[method]udp-socket.subscribe"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_subscribe(int32_t); - -__attribute__((__import_module__("wasi:sockets/udp-create-socket@0.2.0-rc-2023-10-18"), __import_name__("create-udp-socket"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_create_udp_socket(int32_t, int32_t); - -__attribute__((__import_module__("wasi:random/random@0.2.0-rc-2023-10-18"), __import_name__("get-random-bytes"))) -extern void __wasm_import_wasi_random_0_2_0_rc_2023_10_18_random_get_random_bytes(int64_t, int32_t); - -__attribute__((__import_module__("wasi:random/random@0.2.0-rc-2023-10-18"), __import_name__("get-random-u64"))) -extern int64_t __wasm_import_wasi_random_0_2_0_rc_2023_10_18_random_get_random_u64(void); - -__attribute__((__import_module__("wasi:random/insecure@0.2.0-rc-2023-10-18"), __import_name__("get-insecure-random-bytes"))) -extern void __wasm_import_wasi_random_0_2_0_rc_2023_10_18_insecure_get_insecure_random_bytes(int64_t, int32_t); - -__attribute__((__import_module__("wasi:random/insecure@0.2.0-rc-2023-10-18"), __import_name__("get-insecure-random-u64"))) -extern int64_t __wasm_import_wasi_random_0_2_0_rc_2023_10_18_insecure_get_insecure_random_u64(void); - -__attribute__((__import_module__("wasi:random/insecure-seed@0.2.0-rc-2023-10-18"), __import_name__("insecure-seed"))) -extern void __wasm_import_wasi_random_0_2_0_rc_2023_10_18_insecure_seed_insecure_seed(int32_t); - -__attribute__((__import_module__("wasi:cli/environment@0.2.0-rc-2023-10-18"), __import_name__("get-environment"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_environment_get_environment(int32_t); - -__attribute__((__import_module__("wasi:cli/environment@0.2.0-rc-2023-10-18"), __import_name__("get-arguments"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_environment_get_arguments(int32_t); - -__attribute__((__import_module__("wasi:cli/environment@0.2.0-rc-2023-10-18"), __import_name__("initial-cwd"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_environment_initial_cwd(int32_t); - -__attribute__((__import_module__("wasi:cli/exit@0.2.0-rc-2023-10-18"), __import_name__("exit"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_exit_exit(int32_t); - -__attribute__((__import_module__("wasi:cli/stdin@0.2.0-rc-2023-10-18"), __import_name__("get-stdin"))) -extern int32_t __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_stdin_get_stdin(void); - -__attribute__((__import_module__("wasi:cli/stdout@0.2.0-rc-2023-10-18"), __import_name__("get-stdout"))) -extern int32_t __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_stdout_get_stdout(void); - -__attribute__((__import_module__("wasi:cli/stderr@0.2.0-rc-2023-10-18"), __import_name__("get-stderr"))) -extern int32_t __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_stderr_get_stderr(void); - -__attribute__((__import_module__("wasi:cli/terminal-stdin@0.2.0-rc-2023-10-18"), __import_name__("get-terminal-stdin"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_get_terminal_stdin(int32_t); - -__attribute__((__import_module__("wasi:cli/terminal-stdout@0.2.0-rc-2023-10-18"), __import_name__("get-terminal-stdout"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_get_terminal_stdout(int32_t); - -__attribute__((__import_module__("wasi:cli/terminal-stderr@0.2.0-rc-2023-10-18"), __import_name__("get-terminal-stderr"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_get_terminal_stderr(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[constructor]fields"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_constructor_fields(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]fields.get"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_fields_get(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]fields.set"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_fields_set(int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]fields.delete"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_fields_delete(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]fields.append"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_fields_append(int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]fields.entries"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_fields_entries(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]fields.clone"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_fields_clone(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]incoming-request.method"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_method(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]incoming-request.path-with-query"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_path_with_query(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]incoming-request.scheme"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_scheme(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]incoming-request.authority"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_authority(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]incoming-request.headers"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_headers(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]incoming-request.consume"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_consume(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[constructor]outgoing-request"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_constructor_outgoing_request(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]outgoing-request.write"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_request_write(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[static]response-outparam.set"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_static_response_outparam_set(int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]incoming-response.status"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_status(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]incoming-response.headers"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_headers(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]incoming-response.consume"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_consume(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]incoming-body.stream"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_body_stream(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[static]incoming-body.finish"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_static_incoming_body_finish(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]future-trailers.subscribe"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_future_trailers_subscribe(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]future-trailers.get"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_future_trailers_get(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[constructor]outgoing-response"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_constructor_outgoing_response(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]outgoing-response.write"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_response_write(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]outgoing-body.write"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_body_write(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[static]outgoing-body.finish"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_static_outgoing_body_finish(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]future-incoming-response.get"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_future_incoming_response_get(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[method]future-incoming-response.subscribe"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_future_incoming_response_subscribe(int32_t); - -__attribute__((__import_module__("wasi:http/outgoing-handler@0.2.0-rc-2023-10-18"), __import_name__("handle"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_handle(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__weak__, __export_name__("cabi_realloc"))) -void *cabi_realloc(void *ptr, size_t old_size, size_t align, size_t new_size) { - (void) old_size; - if (new_size == 0) return (void*) align; - void *ret = realloc(ptr, new_size); - if (!ret) abort(); - return ret; -} - -// Helper Functions - -__attribute__((__import_module__("wasi:io/poll@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]pollable"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_poll_pollable_drop(int32_t handle); - -void wasi_io_0_2_0_rc_2023_10_18_poll_pollable_drop_own(wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_poll_pollable_drop(handle.__handle); -} - -void wasi_io_0_2_0_rc_2023_10_18_poll_pollable_drop_borrow(wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_poll_pollable_drop(handle.__handle); -} - -wasi_io_0_2_0_rc_2023_10_18_poll_borrow_pollable_t wasi_io_0_2_0_rc_2023_10_18_poll_borrow_pollable(wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t arg) { - return (wasi_io_0_2_0_rc_2023_10_18_poll_borrow_pollable_t) { arg.__handle }; -} - -void wasi_io_0_2_0_rc_2023_10_18_poll_list_borrow_pollable_free(wasi_io_0_2_0_rc_2023_10_18_poll_list_borrow_pollable_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void bindings_list_u32_free(bindings_list_u32_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void wasi_clocks_0_2_0_rc_2023_10_18_timezone_timezone_display_free(wasi_clocks_0_2_0_rc_2023_10_18_timezone_timezone_display_t *ptr) { - bindings_string_free(&ptr->name); -} - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]error"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_error_drop(int32_t handle); - -void wasi_io_0_2_0_rc_2023_10_18_streams_error_drop_own(wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_error_drop(handle.__handle); -} - -void wasi_io_0_2_0_rc_2023_10_18_streams_error_drop_borrow(wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_error_drop(handle.__handle); -} - -wasi_io_0_2_0_rc_2023_10_18_streams_borrow_error_t wasi_io_0_2_0_rc_2023_10_18_streams_borrow_error(wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t arg) { - return (wasi_io_0_2_0_rc_2023_10_18_streams_borrow_error_t) { arg.__handle }; -} - -void wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_free(wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *ptr) { - switch ((int32_t) ptr->tag) { - case 0: { - break; - } - } -} - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]input-stream"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_input_stream_drop(int32_t handle); - -void wasi_io_0_2_0_rc_2023_10_18_streams_input_stream_drop_own(wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_input_stream_drop(handle.__handle); -} - -void wasi_io_0_2_0_rc_2023_10_18_streams_input_stream_drop_borrow(wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_input_stream_drop(handle.__handle); -} - -wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream(wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t arg) { - return (wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]output-stream"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_output_stream_drop(int32_t handle); - -void wasi_io_0_2_0_rc_2023_10_18_streams_output_stream_drop_own(wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_output_stream_drop(handle.__handle); -} - -void wasi_io_0_2_0_rc_2023_10_18_streams_output_stream_drop_borrow(wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_output_stream_drop(handle.__handle); -} - -wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream(wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t arg) { - return (wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t) { arg.__handle }; -} - -void bindings_list_u8_free(bindings_list_u8_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void wasi_io_0_2_0_rc_2023_10_18_streams_result_list_u8_stream_error_free(wasi_io_0_2_0_rc_2023_10_18_streams_result_list_u8_stream_error_t *ptr) { - if (!ptr->is_err) { - bindings_list_u8_free(&ptr->val.ok); - } else { - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_free(&ptr->val.err); - } -} - -void wasi_io_0_2_0_rc_2023_10_18_streams_result_u64_stream_error_free(wasi_io_0_2_0_rc_2023_10_18_streams_result_u64_stream_error_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_free(&ptr->val.err); - } -} - -void wasi_io_0_2_0_rc_2023_10_18_streams_result_void_stream_error_free(wasi_io_0_2_0_rc_2023_10_18_streams_result_void_stream_error_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_free(&ptr->val.err); - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_access_type_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_access_type_t *ptr) { - switch ((int32_t) ptr->tag) { - case 0: { - break; - } - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_stat_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_stat_t *ptr) { - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_free(&ptr->data_access_timestamp); - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_free(&ptr->data_modification_timestamp); - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_free(&ptr->status_change_timestamp); -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_new_timestamp_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_new_timestamp_t *ptr) { - switch ((int32_t) ptr->tag) { - case 2: { - break; - } - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_t *ptr) { - bindings_string_free(&ptr->name); -} - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]descriptor"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_drop(int32_t handle); - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_drop_own(wasi_filesystem_0_2_0_rc_2023_10_18_types_own_descriptor_t handle) { - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_drop(handle.__handle); -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_drop_borrow(wasi_filesystem_0_2_0_rc_2023_10_18_types_own_descriptor_t handle) { - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_drop(handle.__handle); -} - -wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor(wasi_filesystem_0_2_0_rc_2023_10_18_types_own_descriptor_t arg) { - return (wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]directory-entry-stream"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_stream_drop(int32_t handle); - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_stream_drop_own(wasi_filesystem_0_2_0_rc_2023_10_18_types_own_directory_entry_stream_t handle) { - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_stream_drop(handle.__handle); -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_stream_drop_borrow(wasi_filesystem_0_2_0_rc_2023_10_18_types_own_directory_entry_stream_t handle) { - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_stream_drop(handle.__handle); -} - -wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_directory_entry_stream_t wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_directory_entry_stream(wasi_filesystem_0_2_0_rc_2023_10_18_types_own_directory_entry_stream_t arg) { - return (wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_directory_entry_stream_t) { arg.__handle }; -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_input_stream_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_input_stream_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_output_stream_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_output_stream_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_flags_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_flags_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_type_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_type_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_tuple2_list_u8_bool_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_tuple2_list_u8_bool_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_filesize_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_filesize_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_directory_entry_stream_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_directory_entry_stream_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_stat_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_stat_error_code_t *ptr) { - if (!ptr->is_err) { - wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_stat_free(&ptr->val.ok); - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_descriptor_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_descriptor_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_string_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_string_error_code_t *ptr) { - if (!ptr->is_err) { - bindings_string_free(&ptr->val.ok); - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_metadata_hash_value_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_metadata_hash_value_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_option_directory_entry_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_option_directory_entry_t *ptr) { - if (ptr->is_some) { - wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_free(&ptr->val); - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_option_directory_entry_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_option_directory_entry_error_code_t *ptr) { - if (!ptr->is_err) { - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_directory_entry_free(&ptr->val.ok); - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_types_option_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_option_error_code_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_preopens_tuple2_own_descriptor_string_free(wasi_filesystem_0_2_0_rc_2023_10_18_preopens_tuple2_own_descriptor_string_t *ptr) { - bindings_string_free(&ptr->f1); -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_preopens_list_tuple2_own_descriptor_string_free(wasi_filesystem_0_2_0_rc_2023_10_18_preopens_list_tuple2_own_descriptor_string_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - wasi_filesystem_0_2_0_rc_2023_10_18_preopens_tuple2_own_descriptor_string_free(&ptr->ptr[i]); - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -__attribute__((__import_module__("wasi:sockets/network@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]network"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_network_network_drop(int32_t handle); - -void wasi_sockets_0_2_0_rc_2023_10_18_network_network_drop_own(wasi_sockets_0_2_0_rc_2023_10_18_network_own_network_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_network_network_drop(handle.__handle); -} - -void wasi_sockets_0_2_0_rc_2023_10_18_network_network_drop_borrow(wasi_sockets_0_2_0_rc_2023_10_18_network_own_network_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_network_network_drop(handle.__handle); -} - -wasi_sockets_0_2_0_rc_2023_10_18_network_borrow_network_t wasi_sockets_0_2_0_rc_2023_10_18_network_borrow_network(wasi_sockets_0_2_0_rc_2023_10_18_network_own_network_t arg) { - return (wasi_sockets_0_2_0_rc_2023_10_18_network_borrow_network_t) { arg.__handle }; -} - -void wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_free(wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_t *ptr) { - switch ((int32_t) ptr->tag) { - case 0: { - break; - } - case 1: { - break; - } - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_network_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_10_18_network_ip_socket_address_t *ptr) { - switch ((int32_t) ptr->tag) { - case 0: { - break; - } - case 1: { - break; - } - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_ip_address_free(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_ip_address_t *ptr) { - wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_free(ptr); -} - -__attribute__((__import_module__("wasi:sockets/ip-name-lookup@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]resolve-address-stream"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_resolve_address_stream_drop(int32_t handle); - -void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_resolve_address_stream_drop_own(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_resolve_address_stream_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_resolve_address_stream_drop(handle.__handle); -} - -void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_resolve_address_stream_drop_borrow(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_resolve_address_stream_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_resolve_address_stream_drop(handle.__handle); -} - -wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_resolve_address_stream_t wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_resolve_address_stream(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_resolve_address_stream_t arg) { - return (wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_resolve_address_stream_t) { arg.__handle }; -} - -void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_family_free(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_family_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_result_own_resolve_address_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_result_own_resolve_address_stream_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_free(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_t *ptr) { - if (ptr->is_some) { - wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_ip_address_free(&ptr->val); - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_result_option_ip_address_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_result_option_ip_address_error_code_t *ptr) { - if (!ptr->is_err) { - wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_free(&ptr->val.ok); - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_t *ptr) { - wasi_sockets_0_2_0_rc_2023_10_18_network_ip_socket_address_free(ptr); -} - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]tcp-socket"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_tcp_socket_drop(int32_t handle); - -void wasi_sockets_0_2_0_rc_2023_10_18_tcp_tcp_socket_drop_own(wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_tcp_socket_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_tcp_socket_drop(handle.__handle); -} - -void wasi_sockets_0_2_0_rc_2023_10_18_tcp_tcp_socket_drop_borrow(wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_tcp_socket_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_tcp_socket_drop(handle.__handle); -} - -wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket(wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_tcp_socket_t arg) { - return (wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t) { arg.__handle }; -} - -void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_tuple2_own_input_stream_own_output_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_tuple2_own_input_stream_own_output_stream_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_tuple3_own_tcp_socket_own_input_stream_own_output_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_tuple3_own_tcp_socket_own_input_stream_own_output_stream_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_ip_socket_address_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_ip_socket_address_error_code_t *ptr) { - if (!ptr->is_err) { - wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_free(&ptr->val.ok); - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_bool_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_bool_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_u8_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_u8_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_u64_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_u64_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_result_own_tcp_socket_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_result_own_tcp_socket_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_t *ptr) { - wasi_sockets_0_2_0_rc_2023_10_18_network_ip_socket_address_free(ptr); -} - -void wasi_sockets_0_2_0_rc_2023_10_18_udp_datagram_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_datagram_t *ptr) { - wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_free(&ptr->remote_address); -} - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]udp-socket"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_udp_socket_drop(int32_t handle); - -void wasi_sockets_0_2_0_rc_2023_10_18_udp_udp_socket_drop_own(wasi_sockets_0_2_0_rc_2023_10_18_udp_own_udp_socket_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_udp_socket_drop(handle.__handle); -} - -void wasi_sockets_0_2_0_rc_2023_10_18_udp_udp_socket_drop_borrow(wasi_sockets_0_2_0_rc_2023_10_18_udp_own_udp_socket_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_udp_socket_drop(handle.__handle); -} - -wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket(wasi_sockets_0_2_0_rc_2023_10_18_udp_own_udp_socket_t arg) { - return (wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t) { arg.__handle }; -} - -void wasi_sockets_0_2_0_rc_2023_10_18_udp_result_void_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_result_void_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_udp_list_datagram_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_list_datagram_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - wasi_sockets_0_2_0_rc_2023_10_18_udp_datagram_free(&ptr->ptr[i]); - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_udp_result_list_datagram_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_result_list_datagram_error_code_t *ptr) { - if (!ptr->is_err) { - wasi_sockets_0_2_0_rc_2023_10_18_udp_list_datagram_free(&ptr->val.ok); - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u64_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u64_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_udp_result_ip_socket_address_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_result_ip_socket_address_error_code_t *ptr) { - if (!ptr->is_err) { - wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_free(&ptr->val.ok); - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_udp_result_bool_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_result_bool_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u8_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u8_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_result_own_udp_socket_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_result_own_udp_socket_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void bindings_tuple2_string_string_free(bindings_tuple2_string_string_t *ptr) { - bindings_string_free(&ptr->f0); - bindings_string_free(&ptr->f1); -} - -void bindings_list_tuple2_string_string_free(bindings_list_tuple2_string_string_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - bindings_tuple2_string_string_free(&ptr->ptr[i]); - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void bindings_list_string_free(bindings_list_string_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - bindings_string_free(&ptr->ptr[i]); - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void bindings_option_string_free(bindings_option_string_t *ptr) { - if (ptr->is_some) { - bindings_string_free(&ptr->val); - } -} - -void wasi_cli_0_2_0_rc_2023_10_18_exit_result_void_void_free(wasi_cli_0_2_0_rc_2023_10_18_exit_result_void_void_t *ptr) { - if (!ptr->is_err) { - } -} - -__attribute__((__import_module__("wasi:cli/terminal-input@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]terminal-input"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_terminal_input_terminal_input_drop(int32_t handle); - -void wasi_cli_0_2_0_rc_2023_10_18_terminal_input_terminal_input_drop_own(wasi_cli_0_2_0_rc_2023_10_18_terminal_input_own_terminal_input_t handle) { - __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_terminal_input_terminal_input_drop(handle.__handle); -} - -void wasi_cli_0_2_0_rc_2023_10_18_terminal_input_terminal_input_drop_borrow(wasi_cli_0_2_0_rc_2023_10_18_terminal_input_own_terminal_input_t handle) { - __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_terminal_input_terminal_input_drop(handle.__handle); -} - -wasi_cli_0_2_0_rc_2023_10_18_terminal_input_borrow_terminal_input_t wasi_cli_0_2_0_rc_2023_10_18_terminal_input_borrow_terminal_input(wasi_cli_0_2_0_rc_2023_10_18_terminal_input_own_terminal_input_t arg) { - return (wasi_cli_0_2_0_rc_2023_10_18_terminal_input_borrow_terminal_input_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:cli/terminal-output@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]terminal-output"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_terminal_output_terminal_output_drop(int32_t handle); - -void wasi_cli_0_2_0_rc_2023_10_18_terminal_output_terminal_output_drop_own(wasi_cli_0_2_0_rc_2023_10_18_terminal_output_own_terminal_output_t handle) { - __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_terminal_output_terminal_output_drop(handle.__handle); -} - -void wasi_cli_0_2_0_rc_2023_10_18_terminal_output_terminal_output_drop_borrow(wasi_cli_0_2_0_rc_2023_10_18_terminal_output_own_terminal_output_t handle) { - __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_terminal_output_terminal_output_drop(handle.__handle); -} - -wasi_cli_0_2_0_rc_2023_10_18_terminal_output_borrow_terminal_output_t wasi_cli_0_2_0_rc_2023_10_18_terminal_output_borrow_terminal_output(wasi_cli_0_2_0_rc_2023_10_18_terminal_output_own_terminal_output_t arg) { - return (wasi_cli_0_2_0_rc_2023_10_18_terminal_output_borrow_terminal_output_t) { arg.__handle }; -} - -void wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_option_own_terminal_input_free(wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_option_own_terminal_input_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_option_own_terminal_output_free(wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_option_own_terminal_output_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_option_own_terminal_output_free(wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_option_own_terminal_output_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_method_free(wasi_http_0_2_0_rc_2023_10_18_types_method_t *ptr) { - switch ((int32_t) ptr->tag) { - case 9: { - bindings_string_free(&ptr->val.other); - break; - } - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_scheme_free(wasi_http_0_2_0_rc_2023_10_18_types_scheme_t *ptr) { - switch ((int32_t) ptr->tag) { - case 2: { - bindings_string_free(&ptr->val.other); - break; - } - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_error_free(wasi_http_0_2_0_rc_2023_10_18_types_error_t *ptr) { - switch ((int32_t) ptr->tag) { - case 0: { - bindings_string_free(&ptr->val.invalid_url); - break; - } - case 1: { - bindings_string_free(&ptr->val.timeout_error); - break; - } - case 2: { - bindings_string_free(&ptr->val.protocol_error); - break; - } - case 3: { - bindings_string_free(&ptr->val.unexpected_error); - break; - } - } -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]fields"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_fields_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_10_18_types_fields_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_fields_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_10_18_types_fields_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_fields_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields(wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t arg) { - return (wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]incoming-request"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_incoming_request_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_10_18_types_incoming_request_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_request_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_incoming_request_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_10_18_types_incoming_request_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_request_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_incoming_request_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_request_t arg) { - return (wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]outgoing-request"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_outgoing_request_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_10_18_types_outgoing_request_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_request_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_outgoing_request_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_10_18_types_outgoing_request_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_request_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_outgoing_request_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_request_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_request(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_request_t arg) { - return (wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_request_t) { arg.__handle }; -} - -void bindings_option_u32_free(bindings_option_u32_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_request_options_free(wasi_http_0_2_0_rc_2023_10_18_types_request_options_t *ptr) { - bindings_option_u32_free(&ptr->connect_timeout_ms); - bindings_option_u32_free(&ptr->first_byte_timeout_ms); - bindings_option_u32_free(&ptr->between_bytes_timeout_ms); -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]response-outparam"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_response_outparam_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_10_18_types_response_outparam_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_response_outparam_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_response_outparam_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_10_18_types_response_outparam_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_response_outparam_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_response_outparam_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_10_18_types_borrow_response_outparam_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_response_outparam(wasi_http_0_2_0_rc_2023_10_18_types_own_response_outparam_t arg) { - return (wasi_http_0_2_0_rc_2023_10_18_types_borrow_response_outparam_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]incoming-response"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_incoming_response_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_10_18_types_incoming_response_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_response_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_incoming_response_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_10_18_types_incoming_response_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_response_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_incoming_response_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_response_t arg) { - return (wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]incoming-body"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_incoming_body_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_10_18_types_incoming_body_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_incoming_body_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_10_18_types_incoming_body_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_incoming_body_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_body_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_body(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t arg) { - return (wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_body_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]future-trailers"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_future_trailers_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_10_18_types_future_trailers_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_future_trailers_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_future_trailers_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_10_18_types_future_trailers_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_future_trailers_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_future_trailers_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_trailers_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_trailers(wasi_http_0_2_0_rc_2023_10_18_types_own_future_trailers_t arg) { - return (wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_trailers_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]outgoing-response"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_outgoing_response_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_10_18_types_outgoing_response_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_response_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_outgoing_response_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_10_18_types_outgoing_response_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_response_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_outgoing_response_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_response_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_response(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_response_t arg) { - return (wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_response_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]outgoing-body"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_outgoing_body_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_10_18_types_outgoing_body_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_outgoing_body_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_10_18_types_outgoing_body_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_outgoing_body_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_body_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_body(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t arg) { - return (wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_body_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-10-18"), __import_name__("[resource-drop]future-incoming-response"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_future_incoming_response_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_10_18_types_future_incoming_response_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_future_incoming_response_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_future_incoming_response_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_10_18_types_future_incoming_response_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_future_incoming_response_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_future_incoming_response_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response(wasi_http_0_2_0_rc_2023_10_18_types_own_future_incoming_response_t arg) { - return (wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response_t) { arg.__handle }; -} - -void bindings_tuple2_string_list_u8_free(bindings_tuple2_string_list_u8_t *ptr) { - bindings_string_free(&ptr->f0); -} - -void bindings_list_tuple2_string_list_u8_free(bindings_list_tuple2_string_list_u8_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - bindings_tuple2_string_list_u8_free(&ptr->ptr[i]); - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void bindings_list_list_u8_free(bindings_list_list_u8_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_option_scheme_free(wasi_http_0_2_0_rc_2023_10_18_types_option_scheme_t *ptr) { - if (ptr->is_some) { - wasi_http_0_2_0_rc_2023_10_18_types_scheme_free(&ptr->val); - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_body_void_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_body_void_t *ptr) { - if (!ptr->is_err) { - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_body_void_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_body_void_t *ptr) { - if (!ptr->is_err) { - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_response_error_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_response_error_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_http_0_2_0_rc_2023_10_18_types_error_free(&ptr->val.err); - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_result_own_input_stream_void_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_input_stream_void_t *ptr) { - if (!ptr->is_err) { - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_result_own_trailers_error_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_trailers_error_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_http_0_2_0_rc_2023_10_18_types_error_free(&ptr->val.err); - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_option_result_own_trailers_error_free(wasi_http_0_2_0_rc_2023_10_18_types_option_result_own_trailers_error_t *ptr) { - if (ptr->is_some) { - wasi_http_0_2_0_rc_2023_10_18_types_result_own_trailers_error_free(&ptr->val); - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_result_own_output_stream_void_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_output_stream_void_t *ptr) { - if (!ptr->is_err) { - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_option_own_trailers_free(wasi_http_0_2_0_rc_2023_10_18_types_option_own_trailers_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_response_error_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_response_error_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_http_0_2_0_rc_2023_10_18_types_error_free(&ptr->val.err); - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_result_result_own_incoming_response_error_void_free(wasi_http_0_2_0_rc_2023_10_18_types_result_result_own_incoming_response_error_void_t *ptr) { - if (!ptr->is_err) { - wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_response_error_free(&ptr->val.ok); - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_option_result_result_own_incoming_response_error_void_free(wasi_http_0_2_0_rc_2023_10_18_types_option_result_result_own_incoming_response_error_void_t *ptr) { - if (ptr->is_some) { - wasi_http_0_2_0_rc_2023_10_18_types_result_result_own_incoming_response_error_void_free(&ptr->val); - } -} - -void wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_request_options_free(wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_request_options_t *ptr) { - wasi_http_0_2_0_rc_2023_10_18_types_request_options_free(ptr); -} - -void wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_error_free(wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_error_t *ptr) { - wasi_http_0_2_0_rc_2023_10_18_types_error_free(ptr); -} - -void wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_option_request_options_free(wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_option_request_options_t *ptr) { - if (ptr->is_some) { - wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_request_options_free(&ptr->val); - } -} - -void wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_result_own_future_incoming_response_error_free(wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_result_own_future_incoming_response_error_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_error_free(&ptr->val.err); - } -} - -void exports_wasi_cli_0_2_0_rc_2023_10_18_run_result_void_void_free(exports_wasi_cli_0_2_0_rc_2023_10_18_run_result_void_void_t *ptr) { - if (!ptr->is_err) { - } -} - -void bindings_string_set(bindings_string_t *ret, char*s) { - ret->ptr = (uint8_t*) s; - ret->len = strlen(s); -} - -void bindings_string_dup(bindings_string_t *ret, const char*s) { - ret->len = strlen(s); - ret->ptr = cabi_realloc(NULL, 0, 1, ret->len * 1); - memcpy(ret->ptr, s, ret->len * 1); -} - -void bindings_string_free(bindings_string_t *ret) { - if (ret->len > 0) { - free(ret->ptr); - } - ret->ptr = NULL; - ret->len = 0; -} - -// Component Adapters - -void wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_now(wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t *ret) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_now(ptr); - *ret = (wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 0))), - (uint32_t) (*((int32_t*) (ptr + 8))), - }; -} - -void wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_resolution(wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t *ret) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_resolution(ptr); - *ret = (wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 0))), - (uint32_t) (*((int32_t*) (ptr + 8))), - }; -} - -void wasi_io_0_2_0_rc_2023_10_18_poll_poll_list(wasi_io_0_2_0_rc_2023_10_18_poll_list_borrow_pollable_t *in, bindings_list_u32_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_poll_poll_list((int32_t) (*in).ptr, (int32_t) (*in).len, ptr); - *ret = (bindings_list_u32_t) { (uint32_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -void wasi_io_0_2_0_rc_2023_10_18_poll_poll_one(wasi_io_0_2_0_rc_2023_10_18_poll_borrow_pollable_t in) { - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_poll_poll_one((in).__handle); -} - -wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_instant_t wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_now(void) { - int64_t ret = __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_now(); - return (uint64_t) (ret); -} - -wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_instant_t wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_resolution(void) { - int64_t ret = __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_resolution(); - return (uint64_t) (ret); -} - -wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_own_pollable_t wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_subscribe(wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_instant_t when, bool absolute) { - int32_t ret = __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_subscribe((int64_t) (when), absolute); - return (wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_own_pollable_t) { ret }; -} - -void wasi_clocks_0_2_0_rc_2023_10_18_timezone_display(wasi_clocks_0_2_0_rc_2023_10_18_timezone_datetime_t *when, wasi_clocks_0_2_0_rc_2023_10_18_timezone_timezone_display_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_timezone_display((int64_t) ((*when).seconds), (int32_t) ((*when).nanoseconds), ptr); - *ret = (wasi_clocks_0_2_0_rc_2023_10_18_timezone_timezone_display_t) { - *((int32_t*) (ptr + 0)), - (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }, - (int32_t) (*((uint8_t*) (ptr + 12))), - }; -} - -int32_t wasi_clocks_0_2_0_rc_2023_10_18_timezone_utc_offset(wasi_clocks_0_2_0_rc_2023_10_18_timezone_datetime_t *when) { - int32_t ret = __wasm_import_wasi_clocks_0_2_0_rc_2023_10_18_timezone_utc_offset((int64_t) ((*when).seconds), (int32_t) ((*when).nanoseconds)); - return ret; -} - -void wasi_io_0_2_0_rc_2023_10_18_streams_method_error_to_debug_string(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_error_t self, bindings_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_error_to_debug_string((self).__handle, ptr); - *ret = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_read(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t self, uint64_t len, bindings_list_u8_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_read((self).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_list_u8_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (bindings_list_u8_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_blocking_read(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t self, uint64_t len, bindings_list_u8_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_blocking_read((self).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_list_u8_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (bindings_list_u8_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_skip(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t self, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_skip((self).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_u64_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 12)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_blocking_skip(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t self, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_blocking_skip((self).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_u64_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 12)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_io_0_2_0_rc_2023_10_18_streams_own_pollable_t wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_subscribe(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t self) { - int32_t ret = __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_subscribe((self).__handle); - return (wasi_io_0_2_0_rc_2023_10_18_streams_own_pollable_t) { ret }; -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_check_write(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, uint64_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_check_write((self).__handle, ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_u64_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 12)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_write(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, bindings_list_u8_t *contents, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_write((self).__handle, (int32_t) (*contents).ptr, (int32_t) (*contents).len, ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_void_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_write_and_flush(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, bindings_list_u8_t *contents, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_write_and_flush((self).__handle, (int32_t) (*contents).ptr, (int32_t) (*contents).len, ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_void_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_flush(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_flush((self).__handle, ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_void_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_flush(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_flush((self).__handle, ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_void_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_io_0_2_0_rc_2023_10_18_streams_own_pollable_t wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_subscribe(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self) { - int32_t ret = __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_subscribe((self).__handle); - return (wasi_io_0_2_0_rc_2023_10_18_streams_own_pollable_t) { ret }; -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_write_zeroes(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, uint64_t len, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_write_zeroes((self).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_void_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_write_zeroes_and_flush(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, uint64_t len, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_write_zeroes_and_flush((self).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_void_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_splice(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t src, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_splice((self).__handle, (src).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_u64_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 12)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_splice(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t src, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_splice((self).__handle, (src).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_u64_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 12)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_forward(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t src, uint64_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_forward((self).__handle, (src).__handle, ptr); - wasi_io_0_2_0_rc_2023_10_18_streams_result_u64_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t) { *((int32_t*) (ptr + 12)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_read_via_stream(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_10_18_types_own_input_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_read_via_stream((self).__handle, (int64_t) (offset), ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_input_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_10_18_types_own_input_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_write_via_stream(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_10_18_types_own_output_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_write_via_stream((self).__handle, (int64_t) (offset), ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_output_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_10_18_types_own_output_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_append_via_stream(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_own_output_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_append_via_stream((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_output_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_10_18_types_own_output_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_advise(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t length, wasi_filesystem_0_2_0_rc_2023_10_18_types_advice_t advice, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_advise((self).__handle, (int64_t) (offset), (int64_t) (length), (int32_t) advice, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_sync_data(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_sync_data((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_get_flags(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_flags_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_get_flags((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_flags_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_get_type(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_type_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_get_type((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_type_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_set_size(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t size, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_set_size((self).__handle, (int64_t) (size), ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_set_times(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_new_timestamp_t *data_access_timestamp, wasi_filesystem_0_2_0_rc_2023_10_18_types_new_timestamp_t *data_modification_timestamp, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t variant; - int64_t variant2; - int32_t variant3; - switch ((int32_t) (*data_access_timestamp).tag) { - case 0: { - variant = 0; - variant2 = 0; - variant3 = 0; - break; - } - case 1: { - variant = 1; - variant2 = 0; - variant3 = 0; - break; - } - case 2: { - const wasi_filesystem_0_2_0_rc_2023_10_18_types_datetime_t *payload1 = &(*data_access_timestamp).val.timestamp; - variant = 2; - variant2 = (int64_t) ((*payload1).seconds); - variant3 = (int32_t) ((*payload1).nanoseconds); - break; - } - } - int32_t variant7; - int64_t variant8; - int32_t variant9; - switch ((int32_t) (*data_modification_timestamp).tag) { - case 0: { - variant7 = 0; - variant8 = 0; - variant9 = 0; - break; - } - case 1: { - variant7 = 1; - variant8 = 0; - variant9 = 0; - break; - } - case 2: { - const wasi_filesystem_0_2_0_rc_2023_10_18_types_datetime_t *payload6 = &(*data_modification_timestamp).val.timestamp; - variant7 = 2; - variant8 = (int64_t) ((*payload6).seconds); - variant9 = (int32_t) ((*payload6).nanoseconds); - break; - } - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_set_times((self).__handle, variant, variant2, variant3, variant7, variant8, variant9, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_read(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t length, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t offset, bindings_tuple2_list_u8_bool_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_read((self).__handle, (int64_t) (length), (int64_t) (offset), ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_tuple2_list_u8_bool_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (bindings_tuple2_list_u8_bool_t) { - (bindings_list_u8_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }, - (int32_t) (*((uint8_t*) (ptr + 12))), - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_write(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_list_u8_t *buffer, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_write((self).__handle, (int32_t) (*buffer).ptr, (int32_t) (*buffer).len, (int64_t) (offset), ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_filesize_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_read_directory(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_own_directory_entry_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_read_directory((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_directory_entry_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_10_18_types_own_directory_entry_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_sync(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_sync((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_create_directory_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_create_directory_at((self).__handle, (int32_t) (*path).ptr, (int32_t) (*path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_stat(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_stat_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[104]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_stat((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_stat_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 40))), - (uint32_t) (*((int32_t*) (ptr + 48))), - }; - break; - } - } - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_t option0; - switch ((int32_t) (*((uint8_t*) (ptr + 56)))) { - case 0: { - option0.is_some = false; - break; - } - case 1: { - option0.is_some = true; - option0.val = (wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 64))), - (uint32_t) (*((int32_t*) (ptr + 72))), - }; - break; - } - } - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_t option1; - switch ((int32_t) (*((uint8_t*) (ptr + 80)))) { - case 0: { - option1.is_some = false; - break; - } - case 1: { - option1.is_some = true; - option1.val = (wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 88))), - (uint32_t) (*((int32_t*) (ptr + 96))), - }; - break; - } - } - - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_stat_t) { - (int32_t) (*((uint8_t*) (ptr + 8))), - (uint64_t) (*((int64_t*) (ptr + 16))), - (uint64_t) (*((int64_t*) (ptr + 24))), - option, - option0, - option1, - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_stat_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_stat_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[104]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_stat_at((self).__handle, path_flags, (int32_t) (*path).ptr, (int32_t) (*path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_stat_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 40))), - (uint32_t) (*((int32_t*) (ptr + 48))), - }; - break; - } - } - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_t option0; - switch ((int32_t) (*((uint8_t*) (ptr + 56)))) { - case 0: { - option0.is_some = false; - break; - } - case 1: { - option0.is_some = true; - option0.val = (wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 64))), - (uint32_t) (*((int32_t*) (ptr + 72))), - }; - break; - } - } - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_t option1; - switch ((int32_t) (*((uint8_t*) (ptr + 80)))) { - case 0: { - option1.is_some = false; - break; - } - case 1: { - option1.is_some = true; - option1.val = (wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 88))), - (uint32_t) (*((int32_t*) (ptr + 96))), - }; - break; - } - } - - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_stat_t) { - (int32_t) (*((uint8_t*) (ptr + 8))), - (uint64_t) (*((int64_t*) (ptr + 16))), - (uint64_t) (*((int64_t*) (ptr + 24))), - option, - option0, - option1, - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_set_times_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_new_timestamp_t *data_access_timestamp, wasi_filesystem_0_2_0_rc_2023_10_18_types_new_timestamp_t *data_modification_timestamp, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t variant; - int64_t variant2; - int32_t variant3; - switch ((int32_t) (*data_access_timestamp).tag) { - case 0: { - variant = 0; - variant2 = 0; - variant3 = 0; - break; - } - case 1: { - variant = 1; - variant2 = 0; - variant3 = 0; - break; - } - case 2: { - const wasi_filesystem_0_2_0_rc_2023_10_18_types_datetime_t *payload1 = &(*data_access_timestamp).val.timestamp; - variant = 2; - variant2 = (int64_t) ((*payload1).seconds); - variant3 = (int32_t) ((*payload1).nanoseconds); - break; - } - } - int32_t variant7; - int64_t variant8; - int32_t variant9; - switch ((int32_t) (*data_modification_timestamp).tag) { - case 0: { - variant7 = 0; - variant8 = 0; - variant9 = 0; - break; - } - case 1: { - variant7 = 1; - variant8 = 0; - variant9 = 0; - break; - } - case 2: { - const wasi_filesystem_0_2_0_rc_2023_10_18_types_datetime_t *payload6 = &(*data_modification_timestamp).val.timestamp; - variant7 = 2; - variant8 = (int64_t) ((*payload6).seconds); - variant9 = (int32_t) ((*payload6).nanoseconds); - break; - } - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_set_times_at((self).__handle, path_flags, (int32_t) (*path).ptr, (int32_t) (*path).len, variant, variant2, variant3, variant7, variant8, variant9, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_link_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t old_path_flags, bindings_string_t *old_path, wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t new_descriptor, bindings_string_t *new_path, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_link_at((self).__handle, old_path_flags, (int32_t) (*old_path).ptr, (int32_t) (*old_path).len, (new_descriptor).__handle, (int32_t) (*new_path).ptr, (int32_t) (*new_path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_open_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_open_flags_t open_flags, wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_flags_t flags, wasi_filesystem_0_2_0_rc_2023_10_18_types_modes_t modes, wasi_filesystem_0_2_0_rc_2023_10_18_types_own_descriptor_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_open_at((self).__handle, path_flags, (int32_t) (*path).ptr, (int32_t) (*path).len, open_flags, flags, modes, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_descriptor_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_10_18_types_own_descriptor_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_readlink_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_string_t *path, bindings_string_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_readlink_at((self).__handle, (int32_t) (*path).ptr, (int32_t) (*path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_string_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_remove_directory_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_remove_directory_at((self).__handle, (int32_t) (*path).ptr, (int32_t) (*path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_rename_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_string_t *old_path, wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t new_descriptor, bindings_string_t *new_path, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_rename_at((self).__handle, (int32_t) (*old_path).ptr, (int32_t) (*old_path).len, (new_descriptor).__handle, (int32_t) (*new_path).ptr, (int32_t) (*new_path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_symlink_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_string_t *old_path, bindings_string_t *new_path, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_symlink_at((self).__handle, (int32_t) (*old_path).ptr, (int32_t) (*old_path).len, (int32_t) (*new_path).ptr, (int32_t) (*new_path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_access_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_access_type_t *type, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t variant; - int32_t variant1; - switch ((int32_t) (*type).tag) { - case 0: { - const wasi_filesystem_0_2_0_rc_2023_10_18_types_modes_t *payload = &(*type).val.access; - variant = 0; - variant1 = *payload; - break; - } - case 1: { - variant = 1; - variant1 = 0; - break; - } - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_access_at((self).__handle, path_flags, (int32_t) (*path).ptr, (int32_t) (*path).len, variant, variant1, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_unlink_file_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_unlink_file_at((self).__handle, (int32_t) (*path).ptr, (int32_t) (*path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_change_file_permissions_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_modes_t modes, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_change_file_permissions_at((self).__handle, path_flags, (int32_t) (*path).ptr, (int32_t) (*path).len, modes, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_change_directory_permissions_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_modes_t modes, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_change_directory_permissions_at((self).__handle, path_flags, (int32_t) (*path).ptr, (int32_t) (*path).len, modes, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_lock_shared(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_lock_shared((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_lock_exclusive(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_lock_exclusive((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_try_lock_shared(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_try_lock_shared((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_try_lock_exclusive(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_try_lock_exclusive((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_unlock(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_unlock((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_is_same_object(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t other) { - int32_t ret = __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_is_same_object((self).__handle, (other).__handle); - return ret; -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_metadata_hash(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_metadata_hash_value_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[24]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_metadata_hash((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_metadata_hash_value_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_10_18_types_metadata_hash_value_t) { - (uint64_t) (*((int64_t*) (ptr + 8))), - (uint64_t) (*((int64_t*) (ptr + 16))), - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_metadata_hash_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_metadata_hash_value_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[24]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_metadata_hash_at((self).__handle, path_flags, (int32_t) (*path).ptr, (int32_t) (*path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_metadata_hash_value_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_10_18_types_metadata_hash_value_t) { - (uint64_t) (*((int64_t*) (ptr + 8))), - (uint64_t) (*((int64_t*) (ptr + 16))), - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_directory_entry_stream_read_directory_entry(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_directory_entry_stream_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_option_directory_entry_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[20]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_method_directory_entry_stream_read_directory_entry((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_result_option_directory_entry_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_directory_entry_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 4)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_t) { - (int32_t) (*((uint8_t*) (ptr + 8))), - (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 12))), (size_t)(*((int32_t*) (ptr + 16))) }, - }; - break; - } - } - - result.val.ok = option; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_10_18_types_filesystem_error_code(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_error_t err_, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *ret) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_types_filesystem_error_code((err_).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_error_code_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - *ret = option.val; - return option.is_some; -} - -void wasi_filesystem_0_2_0_rc_2023_10_18_preopens_get_directories(wasi_filesystem_0_2_0_rc_2023_10_18_preopens_list_tuple2_own_descriptor_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_10_18_preopens_get_directories(ptr); - *ret = (wasi_filesystem_0_2_0_rc_2023_10_18_preopens_list_tuple2_own_descriptor_string_t) { (wasi_filesystem_0_2_0_rc_2023_10_18_preopens_tuple2_own_descriptor_string_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -wasi_sockets_0_2_0_rc_2023_10_18_instance_network_own_network_t wasi_sockets_0_2_0_rc_2023_10_18_instance_network_instance_network(void) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_instance_network_instance_network(); - return (wasi_sockets_0_2_0_rc_2023_10_18_instance_network_own_network_t) { ret }; -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_resolve_addresses(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_network_t network, bindings_string_t *name, wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_ip_address_family_t *maybe_address_family, bool include_unavailable, wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_resolve_address_stream_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_family_t address_family; - address_family.is_some = maybe_address_family != NULL;if (maybe_address_family) { - address_family.val = *maybe_address_family; - } - int32_t option; - int32_t option1; - if ((address_family).is_some) { - const wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_ip_address_family_t *payload0 = &(address_family).val; - option = 1; - option1 = (int32_t) *payload0; - } else { - option = 0; - option1 = 0; - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_resolve_addresses((network).__handle, (int32_t) (*name).ptr, (int32_t) (*name).len, option, option1, include_unavailable, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_result_own_resolve_address_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_resolve_address_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_method_resolve_address_stream_resolve_next_address(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_resolve_address_stream_t self, wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_error_code_t *err) { - __attribute__((__aligned__(2))) - uint8_t ret_area[22]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_method_resolve_address_stream_resolve_next_address((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_result_option_ip_address_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 2)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.ipv4 = (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_address_t) { - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 6)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 7)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 8)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 9)))), - }; - break; - } - case 1: { - variant.val.ipv6 = (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 6)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 10)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 12)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 14)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 16)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 18)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 20)))), - }; - break; - } - } - - option.val = variant; - break; - } - } - - result.val.ok = option; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 2))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_pollable_t wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_method_resolve_address_stream_subscribe(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_resolve_address_stream_t self) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_method_resolve_address_stream_subscribe((self).__handle); - return (wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_pollable_t) { ret }; -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_start_bind(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_t *local_address, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t variant; - int32_t variant1; - int32_t variant2; - int32_t variant3; - int32_t variant4; - int32_t variant5; - int32_t variant6; - int32_t variant7; - int32_t variant8; - int32_t variant9; - int32_t variant10; - int32_t variant11; - switch ((int32_t) (*local_address).tag) { - case 0: { - const wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_socket_address_t *payload = &(*local_address).val.ipv4; - variant = 0; - variant1 = (int32_t) ((*payload).port); - variant2 = (int32_t) (((*payload).address).f0); - variant3 = (int32_t) (((*payload).address).f1); - variant4 = (int32_t) (((*payload).address).f2); - variant5 = (int32_t) (((*payload).address).f3); - variant6 = 0; - variant7 = 0; - variant8 = 0; - variant9 = 0; - variant10 = 0; - variant11 = 0; - break; - } - case 1: { - const wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_socket_address_t *payload0 = &(*local_address).val.ipv6; - variant = 1; - variant1 = (int32_t) ((*payload0).port); - variant2 = (int32_t) ((*payload0).flow_info); - variant3 = (int32_t) (((*payload0).address).f0); - variant4 = (int32_t) (((*payload0).address).f1); - variant5 = (int32_t) (((*payload0).address).f2); - variant6 = (int32_t) (((*payload0).address).f3); - variant7 = (int32_t) (((*payload0).address).f4); - variant8 = (int32_t) (((*payload0).address).f5); - variant9 = (int32_t) (((*payload0).address).f6); - variant10 = (int32_t) (((*payload0).address).f7); - variant11 = (int32_t) ((*payload0).scope_id); - break; - } - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_start_bind((self).__handle, (network).__handle, variant, variant1, variant2, variant3, variant4, variant5, variant6, variant7, variant8, variant9, variant10, variant11, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_finish_bind(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_finish_bind((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_start_connect(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_t *remote_address, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t variant; - int32_t variant1; - int32_t variant2; - int32_t variant3; - int32_t variant4; - int32_t variant5; - int32_t variant6; - int32_t variant7; - int32_t variant8; - int32_t variant9; - int32_t variant10; - int32_t variant11; - switch ((int32_t) (*remote_address).tag) { - case 0: { - const wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_socket_address_t *payload = &(*remote_address).val.ipv4; - variant = 0; - variant1 = (int32_t) ((*payload).port); - variant2 = (int32_t) (((*payload).address).f0); - variant3 = (int32_t) (((*payload).address).f1); - variant4 = (int32_t) (((*payload).address).f2); - variant5 = (int32_t) (((*payload).address).f3); - variant6 = 0; - variant7 = 0; - variant8 = 0; - variant9 = 0; - variant10 = 0; - variant11 = 0; - break; - } - case 1: { - const wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_socket_address_t *payload0 = &(*remote_address).val.ipv6; - variant = 1; - variant1 = (int32_t) ((*payload0).port); - variant2 = (int32_t) ((*payload0).flow_info); - variant3 = (int32_t) (((*payload0).address).f0); - variant4 = (int32_t) (((*payload0).address).f1); - variant5 = (int32_t) (((*payload0).address).f2); - variant6 = (int32_t) (((*payload0).address).f3); - variant7 = (int32_t) (((*payload0).address).f4); - variant8 = (int32_t) (((*payload0).address).f5); - variant9 = (int32_t) (((*payload0).address).f6); - variant10 = (int32_t) (((*payload0).address).f7); - variant11 = (int32_t) ((*payload0).scope_id); - break; - } - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_start_connect((self).__handle, (network).__handle, variant, variant1, variant2, variant3, variant4, variant5, variant6, variant7, variant8, variant9, variant10, variant11, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_finish_connect(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_tuple2_own_input_stream_own_output_stream_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_finish_connect((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_tuple2_own_input_stream_own_output_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_sockets_0_2_0_rc_2023_10_18_tcp_tuple2_own_input_stream_own_output_stream_t) { - (wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_input_stream_t) { *((int32_t*) (ptr + 4)) }, - (wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_output_stream_t) { *((int32_t*) (ptr + 8)) }, - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_start_listen(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_start_listen((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_finish_listen(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_finish_listen((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_accept(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_tuple3_own_tcp_socket_own_input_stream_own_output_stream_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_accept((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_tuple3_own_tcp_socket_own_input_stream_own_output_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_sockets_0_2_0_rc_2023_10_18_tcp_tuple3_own_tcp_socket_own_input_stream_own_output_stream_t) { - (wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_tcp_socket_t) { *((int32_t*) (ptr + 4)) }, - (wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_input_stream_t) { *((int32_t*) (ptr + 8)) }, - (wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_output_stream_t) { *((int32_t*) (ptr + 12)) }, - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_local_address(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[36]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_local_address((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_ip_socket_address_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_sockets_0_2_0_rc_2023_10_18_network_ip_socket_address_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.ipv4 = (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_address_t) { - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 10)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 11)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 12)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 13)))), - }, - }; - break; - } - case 1: { - variant.val.ipv6 = (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (uint32_t) (*((int32_t*) (ptr + 12))), - (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 16)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 18)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 20)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 22)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 24)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 26)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 28)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 30)))), - }, - (uint32_t) (*((int32_t*) (ptr + 32))), - }; - break; - } - } - - result.val.ok = variant; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_remote_address(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[36]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_remote_address((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_ip_socket_address_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_sockets_0_2_0_rc_2023_10_18_network_ip_socket_address_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.ipv4 = (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_address_t) { - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 10)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 11)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 12)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 13)))), - }, - }; - break; - } - case 1: { - variant.val.ipv6 = (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (uint32_t) (*((int32_t*) (ptr + 12))), - (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 16)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 18)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 20)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 22)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 24)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 26)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 28)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 30)))), - }, - (uint32_t) (*((int32_t*) (ptr + 32))), - }; - break; - } - } - - result.val.ok = variant; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_address_family_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_address_family(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_address_family((self).__handle); - return ret; -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_ipv6_only(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_ipv6_only((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_bool_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_ipv6_only(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_ipv6_only((self).__handle, value, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_listen_backlog_size(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_listen_backlog_size((self).__handle, (int64_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_keep_alive(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_keep_alive((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_bool_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_keep_alive(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_keep_alive((self).__handle, value, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_no_delay(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_no_delay((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_bool_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_no_delay(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_no_delay((self).__handle, value, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_unicast_hop_limit(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint8_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_unicast_hop_limit((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_u8_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 1)))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_unicast_hop_limit(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint8_t value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_unicast_hop_limit((self).__handle, (int32_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_receive_buffer_size((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_u64_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_receive_buffer_size((self).__handle, (int64_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_send_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_send_buffer_size((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_u64_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_send_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_send_buffer_size((self).__handle, (int64_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_pollable_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_subscribe(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_subscribe((self).__handle); - return (wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_pollable_t) { ret }; -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_shutdown(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_shutdown_type_t shutdown_type, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_shutdown((self).__handle, (int32_t) shutdown_type, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_create_tcp_socket(wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_ip_address_family_t address_family, wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_own_tcp_socket_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_create_tcp_socket((int32_t) address_family, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_result_own_tcp_socket_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_own_tcp_socket_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_start_bind(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_t *local_address, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t variant; - int32_t variant1; - int32_t variant2; - int32_t variant3; - int32_t variant4; - int32_t variant5; - int32_t variant6; - int32_t variant7; - int32_t variant8; - int32_t variant9; - int32_t variant10; - int32_t variant11; - switch ((int32_t) (*local_address).tag) { - case 0: { - const wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_socket_address_t *payload = &(*local_address).val.ipv4; - variant = 0; - variant1 = (int32_t) ((*payload).port); - variant2 = (int32_t) (((*payload).address).f0); - variant3 = (int32_t) (((*payload).address).f1); - variant4 = (int32_t) (((*payload).address).f2); - variant5 = (int32_t) (((*payload).address).f3); - variant6 = 0; - variant7 = 0; - variant8 = 0; - variant9 = 0; - variant10 = 0; - variant11 = 0; - break; - } - case 1: { - const wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_socket_address_t *payload0 = &(*local_address).val.ipv6; - variant = 1; - variant1 = (int32_t) ((*payload0).port); - variant2 = (int32_t) ((*payload0).flow_info); - variant3 = (int32_t) (((*payload0).address).f0); - variant4 = (int32_t) (((*payload0).address).f1); - variant5 = (int32_t) (((*payload0).address).f2); - variant6 = (int32_t) (((*payload0).address).f3); - variant7 = (int32_t) (((*payload0).address).f4); - variant8 = (int32_t) (((*payload0).address).f5); - variant9 = (int32_t) (((*payload0).address).f6); - variant10 = (int32_t) (((*payload0).address).f7); - variant11 = (int32_t) ((*payload0).scope_id); - break; - } - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_start_bind((self).__handle, (network).__handle, variant, variant1, variant2, variant3, variant4, variant5, variant6, variant7, variant8, variant9, variant10, variant11, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_finish_bind(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_finish_bind((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_start_connect(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_t *remote_address, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t variant; - int32_t variant1; - int32_t variant2; - int32_t variant3; - int32_t variant4; - int32_t variant5; - int32_t variant6; - int32_t variant7; - int32_t variant8; - int32_t variant9; - int32_t variant10; - int32_t variant11; - switch ((int32_t) (*remote_address).tag) { - case 0: { - const wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_socket_address_t *payload = &(*remote_address).val.ipv4; - variant = 0; - variant1 = (int32_t) ((*payload).port); - variant2 = (int32_t) (((*payload).address).f0); - variant3 = (int32_t) (((*payload).address).f1); - variant4 = (int32_t) (((*payload).address).f2); - variant5 = (int32_t) (((*payload).address).f3); - variant6 = 0; - variant7 = 0; - variant8 = 0; - variant9 = 0; - variant10 = 0; - variant11 = 0; - break; - } - case 1: { - const wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_socket_address_t *payload0 = &(*remote_address).val.ipv6; - variant = 1; - variant1 = (int32_t) ((*payload0).port); - variant2 = (int32_t) ((*payload0).flow_info); - variant3 = (int32_t) (((*payload0).address).f0); - variant4 = (int32_t) (((*payload0).address).f1); - variant5 = (int32_t) (((*payload0).address).f2); - variant6 = (int32_t) (((*payload0).address).f3); - variant7 = (int32_t) (((*payload0).address).f4); - variant8 = (int32_t) (((*payload0).address).f5); - variant9 = (int32_t) (((*payload0).address).f6); - variant10 = (int32_t) (((*payload0).address).f7); - variant11 = (int32_t) ((*payload0).scope_id); - break; - } - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_start_connect((self).__handle, (network).__handle, variant, variant1, variant2, variant3, variant4, variant5, variant6, variant7, variant8, variant9, variant10, variant11, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_finish_connect(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_finish_connect((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_receive(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint64_t max_results, wasi_sockets_0_2_0_rc_2023_10_18_udp_list_datagram_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_receive((self).__handle, (int64_t) (max_results), ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_list_datagram_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_sockets_0_2_0_rc_2023_10_18_udp_list_datagram_t) { (wasi_sockets_0_2_0_rc_2023_10_18_udp_datagram_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_send(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_list_datagram_t *datagrams, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_send((self).__handle, (int32_t) (*datagrams).ptr, (int32_t) (*datagrams).len, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u64_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_local_address(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[36]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_local_address((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_ip_socket_address_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_sockets_0_2_0_rc_2023_10_18_network_ip_socket_address_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.ipv4 = (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_address_t) { - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 10)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 11)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 12)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 13)))), - }, - }; - break; - } - case 1: { - variant.val.ipv6 = (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (uint32_t) (*((int32_t*) (ptr + 12))), - (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 16)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 18)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 20)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 22)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 24)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 26)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 28)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 30)))), - }, - (uint32_t) (*((int32_t*) (ptr + 32))), - }; - break; - } - } - - result.val.ok = variant; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_remote_address(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[36]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_remote_address((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_ip_socket_address_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_sockets_0_2_0_rc_2023_10_18_network_ip_socket_address_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.ipv4 = (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_address_t) { - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 10)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 11)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 12)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 13)))), - }, - }; - break; - } - case 1: { - variant.val.ipv6 = (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (uint32_t) (*((int32_t*) (ptr + 12))), - (wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 16)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 18)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 20)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 22)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 24)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 26)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 28)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 30)))), - }, - (uint32_t) (*((int32_t*) (ptr + 32))), - }; - break; - } - } - - result.val.ok = variant; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_address_family_t wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_address_family(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_address_family((self).__handle); - return ret; -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_ipv6_only(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_ipv6_only((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_bool_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_ipv6_only(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_ipv6_only((self).__handle, value, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_unicast_hop_limit(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint8_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_unicast_hop_limit((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u8_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 1)))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_unicast_hop_limit(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint8_t value, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_unicast_hop_limit((self).__handle, (int32_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_receive_buffer_size((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u64_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_receive_buffer_size((self).__handle, (int64_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_send_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_send_buffer_size((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u64_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_send_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_send_buffer_size((self).__handle, (int64_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_sockets_0_2_0_rc_2023_10_18_udp_own_pollable_t wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_subscribe(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_subscribe((self).__handle); - return (wasi_sockets_0_2_0_rc_2023_10_18_udp_own_pollable_t) { ret }; -} - -bool wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_create_udp_socket(wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_ip_address_family_t address_family, wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_own_udp_socket_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_create_udp_socket((int32_t) address_family, ptr); - wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_result_own_udp_socket_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_own_udp_socket_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -void wasi_random_0_2_0_rc_2023_10_18_random_get_random_bytes(uint64_t len, bindings_list_u8_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_random_0_2_0_rc_2023_10_18_random_get_random_bytes((int64_t) (len), ptr); - *ret = (bindings_list_u8_t) { (uint8_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -uint64_t wasi_random_0_2_0_rc_2023_10_18_random_get_random_u64(void) { - int64_t ret = __wasm_import_wasi_random_0_2_0_rc_2023_10_18_random_get_random_u64(); - return (uint64_t) (ret); -} - -void wasi_random_0_2_0_rc_2023_10_18_insecure_get_insecure_random_bytes(uint64_t len, bindings_list_u8_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_random_0_2_0_rc_2023_10_18_insecure_get_insecure_random_bytes((int64_t) (len), ptr); - *ret = (bindings_list_u8_t) { (uint8_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -uint64_t wasi_random_0_2_0_rc_2023_10_18_insecure_get_insecure_random_u64(void) { - int64_t ret = __wasm_import_wasi_random_0_2_0_rc_2023_10_18_insecure_get_insecure_random_u64(); - return (uint64_t) (ret); -} - -void wasi_random_0_2_0_rc_2023_10_18_insecure_seed_insecure_seed(bindings_tuple2_u64_u64_t *ret) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_random_0_2_0_rc_2023_10_18_insecure_seed_insecure_seed(ptr); - *ret = (bindings_tuple2_u64_u64_t) { - (uint64_t) (*((int64_t*) (ptr + 0))), - (uint64_t) (*((int64_t*) (ptr + 8))), - }; -} - -void wasi_cli_0_2_0_rc_2023_10_18_environment_get_environment(bindings_list_tuple2_string_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_environment_get_environment(ptr); - *ret = (bindings_list_tuple2_string_string_t) { (bindings_tuple2_string_string_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -void wasi_cli_0_2_0_rc_2023_10_18_environment_get_arguments(bindings_list_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_environment_get_arguments(ptr); - *ret = (bindings_list_string_t) { (bindings_string_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -bool wasi_cli_0_2_0_rc_2023_10_18_environment_initial_cwd(bindings_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_environment_initial_cwd(ptr); - bindings_option_string_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -void wasi_cli_0_2_0_rc_2023_10_18_exit_exit(wasi_cli_0_2_0_rc_2023_10_18_exit_result_void_void_t *status) { - int32_t result; - if ((*status).is_err) { - result = 1; - } else { - result = 0; - } - __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_exit_exit(result); -} - -wasi_cli_0_2_0_rc_2023_10_18_stdin_own_input_stream_t wasi_cli_0_2_0_rc_2023_10_18_stdin_get_stdin(void) { - int32_t ret = __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_stdin_get_stdin(); - return (wasi_cli_0_2_0_rc_2023_10_18_stdin_own_input_stream_t) { ret }; -} - -wasi_cli_0_2_0_rc_2023_10_18_stdout_own_output_stream_t wasi_cli_0_2_0_rc_2023_10_18_stdout_get_stdout(void) { - int32_t ret = __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_stdout_get_stdout(); - return (wasi_cli_0_2_0_rc_2023_10_18_stdout_own_output_stream_t) { ret }; -} - -wasi_cli_0_2_0_rc_2023_10_18_stderr_own_output_stream_t wasi_cli_0_2_0_rc_2023_10_18_stderr_get_stderr(void) { - int32_t ret = __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_stderr_get_stderr(); - return (wasi_cli_0_2_0_rc_2023_10_18_stderr_own_output_stream_t) { ret }; -} - -bool wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_get_terminal_stdin(wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_own_terminal_input_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_get_terminal_stdin(ptr); - wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_option_own_terminal_input_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_own_terminal_input_t) { *((int32_t*) (ptr + 4)) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_get_terminal_stdout(wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_own_terminal_output_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_get_terminal_stdout(ptr); - wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_option_own_terminal_output_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_own_terminal_output_t) { *((int32_t*) (ptr + 4)) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_get_terminal_stderr(wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_own_terminal_output_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_get_terminal_stderr(ptr); - wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_option_own_terminal_output_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_own_terminal_output_t) { *((int32_t*) (ptr + 4)) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t wasi_http_0_2_0_rc_2023_10_18_types_constructor_fields(bindings_list_tuple2_string_list_u8_t *entries) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_constructor_fields((int32_t) (*entries).ptr, (int32_t) (*entries).len); - return (wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t) { ret }; -} - -void wasi_http_0_2_0_rc_2023_10_18_types_method_fields_get(wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t self, bindings_string_t *name, bindings_list_list_u8_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_fields_get((self).__handle, (int32_t) (*name).ptr, (int32_t) (*name).len, ptr); - *ret = (bindings_list_list_u8_t) { (bindings_list_u8_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -void wasi_http_0_2_0_rc_2023_10_18_types_method_fields_set(wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t self, bindings_string_t *name, bindings_list_list_u8_t *value) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_fields_set((self).__handle, (int32_t) (*name).ptr, (int32_t) (*name).len, (int32_t) (*value).ptr, (int32_t) (*value).len); -} - -void wasi_http_0_2_0_rc_2023_10_18_types_method_fields_delete(wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t self, bindings_string_t *name) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_fields_delete((self).__handle, (int32_t) (*name).ptr, (int32_t) (*name).len); -} - -void wasi_http_0_2_0_rc_2023_10_18_types_method_fields_append(wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t self, bindings_string_t *name, bindings_list_u8_t *value) { - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_fields_append((self).__handle, (int32_t) (*name).ptr, (int32_t) (*name).len, (int32_t) (*value).ptr, (int32_t) (*value).len); -} - -void wasi_http_0_2_0_rc_2023_10_18_types_method_fields_entries(wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t self, bindings_list_tuple2_string_list_u8_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_fields_entries((self).__handle, ptr); - *ret = (bindings_list_tuple2_string_list_u8_t) { (bindings_tuple2_string_list_u8_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t wasi_http_0_2_0_rc_2023_10_18_types_method_fields_clone(wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_fields_clone((self).__handle); - return (wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t) { ret }; -} - -void wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_method(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t self, wasi_http_0_2_0_rc_2023_10_18_types_method_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_method((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_10_18_types_method_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 0))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - break; - } - case 2: { - break; - } - case 3: { - break; - } - case 4: { - break; - } - case 5: { - break; - } - case 6: { - break; - } - case 7: { - break; - } - case 8: { - break; - } - case 9: { - variant.val.other = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - } - *ret = variant; -} - -bool wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_path_with_query(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t self, bindings_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_path_with_query((self).__handle, ptr); - bindings_option_string_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_scheme(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t self, wasi_http_0_2_0_rc_2023_10_18_types_scheme_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_scheme((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_10_18_types_option_scheme_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - wasi_http_0_2_0_rc_2023_10_18_types_scheme_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - break; - } - case 2: { - variant.val.other = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 8))), (size_t)(*((int32_t*) (ptr + 12))) }; - break; - } - } - - option.val = variant; - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_authority(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t self, bindings_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_authority((self).__handle, ptr); - bindings_option_string_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -wasi_http_0_2_0_rc_2023_10_18_types_own_headers_t wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_headers(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_headers((self).__handle); - return (wasi_http_0_2_0_rc_2023_10_18_types_own_headers_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_consume(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t self, wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_consume((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_body_void_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - return 0; - } -} - -wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_request_t wasi_http_0_2_0_rc_2023_10_18_types_constructor_outgoing_request(wasi_http_0_2_0_rc_2023_10_18_types_method_t *method, bindings_string_t *maybe_path_with_query, wasi_http_0_2_0_rc_2023_10_18_types_scheme_t *maybe_scheme, bindings_string_t *maybe_authority, wasi_http_0_2_0_rc_2023_10_18_types_borrow_headers_t headers) { - bindings_option_string_t path_with_query; - path_with_query.is_some = maybe_path_with_query != NULL;if (maybe_path_with_query) { - path_with_query.val = *maybe_path_with_query; - } - wasi_http_0_2_0_rc_2023_10_18_types_option_scheme_t scheme; - scheme.is_some = maybe_scheme != NULL;if (maybe_scheme) { - scheme.val = *maybe_scheme; - } - bindings_option_string_t authority; - authority.is_some = maybe_authority != NULL;if (maybe_authority) { - authority.val = *maybe_authority; - } - int32_t variant; - int32_t variant9; - int32_t variant10; - switch ((int32_t) (*method).tag) { - case 0: { - variant = 0; - variant9 = 0; - variant10 = 0; - break; - } - case 1: { - variant = 1; - variant9 = 0; - variant10 = 0; - break; - } - case 2: { - variant = 2; - variant9 = 0; - variant10 = 0; - break; - } - case 3: { - variant = 3; - variant9 = 0; - variant10 = 0; - break; - } - case 4: { - variant = 4; - variant9 = 0; - variant10 = 0; - break; - } - case 5: { - variant = 5; - variant9 = 0; - variant10 = 0; - break; - } - case 6: { - variant = 6; - variant9 = 0; - variant10 = 0; - break; - } - case 7: { - variant = 7; - variant9 = 0; - variant10 = 0; - break; - } - case 8: { - variant = 8; - variant9 = 0; - variant10 = 0; - break; - } - case 9: { - const bindings_string_t *payload8 = &(*method).val.other; - variant = 9; - variant9 = (int32_t) (*payload8).ptr; - variant10 = (int32_t) (*payload8).len; - break; - } - } - int32_t option; - int32_t option13; - int32_t option14; - if ((path_with_query).is_some) { - const bindings_string_t *payload12 = &(path_with_query).val; - option = 1; - option13 = (int32_t) (*payload12).ptr; - option14 = (int32_t) (*payload12).len; - } else { - option = 0; - option13 = 0; - option14 = 0; - } - int32_t option23; - int32_t option24; - int32_t option25; - int32_t option26; - if ((scheme).is_some) { - const wasi_http_0_2_0_rc_2023_10_18_types_scheme_t *payload16 = &(scheme).val; - int32_t variant20; - int32_t variant21; - int32_t variant22; - switch ((int32_t) (*payload16).tag) { - case 0: { - variant20 = 0; - variant21 = 0; - variant22 = 0; - break; - } - case 1: { - variant20 = 1; - variant21 = 0; - variant22 = 0; - break; - } - case 2: { - const bindings_string_t *payload19 = &(*payload16).val.other; - variant20 = 2; - variant21 = (int32_t) (*payload19).ptr; - variant22 = (int32_t) (*payload19).len; - break; - } - } - option23 = 1; - option24 = variant20; - option25 = variant21; - option26 = variant22; - } else { - option23 = 0; - option24 = 0; - option25 = 0; - option26 = 0; - } - int32_t option29; - int32_t option30; - int32_t option31; - if ((authority).is_some) { - const bindings_string_t *payload28 = &(authority).val; - option29 = 1; - option30 = (int32_t) (*payload28).ptr; - option31 = (int32_t) (*payload28).len; - } else { - option29 = 0; - option30 = 0; - option31 = 0; - } - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_constructor_outgoing_request(variant, variant9, variant10, option, option13, option14, option23, option24, option25, option26, option29, option30, option31, (headers).__handle); - return (wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_request_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_request_write(wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_request_t self, wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_request_write((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_body_void_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - return 0; - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_static_response_outparam_set(wasi_http_0_2_0_rc_2023_10_18_types_own_response_outparam_t param, wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_response_error_t *response) { - int32_t result; - int32_t result7; - int32_t result8; - int32_t result9; - if ((*response).is_err) { - const wasi_http_0_2_0_rc_2023_10_18_types_error_t *payload0 = &(*response).val.err;int32_t variant; - int32_t variant5; - int32_t variant6; - switch ((int32_t) (*payload0).tag) { - case 0: { - const bindings_string_t *payload1 = &(*payload0).val.invalid_url; - variant = 0; - variant5 = (int32_t) (*payload1).ptr; - variant6 = (int32_t) (*payload1).len; - break; - } - case 1: { - const bindings_string_t *payload2 = &(*payload0).val.timeout_error; - variant = 1; - variant5 = (int32_t) (*payload2).ptr; - variant6 = (int32_t) (*payload2).len; - break; - } - case 2: { - const bindings_string_t *payload3 = &(*payload0).val.protocol_error; - variant = 2; - variant5 = (int32_t) (*payload3).ptr; - variant6 = (int32_t) (*payload3).len; - break; - } - case 3: { - const bindings_string_t *payload4 = &(*payload0).val.unexpected_error; - variant = 3; - variant5 = (int32_t) (*payload4).ptr; - variant6 = (int32_t) (*payload4).len; - break; - } - } - result = 1; - result7 = variant; - result8 = variant5; - result9 = variant6; - } else { - const wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_response_t *payload = &(*response).val.ok;result = 0; - result7 = (*payload).__handle; - result8 = 0; - result9 = 0; - } - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_static_response_outparam_set((param).__handle, result, result7, result8, result9); -} - -wasi_http_0_2_0_rc_2023_10_18_types_status_code_t wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_status(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_status((self).__handle); - return (uint16_t) (ret); -} - -wasi_http_0_2_0_rc_2023_10_18_types_own_headers_t wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_headers(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_headers((self).__handle); - return (wasi_http_0_2_0_rc_2023_10_18_types_own_headers_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_consume(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response_t self, wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_consume((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_body_void_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - return 0; - } -} - -bool wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_body_stream(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_body_t self, wasi_http_0_2_0_rc_2023_10_18_types_own_input_stream_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_body_stream((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_10_18_types_result_own_input_stream_void_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_10_18_types_own_input_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - return 0; - } -} - -wasi_http_0_2_0_rc_2023_10_18_types_own_future_trailers_t wasi_http_0_2_0_rc_2023_10_18_types_static_incoming_body_finish(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t this_) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_static_incoming_body_finish((this_).__handle); - return (wasi_http_0_2_0_rc_2023_10_18_types_own_future_trailers_t) { ret }; -} - -wasi_http_0_2_0_rc_2023_10_18_types_own_pollable_t wasi_http_0_2_0_rc_2023_10_18_types_method_future_trailers_subscribe(wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_trailers_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_future_trailers_subscribe((self).__handle); - return (wasi_http_0_2_0_rc_2023_10_18_types_own_pollable_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_10_18_types_method_future_trailers_get(wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_trailers_t self, wasi_http_0_2_0_rc_2023_10_18_types_result_own_trailers_error_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[20]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_future_trailers_get((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_10_18_types_option_result_own_trailers_error_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - wasi_http_0_2_0_rc_2023_10_18_types_result_own_trailers_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 4)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_10_18_types_own_trailers_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - result.is_err = true; - wasi_http_0_2_0_rc_2023_10_18_types_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.invalid_url = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 12))), (size_t)(*((int32_t*) (ptr + 16))) }; - break; - } - case 1: { - variant.val.timeout_error = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 12))), (size_t)(*((int32_t*) (ptr + 16))) }; - break; - } - case 2: { - variant.val.protocol_error = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 12))), (size_t)(*((int32_t*) (ptr + 16))) }; - break; - } - case 3: { - variant.val.unexpected_error = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 12))), (size_t)(*((int32_t*) (ptr + 16))) }; - break; - } - } - - result.val.err = variant; - break; - } - } - - option.val = result; - break; - } - } - *ret = option.val; - return option.is_some; -} - -wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_response_t wasi_http_0_2_0_rc_2023_10_18_types_constructor_outgoing_response(wasi_http_0_2_0_rc_2023_10_18_types_status_code_t status_code, wasi_http_0_2_0_rc_2023_10_18_types_borrow_headers_t headers) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_constructor_outgoing_response((int32_t) (status_code), (headers).__handle); - return (wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_response_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_response_write(wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_response_t self, wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_response_write((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_body_void_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - return 0; - } -} - -bool wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_body_write(wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_body_t self, wasi_http_0_2_0_rc_2023_10_18_types_own_output_stream_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_body_write((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_10_18_types_result_own_output_stream_void_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_10_18_types_own_output_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - return 0; - } -} - -void wasi_http_0_2_0_rc_2023_10_18_types_static_outgoing_body_finish(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t this_, wasi_http_0_2_0_rc_2023_10_18_types_own_trailers_t *maybe_trailers) { - wasi_http_0_2_0_rc_2023_10_18_types_option_own_trailers_t trailers; - trailers.is_some = maybe_trailers != NULL;if (maybe_trailers) { - trailers.val = *maybe_trailers; - } - int32_t option; - int32_t option1; - if ((trailers).is_some) { - const wasi_http_0_2_0_rc_2023_10_18_types_own_trailers_t *payload0 = &(trailers).val; - option = 1; - option1 = (*payload0).__handle; - } else { - option = 0; - option1 = 0; - } - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_static_outgoing_body_finish((this_).__handle, option, option1); -} - -bool wasi_http_0_2_0_rc_2023_10_18_types_method_future_incoming_response_get(wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response_t self, wasi_http_0_2_0_rc_2023_10_18_types_result_result_own_incoming_response_error_void_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[24]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_future_incoming_response_get((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_10_18_types_option_result_result_own_incoming_response_error_void_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - wasi_http_0_2_0_rc_2023_10_18_types_result_result_own_incoming_response_error_void_t result0; - switch ((int32_t) (*((uint8_t*) (ptr + 4)))) { - case 0: { - result0.is_err = false; - wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_response_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 8)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_response_t) { *((int32_t*) (ptr + 12)) }; - break; - } - case 1: { - result.is_err = true; - wasi_http_0_2_0_rc_2023_10_18_types_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 12))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.invalid_url = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 16))), (size_t)(*((int32_t*) (ptr + 20))) }; - break; - } - case 1: { - variant.val.timeout_error = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 16))), (size_t)(*((int32_t*) (ptr + 20))) }; - break; - } - case 2: { - variant.val.protocol_error = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 16))), (size_t)(*((int32_t*) (ptr + 20))) }; - break; - } - case 3: { - variant.val.unexpected_error = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 16))), (size_t)(*((int32_t*) (ptr + 20))) }; - break; - } - } - - result.val.err = variant; - break; - } - } - - result0.val.ok = result; - break; - } - case 1: { - result0.is_err = true; - break; - } - } - - option.val = result0; - break; - } - } - *ret = option.val; - return option.is_some; -} - -wasi_http_0_2_0_rc_2023_10_18_types_own_pollable_t wasi_http_0_2_0_rc_2023_10_18_types_method_future_incoming_response_subscribe(wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_10_18_types_method_future_incoming_response_subscribe((self).__handle); - return (wasi_http_0_2_0_rc_2023_10_18_types_own_pollable_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_handle(wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_own_outgoing_request_t request, wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_request_options_t *maybe_options, wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_own_future_incoming_response_t *ret, wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[16]; - wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_option_request_options_t options; - options.is_some = maybe_options != NULL;if (maybe_options) { - options.val = *maybe_options; - } - int32_t option12; - int32_t option13; - int32_t option14; - int32_t option15; - int32_t option16; - int32_t option17; - int32_t option18; - if ((options).is_some) { - const wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_request_options_t *payload0 = &(options).val; - int32_t option; - int32_t option3; - if (((*payload0).connect_timeout_ms).is_some) { - const uint32_t *payload2 = &((*payload0).connect_timeout_ms).val; - option = 1; - option3 = (int32_t) (*payload2); - } else { - option = 0; - option3 = 0; - } - int32_t option6; - int32_t option7; - if (((*payload0).first_byte_timeout_ms).is_some) { - const uint32_t *payload5 = &((*payload0).first_byte_timeout_ms).val; - option6 = 1; - option7 = (int32_t) (*payload5); - } else { - option6 = 0; - option7 = 0; - } - int32_t option10; - int32_t option11; - if (((*payload0).between_bytes_timeout_ms).is_some) { - const uint32_t *payload9 = &((*payload0).between_bytes_timeout_ms).val; - option10 = 1; - option11 = (int32_t) (*payload9); - } else { - option10 = 0; - option11 = 0; - } - option12 = 1; - option13 = option; - option14 = option3; - option15 = option6; - option16 = option7; - option17 = option10; - option18 = option11; - } else { - option12 = 0; - option13 = 0; - option14 = 0; - option15 = 0; - option16 = 0; - option17 = 0; - option18 = 0; - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_handle((request).__handle, option12, option13, option14, option15, option16, option17, option18, ptr); - wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_result_own_future_incoming_response_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_own_future_incoming_response_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - wasi_http_0_2_0_rc_2023_10_18_types_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.invalid_url = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 8))), (size_t)(*((int32_t*) (ptr + 12))) }; - break; - } - case 1: { - variant.val.timeout_error = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 8))), (size_t)(*((int32_t*) (ptr + 12))) }; - break; - } - case 2: { - variant.val.protocol_error = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 8))), (size_t)(*((int32_t*) (ptr + 12))) }; - break; - } - case 3: { - variant.val.unexpected_error = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 8))), (size_t)(*((int32_t*) (ptr + 12))) }; - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -__attribute__((__export_name__("wasi:cli/run@0.2.0-rc-2023-10-18#run"))) -int32_t __wasm_export_exports_wasi_cli_0_2_0_rc_2023_10_18_run_run(void) { - exports_wasi_cli_0_2_0_rc_2023_10_18_run_result_void_void_t ret; - ret.is_err = !exports_wasi_cli_0_2_0_rc_2023_10_18_run_run(); - int32_t result; - if ((ret).is_err) { - result = 1; - } else { - result = 0; - } - return result; -} - -__attribute__((__export_name__("wasi:http/incoming-handler@0.2.0-rc-2023-10-18#handle"))) -void __wasm_export_exports_wasi_http_0_2_0_rc_2023_10_18_incoming_handler_handle(int32_t arg, int32_t arg0) { - exports_wasi_http_0_2_0_rc_2023_10_18_incoming_handler_handle((exports_wasi_http_0_2_0_rc_2023_10_18_incoming_handler_own_incoming_request_t) { arg }, (exports_wasi_http_0_2_0_rc_2023_10_18_incoming_handler_own_response_outparam_t) { arg0 }); -} - -extern void __component_type_object_force_link_bindings(void); -void __component_type_object_force_link_bindings_public_use_in_this_compilation_unit(void) { - __component_type_object_force_link_bindings(); -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/bindings/bindings.h b/host-apis/wasi-0.2.0-rc-2023-10-18/bindings/bindings.h deleted file mode 100644 index d6a4e95b..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/bindings/bindings.h +++ /dev/null @@ -1,2909 +0,0 @@ -// Generated by `wit-bindgen` 0.16.0. DO NOT EDIT! -#ifndef __BINDINGS_BINDINGS_H -#define __BINDINGS_BINDINGS_H -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include -#include - -typedef struct { - uint8_t*ptr; - size_t len; -} bindings_string_t; - -// A time and date in seconds plus nanoseconds. -typedef struct { - uint64_t seconds; - uint32_t nanoseconds; -} wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t; - -typedef struct wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t; - -typedef struct wasi_io_0_2_0_rc_2023_10_18_poll_borrow_pollable_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_10_18_poll_borrow_pollable_t; - -typedef struct { - wasi_io_0_2_0_rc_2023_10_18_poll_borrow_pollable_t *ptr; - size_t len; -} wasi_io_0_2_0_rc_2023_10_18_poll_list_borrow_pollable_t; - -typedef struct { - uint32_t *ptr; - size_t len; -} bindings_list_u32_t; - -// A timestamp in nanoseconds. -typedef uint64_t wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_instant_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_own_pollable_t; - -typedef wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t wasi_clocks_0_2_0_rc_2023_10_18_timezone_datetime_t; - -// Information useful for displaying the timezone of a specific `datetime`. -// -// This information may vary within a single `timezone` to reflect daylight -// saving time adjustments. -typedef struct { - // The number of seconds difference between UTC time and the local - // time of the timezone. - // - // The returned value will always be less than 86400 which is the - // number of seconds in a day (24*60*60). - // - // In implementations that do not expose an actual time zone, this - // should return 0. - int32_t utc_offset; - // The abbreviated name of the timezone to display to a user. The name - // `UTC` indicates Coordinated Universal Time. Otherwise, this should - // reference local standards for the name of the time zone. - // - // In implementations that do not expose an actual time zone, this - // should be the string `UTC`. - // - // In time zones that do not have an applicable name, a formatted - // representation of the UTC offset may be returned, such as `-04:00`. - bindings_string_t name; - // Whether daylight saving time is active. - // - // In implementations that do not expose an actual time zone, this - // should return false. - bool in_daylight_saving_time; -} wasi_clocks_0_2_0_rc_2023_10_18_timezone_timezone_display_t; - -typedef struct wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t; - -typedef struct wasi_io_0_2_0_rc_2023_10_18_streams_borrow_error_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_10_18_streams_borrow_error_t; - -// An error for input-stream and output-stream operations. -typedef struct { - uint8_t tag; - union { - wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t last_operation_failed; - } val; -} wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t; - -// The last operation (a write or flush) failed before completion. -// -// More information is available in the `error` payload. -#define WASI_IO_0_2_0_RC_2023_10_18_STREAMS_STREAM_ERROR_LAST_OPERATION_FAILED 0 -// The stream is closed: no more input will be accepted by the -// stream. A closed output-stream will return this error on all -// future operations. -#define WASI_IO_0_2_0_RC_2023_10_18_STREAMS_STREAM_ERROR_CLOSED 1 - -typedef struct wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t; - -typedef struct wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t; - -typedef struct wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t; - -typedef struct wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t; - -typedef struct { - uint8_t *ptr; - size_t len; -} bindings_list_u8_t; - -typedef struct { - bool is_err; - union { - bindings_list_u8_t ok; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t err; - } val; -} wasi_io_0_2_0_rc_2023_10_18_streams_result_list_u8_stream_error_t; - -typedef struct { - bool is_err; - union { - uint64_t ok; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t err; - } val; -} wasi_io_0_2_0_rc_2023_10_18_streams_result_u64_stream_error_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t wasi_io_0_2_0_rc_2023_10_18_streams_own_pollable_t; - -typedef struct { - bool is_err; - union { - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t err; - } val; -} wasi_io_0_2_0_rc_2023_10_18_streams_result_void_stream_error_t; - -typedef wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t wasi_filesystem_0_2_0_rc_2023_10_18_types_datetime_t; - -// File size or length of a region within a file. -typedef uint64_t wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t; - -// The type of a filesystem object referenced by a descriptor. -// -// Note: This was called `filetype` in earlier versions of WASI. -typedef uint8_t wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_type_t; - -// The type of the descriptor or file is unknown or is different from -// any of the other types specified. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_TYPE_UNKNOWN 0 -// The descriptor refers to a block device inode. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_TYPE_BLOCK_DEVICE 1 -// The descriptor refers to a character device inode. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_TYPE_CHARACTER_DEVICE 2 -// The descriptor refers to a directory inode. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_TYPE_DIRECTORY 3 -// The descriptor refers to a named pipe. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_TYPE_FIFO 4 -// The file refers to a symbolic link inode. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_TYPE_SYMBOLIC_LINK 5 -// The descriptor refers to a regular file inode. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_TYPE_REGULAR_FILE 6 -// The descriptor refers to a socket. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_TYPE_SOCKET 7 - -// Descriptor flags. -// -// Note: This was called `fdflags` in earlier versions of WASI. -typedef uint8_t wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_flags_t; - -// Read mode: Data can be read. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_FLAGS_READ (1 << 0) -// Write mode: Data can be written to. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_FLAGS_WRITE (1 << 1) -// Request that writes be performed according to synchronized I/O file -// integrity completion. The data stored in the file and the file's -// metadata are synchronized. This is similar to `O_SYNC` in POSIX. -// -// The precise semantics of this operation have not yet been defined for -// WASI. At this time, it should be interpreted as a request, and not a -// requirement. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_FLAGS_FILE_INTEGRITY_SYNC (1 << 2) -// Request that writes be performed according to synchronized I/O data -// integrity completion. Only the data stored in the file is -// synchronized. This is similar to `O_DSYNC` in POSIX. -// -// The precise semantics of this operation have not yet been defined for -// WASI. At this time, it should be interpreted as a request, and not a -// requirement. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_FLAGS_DATA_INTEGRITY_SYNC (1 << 3) -// Requests that reads be performed at the same level of integrety -// requested for writes. This is similar to `O_RSYNC` in POSIX. -// -// The precise semantics of this operation have not yet been defined for -// WASI. At this time, it should be interpreted as a request, and not a -// requirement. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_FLAGS_REQUESTED_WRITE_SYNC (1 << 4) -// Mutating directories mode: Directory contents may be mutated. -// -// When this flag is unset on a descriptor, operations using the -// descriptor which would create, rename, delete, modify the data or -// metadata of filesystem objects, or obtain another handle which -// would permit any of those, shall fail with `error-code::read-only` if -// they would otherwise succeed. -// -// This may only be set on directories. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_DESCRIPTOR_FLAGS_MUTATE_DIRECTORY (1 << 5) - -// Flags determining the method of how paths are resolved. -typedef uint8_t wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t; - -// As long as the resolved path corresponds to a symbolic link, it is -// expanded. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_PATH_FLAGS_SYMLINK_FOLLOW (1 << 0) - -// Open flags used by `open-at`. -typedef uint8_t wasi_filesystem_0_2_0_rc_2023_10_18_types_open_flags_t; - -// Create file if it does not exist, similar to `O_CREAT` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_OPEN_FLAGS_CREATE (1 << 0) -// Fail if not a directory, similar to `O_DIRECTORY` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_OPEN_FLAGS_DIRECTORY (1 << 1) -// Fail if file already exists, similar to `O_EXCL` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_OPEN_FLAGS_EXCLUSIVE (1 << 2) -// Truncate file to size 0, similar to `O_TRUNC` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_OPEN_FLAGS_TRUNCATE (1 << 3) - -// Permissions mode used by `open-at`, `change-file-permissions-at`, and -// similar. -typedef uint8_t wasi_filesystem_0_2_0_rc_2023_10_18_types_modes_t; - -// True if the resource is considered readable by the containing -// filesystem. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_MODES_READABLE (1 << 0) -// True if the resource is considered writable by the containing -// filesystem. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_MODES_WRITABLE (1 << 1) -// True if the resource is considered executable by the containing -// filesystem. This does not apply to directories. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_MODES_EXECUTABLE (1 << 2) - -// Access type used by `access-at`. -typedef struct { - uint8_t tag; - union { - wasi_filesystem_0_2_0_rc_2023_10_18_types_modes_t access; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_access_type_t; - -// Test for readability, writeability, or executability. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ACCESS_TYPE_ACCESS 0 -// Test whether the path exists. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ACCESS_TYPE_EXISTS 1 - -// Number of hard links to an inode. -typedef uint64_t wasi_filesystem_0_2_0_rc_2023_10_18_types_link_count_t; - -typedef struct { - bool is_some; - wasi_filesystem_0_2_0_rc_2023_10_18_types_datetime_t val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_t; - -// File attributes. -// -// Note: This was called `filestat` in earlier versions of WASI. -typedef struct { - // File type. - wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_type_t type; - // Number of hard links to the file. - wasi_filesystem_0_2_0_rc_2023_10_18_types_link_count_t link_count; - // For regular files, the file size in bytes. For symbolic links, the - // length in bytes of the pathname contained in the symbolic link. - wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t size; - // Last data access timestamp. - // - // If the `option` is none, the platform doesn't maintain an access - // timestamp for this file. - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_t data_access_timestamp; - // Last data modification timestamp. - // - // If the `option` is none, the platform doesn't maintain a - // modification timestamp for this file. - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_t data_modification_timestamp; - // Last file status-change timestamp. - // - // If the `option` is none, the platform doesn't maintain a - // status-change timestamp for this file. - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_t status_change_timestamp; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_stat_t; - -// When setting a timestamp, this gives the value to set it to. -typedef struct { - uint8_t tag; - union { - wasi_filesystem_0_2_0_rc_2023_10_18_types_datetime_t timestamp; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_new_timestamp_t; - -// Leave the timestamp set to its previous value. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_NEW_TIMESTAMP_NO_CHANGE 0 -// Set the timestamp to the current time of the system clock associated -// with the filesystem. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_NEW_TIMESTAMP_NOW 1 -// Set the timestamp to the given value. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_NEW_TIMESTAMP_TIMESTAMP 2 - -// A directory entry. -typedef struct { - // The type of the file referred to by this directory entry. - wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_type_t type; - // The name of the object. - bindings_string_t name; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_t; - -// Error codes returned by functions, similar to `errno` in POSIX. -// Not all of these error codes are returned by the functions provided by this -// API; some are used in higher-level library layers, and others are provided -// merely for alignment with POSIX. -typedef uint8_t wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t; - -// Permission denied, similar to `EACCES` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_ACCESS 0 -// Resource unavailable, or operation would block, similar to `EAGAIN` and `EWOULDBLOCK` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_WOULD_BLOCK 1 -// Connection already in progress, similar to `EALREADY` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_ALREADY 2 -// Bad descriptor, similar to `EBADF` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_BAD_DESCRIPTOR 3 -// Device or resource busy, similar to `EBUSY` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_BUSY 4 -// Resource deadlock would occur, similar to `EDEADLK` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_DEADLOCK 5 -// Storage quota exceeded, similar to `EDQUOT` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_QUOTA 6 -// File exists, similar to `EEXIST` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_EXIST 7 -// File too large, similar to `EFBIG` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_FILE_TOO_LARGE 8 -// Illegal byte sequence, similar to `EILSEQ` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_ILLEGAL_BYTE_SEQUENCE 9 -// Operation in progress, similar to `EINPROGRESS` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_IN_PROGRESS 10 -// Interrupted function, similar to `EINTR` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_INTERRUPTED 11 -// Invalid argument, similar to `EINVAL` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_INVALID 12 -// I/O error, similar to `EIO` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_IO 13 -// Is a directory, similar to `EISDIR` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_IS_DIRECTORY 14 -// Too many levels of symbolic links, similar to `ELOOP` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_LOOP 15 -// Too many links, similar to `EMLINK` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_TOO_MANY_LINKS 16 -// Message too large, similar to `EMSGSIZE` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_MESSAGE_SIZE 17 -// Filename too long, similar to `ENAMETOOLONG` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_NAME_TOO_LONG 18 -// No such device, similar to `ENODEV` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_NO_DEVICE 19 -// No such file or directory, similar to `ENOENT` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_NO_ENTRY 20 -// No locks available, similar to `ENOLCK` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_NO_LOCK 21 -// Not enough space, similar to `ENOMEM` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_INSUFFICIENT_MEMORY 22 -// No space left on device, similar to `ENOSPC` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_INSUFFICIENT_SPACE 23 -// Not a directory or a symbolic link to a directory, similar to `ENOTDIR` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_NOT_DIRECTORY 24 -// Directory not empty, similar to `ENOTEMPTY` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_NOT_EMPTY 25 -// State not recoverable, similar to `ENOTRECOVERABLE` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_NOT_RECOVERABLE 26 -// Not supported, similar to `ENOTSUP` and `ENOSYS` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_UNSUPPORTED 27 -// Inappropriate I/O control operation, similar to `ENOTTY` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_NO_TTY 28 -// No such device or address, similar to `ENXIO` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_NO_SUCH_DEVICE 29 -// Value too large to be stored in data type, similar to `EOVERFLOW` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_OVERFLOW 30 -// Operation not permitted, similar to `EPERM` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_NOT_PERMITTED 31 -// Broken pipe, similar to `EPIPE` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_PIPE 32 -// Read-only file system, similar to `EROFS` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_READ_ONLY 33 -// Invalid seek, similar to `ESPIPE` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_INVALID_SEEK 34 -// Text file busy, similar to `ETXTBSY` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_TEXT_FILE_BUSY 35 -// Cross-device link, similar to `EXDEV` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ERROR_CODE_CROSS_DEVICE 36 - -// File or memory access pattern advisory information. -typedef uint8_t wasi_filesystem_0_2_0_rc_2023_10_18_types_advice_t; - -// The application has no advice to give on its behavior with respect -// to the specified data. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ADVICE_NORMAL 0 -// The application expects to access the specified data sequentially -// from lower offsets to higher offsets. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ADVICE_SEQUENTIAL 1 -// The application expects to access the specified data in a random -// order. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ADVICE_RANDOM 2 -// The application expects to access the specified data in the near -// future. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ADVICE_WILL_NEED 3 -// The application expects that it will not access the specified data -// in the near future. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ADVICE_DONT_NEED 4 -// The application expects to access the specified data once and then -// not reuse it thereafter. -#define WASI_FILESYSTEM_0_2_0_RC_2023_10_18_TYPES_ADVICE_NO_REUSE 5 - -// A 128-bit hash value, split into parts because wasm doesn't have a -// 128-bit integer type. -typedef struct { - // 64 bits of a 128-bit hash value. - uint64_t lower; - // Another 64 bits of a 128-bit hash value. - uint64_t upper; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_metadata_hash_value_t; - -typedef struct wasi_filesystem_0_2_0_rc_2023_10_18_types_own_descriptor_t { - int32_t __handle; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_own_descriptor_t; - -typedef struct wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t { - int32_t __handle; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t; - -typedef struct wasi_filesystem_0_2_0_rc_2023_10_18_types_own_directory_entry_stream_t { - int32_t __handle; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_own_directory_entry_stream_t; - -typedef struct wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_directory_entry_stream_t { - int32_t __handle; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_directory_entry_stream_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t wasi_filesystem_0_2_0_rc_2023_10_18_types_own_input_stream_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_10_18_types_own_input_stream_t ok; - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_input_stream_error_code_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t wasi_filesystem_0_2_0_rc_2023_10_18_types_own_output_stream_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_10_18_types_own_output_stream_t ok; - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_output_stream_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_flags_t ok; - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_flags_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_type_t ok; - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_type_error_code_t; - -typedef struct { - bindings_list_u8_t f0; - bool f1; -} bindings_tuple2_list_u8_bool_t; - -typedef struct { - bool is_err; - union { - bindings_tuple2_list_u8_bool_t ok; - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_result_tuple2_list_u8_bool_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t ok; - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_result_filesize_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_10_18_types_own_directory_entry_stream_t ok; - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_directory_entry_stream_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_stat_t ok; - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_stat_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_10_18_types_own_descriptor_t ok; - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_descriptor_error_code_t; - -typedef struct { - bool is_err; - union { - bindings_string_t ok; - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_result_string_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_10_18_types_metadata_hash_value_t ok; - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_result_metadata_hash_value_error_code_t; - -typedef struct { - bool is_some; - wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_t val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_option_directory_entry_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_10_18_types_option_directory_entry_t ok; - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_result_option_directory_entry_error_code_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_streams_borrow_error_t wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_error_t; - -typedef struct { - bool is_some; - wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t val; -} wasi_filesystem_0_2_0_rc_2023_10_18_types_option_error_code_t; - -typedef wasi_filesystem_0_2_0_rc_2023_10_18_types_own_descriptor_t wasi_filesystem_0_2_0_rc_2023_10_18_preopens_own_descriptor_t; - -typedef struct { - wasi_filesystem_0_2_0_rc_2023_10_18_preopens_own_descriptor_t f0; - bindings_string_t f1; -} wasi_filesystem_0_2_0_rc_2023_10_18_preopens_tuple2_own_descriptor_string_t; - -typedef struct { - wasi_filesystem_0_2_0_rc_2023_10_18_preopens_tuple2_own_descriptor_string_t *ptr; - size_t len; -} wasi_filesystem_0_2_0_rc_2023_10_18_preopens_list_tuple2_own_descriptor_string_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_10_18_network_own_network_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_10_18_network_own_network_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_10_18_network_borrow_network_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_10_18_network_borrow_network_t; - -// Error codes. -// -// In theory, every API can return any error code. -// In practice, API's typically only return the errors documented per API -// combined with a couple of errors that are always possible: -// - `unknown` -// - `access-denied` -// - `not-supported` -// - `out-of-memory` -// - `concurrency-conflict` -// -// See each individual API for what the POSIX equivalents are. They sometimes differ per API. -typedef uint8_t wasi_sockets_0_2_0_rc_2023_10_18_network_error_code_t; - -// Unknown error -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_UNKNOWN 0 -// Access denied. -// -// POSIX equivalent: EACCES, EPERM -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_ACCESS_DENIED 1 -// The operation is not supported. -// -// POSIX equivalent: EOPNOTSUPP -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_NOT_SUPPORTED 2 -// One of the arguments is invalid. -// -// POSIX equivalent: EINVAL -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_INVALID_ARGUMENT 3 -// Not enough memory to complete the operation. -// -// POSIX equivalent: ENOMEM, ENOBUFS, EAI_MEMORY -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_OUT_OF_MEMORY 4 -// The operation timed out before it could finish completely. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_TIMEOUT 5 -// This operation is incompatible with another asynchronous operation that is already in progress. -// -// POSIX equivalent: EALREADY -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_CONCURRENCY_CONFLICT 6 -// Trying to finish an asynchronous operation that: -// - has not been started yet, or: -// - was already finished by a previous `finish-*` call. -// -// Note: this is scheduled to be removed when `future`s are natively supported. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_NOT_IN_PROGRESS 7 -// The operation has been aborted because it could not be completed immediately. -// -// Note: this is scheduled to be removed when `future`s are natively supported. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_WOULD_BLOCK 8 -// The operation is not valid in the socket's current state. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_INVALID_STATE 9 -// A new socket resource could not be created because of a system limit. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_NEW_SOCKET_LIMIT 10 -// A bind operation failed because the provided address is not an address that the `network` can bind to. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_ADDRESS_NOT_BINDABLE 11 -// A bind operation failed because the provided address is already in use or because there are no ephemeral ports available. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_ADDRESS_IN_USE 12 -// The remote address is not reachable -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_REMOTE_UNREACHABLE 13 -// The connection was forcefully rejected -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_CONNECTION_REFUSED 14 -// The connection was reset. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_CONNECTION_RESET 15 -// A connection was aborted. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_CONNECTION_ABORTED 16 -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_DATAGRAM_TOO_LARGE 17 -// Name does not exist or has no suitable associated IP addresses. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_NAME_UNRESOLVABLE 18 -// A temporary failure in name resolution occurred. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_TEMPORARY_RESOLVER_FAILURE 19 -// A permanent failure in name resolution occurred. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_ERROR_CODE_PERMANENT_RESOLVER_FAILURE 20 - -typedef uint8_t wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_family_t; - -// Similar to `AF_INET` in POSIX. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_IP_ADDRESS_FAMILY_IPV4 0 -// Similar to `AF_INET6` in POSIX. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_IP_ADDRESS_FAMILY_IPV6 1 - -typedef struct { - uint8_t f0; - uint8_t f1; - uint8_t f2; - uint8_t f3; -} wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_address_t; - -typedef struct { - uint16_t f0; - uint16_t f1; - uint16_t f2; - uint16_t f3; - uint16_t f4; - uint16_t f5; - uint16_t f6; - uint16_t f7; -} wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_address_t; - -typedef struct { - uint8_t tag; - union { - wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_address_t ipv4; - wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_address_t ipv6; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_t; - -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_IP_ADDRESS_IPV4 0 -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_IP_ADDRESS_IPV6 1 - -typedef struct { - uint16_t port; - wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_address_t address; -} wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_socket_address_t; - -typedef struct { - uint16_t port; - uint32_t flow_info; - wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_address_t address; - uint32_t scope_id; -} wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_socket_address_t; - -typedef struct { - uint8_t tag; - union { - wasi_sockets_0_2_0_rc_2023_10_18_network_ipv4_socket_address_t ipv4; - wasi_sockets_0_2_0_rc_2023_10_18_network_ipv6_socket_address_t ipv6; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_network_ip_socket_address_t; - -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_IP_SOCKET_ADDRESS_IPV4 0 -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_NETWORK_IP_SOCKET_ADDRESS_IPV6 1 - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_own_network_t wasi_sockets_0_2_0_rc_2023_10_18_instance_network_own_network_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_error_code_t wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_error_code_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_t wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_ip_address_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_family_t wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_ip_address_family_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_resolve_address_stream_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_resolve_address_stream_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_resolve_address_stream_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_resolve_address_stream_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_borrow_network_t wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_network_t; - -typedef struct { - bool is_some; - wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_ip_address_family_t val; -} wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_family_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_resolve_address_stream_t ok; - wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_result_own_resolve_address_stream_error_code_t; - -typedef struct { - bool is_some; - wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_ip_address_t val; -} wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_t ok; - wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_result_option_ip_address_error_code_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_pollable_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_error_code_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_ip_socket_address_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_family_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_address_family_t; - -typedef uint8_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_shutdown_type_t; - -// Similar to `SHUT_RD` in POSIX. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_TCP_SHUTDOWN_TYPE_RECEIVE 0 -// Similar to `SHUT_WR` in POSIX. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_TCP_SHUTDOWN_TYPE_SEND 1 -// Similar to `SHUT_RDWR` in POSIX. -#define WASI_SOCKETS_0_2_0_RC_2023_10_18_TCP_SHUTDOWN_TYPE_BOTH 2 - -typedef struct wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_tcp_socket_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_tcp_socket_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_borrow_network_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_network_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_input_stream_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_output_stream_t; - -typedef struct { - wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_input_stream_t f0; - wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_output_stream_t f1; -} wasi_sockets_0_2_0_rc_2023_10_18_tcp_tuple2_own_input_stream_own_output_stream_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_10_18_tcp_tuple2_own_input_stream_own_output_stream_t ok; - wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_tuple2_own_input_stream_own_output_stream_error_code_t; - -typedef struct { - wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_tcp_socket_t f0; - wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_input_stream_t f1; - wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_output_stream_t f2; -} wasi_sockets_0_2_0_rc_2023_10_18_tcp_tuple3_own_tcp_socket_own_input_stream_own_output_stream_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_10_18_tcp_tuple3_own_tcp_socket_own_input_stream_own_output_stream_t ok; - wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_tuple3_own_tcp_socket_own_input_stream_own_output_stream_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_t ok; - wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_ip_socket_address_error_code_t; - -typedef struct { - bool is_err; - union { - bool ok; - wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_bool_error_code_t; - -typedef struct { - bool is_err; - union { - uint8_t ok; - wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_u8_error_code_t; - -typedef struct { - bool is_err; - union { - uint64_t ok; - wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_u64_error_code_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_pollable_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_error_code_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_error_code_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_family_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_ip_address_family_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_tcp_socket_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_own_tcp_socket_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_own_tcp_socket_t ok; - wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_result_own_tcp_socket_error_code_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_error_code_t wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_ip_socket_address_t wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_family_t wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_address_family_t; - -typedef struct { - bindings_list_u8_t data; - wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_t remote_address; -} wasi_sockets_0_2_0_rc_2023_10_18_udp_datagram_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_10_18_udp_own_udp_socket_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_10_18_udp_own_udp_socket_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_borrow_network_t wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_network_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_udp_result_void_error_code_t; - -typedef struct { - wasi_sockets_0_2_0_rc_2023_10_18_udp_datagram_t *ptr; - size_t len; -} wasi_sockets_0_2_0_rc_2023_10_18_udp_list_datagram_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_10_18_udp_list_datagram_t ok; - wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_udp_result_list_datagram_error_code_t; - -typedef struct { - bool is_err; - union { - uint64_t ok; - wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u64_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_t ok; - wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_udp_result_ip_socket_address_error_code_t; - -typedef struct { - bool is_err; - union { - bool ok; - wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_udp_result_bool_error_code_t; - -typedef struct { - bool is_err; - union { - uint8_t ok; - wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u8_error_code_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t wasi_sockets_0_2_0_rc_2023_10_18_udp_own_pollable_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_error_code_t wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_error_code_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_family_t wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_ip_address_family_t; - -typedef wasi_sockets_0_2_0_rc_2023_10_18_udp_own_udp_socket_t wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_own_udp_socket_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_own_udp_socket_t ok; - wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_result_own_udp_socket_error_code_t; - -typedef struct { - uint64_t f0; - uint64_t f1; -} bindings_tuple2_u64_u64_t; - -typedef struct { - bindings_string_t f0; - bindings_string_t f1; -} bindings_tuple2_string_string_t; - -typedef struct { - bindings_tuple2_string_string_t *ptr; - size_t len; -} bindings_list_tuple2_string_string_t; - -typedef struct { - bindings_string_t *ptr; - size_t len; -} bindings_list_string_t; - -typedef struct { - bool is_some; - bindings_string_t val; -} bindings_option_string_t; - -typedef struct { - bool is_err; -} wasi_cli_0_2_0_rc_2023_10_18_exit_result_void_void_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t wasi_cli_0_2_0_rc_2023_10_18_stdin_own_input_stream_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t wasi_cli_0_2_0_rc_2023_10_18_stdout_own_output_stream_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t wasi_cli_0_2_0_rc_2023_10_18_stderr_own_output_stream_t; - -typedef struct wasi_cli_0_2_0_rc_2023_10_18_terminal_input_own_terminal_input_t { - int32_t __handle; -} wasi_cli_0_2_0_rc_2023_10_18_terminal_input_own_terminal_input_t; - -typedef struct wasi_cli_0_2_0_rc_2023_10_18_terminal_input_borrow_terminal_input_t { - int32_t __handle; -} wasi_cli_0_2_0_rc_2023_10_18_terminal_input_borrow_terminal_input_t; - -typedef struct wasi_cli_0_2_0_rc_2023_10_18_terminal_output_own_terminal_output_t { - int32_t __handle; -} wasi_cli_0_2_0_rc_2023_10_18_terminal_output_own_terminal_output_t; - -typedef struct wasi_cli_0_2_0_rc_2023_10_18_terminal_output_borrow_terminal_output_t { - int32_t __handle; -} wasi_cli_0_2_0_rc_2023_10_18_terminal_output_borrow_terminal_output_t; - -typedef wasi_cli_0_2_0_rc_2023_10_18_terminal_input_own_terminal_input_t wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_own_terminal_input_t; - -typedef struct { - bool is_some; - wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_own_terminal_input_t val; -} wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_option_own_terminal_input_t; - -typedef wasi_cli_0_2_0_rc_2023_10_18_terminal_output_own_terminal_output_t wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_own_terminal_output_t; - -typedef struct { - bool is_some; - wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_own_terminal_output_t val; -} wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_option_own_terminal_output_t; - -typedef wasi_cli_0_2_0_rc_2023_10_18_terminal_output_own_terminal_output_t wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_own_terminal_output_t; - -typedef struct { - bool is_some; - wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_own_terminal_output_t val; -} wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_option_own_terminal_output_t; - -typedef struct { - uint8_t tag; - union { - bindings_string_t other; - } val; -} wasi_http_0_2_0_rc_2023_10_18_types_method_t; - -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_GET 0 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_HEAD 1 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_POST 2 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_PUT 3 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_DELETE 4 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_CONNECT 5 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_OPTIONS 6 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_TRACE 7 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_PATCH 8 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_OTHER 9 - -typedef struct { - uint8_t tag; - union { - bindings_string_t other; - } val; -} wasi_http_0_2_0_rc_2023_10_18_types_scheme_t; - -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_SCHEME_HTTP 0 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_SCHEME_HTTPS 1 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_SCHEME_OTHER 2 - -typedef struct { - uint8_t tag; - union { - bindings_string_t invalid_url; - bindings_string_t timeout_error; - bindings_string_t protocol_error; - bindings_string_t unexpected_error; - } val; -} wasi_http_0_2_0_rc_2023_10_18_types_error_t; - -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_ERROR_INVALID_URL 0 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_ERROR_TIMEOUT_ERROR 1 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_ERROR_PROTOCOL_ERROR 2 -#define WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_ERROR_UNEXPECTED_ERROR 3 - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_request_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_request_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_request_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_request_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_request_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_request_t; - -typedef struct { - bool is_some; - uint32_t val; -} bindings_option_u32_t; - -typedef struct { - bindings_option_u32_t connect_timeout_ms; - bindings_option_u32_t first_byte_timeout_ms; - bindings_option_u32_t between_bytes_timeout_ms; -} wasi_http_0_2_0_rc_2023_10_18_types_request_options_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_own_response_outparam_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_own_response_outparam_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_borrow_response_outparam_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_borrow_response_outparam_t; - -typedef uint16_t wasi_http_0_2_0_rc_2023_10_18_types_status_code_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_response_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_response_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_body_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_body_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_own_future_trailers_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_own_future_trailers_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_trailers_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_trailers_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_response_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_response_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_response_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_response_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_body_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_body_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_own_future_incoming_response_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_own_future_incoming_response_t; - -typedef struct wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response_t; - -typedef struct { - bindings_string_t f0; - bindings_list_u8_t f1; -} bindings_tuple2_string_list_u8_t; - -typedef struct { - bindings_tuple2_string_list_u8_t *ptr; - size_t len; -} bindings_list_tuple2_string_list_u8_t; - -typedef struct { - bindings_list_u8_t *ptr; - size_t len; -} bindings_list_list_u8_t; - -typedef struct { - bool is_some; - wasi_http_0_2_0_rc_2023_10_18_types_scheme_t val; -} wasi_http_0_2_0_rc_2023_10_18_types_option_scheme_t; - -typedef wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t wasi_http_0_2_0_rc_2023_10_18_types_own_headers_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t ok; - } val; -} wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_body_void_t; - -typedef wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_headers_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t ok; - } val; -} wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_body_void_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_response_t ok; - wasi_http_0_2_0_rc_2023_10_18_types_error_t err; - } val; -} wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_response_error_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t wasi_http_0_2_0_rc_2023_10_18_types_own_input_stream_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_10_18_types_own_input_stream_t ok; - } val; -} wasi_http_0_2_0_rc_2023_10_18_types_result_own_input_stream_void_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t wasi_http_0_2_0_rc_2023_10_18_types_own_pollable_t; - -typedef wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t wasi_http_0_2_0_rc_2023_10_18_types_own_trailers_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_10_18_types_own_trailers_t ok; - wasi_http_0_2_0_rc_2023_10_18_types_error_t err; - } val; -} wasi_http_0_2_0_rc_2023_10_18_types_result_own_trailers_error_t; - -typedef struct { - bool is_some; - wasi_http_0_2_0_rc_2023_10_18_types_result_own_trailers_error_t val; -} wasi_http_0_2_0_rc_2023_10_18_types_option_result_own_trailers_error_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t wasi_http_0_2_0_rc_2023_10_18_types_own_output_stream_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_10_18_types_own_output_stream_t ok; - } val; -} wasi_http_0_2_0_rc_2023_10_18_types_result_own_output_stream_void_t; - -typedef struct { - bool is_some; - wasi_http_0_2_0_rc_2023_10_18_types_own_trailers_t val; -} wasi_http_0_2_0_rc_2023_10_18_types_option_own_trailers_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_response_t ok; - wasi_http_0_2_0_rc_2023_10_18_types_error_t err; - } val; -} wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_response_error_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_response_error_t ok; - } val; -} wasi_http_0_2_0_rc_2023_10_18_types_result_result_own_incoming_response_error_void_t; - -typedef struct { - bool is_some; - wasi_http_0_2_0_rc_2023_10_18_types_result_result_own_incoming_response_error_void_t val; -} wasi_http_0_2_0_rc_2023_10_18_types_option_result_result_own_incoming_response_error_void_t; - -typedef wasi_http_0_2_0_rc_2023_10_18_types_request_options_t wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_request_options_t; - -typedef wasi_http_0_2_0_rc_2023_10_18_types_error_t wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_error_t; - -typedef wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_request_t wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_own_outgoing_request_t; - -typedef struct { - bool is_some; - wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_request_options_t val; -} wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_option_request_options_t; - -typedef wasi_http_0_2_0_rc_2023_10_18_types_own_future_incoming_response_t wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_own_future_incoming_response_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_own_future_incoming_response_t ok; - wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_error_t err; - } val; -} wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_result_own_future_incoming_response_error_t; - -typedef struct { - bool is_err; -} exports_wasi_cli_0_2_0_rc_2023_10_18_run_result_void_void_t; - -typedef wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_request_t exports_wasi_http_0_2_0_rc_2023_10_18_incoming_handler_own_incoming_request_t; - -typedef wasi_http_0_2_0_rc_2023_10_18_types_own_response_outparam_t exports_wasi_http_0_2_0_rc_2023_10_18_incoming_handler_own_response_outparam_t; - -// Imported Functions from `wasi:clocks/wall-clock@0.2.0-rc-2023-10-18` -// Read the current value of the clock. -// -// This clock is not monotonic, therefore calling this function repeatedly -// will not necessarily produce a sequence of non-decreasing values. -// -// The returned timestamps represent the number of seconds since -// 1970-01-01T00:00:00Z, also known as [POSIX's Seconds Since the Epoch], -// also known as [Unix Time]. -// -// The nanoseconds field of the output is always less than 1000000000. -// -// [POSIX's Seconds Since the Epoch]: https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap04.html#tag_21_04_16 -// [Unix Time]: https://en.wikipedia.org/wiki/Unix_time -extern void wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_now(wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t *ret); -// Query the resolution of the clock. -// -// The nanoseconds field of the output is always less than 1000000000. -extern void wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_resolution(wasi_clocks_0_2_0_rc_2023_10_18_wall_clock_datetime_t *ret); - -// Imported Functions from `wasi:io/poll@0.2.0-rc-2023-10-18` -// Poll for completion on a set of pollables. -// -// This function takes a list of pollables, which identify I/O sources of -// interest, and waits until one or more of the events is ready for I/O. -// -// The result `list` contains one or more indices of handles in the -// argument list that is ready for I/O. -// -// If the list contains more elements than can be indexed with a `u32` -// value, this function traps. -// -// A timeout can be implemented by adding a pollable from the -// wasi-clocks API to the list. -// -// This function does not return a `result`; polling in itself does not -// do any I/O so it doesn't fail. If any of the I/O sources identified by -// the pollables has an error, it is indicated by marking the source as -// being reaedy for I/O. -extern void wasi_io_0_2_0_rc_2023_10_18_poll_poll_list(wasi_io_0_2_0_rc_2023_10_18_poll_list_borrow_pollable_t *in, bindings_list_u32_t *ret); -// Poll for completion on a single pollable. -// -// This function is similar to `poll-list`, but operates on only a single -// pollable. When it returns, the handle is ready for I/O. -extern void wasi_io_0_2_0_rc_2023_10_18_poll_poll_one(wasi_io_0_2_0_rc_2023_10_18_poll_borrow_pollable_t in); - -// Imported Functions from `wasi:clocks/monotonic-clock@0.2.0-rc-2023-10-18` -// Read the current value of the clock. -// -// The clock is monotonic, therefore calling this function repeatedly will -// produce a sequence of non-decreasing values. -extern wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_instant_t wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_now(void); -// Query the resolution of the clock. -extern wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_instant_t wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_resolution(void); -// Create a `pollable` which will resolve once the specified time has been -// reached. -extern wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_own_pollable_t wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_subscribe(wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_instant_t when, bool absolute); - -// Imported Functions from `wasi:clocks/timezone@0.2.0-rc-2023-10-18` -// Return information needed to display the given `datetime`. This includes -// the UTC offset, the time zone name, and a flag indicating whether -// daylight saving time is active. -// -// If the timezone cannot be determined for the given `datetime`, return a -// `timezone-display` for `UTC` with a `utc-offset` of 0 and no daylight -// saving time. -extern void wasi_clocks_0_2_0_rc_2023_10_18_timezone_display(wasi_clocks_0_2_0_rc_2023_10_18_timezone_datetime_t *when, wasi_clocks_0_2_0_rc_2023_10_18_timezone_timezone_display_t *ret); -// The same as `display`, but only return the UTC offset. -extern int32_t wasi_clocks_0_2_0_rc_2023_10_18_timezone_utc_offset(wasi_clocks_0_2_0_rc_2023_10_18_timezone_datetime_t *when); - -// Imported Functions from `wasi:io/streams@0.2.0-rc-2023-10-18` -// Returns a string that's suitable to assist humans in debugging this -// error. -// -// The returned string will change across platforms and hosts which -// means that parsing it, for example, would be a -// platform-compatibility hazard. -extern void wasi_io_0_2_0_rc_2023_10_18_streams_method_error_to_debug_string(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_error_t self, bindings_string_t *ret); -// Perform a non-blocking read from the stream. -// -// This function returns a list of bytes containing the data that was -// read, along with a `stream-status` which, indicates whether further -// reads are expected to produce data. The returned list will contain up to -// `len` bytes; it may return fewer than requested, but not more. An -// empty list and `stream-status:open` indicates no more data is -// available at this time, and that the pollable given by `subscribe` -// will be ready when more data is available. -// -// Once a stream has reached the end, subsequent calls to `read` or -// `skip` will always report `stream-status:ended` rather than producing more -// data. -// -// When the caller gives a `len` of 0, it represents a request to read 0 -// bytes. This read should always succeed and return an empty list and -// the current `stream-status`. -// -// The `len` parameter is a `u64`, which could represent a list of u8 which -// is not possible to allocate in wasm32, or not desirable to allocate as -// as a return value by the callee. The callee may return a list of bytes -// less than `len` in size while more bytes are available for reading. -extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_read(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t self, uint64_t len, bindings_list_u8_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); -// Read bytes from a stream, after blocking until at least one byte can -// be read. Except for blocking, identical to `read`. -extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_blocking_read(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t self, uint64_t len, bindings_list_u8_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); -// Skip bytes from a stream. -// -// This is similar to the `read` function, but avoids copying the -// bytes into the instance. -// -// Once a stream has reached the end, subsequent calls to read or -// `skip` will always report end-of-stream rather than producing more -// data. -// -// This function returns the number of bytes skipped, along with a -// `stream-status` indicating whether the end of the stream was -// reached. The returned value will be at most `len`; it may be less. -extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_skip(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t self, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); -// Skip bytes from a stream, after blocking until at least one byte -// can be skipped. Except for blocking behavior, identical to `skip`. -extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_blocking_skip(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t self, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); -// Create a `pollable` which will resolve once either the specified stream -// has bytes available to read or the other end of the stream has been -// closed. -// The created `pollable` is a child resource of the `input-stream`. -// Implementations may trap if the `input-stream` is dropped before -// all derived `pollable`s created with this function are dropped. -extern wasi_io_0_2_0_rc_2023_10_18_streams_own_pollable_t wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_subscribe(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t self); -// Check readiness for writing. This function never blocks. -// -// Returns the number of bytes permitted for the next call to `write`, -// or an error. Calling `write` with more bytes than this function has -// permitted will trap. -// -// When this function returns 0 bytes, the `subscribe` pollable will -// become ready when this function will report at least 1 byte, or an -// error. -extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_check_write(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, uint64_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); -// Perform a write. This function never blocks. -// -// Precondition: check-write gave permit of Ok(n) and contents has a -// length of less than or equal to n. Otherwise, this function will trap. -// -// returns Err(closed) without writing if the stream has closed since -// the last call to check-write provided a permit. -extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_write(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, bindings_list_u8_t *contents, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); -// Perform a write of up to 4096 bytes, and then flush the stream. Block -// until all of these operations are complete, or an error occurs. -// -// This is a convenience wrapper around the use of `check-write`, -// `subscribe`, `write`, and `flush`, and is implemented with the -// following pseudo-code: -// -// ```text -// let pollable = this.subscribe(); -// while !contents.is_empty() { - // // Wait for the stream to become writable - // poll-one(pollable); - // let Ok(n) = this.check-write(); // eliding error handling - // let len = min(n, contents.len()); - // let (chunk, rest) = contents.split_at(len); - // this.write(chunk ); // eliding error handling - // contents = rest; - // } - // this.flush(); - // // Wait for completion of `flush` - // poll-one(pollable); - // // Check for any errors that arose during `flush` - // let _ = this.check-write(); // eliding error handling - // ``` - extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_write_and_flush(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, bindings_list_u8_t *contents, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); - // Request to flush buffered output. This function never blocks. - // - // This tells the output-stream that the caller intends any buffered - // output to be flushed. the output which is expected to be flushed - // is all that has been passed to `write` prior to this call. - // - // Upon calling this function, the `output-stream` will not accept any - // writes (`check-write` will return `ok(0)`) until the flush has - // completed. The `subscribe` pollable will become ready when the - // flush has completed and the stream can accept more writes. - extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_flush(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); - // Request to flush buffered output, and block until flush completes - // and stream is ready for writing again. - extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_flush(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); - // Create a `pollable` which will resolve once the output-stream - // is ready for more writing, or an error has occured. When this - // pollable is ready, `check-write` will return `ok(n)` with n>0, or an - // error. - // - // If the stream is closed, this pollable is always ready immediately. - // - // The created `pollable` is a child resource of the `output-stream`. - // Implementations may trap if the `output-stream` is dropped before - // all derived `pollable`s created with this function are dropped. - extern wasi_io_0_2_0_rc_2023_10_18_streams_own_pollable_t wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_subscribe(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self); - // Write zeroes to a stream. - // - // this should be used precisely like `write` with the exact same - // preconditions (must use check-write first), but instead of - // passing a list of bytes, you simply pass the number of zero-bytes - // that should be written. - extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_write_zeroes(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, uint64_t len, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); - // Perform a write of up to 4096 zeroes, and then flush the stream. - // Block until all of these operations are complete, or an error - // occurs. - // - // This is a convenience wrapper around the use of `check-write`, - // `subscribe`, `write-zeroes`, and `flush`, and is implemented with - // the following pseudo-code: - // - // ```text - // let pollable = this.subscribe(); - // while num_zeroes != 0 { - // // Wait for the stream to become writable - // poll-one(pollable); - // let Ok(n) = this.check-write(); // eliding error handling - // let len = min(n, num_zeroes); - // this.write-zeroes(len); // eliding error handling - // num_zeroes -= len; - // } - // this.flush(); - // // Wait for completion of `flush` - // poll-one(pollable); - // // Check for any errors that arose during `flush` - // let _ = this.check-write(); // eliding error handling - // ``` - extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_write_zeroes_and_flush(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, uint64_t len, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); - // Read from one stream and write to another. - // - // This function returns the number of bytes transferred; it may be less - // than `len`. - // - // Unlike other I/O functions, this function blocks until all the data - // read from the input stream has been written to the output stream. - extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_splice(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t src, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); - // Read from one stream and write to another, with blocking. - // - // This is similar to `splice`, except that it blocks until at least - // one byte can be read. - extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_splice(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t src, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); - // Forward the entire contents of an input stream to an output stream. - // - // This function repeatedly reads from the input stream and writes - // the data to the output stream, until the end of the input stream - // is reached, or an error is encountered. - // - // Unlike other I/O functions, this function blocks until the end - // of the input stream is seen and all the data has been written to - // the output stream. - // - // This function returns the number of bytes transferred, and the status of - // the output stream. - extern bool wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_forward(wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t src, uint64_t *ret, wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *err); - - // Imported Functions from `wasi:filesystem/types@0.2.0-rc-2023-10-18` - // Return a stream for reading from a file, if available. - // - // May fail with an error-code describing why the file cannot be read. - // - // Multiple read, write, and append streams may be active on the same open - // file and they do not interfere with each other. - // - // Note: This allows using `read-stream`, which is similar to `read` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_read_via_stream(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_10_18_types_own_input_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Return a stream for writing to a file, if available. - // - // May fail with an error-code describing why the file cannot be written. - // - // Note: This allows using `write-stream`, which is similar to `write` in - // POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_write_via_stream(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_10_18_types_own_output_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Return a stream for appending to a file, if available. - // - // May fail with an error-code describing why the file cannot be appended. - // - // Note: This allows using `write-stream`, which is similar to `write` with - // `O_APPEND` in in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_append_via_stream(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_own_output_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Provide file advisory information on a descriptor. - // - // This is similar to `posix_fadvise` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_advise(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t length, wasi_filesystem_0_2_0_rc_2023_10_18_types_advice_t advice, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Synchronize the data of a file to disk. - // - // This function succeeds with no effect if the file descriptor is not - // opened for writing. - // - // Note: This is similar to `fdatasync` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_sync_data(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Get flags associated with a descriptor. - // - // Note: This returns similar flags to `fcntl(fd, F_GETFL)` in POSIX. - // - // Note: This returns the value that was the `fs_flags` value returned - // from `fdstat_get` in earlier versions of WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_get_flags(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_flags_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Get the dynamic type of a descriptor. - // - // Note: This returns the same value as the `type` field of the `fd-stat` - // returned by `stat`, `stat-at` and similar. - // - // Note: This returns similar flags to the `st_mode & S_IFMT` value provided - // by `fstat` in POSIX. - // - // Note: This returns the value that was the `fs_filetype` value returned - // from `fdstat_get` in earlier versions of WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_get_type(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_type_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Adjust the size of an open file. If this increases the file's size, the - // extra bytes are filled with zeros. - // - // Note: This was called `fd_filestat_set_size` in earlier versions of WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_set_size(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t size, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Adjust the timestamps of an open file or directory. - // - // Note: This is similar to `futimens` in POSIX. - // - // Note: This was called `fd_filestat_set_times` in earlier versions of WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_set_times(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_new_timestamp_t *data_access_timestamp, wasi_filesystem_0_2_0_rc_2023_10_18_types_new_timestamp_t *data_modification_timestamp, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Read from a descriptor, without using and updating the descriptor's offset. - // - // This function returns a list of bytes containing the data that was - // read, along with a bool which, when true, indicates that the end of the - // file was reached. The returned list will contain up to `length` bytes; it - // may return fewer than requested, if the end of the file is reached or - // if the I/O operation is interrupted. - // - // In the future, this may change to return a `stream`. - // - // Note: This is similar to `pread` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_read(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t length, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t offset, bindings_tuple2_list_u8_bool_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Write to a descriptor, without using and updating the descriptor's offset. - // - // It is valid to write past the end of a file; the file is extended to the - // extent of the write, with bytes between the previous end and the start of - // the write set to zero. - // - // In the future, this may change to take a `stream`. - // - // Note: This is similar to `pwrite` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_write(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_list_u8_t *buffer, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_10_18_types_filesize_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Read directory entries from a directory. - // - // On filesystems where directories contain entries referring to themselves - // and their parents, often named `.` and `..` respectively, these entries - // are omitted. - // - // This always returns a new stream which starts at the beginning of the - // directory. Multiple streams may be active on the same directory, and they - // do not interfere with each other. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_read_directory(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_own_directory_entry_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Synchronize the data and metadata of a file to disk. - // - // This function succeeds with no effect if the file descriptor is not - // opened for writing. - // - // Note: This is similar to `fsync` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_sync(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Create a directory. - // - // Note: This is similar to `mkdirat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_create_directory_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Return the attributes of an open file or directory. - // - // Note: This is similar to `fstat` in POSIX, except that it does not return - // device and inode information. For testing whether two descriptors refer to - // the same underlying filesystem object, use `is-same-object`. To obtain - // additional data that can be used do determine whether a file has been - // modified, use `metadata-hash`. - // - // Note: This was called `fd_filestat_get` in earlier versions of WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_stat(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_stat_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Return the attributes of a file or directory. - // - // Note: This is similar to `fstatat` in POSIX, except that it does not - // return device and inode information. See the `stat` description for a - // discussion of alternatives. - // - // Note: This was called `path_filestat_get` in earlier versions of WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_stat_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_stat_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Adjust the timestamps of a file or directory. - // - // Note: This is similar to `utimensat` in POSIX. - // - // Note: This was called `path_filestat_set_times` in earlier versions of - // WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_set_times_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_new_timestamp_t *data_access_timestamp, wasi_filesystem_0_2_0_rc_2023_10_18_types_new_timestamp_t *data_modification_timestamp, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Create a hard link. - // - // Note: This is similar to `linkat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_link_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t old_path_flags, bindings_string_t *old_path, wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t new_descriptor, bindings_string_t *new_path, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Open a file or directory. - // - // The returned descriptor is not guaranteed to be the lowest-numbered - // descriptor not currently open/ it is randomized to prevent applications - // from depending on making assumptions about indexes, since this is - // error-prone in multi-threaded contexts. The returned descriptor is - // guaranteed to be less than 2**31. - // - // If `flags` contains `descriptor-flags::mutate-directory`, and the base - // descriptor doesn't have `descriptor-flags::mutate-directory` set, - // `open-at` fails with `error-code::read-only`. - // - // If `flags` contains `write` or `mutate-directory`, or `open-flags` - // contains `truncate` or `create`, and the base descriptor doesn't have - // `descriptor-flags::mutate-directory` set, `open-at` fails with - // `error-code::read-only`. - // - // Note: This is similar to `openat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_open_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_open_flags_t open_flags, wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_flags_t flags, wasi_filesystem_0_2_0_rc_2023_10_18_types_modes_t modes, wasi_filesystem_0_2_0_rc_2023_10_18_types_own_descriptor_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Read the contents of a symbolic link. - // - // If the contents contain an absolute or rooted path in the underlying - // filesystem, this function fails with `error-code::not-permitted`. - // - // Note: This is similar to `readlinkat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_readlink_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_string_t *path, bindings_string_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Remove a directory. - // - // Return `error-code::not-empty` if the directory is not empty. - // - // Note: This is similar to `unlinkat(fd, path, AT_REMOVEDIR)` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_remove_directory_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Rename a filesystem object. - // - // Note: This is similar to `renameat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_rename_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_string_t *old_path, wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t new_descriptor, bindings_string_t *new_path, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Create a symbolic link (also known as a "symlink"). - // - // If `old-path` starts with `/`, the function fails with - // `error-code::not-permitted`. - // - // Note: This is similar to `symlinkat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_symlink_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_string_t *old_path, bindings_string_t *new_path, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Check accessibility of a filesystem path. - // - // Check whether the given filesystem path names an object which is - // readable, writable, or executable, or whether it exists. - // - // This does not a guarantee that subsequent accesses will succeed, as - // filesystem permissions may be modified asynchronously by external - // entities. - // - // Note: This is similar to `faccessat` with the `AT_EACCESS` flag in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_access_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_access_type_t *type, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Unlink a filesystem object that is not a directory. - // - // Return `error-code::is-directory` if the path refers to a directory. - // Note: This is similar to `unlinkat(fd, path, 0)` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_unlink_file_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Change the permissions of a filesystem object that is not a directory. - // - // Note that the ultimate meanings of these permissions is - // filesystem-specific. - // - // Note: This is similar to `fchmodat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_change_file_permissions_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_modes_t modes, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Change the permissions of a directory. - // - // Note that the ultimate meanings of these permissions is - // filesystem-specific. - // - // Unlike in POSIX, the `executable` flag is not reinterpreted as a "search" - // flag. `read` on a directory implies readability and searchability, and - // `execute` is not valid for directories. - // - // Note: This is similar to `fchmodat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_change_directory_permissions_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_modes_t modes, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Request a shared advisory lock for an open file. - // - // This requests a *shared* lock; more than one shared lock can be held for - // a file at the same time. - // - // If the open file has an exclusive lock, this function downgrades the lock - // to a shared lock. If it has a shared lock, this function has no effect. - // - // This requests an *advisory* lock, meaning that the file could be accessed - // by other programs that don't hold the lock. - // - // It is unspecified how shared locks interact with locks acquired by - // non-WASI programs. - // - // This function blocks until the lock can be acquired. - // - // Not all filesystems support locking; on filesystems which don't support - // locking, this function returns `error-code::unsupported`. - // - // Note: This is similar to `flock(fd, LOCK_SH)` in Unix. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_lock_shared(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Request an exclusive advisory lock for an open file. - // - // This requests an *exclusive* lock; no other locks may be held for the - // file while an exclusive lock is held. - // - // If the open file has a shared lock and there are no exclusive locks held - // for the file, this function upgrades the lock to an exclusive lock. If the - // open file already has an exclusive lock, this function has no effect. - // - // This requests an *advisory* lock, meaning that the file could be accessed - // by other programs that don't hold the lock. - // - // It is unspecified whether this function succeeds if the file descriptor - // is not opened for writing. It is unspecified how exclusive locks interact - // with locks acquired by non-WASI programs. - // - // This function blocks until the lock can be acquired. - // - // Not all filesystems support locking; on filesystems which don't support - // locking, this function returns `error-code::unsupported`. - // - // Note: This is similar to `flock(fd, LOCK_EX)` in Unix. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_lock_exclusive(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Request a shared advisory lock for an open file. - // - // This requests a *shared* lock; more than one shared lock can be held for - // a file at the same time. - // - // If the open file has an exclusive lock, this function downgrades the lock - // to a shared lock. If it has a shared lock, this function has no effect. - // - // This requests an *advisory* lock, meaning that the file could be accessed - // by other programs that don't hold the lock. - // - // It is unspecified how shared locks interact with locks acquired by - // non-WASI programs. - // - // This function returns `error-code::would-block` if the lock cannot be - // acquired. - // - // Not all filesystems support locking; on filesystems which don't support - // locking, this function returns `error-code::unsupported`. - // - // Note: This is similar to `flock(fd, LOCK_SH | LOCK_NB)` in Unix. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_try_lock_shared(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Request an exclusive advisory lock for an open file. - // - // This requests an *exclusive* lock; no other locks may be held for the - // file while an exclusive lock is held. - // - // If the open file has a shared lock and there are no exclusive locks held - // for the file, this function upgrades the lock to an exclusive lock. If the - // open file already has an exclusive lock, this function has no effect. - // - // This requests an *advisory* lock, meaning that the file could be accessed - // by other programs that don't hold the lock. - // - // It is unspecified whether this function succeeds if the file descriptor - // is not opened for writing. It is unspecified how exclusive locks interact - // with locks acquired by non-WASI programs. - // - // This function returns `error-code::would-block` if the lock cannot be - // acquired. - // - // Not all filesystems support locking; on filesystems which don't support - // locking, this function returns `error-code::unsupported`. - // - // Note: This is similar to `flock(fd, LOCK_EX | LOCK_NB)` in Unix. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_try_lock_exclusive(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Release a shared or exclusive lock on an open file. - // - // Note: This is similar to `flock(fd, LOCK_UN)` in Unix. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_unlock(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Test whether two descriptors refer to the same filesystem object. - // - // In POSIX, this corresponds to testing whether the two descriptors have the - // same device (`st_dev`) and inode (`st_ino` or `d_ino`) numbers. - // wasi-filesystem does not expose device and inode numbers, so this function - // may be used instead. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_is_same_object(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t other); - // Return a hash of the metadata associated with a filesystem object referred - // to by a descriptor. - // - // This returns a hash of the last-modification timestamp and file size, and - // may also include the inode number, device number, birth timestamp, and - // other metadata fields that may change when the file is modified or - // replaced. It may also include a secret value chosen by the - // implementation and not otherwise exposed. - // - // Implementations are encourated to provide the following properties: - // - // - If the file is not modified or replaced, the computed hash value should - // usually not change. - // - If the object is modified or replaced, the computed hash value should - // usually change. - // - The inputs to the hash should not be easily computable from the - // computed hash. - // - // However, none of these is required. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_metadata_hash(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_metadata_hash_value_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Return a hash of the metadata associated with a filesystem object referred - // to by a directory descriptor and a relative path. - // - // This performs the same hash computation as `metadata-hash`. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_descriptor_metadata_hash_at(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_10_18_types_metadata_hash_value_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Read a single directory entry from a `directory-entry-stream`. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_method_directory_entry_stream_read_directory_entry(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_directory_entry_stream_t self, wasi_filesystem_0_2_0_rc_2023_10_18_types_option_directory_entry_t *ret, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *err); - // Attempts to extract a filesystem-related `error-code` from the stream - // `error` provided. - // - // Stream operations which return `stream-error::last-operation-failed` - // have a payload with more information about the operation that failed. - // This payload can be passed through to this function to see if there's - // filesystem-related information about the error to return. - // - // Note that this function is fallible because not all stream-related - // errors are filesystem-related errors. - extern bool wasi_filesystem_0_2_0_rc_2023_10_18_types_filesystem_error_code(wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_error_t err_, wasi_filesystem_0_2_0_rc_2023_10_18_types_error_code_t *ret); - - // Imported Functions from `wasi:filesystem/preopens@0.2.0-rc-2023-10-18` - // Return the set of preopened directories, and their path. - extern void wasi_filesystem_0_2_0_rc_2023_10_18_preopens_get_directories(wasi_filesystem_0_2_0_rc_2023_10_18_preopens_list_tuple2_own_descriptor_string_t *ret); - - // Imported Functions from `wasi:sockets/instance-network@0.2.0-rc-2023-10-18` - // Get a handle to the default network. - extern wasi_sockets_0_2_0_rc_2023_10_18_instance_network_own_network_t wasi_sockets_0_2_0_rc_2023_10_18_instance_network_instance_network(void); - - // Imported Functions from `wasi:sockets/ip-name-lookup@0.2.0-rc-2023-10-18` - // Resolve an internet host name to a list of IP addresses. - // - // See the wasi-socket proposal README.md for a comparison with getaddrinfo. - // - // # Parameters - // - `name`: The name to look up. IP addresses are not allowed. Unicode domain names are automatically converted - // to ASCII using IDNA encoding. - // - `address-family`: If provided, limit the results to addresses of this specific address family. - // - `include-unavailable`: When set to true, this function will also return addresses of which the runtime - // thinks (or knows) can't be connected to at the moment. For example, this will return IPv6 addresses on - // systems without an active IPv6 interface. Notes: - // - Even when no public IPv6 interfaces are present or active, names like "localhost" can still resolve to an IPv6 address. - // - Whatever is "available" or "unavailable" is volatile and can change everytime a network cable is unplugged. - // - // This function never blocks. It either immediately fails or immediately returns successfully with a `resolve-address-stream` - // that can be used to (asynchronously) fetch the results. - // - // At the moment, the stream never completes successfully with 0 items. Ie. the first call - // to `resolve-next-address` never returns `ok(none)`. This may change in the future. - // - // # Typical errors - // - `invalid-argument`: `name` is a syntactically invalid domain name. - // - `invalid-argument`: `name` is an IP address. - // - `not-supported`: The specified `address-family` is not supported. (EAI_FAMILY) - // - // # References: - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_resolve_addresses(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_network_t network, bindings_string_t *name, wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_ip_address_family_t *maybe_address_family, bool include_unavailable, wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_resolve_address_stream_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_error_code_t *err); - // Returns the next address from the resolver. - // - // This function should be called multiple times. On each call, it will - // return the next address in connection order preference. If all - // addresses have been exhausted, this function returns `none`. - // - // This function never returns IPv4-mapped IPv6 addresses. - // - // # Typical errors - // - `name-unresolvable`: Name does not exist or has no suitable associated IP addresses. (EAI_NONAME, EAI_NODATA, EAI_ADDRFAMILY) - // - `temporary-resolver-failure`: A temporary failure in name resolution occurred. (EAI_AGAIN) - // - `permanent-resolver-failure`: A permanent failure in name resolution occurred. (EAI_FAIL) - // - `would-block`: A result is not available yet. (EWOULDBLOCK, EAGAIN) - extern bool wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_method_resolve_address_stream_resolve_next_address(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_resolve_address_stream_t self, wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_error_code_t *err); - // Create a `pollable` which will resolve once the stream is ready for I/O. - // - // Note: this function is here for WASI Preview2 only. - // It's planned to be removed when `future` is natively supported in Preview3. - extern wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_pollable_t wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_method_resolve_address_stream_subscribe(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_resolve_address_stream_t self); - - // Imported Functions from `wasi:sockets/tcp@0.2.0-rc-2023-10-18` - // Bind the socket to a specific network on the provided IP address and port. - // - // If the IP address is zero (`0.0.0.0` in IPv4, `::` in IPv6), it is left to the implementation to decide which - // network interface(s) to bind to. - // If the TCP/UDP port is zero, the socket will be bound to a random free port. - // - // When a socket is not explicitly bound, the first invocation to a listen or connect operation will - // implicitly bind the socket. - // - // Unlike in POSIX, this function is async. This enables interactive WASI hosts to inject permission prompts. - // - // # Typical `start` errors - // - `invalid-argument`: The `local-address` has the wrong address family. (EAFNOSUPPORT, EFAULT on Windows) - // - `invalid-argument`: `local-address` is not a unicast address. (EINVAL) - // - `invalid-argument`: `local-address` is an IPv4-mapped IPv6 address, but the socket has `ipv6-only` enabled. (EINVAL) - // - `invalid-state`: The socket is already bound. (EINVAL) - // - // # Typical `finish` errors - // - `address-in-use`: No ephemeral ports available. (EADDRINUSE, ENOBUFS on Windows) - // - `address-in-use`: Address is already in use. (EADDRINUSE) - // - `address-not-bindable`: `local-address` is not an address that the `network` can bind to. (EADDRNOTAVAIL) - // - `not-in-progress`: A `bind` operation is not in progress. - // - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_start_bind(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_t *local_address, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_finish_bind(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - // Connect to a remote endpoint. - // - // On success: - // - the socket is transitioned into the Connection state - // - a pair of streams is returned that can be used to read & write to the connection - // - // POSIX mentions: - // > If connect() fails, the state of the socket is unspecified. Conforming applications should - // > close the file descriptor and create a new socket before attempting to reconnect. - // - // WASI prescribes the following behavior: - // - If `connect` fails because an input/state validation error, the socket should remain usable. - // - If a connection was actually attempted but failed, the socket should become unusable for further network communication. - // Besides `drop`, any method after such a failure may return an error. - // - // # Typical `start` errors - // - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) - // - `invalid-argument`: `remote-address` is not a unicast address. (EINVAL, ENETUNREACH on Linux, EAFNOSUPPORT on MacOS) - // - `invalid-argument`: `remote-address` is an IPv4-mapped IPv6 address, but the socket has `ipv6-only` enabled. (EINVAL, EADDRNOTAVAIL on Illumos) - // - `invalid-argument`: `remote-address` is a non-IPv4-mapped IPv6 address, but the socket was bound to a specific IPv4-mapped IPv6 address. (or vice versa) - // - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EADDRNOTAVAIL on Windows) - // - `invalid-argument`: The port in `remote-address` is set to 0. (EADDRNOTAVAIL on Windows) - // - `invalid-argument`: The socket is already attached to a different network. The `network` passed to `connect` must be identical to the one passed to `bind`. - // - `invalid-state`: The socket is already in the Connection state. (EISCONN) - // - `invalid-state`: The socket is already in the Listener state. (EOPNOTSUPP, EINVAL on Windows) - // - // # Typical `finish` errors - // - `timeout`: Connection timed out. (ETIMEDOUT) - // - `connection-refused`: The connection was forcefully rejected. (ECONNREFUSED) - // - `connection-reset`: The connection was reset. (ECONNRESET) - // - `connection-aborted`: The connection was aborted. (ECONNABORTED) - // - `remote-unreachable`: The remote address is not reachable. (EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN) - // - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE, EADDRNOTAVAIL on Linux, EAGAIN on BSD) - // - `not-in-progress`: A `connect` operation is not in progress. - // - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_start_connect(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_t *remote_address, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_finish_connect(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_tuple2_own_input_stream_own_output_stream_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - // Start listening for new connections. - // - // Transitions the socket into the Listener state. - // - // Unlike POSIX: - // - this function is async. This enables interactive WASI hosts to inject permission prompts. - // - the socket must already be explicitly bound. - // - // # Typical `start` errors - // - `invalid-state`: The socket is not bound to any local address. (EDESTADDRREQ) - // - `invalid-state`: The socket is already in the Connection state. (EISCONN, EINVAL on BSD) - // - `invalid-state`: The socket is already in the Listener state. - // - // # Typical `finish` errors - // - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE) - // - `not-in-progress`: A `listen` operation is not in progress. - // - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_start_listen(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_finish_listen(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - // Accept a new client socket. - // - // The returned socket is bound and in the Connection state. The following properties are inherited from the listener socket: - // - `address-family` - // - `ipv6-only` - // - `keep-alive` - // - `no-delay` - // - `unicast-hop-limit` - // - `receive-buffer-size` - // - `send-buffer-size` - // - // On success, this function returns the newly accepted client socket along with - // a pair of streams that can be used to read & write to the connection. - // - // # Typical errors - // - `invalid-state`: Socket is not in the Listener state. (EINVAL) - // - `would-block`: No pending connections at the moment. (EWOULDBLOCK, EAGAIN) - // - `connection-aborted`: An incoming connection was pending, but was terminated by the client before this listener could accept it. (ECONNABORTED) - // - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_accept(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_tuple3_own_tcp_socket_own_input_stream_own_output_stream_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - // Get the bound local address. - // - // POSIX mentions: - // > If the socket has not been bound to a local name, the value - // > stored in the object pointed to by `address` is unspecified. - // - // WASI is stricter and requires `local-address` to return `invalid-state` when the socket hasn't been bound yet. - // - // # Typical errors - // - `invalid-state`: The socket is not bound to any local address. - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_local_address(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - // Get the remote address. - // - // # Typical errors - // - `invalid-state`: The socket is not connected to a remote address. (ENOTCONN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_remote_address(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - // Whether this is a IPv4 or IPv6 socket. - // - // Equivalent to the SO_DOMAIN socket option. - extern wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_address_family_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_address_family(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self); - // Whether IPv4 compatibility (dual-stack) mode is disabled or not. - // - // Equivalent to the IPV6_V6ONLY socket option. - // - // # Typical errors - // - `invalid-state`: (set) The socket is already bound. - // - `not-supported`: (get/set) `this` socket is an IPv4 socket. - // - `not-supported`: (set) Host does not support dual-stack sockets. (Implementations are not required to.) - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_ipv6_only(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_ipv6_only(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - // Hints the desired listen queue size. Implementations are free to ignore this. - // - // # Typical errors - // - `not-supported`: (set) The platform does not support changing the backlog size after the initial listen. - // - `invalid-state`: (set) The socket is already in the Connection state. - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_listen_backlog_size(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - // Equivalent to the SO_KEEPALIVE socket option. - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_keep_alive(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_keep_alive(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - // Equivalent to the TCP_NODELAY socket option. - // - // The default value is `false`. - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_no_delay(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_no_delay(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - // Equivalent to the IP_TTL & IPV6_UNICAST_HOPS socket options. - // - // # Typical errors - // - `invalid-argument`: (set) The TTL value must be 1 or higher. - // - `invalid-state`: (set) The socket is already in the Connection state. - // - `invalid-state`: (set) The socket is already in the Listener state. - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_unicast_hop_limit(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint8_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_unicast_hop_limit(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint8_t value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - // The kernel buffer space reserved for sends/receives on this socket. - // - // Note #1: an implementation may choose to cap or round the buffer size when setting the value. - // In other words, after setting a value, reading the same setting back may return a different value. - // - // Note #2: there is not necessarily a direct relationship between the kernel buffer size and the bytes of - // actual data to be sent/received by the application, because the kernel might also use the buffer space - // for internal metadata structures. - // - // Equivalent to the SO_RCVBUF and SO_SNDBUF socket options. - // - // # Typical errors - // - `invalid-state`: (set) The socket is already in the Connection state. - // - `invalid-state`: (set) The socket is already in the Listener state. - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_send_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_set_send_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - // Create a `pollable` which will resolve once the socket is ready for I/O. - // - // Note: this function is here for WASI Preview2 only. - // It's planned to be removed when `future` is natively supported in Preview3. - extern wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_pollable_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_subscribe(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self); - // Initiate a graceful shutdown. - // - // - receive: the socket is not expecting to receive any more data from the peer. All subsequent read - // operations on the `input-stream` associated with this socket will return an End Of Stream indication. - // Any data still in the receive queue at time of calling `shutdown` will be discarded. - // - send: the socket is not expecting to send any more data to the peer. All subsequent write - // operations on the `output-stream` associated with this socket will return an error. - // - both: same effect as receive & send combined. - // - // The shutdown function does not close (drop) the socket. - // - // # Typical errors - // - `invalid-state`: The socket is not in the Connection state. (ENOTCONN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_method_tcp_socket_shutdown(wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_tcp_shutdown_type_t shutdown_type, wasi_sockets_0_2_0_rc_2023_10_18_tcp_error_code_t *err); - - // Imported Functions from `wasi:sockets/tcp-create-socket@0.2.0-rc-2023-10-18` - // Create a new TCP socket. - // - // Similar to `socket(AF_INET or AF_INET6, SOCK_STREAM, IPPROTO_TCP)` in POSIX. - // - // This function does not require a network capability handle. This is considered to be safe because - // at time of creation, the socket is not bound to any `network` yet. Up to the moment `bind`/`listen`/`connect` - // is called, the socket is effectively an in-memory configuration object, unable to communicate with the outside world. - // - // All sockets are non-blocking. Use the wasi-poll interface to block on asynchronous operations. - // - // # Typical errors - // - `not-supported`: The specified `address-family` is not supported. (EAFNOSUPPORT) - // - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_create_tcp_socket(wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_ip_address_family_t address_family, wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_own_tcp_socket_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_error_code_t *err); - - // Imported Functions from `wasi:sockets/udp@0.2.0-rc-2023-10-18` - // Bind the socket to a specific network on the provided IP address and port. - // - // If the IP address is zero (`0.0.0.0` in IPv4, `::` in IPv6), it is left to the implementation to decide which - // network interface(s) to bind to. - // If the TCP/UDP port is zero, the socket will be bound to a random free port. - // - // When a socket is not explicitly bound, the first invocation to connect will implicitly bind the socket. - // - // Unlike in POSIX, this function is async. This enables interactive WASI hosts to inject permission prompts. - // - // # Typical `start` errors - // - `invalid-argument`: The `local-address` has the wrong address family. (EAFNOSUPPORT, EFAULT on Windows) - // - `invalid-state`: The socket is already bound. (EINVAL) - // - // # Typical `finish` errors - // - `address-in-use`: No ephemeral ports available. (EADDRINUSE, ENOBUFS on Windows) - // - `address-in-use`: Address is already in use. (EADDRINUSE) - // - `address-not-bindable`: `local-address` is not an address that the `network` can bind to. (EADDRNOTAVAIL) - // - `not-in-progress`: A `bind` operation is not in progress. - // - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_start_bind(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_t *local_address, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_finish_bind(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - // Set the destination address. - // - // The local-address is updated based on the best network path to `remote-address`. - // - // When a destination address is set: - // - all receive operations will only return datagrams sent from the provided `remote-address`. - // - the `send` function can only be used to send to this destination. - // - // Note that this function does not generate any network traffic and the peer is not aware of this "connection". - // - // Unlike in POSIX, this function is async. This enables interactive WASI hosts to inject permission prompts. - // - // # Typical `start` errors - // - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) - // - `invalid-argument`: `remote-address` is a non-IPv4-mapped IPv6 address, but the socket was bound to a specific IPv4-mapped IPv6 address. (or vice versa) - // - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EDESTADDRREQ, EADDRNOTAVAIL) - // - `invalid-argument`: The port in `remote-address` is set to 0. (EDESTADDRREQ, EADDRNOTAVAIL) - // - `invalid-argument`: The socket is already bound to a different network. The `network` passed to `connect` must be identical to the one passed to `bind`. - // - // # Typical `finish` errors - // - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE, EADDRNOTAVAIL on Linux, EAGAIN on BSD) - // - `not-in-progress`: A `connect` operation is not in progress. - // - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_start_connect(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_t *remote_address, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_finish_connect(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - // Receive messages on the socket. - // - // This function attempts to receive up to `max-results` datagrams on the socket without blocking. - // The returned list may contain fewer elements than requested, but never more. - // If `max-results` is 0, this function returns successfully with an empty list. - // - // # Typical errors - // - `invalid-state`: The socket is not bound to any local address. (EINVAL) - // - `remote-unreachable`: The remote address is not reachable. (ECONNREFUSED, ECONNRESET, ENETRESET on Windows, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN) - // - `would-block`: There is no pending data available to be read at the moment. (EWOULDBLOCK, EAGAIN) - // - // # References - // - - // - - // - - // - - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_receive(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint64_t max_results, wasi_sockets_0_2_0_rc_2023_10_18_udp_list_datagram_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - // Send messages on the socket. - // - // This function attempts to send all provided `datagrams` on the socket without blocking and - // returns how many messages were actually sent (or queued for sending). - // - // This function semantically behaves the same as iterating the `datagrams` list and sequentially - // sending each individual datagram until either the end of the list has been reached or the first error occurred. - // If at least one datagram has been sent successfully, this function never returns an error. - // - // If the input list is empty, the function returns `ok(0)`. - // - // The remote address option is required. To send a message to the "connected" peer, - // call `remote-address` to get their address. - // - // # Typical errors - // - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) - // - `invalid-argument`: `remote-address` is a non-IPv4-mapped IPv6 address, but the socket was bound to a specific IPv4-mapped IPv6 address. (or vice versa) - // - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EDESTADDRREQ, EADDRNOTAVAIL) - // - `invalid-argument`: The port in `remote-address` is set to 0. (EDESTADDRREQ, EADDRNOTAVAIL) - // - `invalid-argument`: The socket is in "connected" mode and the `datagram.remote-address` does not match the address passed to `connect`. (EISCONN) - // - `invalid-state`: The socket is not bound to any local address. Unlike POSIX, this function does not perform an implicit bind. - // - `remote-unreachable`: The remote address is not reachable. (ECONNREFUSED, ECONNRESET, ENETRESET on Windows, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN) - // - `datagram-too-large`: The datagram is too large. (EMSGSIZE) - // - `would-block`: The send buffer is currently full. (EWOULDBLOCK, EAGAIN) - // - // # References - // - - // - - // - - // - - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_send(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_list_datagram_t *datagrams, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - // Get the current bound address. - // - // POSIX mentions: - // > If the socket has not been bound to a local name, the value - // > stored in the object pointed to by `address` is unspecified. - // - // WASI is stricter and requires `local-address` to return `invalid-state` when the socket hasn't been bound yet. - // - // # Typical errors - // - `invalid-state`: The socket is not bound to any local address. - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_local_address(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - // Get the address set with `connect`. - // - // # Typical errors - // - `invalid-state`: The socket is not connected to a remote address. (ENOTCONN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_remote_address(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - // Whether this is a IPv4 or IPv6 socket. - // - // Equivalent to the SO_DOMAIN socket option. - extern wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_address_family_t wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_address_family(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self); - // Whether IPv4 compatibility (dual-stack) mode is disabled or not. - // - // Equivalent to the IPV6_V6ONLY socket option. - // - // # Typical errors - // - `not-supported`: (get/set) `this` socket is an IPv4 socket. - // - `invalid-state`: (set) The socket is already bound. - // - `not-supported`: (set) Host does not support dual-stack sockets. (Implementations are not required to.) - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_ipv6_only(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_ipv6_only(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - // Equivalent to the IP_TTL & IPV6_UNICAST_HOPS socket options. - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_unicast_hop_limit(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint8_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_unicast_hop_limit(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint8_t value, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - // The kernel buffer space reserved for sends/receives on this socket. - // - // Note #1: an implementation may choose to cap or round the buffer size when setting the value. - // In other words, after setting a value, reading the same setting back may return a different value. - // - // Note #2: there is not necessarily a direct relationship between the kernel buffer size and the bytes of - // actual data to be sent/received by the application, because the kernel might also use the buffer space - // for internal metadata structures. - // - // Equivalent to the SO_RCVBUF and SO_SNDBUF socket options. - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_send_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_set_send_buffer_size(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_10_18_udp_error_code_t *err); - // Create a `pollable` which will resolve once the socket is ready for I/O. - // - // Note: this function is here for WASI Preview2 only. - // It's planned to be removed when `future` is natively supported in Preview3. - extern wasi_sockets_0_2_0_rc_2023_10_18_udp_own_pollable_t wasi_sockets_0_2_0_rc_2023_10_18_udp_method_udp_socket_subscribe(wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t self); - - // Imported Functions from `wasi:sockets/udp-create-socket@0.2.0-rc-2023-10-18` - // Create a new UDP socket. - // - // Similar to `socket(AF_INET or AF_INET6, SOCK_DGRAM, IPPROTO_UDP)` in POSIX. - // - // This function does not require a network capability handle. This is considered to be safe because - // at time of creation, the socket is not bound to any `network` yet. Up to the moment `bind`/`connect` is called, - // the socket is effectively an in-memory configuration object, unable to communicate with the outside world. - // - // All sockets are non-blocking. Use the wasi-poll interface to block on asynchronous operations. - // - // # Typical errors - // - `not-supported`: The specified `address-family` is not supported. (EAFNOSUPPORT) - // - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) - // - // # References: - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_create_udp_socket(wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_ip_address_family_t address_family, wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_own_udp_socket_t *ret, wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_error_code_t *err); - - // Imported Functions from `wasi:random/random@0.2.0-rc-2023-10-18` - // Return `len` cryptographically-secure random or pseudo-random bytes. - // - // This function must produce data at least as cryptographically secure and - // fast as an adequately seeded cryptographically-secure pseudo-random - // number generator (CSPRNG). It must not block, from the perspective of - // the calling program, under any circumstances, including on the first - // request and on requests for numbers of bytes. The returned data must - // always be unpredictable. - // - // This function must always return fresh data. Deterministic environments - // must omit this function, rather than implementing it with deterministic - // data. - extern void wasi_random_0_2_0_rc_2023_10_18_random_get_random_bytes(uint64_t len, bindings_list_u8_t *ret); - // Return a cryptographically-secure random or pseudo-random `u64` value. - // - // This function returns the same type of data as `get-random-bytes`, - // represented as a `u64`. - extern uint64_t wasi_random_0_2_0_rc_2023_10_18_random_get_random_u64(void); - - // Imported Functions from `wasi:random/insecure@0.2.0-rc-2023-10-18` - // Return `len` insecure pseudo-random bytes. - // - // This function is not cryptographically secure. Do not use it for - // anything related to security. - // - // There are no requirements on the values of the returned bytes, however - // implementations are encouraged to return evenly distributed values with - // a long period. - extern void wasi_random_0_2_0_rc_2023_10_18_insecure_get_insecure_random_bytes(uint64_t len, bindings_list_u8_t *ret); - // Return an insecure pseudo-random `u64` value. - // - // This function returns the same type of pseudo-random data as - // `get-insecure-random-bytes`, represented as a `u64`. - extern uint64_t wasi_random_0_2_0_rc_2023_10_18_insecure_get_insecure_random_u64(void); - - // Imported Functions from `wasi:random/insecure-seed@0.2.0-rc-2023-10-18` - // Return a 128-bit value that may contain a pseudo-random value. - // - // The returned value is not required to be computed from a CSPRNG, and may - // even be entirely deterministic. Host implementations are encouraged to - // provide pseudo-random values to any program exposed to - // attacker-controlled content, to enable DoS protection built into many - // languages' hash-map implementations. - // - // This function is intended to only be called once, by a source language - // to initialize Denial Of Service (DoS) protection in its hash-map - // implementation. - // - // # Expected future evolution - // - // This will likely be changed to a value import, to prevent it from being - // called multiple times and potentially used for purposes other than DoS - // protection. - extern void wasi_random_0_2_0_rc_2023_10_18_insecure_seed_insecure_seed(bindings_tuple2_u64_u64_t *ret); - - // Imported Functions from `wasi:cli/environment@0.2.0-rc-2023-10-18` - // Get the POSIX-style environment variables. - // - // Each environment variable is provided as a pair of string variable names - // and string value. - // - // Morally, these are a value import, but until value imports are available - // in the component model, this import function should return the same - // values each time it is called. - extern void wasi_cli_0_2_0_rc_2023_10_18_environment_get_environment(bindings_list_tuple2_string_string_t *ret); - // Get the POSIX-style arguments to the program. - extern void wasi_cli_0_2_0_rc_2023_10_18_environment_get_arguments(bindings_list_string_t *ret); - // Return a path that programs should use as their initial current working - // directory, interpreting `.` as shorthand for this. - extern bool wasi_cli_0_2_0_rc_2023_10_18_environment_initial_cwd(bindings_string_t *ret); - - // Imported Functions from `wasi:cli/exit@0.2.0-rc-2023-10-18` - // Exit the current instance and any linked instances. - extern void wasi_cli_0_2_0_rc_2023_10_18_exit_exit(wasi_cli_0_2_0_rc_2023_10_18_exit_result_void_void_t *status); - - // Imported Functions from `wasi:cli/stdin@0.2.0-rc-2023-10-18` - extern wasi_cli_0_2_0_rc_2023_10_18_stdin_own_input_stream_t wasi_cli_0_2_0_rc_2023_10_18_stdin_get_stdin(void); - - // Imported Functions from `wasi:cli/stdout@0.2.0-rc-2023-10-18` - extern wasi_cli_0_2_0_rc_2023_10_18_stdout_own_output_stream_t wasi_cli_0_2_0_rc_2023_10_18_stdout_get_stdout(void); - - // Imported Functions from `wasi:cli/stderr@0.2.0-rc-2023-10-18` - extern wasi_cli_0_2_0_rc_2023_10_18_stderr_own_output_stream_t wasi_cli_0_2_0_rc_2023_10_18_stderr_get_stderr(void); - - // Imported Functions from `wasi:cli/terminal-stdin@0.2.0-rc-2023-10-18` - // If stdin is connected to a terminal, return a `terminal-input` handle - // allowing further interaction with it. - extern bool wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_get_terminal_stdin(wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_own_terminal_input_t *ret); - - // Imported Functions from `wasi:cli/terminal-stdout@0.2.0-rc-2023-10-18` - // If stdout is connected to a terminal, return a `terminal-output` handle - // allowing further interaction with it. - extern bool wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_get_terminal_stdout(wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_own_terminal_output_t *ret); - - // Imported Functions from `wasi:cli/terminal-stderr@0.2.0-rc-2023-10-18` - // If stderr is connected to a terminal, return a `terminal-output` handle - // allowing further interaction with it. - extern bool wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_get_terminal_stderr(wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_own_terminal_output_t *ret); - - // Imported Functions from `wasi:http/types@0.2.0-rc-2023-10-18` - extern wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t wasi_http_0_2_0_rc_2023_10_18_types_constructor_fields(bindings_list_tuple2_string_list_u8_t *entries); - extern void wasi_http_0_2_0_rc_2023_10_18_types_method_fields_get(wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t self, bindings_string_t *name, bindings_list_list_u8_t *ret); - extern void wasi_http_0_2_0_rc_2023_10_18_types_method_fields_set(wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t self, bindings_string_t *name, bindings_list_list_u8_t *value); - extern void wasi_http_0_2_0_rc_2023_10_18_types_method_fields_delete(wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t self, bindings_string_t *name); - extern void wasi_http_0_2_0_rc_2023_10_18_types_method_fields_append(wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t self, bindings_string_t *name, bindings_list_u8_t *value); - extern void wasi_http_0_2_0_rc_2023_10_18_types_method_fields_entries(wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t self, bindings_list_tuple2_string_list_u8_t *ret); - extern wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t wasi_http_0_2_0_rc_2023_10_18_types_method_fields_clone(wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t self); - extern void wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_method(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t self, wasi_http_0_2_0_rc_2023_10_18_types_method_t *ret); - extern bool wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_path_with_query(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t self, bindings_string_t *ret); - extern bool wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_scheme(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t self, wasi_http_0_2_0_rc_2023_10_18_types_scheme_t *ret); - extern bool wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_authority(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t self, bindings_string_t *ret); - extern wasi_http_0_2_0_rc_2023_10_18_types_own_headers_t wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_headers(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t self); - extern bool wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_consume(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t self, wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t *ret); - extern wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_request_t wasi_http_0_2_0_rc_2023_10_18_types_constructor_outgoing_request(wasi_http_0_2_0_rc_2023_10_18_types_method_t *method, bindings_string_t *maybe_path_with_query, wasi_http_0_2_0_rc_2023_10_18_types_scheme_t *maybe_scheme, bindings_string_t *maybe_authority, wasi_http_0_2_0_rc_2023_10_18_types_borrow_headers_t headers); - extern bool wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_request_write(wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_request_t self, wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t *ret); - extern void wasi_http_0_2_0_rc_2023_10_18_types_static_response_outparam_set(wasi_http_0_2_0_rc_2023_10_18_types_own_response_outparam_t param, wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_response_error_t *response); - extern wasi_http_0_2_0_rc_2023_10_18_types_status_code_t wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_status(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response_t self); - extern wasi_http_0_2_0_rc_2023_10_18_types_own_headers_t wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_headers(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response_t self); - extern bool wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_consume(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response_t self, wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t *ret); - extern bool wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_body_stream(wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_body_t self, wasi_http_0_2_0_rc_2023_10_18_types_own_input_stream_t *ret); - extern wasi_http_0_2_0_rc_2023_10_18_types_own_future_trailers_t wasi_http_0_2_0_rc_2023_10_18_types_static_incoming_body_finish(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t this_); - // Pollable that resolves when the body has been fully read, and the trailers - // are ready to be consumed. - extern wasi_http_0_2_0_rc_2023_10_18_types_own_pollable_t wasi_http_0_2_0_rc_2023_10_18_types_method_future_trailers_subscribe(wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_trailers_t self); - // Retrieve reference to trailers, if they are ready. - extern bool wasi_http_0_2_0_rc_2023_10_18_types_method_future_trailers_get(wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_trailers_t self, wasi_http_0_2_0_rc_2023_10_18_types_result_own_trailers_error_t *ret); - extern wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_response_t wasi_http_0_2_0_rc_2023_10_18_types_constructor_outgoing_response(wasi_http_0_2_0_rc_2023_10_18_types_status_code_t status_code, wasi_http_0_2_0_rc_2023_10_18_types_borrow_headers_t headers); - // Will give the child outgoing-response at most once. subsequent calls will - // return an error. - extern bool wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_response_write(wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_response_t self, wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t *ret); - // Will give the child output-stream at most once. subsequent calls will - // return an error. - extern bool wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_body_write(wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_body_t self, wasi_http_0_2_0_rc_2023_10_18_types_own_output_stream_t *ret); - // Finalize an outgoing body, optionally providing trailers. This must be - // called to signal that the response is complete. If the `outgoing-body` is - // dropped without calling `outgoing-body-finalize`, the implementation - // should treat the body as corrupted. - extern void wasi_http_0_2_0_rc_2023_10_18_types_static_outgoing_body_finish(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t this_, wasi_http_0_2_0_rc_2023_10_18_types_own_trailers_t *maybe_trailers); - // option indicates readiness. - // outer result indicates you are allowed to get the - // incoming-response-or-error at most once. subsequent calls after ready - // will return an error here. - // inner result indicates whether the incoming-response was available, or an - // error occured. - extern bool wasi_http_0_2_0_rc_2023_10_18_types_method_future_incoming_response_get(wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response_t self, wasi_http_0_2_0_rc_2023_10_18_types_result_result_own_incoming_response_error_void_t *ret); - extern wasi_http_0_2_0_rc_2023_10_18_types_own_pollable_t wasi_http_0_2_0_rc_2023_10_18_types_method_future_incoming_response_subscribe(wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response_t self); - - // Imported Functions from `wasi:http/outgoing-handler@0.2.0-rc-2023-10-18` - extern bool wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_handle(wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_own_outgoing_request_t request, wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_request_options_t *maybe_options, wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_own_future_incoming_response_t *ret, wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_error_t *err); - - // Exported Functions from `wasi:cli/run@0.2.0-rc-2023-10-18` - bool exports_wasi_cli_0_2_0_rc_2023_10_18_run_run(void); - - // Exported Functions from `wasi:http/incoming-handler@0.2.0-rc-2023-10-18` - void exports_wasi_http_0_2_0_rc_2023_10_18_incoming_handler_handle(exports_wasi_http_0_2_0_rc_2023_10_18_incoming_handler_own_incoming_request_t request, exports_wasi_http_0_2_0_rc_2023_10_18_incoming_handler_own_response_outparam_t response_out); - - // Helper Functions - - extern void wasi_io_0_2_0_rc_2023_10_18_poll_pollable_drop_own(wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t handle); - extern void wasi_io_0_2_0_rc_2023_10_18_poll_pollable_drop_borrow(wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t handle); - - extern wasi_io_0_2_0_rc_2023_10_18_poll_borrow_pollable_t wasi_io_0_2_0_rc_2023_10_18_poll_borrow_pollable(wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t handle); - - void wasi_io_0_2_0_rc_2023_10_18_poll_list_borrow_pollable_free(wasi_io_0_2_0_rc_2023_10_18_poll_list_borrow_pollable_t *ptr); - - void bindings_list_u32_free(bindings_list_u32_t *ptr); - - void wasi_clocks_0_2_0_rc_2023_10_18_timezone_timezone_display_free(wasi_clocks_0_2_0_rc_2023_10_18_timezone_timezone_display_t *ptr); - - extern void wasi_io_0_2_0_rc_2023_10_18_streams_error_drop_own(wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t handle); - extern void wasi_io_0_2_0_rc_2023_10_18_streams_error_drop_borrow(wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t handle); - - extern wasi_io_0_2_0_rc_2023_10_18_streams_borrow_error_t wasi_io_0_2_0_rc_2023_10_18_streams_borrow_error(wasi_io_0_2_0_rc_2023_10_18_streams_own_error_t handle); - - void wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_free(wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t *ptr); - - extern void wasi_io_0_2_0_rc_2023_10_18_streams_input_stream_drop_own(wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t handle); - extern void wasi_io_0_2_0_rc_2023_10_18_streams_input_stream_drop_borrow(wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t handle); - - extern wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream(wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t handle); - - extern void wasi_io_0_2_0_rc_2023_10_18_streams_output_stream_drop_own(wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t handle); - extern void wasi_io_0_2_0_rc_2023_10_18_streams_output_stream_drop_borrow(wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t handle); - - extern wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream(wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t handle); - - void bindings_list_u8_free(bindings_list_u8_t *ptr); - - void wasi_io_0_2_0_rc_2023_10_18_streams_result_list_u8_stream_error_free(wasi_io_0_2_0_rc_2023_10_18_streams_result_list_u8_stream_error_t *ptr); - - void wasi_io_0_2_0_rc_2023_10_18_streams_result_u64_stream_error_free(wasi_io_0_2_0_rc_2023_10_18_streams_result_u64_stream_error_t *ptr); - - void wasi_io_0_2_0_rc_2023_10_18_streams_result_void_stream_error_free(wasi_io_0_2_0_rc_2023_10_18_streams_result_void_stream_error_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_access_type_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_access_type_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_option_datetime_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_stat_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_stat_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_new_timestamp_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_new_timestamp_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_t *ptr); - - extern void wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_drop_own(wasi_filesystem_0_2_0_rc_2023_10_18_types_own_descriptor_t handle); - extern void wasi_filesystem_0_2_0_rc_2023_10_18_types_descriptor_drop_borrow(wasi_filesystem_0_2_0_rc_2023_10_18_types_own_descriptor_t handle); - - extern wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor_t wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_descriptor(wasi_filesystem_0_2_0_rc_2023_10_18_types_own_descriptor_t handle); - - extern void wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_stream_drop_own(wasi_filesystem_0_2_0_rc_2023_10_18_types_own_directory_entry_stream_t handle); - extern void wasi_filesystem_0_2_0_rc_2023_10_18_types_directory_entry_stream_drop_borrow(wasi_filesystem_0_2_0_rc_2023_10_18_types_own_directory_entry_stream_t handle); - - extern wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_directory_entry_stream_t wasi_filesystem_0_2_0_rc_2023_10_18_types_borrow_directory_entry_stream(wasi_filesystem_0_2_0_rc_2023_10_18_types_own_directory_entry_stream_t handle); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_input_stream_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_input_stream_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_output_stream_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_output_stream_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_void_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_flags_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_flags_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_type_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_type_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_tuple2_list_u8_bool_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_tuple2_list_u8_bool_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_filesize_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_filesize_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_directory_entry_stream_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_directory_entry_stream_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_stat_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_descriptor_stat_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_descriptor_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_own_descriptor_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_string_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_string_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_metadata_hash_value_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_metadata_hash_value_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_option_directory_entry_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_option_directory_entry_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_result_option_directory_entry_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_result_option_directory_entry_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_types_option_error_code_free(wasi_filesystem_0_2_0_rc_2023_10_18_types_option_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_preopens_tuple2_own_descriptor_string_free(wasi_filesystem_0_2_0_rc_2023_10_18_preopens_tuple2_own_descriptor_string_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_10_18_preopens_list_tuple2_own_descriptor_string_free(wasi_filesystem_0_2_0_rc_2023_10_18_preopens_list_tuple2_own_descriptor_string_t *ptr); - - extern void wasi_sockets_0_2_0_rc_2023_10_18_network_network_drop_own(wasi_sockets_0_2_0_rc_2023_10_18_network_own_network_t handle); - extern void wasi_sockets_0_2_0_rc_2023_10_18_network_network_drop_borrow(wasi_sockets_0_2_0_rc_2023_10_18_network_own_network_t handle); - - extern wasi_sockets_0_2_0_rc_2023_10_18_network_borrow_network_t wasi_sockets_0_2_0_rc_2023_10_18_network_borrow_network(wasi_sockets_0_2_0_rc_2023_10_18_network_own_network_t handle); - - void wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_free(wasi_sockets_0_2_0_rc_2023_10_18_network_ip_address_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_network_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_10_18_network_ip_socket_address_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_ip_address_free(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_ip_address_t *ptr); - - extern void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_resolve_address_stream_drop_own(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_resolve_address_stream_t handle); - extern void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_resolve_address_stream_drop_borrow(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_resolve_address_stream_t handle); - - extern wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_resolve_address_stream_t wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_borrow_resolve_address_stream(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_own_resolve_address_stream_t handle); - - void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_family_free(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_family_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_result_own_resolve_address_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_result_own_resolve_address_stream_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_free(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_option_ip_address_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_result_option_ip_address_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_ip_name_lookup_result_option_ip_address_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_ip_socket_address_t *ptr); - - extern void wasi_sockets_0_2_0_rc_2023_10_18_tcp_tcp_socket_drop_own(wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_tcp_socket_t handle); - extern void wasi_sockets_0_2_0_rc_2023_10_18_tcp_tcp_socket_drop_borrow(wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_tcp_socket_t handle); - - extern wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket_t wasi_sockets_0_2_0_rc_2023_10_18_tcp_borrow_tcp_socket(wasi_sockets_0_2_0_rc_2023_10_18_tcp_own_tcp_socket_t handle); - - void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_void_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_tuple2_own_input_stream_own_output_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_tuple2_own_input_stream_own_output_stream_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_tuple3_own_tcp_socket_own_input_stream_own_output_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_tuple3_own_tcp_socket_own_input_stream_own_output_stream_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_ip_socket_address_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_ip_socket_address_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_bool_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_bool_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_u8_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_u8_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_u64_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_result_u64_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_result_own_tcp_socket_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_tcp_create_socket_result_own_tcp_socket_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_ip_socket_address_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_udp_datagram_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_datagram_t *ptr); - - extern void wasi_sockets_0_2_0_rc_2023_10_18_udp_udp_socket_drop_own(wasi_sockets_0_2_0_rc_2023_10_18_udp_own_udp_socket_t handle); - extern void wasi_sockets_0_2_0_rc_2023_10_18_udp_udp_socket_drop_borrow(wasi_sockets_0_2_0_rc_2023_10_18_udp_own_udp_socket_t handle); - - extern wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket_t wasi_sockets_0_2_0_rc_2023_10_18_udp_borrow_udp_socket(wasi_sockets_0_2_0_rc_2023_10_18_udp_own_udp_socket_t handle); - - void wasi_sockets_0_2_0_rc_2023_10_18_udp_result_void_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_result_void_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_udp_list_datagram_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_list_datagram_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_udp_result_list_datagram_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_result_list_datagram_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u64_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u64_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_udp_result_ip_socket_address_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_result_ip_socket_address_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_udp_result_bool_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_result_bool_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u8_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_result_u8_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_result_own_udp_socket_error_code_free(wasi_sockets_0_2_0_rc_2023_10_18_udp_create_socket_result_own_udp_socket_error_code_t *ptr); - - void bindings_tuple2_string_string_free(bindings_tuple2_string_string_t *ptr); - - void bindings_list_tuple2_string_string_free(bindings_list_tuple2_string_string_t *ptr); - - void bindings_list_string_free(bindings_list_string_t *ptr); - - void bindings_option_string_free(bindings_option_string_t *ptr); - - void wasi_cli_0_2_0_rc_2023_10_18_exit_result_void_void_free(wasi_cli_0_2_0_rc_2023_10_18_exit_result_void_void_t *ptr); - - extern void wasi_cli_0_2_0_rc_2023_10_18_terminal_input_terminal_input_drop_own(wasi_cli_0_2_0_rc_2023_10_18_terminal_input_own_terminal_input_t handle); - extern void wasi_cli_0_2_0_rc_2023_10_18_terminal_input_terminal_input_drop_borrow(wasi_cli_0_2_0_rc_2023_10_18_terminal_input_own_terminal_input_t handle); - - extern wasi_cli_0_2_0_rc_2023_10_18_terminal_input_borrow_terminal_input_t wasi_cli_0_2_0_rc_2023_10_18_terminal_input_borrow_terminal_input(wasi_cli_0_2_0_rc_2023_10_18_terminal_input_own_terminal_input_t handle); - - extern void wasi_cli_0_2_0_rc_2023_10_18_terminal_output_terminal_output_drop_own(wasi_cli_0_2_0_rc_2023_10_18_terminal_output_own_terminal_output_t handle); - extern void wasi_cli_0_2_0_rc_2023_10_18_terminal_output_terminal_output_drop_borrow(wasi_cli_0_2_0_rc_2023_10_18_terminal_output_own_terminal_output_t handle); - - extern wasi_cli_0_2_0_rc_2023_10_18_terminal_output_borrow_terminal_output_t wasi_cli_0_2_0_rc_2023_10_18_terminal_output_borrow_terminal_output(wasi_cli_0_2_0_rc_2023_10_18_terminal_output_own_terminal_output_t handle); - - void wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_option_own_terminal_input_free(wasi_cli_0_2_0_rc_2023_10_18_terminal_stdin_option_own_terminal_input_t *ptr); - - void wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_option_own_terminal_output_free(wasi_cli_0_2_0_rc_2023_10_18_terminal_stdout_option_own_terminal_output_t *ptr); - - void wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_option_own_terminal_output_free(wasi_cli_0_2_0_rc_2023_10_18_terminal_stderr_option_own_terminal_output_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_method_free(wasi_http_0_2_0_rc_2023_10_18_types_method_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_scheme_free(wasi_http_0_2_0_rc_2023_10_18_types_scheme_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_error_free(wasi_http_0_2_0_rc_2023_10_18_types_error_t *ptr); - - extern void wasi_http_0_2_0_rc_2023_10_18_types_fields_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t handle); - extern void wasi_http_0_2_0_rc_2023_10_18_types_fields_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t handle); - - extern wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields(wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t handle); - - extern void wasi_http_0_2_0_rc_2023_10_18_types_incoming_request_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_request_t handle); - extern void wasi_http_0_2_0_rc_2023_10_18_types_incoming_request_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_request_t handle); - - extern wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_request_t handle); - - extern void wasi_http_0_2_0_rc_2023_10_18_types_outgoing_request_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_request_t handle); - extern void wasi_http_0_2_0_rc_2023_10_18_types_outgoing_request_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_request_t handle); - - extern wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_request_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_request(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_request_t handle); - - void bindings_option_u32_free(bindings_option_u32_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_request_options_free(wasi_http_0_2_0_rc_2023_10_18_types_request_options_t *ptr); - - extern void wasi_http_0_2_0_rc_2023_10_18_types_response_outparam_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_response_outparam_t handle); - extern void wasi_http_0_2_0_rc_2023_10_18_types_response_outparam_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_response_outparam_t handle); - - extern wasi_http_0_2_0_rc_2023_10_18_types_borrow_response_outparam_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_response_outparam(wasi_http_0_2_0_rc_2023_10_18_types_own_response_outparam_t handle); - - extern void wasi_http_0_2_0_rc_2023_10_18_types_incoming_response_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_response_t handle); - extern void wasi_http_0_2_0_rc_2023_10_18_types_incoming_response_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_response_t handle); - - extern wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_response_t handle); - - extern void wasi_http_0_2_0_rc_2023_10_18_types_incoming_body_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t handle); - extern void wasi_http_0_2_0_rc_2023_10_18_types_incoming_body_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t handle); - - extern wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_body_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_body(wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t handle); - - extern void wasi_http_0_2_0_rc_2023_10_18_types_future_trailers_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_future_trailers_t handle); - extern void wasi_http_0_2_0_rc_2023_10_18_types_future_trailers_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_future_trailers_t handle); - - extern wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_trailers_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_trailers(wasi_http_0_2_0_rc_2023_10_18_types_own_future_trailers_t handle); - - extern void wasi_http_0_2_0_rc_2023_10_18_types_outgoing_response_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_response_t handle); - extern void wasi_http_0_2_0_rc_2023_10_18_types_outgoing_response_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_response_t handle); - - extern wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_response_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_response(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_response_t handle); - - extern void wasi_http_0_2_0_rc_2023_10_18_types_outgoing_body_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t handle); - extern void wasi_http_0_2_0_rc_2023_10_18_types_outgoing_body_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t handle); - - extern wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_body_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_body(wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t handle); - - extern void wasi_http_0_2_0_rc_2023_10_18_types_future_incoming_response_drop_own(wasi_http_0_2_0_rc_2023_10_18_types_own_future_incoming_response_t handle); - extern void wasi_http_0_2_0_rc_2023_10_18_types_future_incoming_response_drop_borrow(wasi_http_0_2_0_rc_2023_10_18_types_own_future_incoming_response_t handle); - - extern wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response_t wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response(wasi_http_0_2_0_rc_2023_10_18_types_own_future_incoming_response_t handle); - - void bindings_tuple2_string_list_u8_free(bindings_tuple2_string_list_u8_t *ptr); - - void bindings_list_tuple2_string_list_u8_free(bindings_list_tuple2_string_list_u8_t *ptr); - - void bindings_list_list_u8_free(bindings_list_list_u8_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_option_scheme_free(wasi_http_0_2_0_rc_2023_10_18_types_option_scheme_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_body_void_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_body_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_body_void_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_body_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_response_error_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_response_error_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_result_own_input_stream_void_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_input_stream_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_result_own_trailers_error_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_trailers_error_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_option_result_own_trailers_error_free(wasi_http_0_2_0_rc_2023_10_18_types_option_result_own_trailers_error_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_result_own_output_stream_void_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_output_stream_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_option_own_trailers_free(wasi_http_0_2_0_rc_2023_10_18_types_option_own_trailers_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_response_error_free(wasi_http_0_2_0_rc_2023_10_18_types_result_own_incoming_response_error_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_result_result_own_incoming_response_error_void_free(wasi_http_0_2_0_rc_2023_10_18_types_result_result_own_incoming_response_error_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_types_option_result_result_own_incoming_response_error_void_free(wasi_http_0_2_0_rc_2023_10_18_types_option_result_result_own_incoming_response_error_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_request_options_free(wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_request_options_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_error_free(wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_error_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_option_request_options_free(wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_option_request_options_t *ptr); - - void wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_result_own_future_incoming_response_error_free(wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_result_own_future_incoming_response_error_t *ptr); - - void exports_wasi_cli_0_2_0_rc_2023_10_18_run_result_void_void_free(exports_wasi_cli_0_2_0_rc_2023_10_18_run_result_void_void_t *ptr); - - // Transfers ownership of `s` into the string `ret` - void bindings_string_set(bindings_string_t *ret, char*s); - - // Creates a copy of the input nul-terminate string `s` and - // stores it into the component model string `ret`. - void bindings_string_dup(bindings_string_t *ret, const char*s); - - // Deallocates the string pointed to by `ret`, deallocating - // the memory behind the string. - void bindings_string_free(bindings_string_t *ret); - - #ifdef __cplusplus - } - #endif - #endif - \ No newline at end of file diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/bindings/bindings_component_type.o b/host-apis/wasi-0.2.0-rc-2023-10-18/bindings/bindings_component_type.o deleted file mode 100644 index 53006246907f91e48f30284e6eb38827d5965d41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41353 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 diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/host_api.cpp b/host-apis/wasi-0.2.0-rc-2023-10-18/host_api.cpp deleted file mode 100644 index 4c35cb16..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/host_api.cpp +++ /dev/null @@ -1,963 +0,0 @@ -#include "host_api.h" -#include "bindings/bindings.h" - -#include "bindings/bindings.h" -#include - -using std::optional; -using std::string_view; -using std::tuple; -using std::unique_ptr; -using std::vector; - -// The host interface makes the assumption regularly that uint32_t is sufficient space to store a -// pointer. -static_assert(sizeof(uint32_t) == sizeof(void *)); - -typedef wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_request_t incoming_request_t; -typedef wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_request_t borrow_incoming_request_t; -typedef wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_response_t incoming_response_t; -typedef wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_request_t borrow_outgoing_request_t; - -typedef wasi_http_0_2_0_rc_2023_10_18_types_own_future_incoming_response_t - future_incoming_response_t; -typedef wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response_t - borrow_future_incoming_response_t; - -typedef wasi_http_0_2_0_rc_2023_10_18_types_own_incoming_body_t incoming_body_t; -typedef wasi_http_0_2_0_rc_2023_10_18_types_own_outgoing_body_t outgoing_body_t; - -typedef wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_body_t borrow_incoming_body_t; -typedef wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_body_t borrow_outgoing_body_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t own_pollable_t; -typedef wasi_io_0_2_0_rc_2023_10_18_poll_borrow_pollable_t borrow_pollable_t; -typedef wasi_io_0_2_0_rc_2023_10_18_poll_list_borrow_pollable_t list_borrow_pollable_t; - -typedef wasi_io_0_2_0_rc_2023_10_18_streams_own_input_stream_t own_input_stream_t; -typedef wasi_io_0_2_0_rc_2023_10_18_streams_borrow_input_stream_t borrow_input_stream_t; - -namespace { - -/// This is the type contract for using the Own and Borrow templates. -template struct HandleOps {}; - -/// A convenience wrapper for constructing a borrow. As we only create borrows of things we already -/// own, this wrapper will never explicitly drop borrows. -template class Borrow final { - static constexpr const typename HandleOps::borrow invalid{std::numeric_limits::max()}; - HandleOps::borrow handle{Borrow::invalid}; - -public: - Borrow() = default; - - // Construct a borrow from an owned handle. - Borrow(HandleOps::own handle) : handle{HandleOps::borrow_owned(handle)} {} - - // Construct a borrow from a raw `Handle` value. - Borrow(host_api::Handle handle) : Borrow{typename HandleOps::own{handle}} {} - - // Convenience wrapper for constructing a borrow of a HandleState. - Borrow(host_api::HandleState *state) : Borrow{typename HandleOps::own{state->handle}} {} - - bool valid() const { return this->handle.__handle != Borrow::invalid.__handle; } - - operator bool() const { return this->valid(); } - - operator typename HandleOps::borrow() const { return this->handle; } -}; - -template <> struct HandleOps { - using own = wasi_http_0_2_0_rc_2023_10_18_types_own_fields_t; - using borrow = wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields_t; - - static constexpr const auto borrow_owned = wasi_http_0_2_0_rc_2023_10_18_types_borrow_fields; -}; - -struct OutputStream {}; - -template <> struct HandleOps { - using own = wasi_io_0_2_0_rc_2023_10_18_streams_own_output_stream_t; - using borrow = wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream_t; - - static constexpr const auto borrow_owned = - wasi_io_0_2_0_rc_2023_10_18_streams_borrow_output_stream; -}; - -struct Pollable {}; - -template <> struct HandleOps { - using own = wasi_io_0_2_0_rc_2023_10_18_poll_own_pollable_t; - using borrow = wasi_io_0_2_0_rc_2023_10_18_poll_borrow_pollable_t; - - static constexpr const auto borrow_owned = wasi_io_0_2_0_rc_2023_10_18_poll_borrow_pollable; -}; - -} // namespace - -size_t api::AsyncTask::select(std::vector &tasks) { - auto count = tasks.size(); - vector> handles; - for (const auto task : tasks) { - handles.emplace_back(task->id()); - } - auto list = list_borrow_pollable_t{ - reinterpret_cast::borrow *>(handles.data()), count}; - bindings_list_u32_t result{nullptr, 0}; - wasi_io_0_2_0_rc_2023_10_18_poll_poll_list(&list, &result); - MOZ_ASSERT(result.len > 0); - const auto ready_index = result.ptr[0]; - free(result.ptr); - - return ready_index; -} - -namespace host_api { - -HostString::HostString(const char *c_str) { - len = strlen(c_str); - ptr = JS::UniqueChars(static_cast(malloc(len + 1))); - std::memcpy(ptr.get(), c_str, len); - ptr[len] = '\0'; -} - -HostString bindings_string_to_host_string(bindings_string_t str) { - return {JS::UniqueChars(reinterpret_cast(str.ptr)), str.len}; -} - -HostString bindings_bytes_to_host_string(bindings_list_u8_t str) { - return {JS::UniqueChars(reinterpret_cast(str.ptr)), str.len}; -} - -namespace { - -bindings_string_t string_view_to_world_string(std::string_view str) { - return { - .ptr = (uint8_t *)str.data(), - .len = str.size(), - }; -} - -bindings_list_u8_t string_view_to_world_bytes(std::string_view str) { - return { - .ptr = (uint8_t *)str.data(), - .len = str.size(), - }; -} - -std::string scheme_to_string(const wasi_http_0_2_0_rc_2023_10_18_types_scheme_t &scheme) { - if (scheme.tag == WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_SCHEME_HTTP) { - return "http:"; - } - if (scheme.tag == WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_SCHEME_HTTPS) { - return "https:"; - } - - auto str = bindings_string_to_host_string(scheme.val.other); - return std::string(str); -} - -} // namespace - -Result Random::get_bytes(size_t num_bytes) { - Result res; - - bindings_list_u8_t list{}; - wasi_random_0_2_0_rc_2023_10_18_random_get_random_bytes(num_bytes, &list); - auto ret = HostBytes{ - std::unique_ptr{list.ptr}, - list.len, - }; - res.emplace(std::move(ret)); - - return res; -} - -Result Random::get_u32() { - return Result::ok(wasi_random_0_2_0_rc_2023_10_18_random_get_random_u64()); -} - -uint64_t MonotonicClock::now() { return wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_now(); } - -uint64_t MonotonicClock::resolution() { - return wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_resolution(); -} - -int32_t MonotonicClock::subscribe(const uint64_t when, const bool absolute) { - return wasi_clocks_0_2_0_rc_2023_10_18_monotonic_clock_subscribe(when, absolute).__handle; -} - -void MonotonicClock::unsubscribe(const int32_t handle_id) { - wasi_io_0_2_0_rc_2023_10_18_poll_pollable_drop_own(own_pollable_t{handle_id}); -} - -HttpHeaders::HttpHeaders() { - bindings_list_tuple2_string_list_u8_t entries{nullptr, 0}; - this->handle_state_ = - new HandleState(wasi_http_0_2_0_rc_2023_10_18_types_constructor_fields(&entries).__handle); -} -HttpHeaders::HttpHeaders(Handle handle) { handle_state_ = new HandleState(handle); } - -HttpHeaders::HttpHeaders(const vector>> &entries) { - for (const auto &[name, values] : entries) { - for (const auto &value : values) { - auto res = set(name, value); - MOZ_RELEASE_ASSERT(!res.is_err()); - } - } -} - -HttpHeaders::HttpHeaders(const HttpHeaders &headers) { - Borrow borrow(headers.handle_state_); - auto handle = wasi_http_0_2_0_rc_2023_10_18_types_method_fields_clone(borrow); - this->handle_state_ = new HandleState(handle.__handle); -} - -Result>> HttpHeaders::entries() const { - Result>> res; - MOZ_ASSERT(valid()); - - bindings_list_tuple2_string_list_u8_t entries; - Borrow borrow{this->handle_state_}; - wasi_http_0_2_0_rc_2023_10_18_types_method_fields_entries(borrow, &entries); - - vector> entries_vec; - for (int i = 0; i < entries.len; i++) { - auto key = entries.ptr[i].f0; - auto value = entries.ptr[i].f1; - entries_vec.emplace_back(bindings_string_to_host_string(key), - bindings_bytes_to_host_string(value)); - } - // Free the outer list, but not the entries themselves. - free(entries.ptr); - res.emplace(std::move(entries_vec)); - - return res; -} - -Result> HttpHeaders::names() const { - Result> res; - MOZ_ASSERT(valid()); - - bindings_list_tuple2_string_list_u8_t entries; - Borrow borrow{this->handle_state_}; - wasi_http_0_2_0_rc_2023_10_18_types_method_fields_entries(borrow, &entries); - - vector names; - for (int i = 0; i < entries.len; i++) { - names.emplace_back(bindings_string_to_host_string(entries.ptr[i].f0)); - } - // Free the outer list, but not the entries themselves. - free(entries.ptr); - res.emplace(std::move(names)); - - return res; -} - -Result>> HttpHeaders::get(string_view name) const { - Result>> res; - MOZ_ASSERT(valid()); - - bindings_list_list_u8_t values; - auto hdr = string_view_to_world_string(name); - Borrow borrow{this->handle_state_}; - wasi_http_0_2_0_rc_2023_10_18_types_method_fields_get(borrow, &hdr, &values); - - if (values.len > 0) { - std::vector names; - for (int i = 0; i < values.len; i++) { - names.emplace_back(bindings_bytes_to_host_string(values.ptr[i])); - } - // Free the outer list, but not the values themselves. - free(values.ptr); - res.emplace(std::move(names)); - } else { - res.emplace(std::nullopt); - } - - return res; -} - -Result HttpHeaders::set(string_view name, string_view value) { - MOZ_ASSERT(valid()); - auto hdr = string_view_to_world_string(name); - auto [ptr, len] = string_view_to_world_bytes(value); - bindings_list_u8_t fieldval{ptr, len}; - - bindings_list_list_u8_t host_values{&fieldval, 1}; - - Borrow borrow{this->handle_state_}; - wasi_http_0_2_0_rc_2023_10_18_types_method_fields_set(borrow, &hdr, &host_values); - free(host_values.ptr); - - return {}; -} - -Result HttpHeaders::append(string_view name, string_view value) { - MOZ_ASSERT(valid()); - auto hdr = string_view_to_world_string(name); - auto [ptr, len] = string_view_to_world_bytes(value); - - Borrow borrow{this->handle_state_}; - bindings_list_u8_t fieldval{ptr, len}; - wasi_http_0_2_0_rc_2023_10_18_types_method_fields_append(borrow, &hdr, &fieldval); - - return {}; -} - -Result HttpHeaders::remove(string_view name) { - MOZ_ASSERT(valid()); - auto hdr = string_view_to_world_string(name); - - Borrow borrow{this->handle_state_}; - wasi_http_0_2_0_rc_2023_10_18_types_method_fields_delete(borrow, &hdr); - - return {}; -} - -// TODO: convert to `Result` -string_view HttpRequestResponseBase::url() { - if (_url) { - return string_view(*_url); - } - - auto borrow = borrow_incoming_request_t{handle_state_->handle}; - - wasi_http_0_2_0_rc_2023_10_18_types_scheme_t scheme{ - .tag = WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_SCHEME_HTTP, - }; - wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_scheme(borrow, &scheme); - _url = new std::string(scheme_to_string(scheme)); - - bindings_string_t authority; - if (!wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_authority(borrow, &authority)) { - _url->append("localhost"); - } else { - _url->append(string_view(bindings_string_to_host_string(authority))); - } - - bindings_string_t path; - if (wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_path_with_query(borrow, &path)) { - _url->append(string_view(bindings_string_to_host_string(path))); - } - - return string_view(*_url); -} - -bool write_to_outgoing_body(Borrow borrow, const uint8_t *ptr, const size_t len) { - // The write call doesn't mutate the buffer; the cast is just for the - // generated bindings. - bindings_list_u8_t list{const_cast(ptr), len}; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t err; - // TODO: proper error handling. - return wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_write(borrow, &list, &err); -} - -class OutgoingBodyHandleState final : HandleState { - Handle stream_handle_; - PollableHandle pollable_handle_; - - friend HttpOutgoingBody; - -public: - explicit OutgoingBodyHandleState(const Handle handle) - : HandleState(handle), pollable_handle_(INVALID_POLLABLE_HANDLE) { - const borrow_outgoing_body_t borrow = {handle}; - HandleOps::own stream{}; - if (!wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_body_write(borrow, &stream)) { - MOZ_ASSERT_UNREACHABLE("Getting a body's stream should never fail"); - } - stream_handle_ = stream.__handle; - } -}; - -HttpOutgoingBody::HttpOutgoingBody(Handle handle) : Pollable() { - handle_state_ = new OutgoingBodyHandleState(handle); -} -Result HttpOutgoingBody::capacity() { - if (!valid()) { - // TODO: proper error handling for all 154 error codes. - return Result::err(154); - } - - auto *state = static_cast(this->handle_state_); - Borrow borrow(state->stream_handle_); - - uint64_t capacity = 0; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t err; - if (!wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_check_write(borrow, &capacity, - &err)) { - return Result::err(154); - } - return Result::ok(capacity); -} - -Result HttpOutgoingBody::write(const uint8_t *bytes, size_t len) { - auto res = capacity(); - if (res.is_err()) { - // TODO: proper error handling for all 154 error codes. - return Result::err(154); - } - auto capacity = res.unwrap(); - auto bytes_to_write = std::min(len, static_cast(capacity)); - - auto *state = static_cast(this->handle_state_); - Borrow borrow(state->stream_handle_); - if (!write_to_outgoing_body(borrow, bytes, bytes_to_write)) { - return Result::err(154); - } - - return Result::ok(bytes_to_write); -} - -Result HttpOutgoingBody::write_all(const uint8_t *bytes, size_t len) { - if (!valid()) { - // TODO: proper error handling for all 154 error codes. - return Result::err({}); - } - - auto *state = static_cast(this->handle_state_); - Borrow borrow(state->stream_handle_); - - while (len > 0) { - auto capacity_res = capacity(); - if (capacity_res.is_err()) { - // TODO: proper error handling for all 154 error codes. - return Result::err(154); - } - auto capacity = capacity_res.unwrap(); - auto bytes_to_write = std::min(len, static_cast(capacity)); - if (!write_to_outgoing_body(borrow, bytes, len)) { - return Result::err(154); - } - - bytes += bytes_to_write; - len -= bytes_to_write; - } - - return {}; -} - -class BodyAppendTask final : public api::AsyncTask { - enum class State { - BlockedOnBoth, - BlockedOnIncoming, - BlockedOnOutgoing, - Ready, - Done, - }; - - HttpIncomingBody *incoming_body_; - HttpOutgoingBody *outgoing_body_; - PollableHandle incoming_pollable_; - PollableHandle outgoing_pollable_; - State state_; - - void set_state(const State state) { - MOZ_ASSERT(state_ != State::Done); - state_ = state; - } - -public: - explicit BodyAppendTask(HttpIncomingBody *incoming_body, HttpOutgoingBody *outgoing_body) - : incoming_body_(incoming_body), outgoing_body_(outgoing_body) { - auto res = incoming_body_->subscribe(); - MOZ_ASSERT(!res.is_err()); - incoming_pollable_ = res.unwrap(); - - res = outgoing_body_->subscribe(); - MOZ_ASSERT(!res.is_err()); - outgoing_pollable_ = res.unwrap(); - - state_ = State::BlockedOnBoth; - } - - [[nodiscard]] bool run(api::Engine *engine) override { - // If run is called while we're blocked on the incoming stream, that means that stream's - // pollable has resolved, so the stream must be ready. - if (state_ == State::BlockedOnBoth || state_ == State::BlockedOnIncoming) { - auto res = incoming_body_->read(0); - MOZ_ASSERT(!res.is_err()); - auto [bytes, done] = std::move(res.unwrap()); - if (done) { - set_state(State::Done); - return true; - } - set_state(State::BlockedOnOutgoing); - } - - uint64_t capacity = 0; - if (state_ == State::BlockedOnOutgoing) { - auto res = outgoing_body_->capacity(); - if (res.is_err()) { - return false; - } - capacity = res.unwrap(); - if (capacity > 0) { - set_state(State::Ready); - } else { - engine->queue_async_task(this); - return true; - } - } - - MOZ_ASSERT(state_ == State::Ready); - - // TODO: reuse a buffer for this loop - do { - auto res = incoming_body_->read(capacity); - if (res.is_err()) { - // TODO: proper error handling. - return false; - } - auto [done, bytes] = std::move(res.unwrap()); - if (bytes.len == 0 && !done) { - set_state(State::BlockedOnIncoming); - engine->queue_async_task(this); - return true; - } - - auto offset = 0; - while (bytes.len - offset > 0) { - // TODO: remove double checking of write-readiness - // TODO: make this async by storing the remaining chunk in the task and marking it as being - // blocked on write - auto write_res = outgoing_body_->write(bytes.ptr.get() + offset, bytes.len - offset); - if (write_res.is_err()) { - // TODO: proper error handling. - return false; - } - offset += write_res.unwrap(); - } - - if (done) { - set_state(State::Done); - return true; - } - - auto capacity_res = outgoing_body_->capacity(); - if (capacity_res.is_err()) { - // TODO: proper error handling. - return false; - } - capacity = capacity_res.unwrap(); - } while (capacity > 0); - - set_state(State::BlockedOnOutgoing); - engine->queue_async_task(this); - return true; - } - - [[nodiscard]] bool cancel(api::Engine *engine) override { - MOZ_ASSERT_UNREACHABLE("BodyAppendTask's semantics don't allow for cancellation"); - return true; - } - - [[nodiscard]] int32_t id() override { - if (state_ == State::BlockedOnBoth || state_ == State::BlockedOnIncoming) { - return incoming_pollable_; - } - - MOZ_ASSERT(state_ == State::BlockedOnOutgoing, - "BodyAppendTask should only be queued if it's not known to be ready"); - return outgoing_pollable_; - } - - void trace(JSTracer *trc) override { - // Nothing to trace. - } -}; - -Result HttpOutgoingBody::append(api::Engine *engine, HttpIncomingBody *other) { - MOZ_ASSERT(valid()); - engine->queue_async_task(new BodyAppendTask(other, this)); - return {}; -} - -Result HttpOutgoingBody::close() { - MOZ_ASSERT(valid()); - - auto state = static_cast(handle_state_); - // A blocking flush is required here to ensure that all buffered contents are - // actually written before finishing the body. - Borrow borrow{state->stream_handle_}; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t err; - bool success = - wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_blocking_flush(borrow, &err); - MOZ_RELEASE_ASSERT(success); - if (state->pollable_handle_ != INVALID_POLLABLE_HANDLE) { - wasi_io_0_2_0_rc_2023_10_18_poll_pollable_drop_own(own_pollable_t{state->pollable_handle_}); - } - wasi_io_0_2_0_rc_2023_10_18_streams_output_stream_drop_own({state->stream_handle_}); - wasi_http_0_2_0_rc_2023_10_18_types_static_outgoing_body_finish({state->handle}, nullptr); - delete handle_state_; - handle_state_ = nullptr; - - return {}; -} -Result HttpOutgoingBody::subscribe() { - auto state = static_cast(handle_state_); - if (state->pollable_handle_ == INVALID_POLLABLE_HANDLE) { - Borrow borrow{state->stream_handle_}; - state->pollable_handle_ = - wasi_io_0_2_0_rc_2023_10_18_streams_method_output_stream_subscribe(borrow).__handle; - } - return Result::ok(state->pollable_handle_); -} - -void HttpOutgoingBody::unsubscribe() { - auto state = static_cast(handle_state_); - if (state->pollable_handle_ == INVALID_POLLABLE_HANDLE) { - return; - } - wasi_io_0_2_0_rc_2023_10_18_poll_pollable_drop_own(own_pollable_t{state->pollable_handle_}); - state->pollable_handle_ = INVALID_POLLABLE_HANDLE; -} - -static const char *http_method_names[9] = {"GET", "HEAD", "POST", "PUT", "DELETE", - "CONNECT", "OPTIONS", "TRACE", "PATCH"}; - -wasi_http_0_2_0_rc_2023_10_18_types_method_t http_method_to_host(string_view method_str) { - - if (method_str.empty()) { - return wasi_http_0_2_0_rc_2023_10_18_types_method_t{ - WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_GET}; - } - - auto method = method_str.begin(); - for (uint8_t i = 0; i < WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_OTHER; i++) { - auto name = http_method_names[i]; - if (strcasecmp(method, name) == 0) { - return wasi_http_0_2_0_rc_2023_10_18_types_method_t{i}; - } - } - - auto val = bindings_string_t{reinterpret_cast(const_cast(method)), - method_str.length()}; - return wasi_http_0_2_0_rc_2023_10_18_types_method_t{ - WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_OTHER, {val}}; -} - -HttpOutgoingRequest::HttpOutgoingRequest(HandleState *state) { this->handle_state_ = state; } - -HttpOutgoingRequest *HttpOutgoingRequest::make(string_view method_str, optional url_str, - HttpHeaders *headers) { - bindings_string_t path_with_query; - wasi_http_0_2_0_rc_2023_10_18_types_scheme_t scheme; - bindings_string_t authority; - - bindings_string_t *maybe_path_with_query = nullptr; - wasi_http_0_2_0_rc_2023_10_18_types_scheme_t *maybe_scheme = nullptr; - bindings_string_t *maybe_authority = nullptr; - - if (url_str) { - jsurl::SpecString val = url_str.value(); - jsurl::JSUrl *url = new_jsurl(&val); - jsurl::SpecSlice protocol = jsurl::protocol(url); - if (std::memcmp(protocol.data, "http:", protocol.len) == 0) { - scheme.tag = WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_SCHEME_HTTP; - } else if (std::memcmp(protocol.data, "https:", protocol.len) == 0) { - scheme.tag = WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_SCHEME_HTTPS; - } else { - scheme.tag = WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_SCHEME_OTHER; - scheme.val = {const_cast(protocol.data), protocol.len - 1}; - } - maybe_scheme = &scheme; - - jsurl::SpecSlice authority_slice = jsurl::authority(url); - authority = {const_cast(authority_slice.data), authority_slice.len}; - maybe_authority = &authority; - - jsurl::SpecSlice path_with_query_slice = jsurl::path_with_query(url); - path_with_query = {const_cast(path_with_query_slice.data), - path_with_query_slice.len}; - maybe_path_with_query = &path_with_query; - } - - wasi_http_0_2_0_rc_2023_10_18_types_method_t method = http_method_to_host(method_str); - auto handle = wasi_http_0_2_0_rc_2023_10_18_types_constructor_outgoing_request( - &method, maybe_path_with_query, maybe_scheme, maybe_authority, - {headers->handle_state_->handle}) - .__handle; - - auto *state = new HandleState(handle); - auto *req = new HttpOutgoingRequest(state); - - req->headers_ = headers; - - return req; -} - -Result HttpOutgoingRequest::method() { - MOZ_ASSERT(valid()); - MOZ_ASSERT(headers_); - return Result::ok(method_); -} - -Result HttpOutgoingRequest::headers() { - MOZ_ASSERT(valid()); - MOZ_ASSERT(headers_); - return Result::ok(headers_); -} - -Result HttpOutgoingRequest::body() { - typedef Result Res; - MOZ_ASSERT(valid()); - if (!this->body_) { - outgoing_body_t body; - if (!wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_request_write( - wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_request({handle_state_->handle}), - &body)) { - return Res::err(154); - } - this->body_ = new HttpOutgoingBody(body.__handle); - } - return Res::ok(body_); -} - -Result HttpOutgoingRequest::send() { - MOZ_ASSERT(valid()); - future_incoming_response_t ret; - wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_error_t err; - wasi_http_0_2_0_rc_2023_10_18_outgoing_handler_handle({handle_state_->handle}, nullptr, &ret, - &err); - auto res = new FutureHttpIncomingResponse(ret.__handle); - return Result::ok(res); -} - -class IncomingBodyHandleState final : HandleState { - Handle stream_handle_; - PollableHandle pollable_handle_; - - friend HttpIncomingBody; - -public: - explicit IncomingBodyHandleState(const Handle handle) - : HandleState(handle), pollable_handle_(INVALID_POLLABLE_HANDLE) { - const borrow_incoming_body_t borrow = {handle}; - own_input_stream_t stream{}; - if (!wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_body_stream(borrow, &stream)) { - MOZ_ASSERT_UNREACHABLE("Getting a body's stream should never fail"); - } - stream_handle_ = stream.__handle; - } -}; - -HttpIncomingBody::HttpIncomingBody(const Handle handle) : Pollable() { - handle_state_ = new IncomingBodyHandleState(handle); -} - -Result HttpIncomingBody::read(uint32_t chunk_size) { - typedef Result Res; - - bindings_list_u8_t ret{}; - wasi_io_0_2_0_rc_2023_10_18_streams_stream_error_t err{}; - auto borrow = borrow_input_stream_t( - {static_cast(handle_state_)->stream_handle_}); - bool success = - wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_read(borrow, chunk_size, &ret, &err); - if (!success) { - if (err.tag == WASI_IO_0_2_0_RC_2023_10_18_STREAMS_STREAM_ERROR_CLOSED) { - return Res::ok(ReadResult(true, nullptr, 0)); - } - return Res::err(154); - } - return Res::ok(ReadResult(false, unique_ptr(ret.ptr), ret.len)); -} - -// TODO: implement -Result HttpIncomingBody::close() { return {}; } - -Result HttpIncomingBody::subscribe() { - auto borrow = borrow_input_stream_t( - {static_cast(handle_state_)->stream_handle_}); - auto pollable = wasi_io_0_2_0_rc_2023_10_18_streams_method_input_stream_subscribe(borrow); - return Result::ok(pollable.__handle); -} -void HttpIncomingBody::unsubscribe() { - auto state = static_cast(handle_state_); - if (state->pollable_handle_ == INVALID_POLLABLE_HANDLE) { - return; - } - wasi_io_0_2_0_rc_2023_10_18_poll_pollable_drop_own(own_pollable_t{state->pollable_handle_}); - state->pollable_handle_ = INVALID_POLLABLE_HANDLE; -} - -FutureHttpIncomingResponse::FutureHttpIncomingResponse(Handle handle) { - handle_state_ = new HandleState(handle); -} - -Result> FutureHttpIncomingResponse::maybe_response() { - typedef Result> Res; - wasi_http_0_2_0_rc_2023_10_18_types_result_result_own_incoming_response_error_void_t res; - auto borrow = - wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response({handle_state_->handle}); - if (!wasi_http_0_2_0_rc_2023_10_18_types_method_future_incoming_response_get(borrow, &res)) { - return Res::ok(std::nullopt); - } - - MOZ_ASSERT(!res.is_err, - "FutureHttpIncomingResponse::poll must not be called again after succeeding once"); - - auto [is_err, val] = res.val.ok; - if (is_err) { - return Res::err(154); - } - - return Res::ok(new HttpIncomingResponse(val.ok.__handle)); -} - -Result FutureHttpIncomingResponse::subscribe() { - auto borrow = - wasi_http_0_2_0_rc_2023_10_18_types_borrow_future_incoming_response({handle_state_->handle}); - auto pollable = - wasi_http_0_2_0_rc_2023_10_18_types_method_future_incoming_response_subscribe(borrow); - return Result::ok(pollable.__handle); -} -void FutureHttpIncomingResponse::unsubscribe() { - // TODO: implement -} - -Result HttpIncomingResponse::status() { - if (status_ == UNSET_STATUS) { - if (!valid()) { - return Result::err(154); - } - auto borrow = - wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response_t({handle_state_->handle}); - status_ = wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_status(borrow); - } - return Result::ok(status_); -} - -HttpIncomingResponse::HttpIncomingResponse(Handle handle) { - handle_state_ = new HandleState(handle); -} - -Result HttpIncomingResponse::headers() { - if (!headers_) { - if (!valid()) { - return Result::err(154); - } - auto res = wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_headers( - wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response({handle_state_->handle})); - headers_ = new HttpHeaders(res.__handle); - } - - return Result::ok(headers_); -} - -Result HttpIncomingResponse::body() { - if (!body_) { - if (!valid()) { - return Result::err(154); - } - incoming_body_t body; - if (!wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_response_consume( - wasi_http_0_2_0_rc_2023_10_18_types_borrow_incoming_response({handle_state_->handle}), - &body)) { - return Result::err(154); - } - body_ = new HttpIncomingBody(body.__handle); - } - return Result::ok(body_); -} - -HttpOutgoingResponse::HttpOutgoingResponse(HandleState *state) { this->handle_state_ = state; } - -HttpOutgoingResponse *HttpOutgoingResponse::make(const uint16_t status, HttpHeaders *headers) { - auto borrow = - wasi_http_0_2_0_rc_2023_10_18_types_borrow_headers_t({headers->handle_state_->handle}); - auto handle = wasi_http_0_2_0_rc_2023_10_18_types_constructor_outgoing_response(status, borrow); - - auto *state = new HandleState(handle.__handle); - auto *resp = new HttpOutgoingResponse(state); - - resp->status_ = status; - resp->headers_ = headers; - - return resp; -} - -Result HttpOutgoingResponse::headers() { - if (!valid()) { - return Result::err(154); - } - return Result::ok(headers_); -} - -Result HttpOutgoingResponse::body() { - typedef Result Res; - MOZ_ASSERT(valid()); - if (!this->body_) { - outgoing_body_t body; - if (!wasi_http_0_2_0_rc_2023_10_18_types_method_outgoing_response_write( - wasi_http_0_2_0_rc_2023_10_18_types_borrow_outgoing_response({handle_state_->handle}), - &body)) { - return Res::err(154); - } - this->body_ = new HttpOutgoingBody(body.__handle); - } - return Res::ok(this->body_); -} -Result HttpOutgoingResponse::status() { return Result::ok(status_); } - -Result HttpOutgoingResponse::send(ResponseOutparam out_param) { - wasi_http_0_2_0_rc_2023_10_18_types_result_own_outgoing_response_error_t result; - - result.is_err = false; - result.val.ok = {this->handle_state_->handle}; - - wasi_http_0_2_0_rc_2023_10_18_types_static_response_outparam_set({out_param}, &result); - return {}; -} - -HttpIncomingRequest::HttpIncomingRequest(Handle handle) { handle_state_ = new HandleState(handle); } - -Result HttpIncomingRequest::method() { - if (method_.empty()) { - if (!valid()) { - return Result::err(154); - } - } - wasi_http_0_2_0_rc_2023_10_18_types_method_t method; - wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_method( - borrow_incoming_request_t(handle_state_->handle), &method); - if (method.tag != WASI_HTTP_0_2_0_RC_2023_10_18_TYPES_METHOD_OTHER) { - method_ = std::string(http_method_names[method.tag], strlen(http_method_names[method.tag])); - } else { - method_ = std::string(reinterpret_cast(method.val.other.ptr), method.val.other.len); - bindings_string_free(&method.val.other); - } - return Result::ok(method_); -} - -Result HttpIncomingRequest::headers() { - if (!headers_) { - if (!valid()) { - return Result::err(154); - } - borrow_incoming_request_t borrow(handle_state_->handle); - auto res = wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_headers(borrow); - headers_ = new HttpHeaders(res.__handle); - } - - return Result::ok(headers_); -} - -Result HttpIncomingRequest::body() { - if (!body_) { - if (!valid()) { - return Result::err(154); - } - incoming_body_t body; - if (!wasi_http_0_2_0_rc_2023_10_18_types_method_incoming_request_consume( - borrow_incoming_request_t(handle_state_->handle), &body)) { - return Result::err(154); - } - body_ = new HttpIncomingBody(body.__handle); - } - return Result::ok(body_); -} - -} // namespace host_api diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/host_call.cpp b/host-apis/wasi-0.2.0-rc-2023-10-18/host_call.cpp deleted file mode 100644 index b4536140..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/host_call.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "host_api.h" - -namespace host_api { - -/* Returns false if an exception is set on `cx` and the caller should - immediately return to propagate the exception. */ -void handle_api_error(JSContext *cx, uint8_t err, int line, const char *func) { - JS_ReportErrorUTF8(cx, "%s: An error occurred while using the host API.\n", func); -} - -} // namespace host_api diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/include/exports.h b/host-apis/wasi-0.2.0-rc-2023-10-18/include/exports.h deleted file mode 100644 index fc3077bc..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/include/exports.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef WASI_PREVIEW2_EXPORTS -#define WASI_PREVIEW2_EXPORTS - -#define exports_wasi_http_incoming_handler \ - exports_wasi_http_0_2_0_rc_2023_10_18_incoming_handler_handle -#define exports_wasi_http_incoming_request \ - exports_wasi_http_0_2_0_rc_2023_10_18_incoming_handler_own_incoming_request_t -#define exports_wasi_http_response_outparam \ - exports_wasi_http_0_2_0_rc_2023_10_18_incoming_handler_own_response_outparam_t - -#define exports_wasi_cli_run_run exports_wasi_cli_0_2_0_rc_2023_10_18_run_run - -#endif diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/preview1-adapter-debug/wasi_snapshot_preview1.wasm b/host-apis/wasi-0.2.0-rc-2023-10-18/preview1-adapter-debug/wasi_snapshot_preview1.wasm deleted file mode 100755 index 7f10fc2a04f7512ff7086f59c312cb5cd4d4f84b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2357703 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 z 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 z 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

B;m8ng?qx`U zapc}iZ?kECDPL=gDaO$R3W(HBQ2S7nh3O7lw)GFD3Oe`)0rMpVHEnfrPJ>EVg&EO_ zZFO_$9J@sv4x|x17{(wJH9vJVaS-0lOjD}MG|txAaIHGf^i+^<(w84x>)w8Hai-qzp|eM13f^1UDJLug>E6OkN~gah$GJ7V4G- zQb#UH&W$XaEiYXliLPSCY5hjSB+$lP3haC9>Qpi+*Ul(y;`&t~_w0 zxYVZ}Z**{sibb(##yevbQ|}ohQhKk#N`8r?W0xol)Pf5wL*Vfag%2ulJXT4Lb?8hH{FH@5!(F{l= z@#k>*gY6V`WZa|?HS~v@g5q*fNAC_(xCuntnbwHHs_Q7|8X4F~7(0$QE+VP77HJxt zx#CR&Y7FPHb{0-D^!T? z)Ij36afcf*QP(Cfjo=s&$7hO)ofAeAY6ff~p_8#@OQ&(T7>!F(ZA+vc9BP|M$N%ce zBO0U$*f{c@fSF7rao~->*bo^pw640eM4pzAo<^-n=a&L<@pqE^i~foDOv1(&!({Yk zLLTcIQ8JYgB?B4JT3pN``B-HWKfQW@%gg>`_>zjt4P_nsSAvE^)Egcz-|k42jk8q! zHjy0;w|mU{BUVppZ_n6n9=V~VEjsm8y#7Lm#Mnv^9E;2StBm7dk;XuZLpNLkq`MhL zt)vKC7?dd5Boj$ap$O$RnhofffqFK zFiYW#96c9~eZEG#>=UCoGMaH z7Sn+a{72wc94-fPN?!Eigz^FPQbIA45VaaHauY&2iIG;s#qkKsz&e_I)`F4jmUPy8 zsk8;nb8;*kF;e3u^JKbIJzFX1YJ=s8(00|xx?UN3#2KOUZsH}2UGsP{&iKU52 zk3+a!*@&fIOUp9amr^25J&P|jGZH^AkTbWzV{T+ALwX}isc8TjZ(3U$<&A0ijzM-| z^NoXXP)aW!)XPo9qwcQBE-OhGA+hkFo7Cx52P1~k^&sQaaw0{s6vQafRD%HPNHSO> zmT`&c6w*5Zu`rH5@NN9Tq>6i@f-Z~Vu(IwT3g;x~&WMak6Q*!ws8P<{7=gknh3XkG zn!Oc{uCH3|M$p#NI69^nR(OqSMQw?Yj`Xf)!r90Ez?nc~^ zfC;e5qedjhpy*`!u?a1L*~)8!>FK}QpqSm~M=?ar`W<`j;NBz894ghi(V zLqz>d0l~vW6HU zsfFmWAkljtT>HYSn}z5+P-7u>5#|<^Iw__g{B9t*5Q_kHa48dHy$mc|jBfqOwUEiN z0aE@lV*{+ML?u|VN=bFN_LrhtpK8M-afgsbq=dXfiX}l9i)FF{uHdOilla&i8-d{h@F?Wyfc$ZvwC3OuTG2bmb zJbW>?<=8Q|_0I-WjQ85$LYkYlgA>avjMw_$>NDf@-tSM)MtWn1uYdim8n$0BT=)|7 z5^L@9=2D1L_g)!Tn%MWIVcCmIO{l%HbLCDG?798!H!Y!W?4>+hKd8A^pY6|2m-gpp z+O!vL{4MuLRzGg9p z=Vyk6JPJ&E{`YtcS>$HyE%KLV4)|?$HdqQ@V z+$LIul*(ZB4lZr-8%;!v9|-ty8yZ#tR$d#@?`cTPuJ;=tIl z?kaQ5%TdG)Mp{7}*)gbW9#%P@xGO`9&ZA|o4Iaj~PD`IV+o*bP63Q;*XpR~PalOd4 z!NH*RB^saf=ghWxKLbvS-a185yUKkLBNjnYP6Sx_qh0BpHZK3?&^HK7C2QGN<Q^$|McH(CEx%1-`wB-<8S}tfBwzq&wKzz{Im24{n8tMawD=T`GD96 zL1bR|qfiH%-lB$?sI!aYXtPgk*xg4Ko_X@}^7@9bhC(%pg1z+e$}-|Q{Nq}h5ry(wn)p~0K& zfLGvwkc4|}$BldGq+}TL__Ju>-Nzq0T-4UA3k~@<5|B}c>?MojKX8uxVsD-q8Xz*4YHzxWYHJGXzW*TUtYYzn{4k!eBO@D@jaLJ#H_ z=QsA+j(GFX@`V$*Ito$u-gW3{#3mdh=7oZR*LsW1O$=GDF{6-Sv=yaT)= zFLZF@ZKbiR4^Eq;n@%A8E7Iv#>6h3HN}HBqt{~ZbcEy1sgU)@i``#N#(Jychncd_* za)@sC+7xhy4_nW8I|Hr#_}I4==(9Oq-PK)hE^9^vz0VG-5I1#iENAHZ@fA9h`yh5v z$Df-LP51Sk{to{Wp7#29 z=Dz#UguBgBqA&%_oZ!}`U6B}r<48U6y2tu~6ncCxtnlSGJQb6gR?$Zn-KR6V-b{5= zY6q{UIaActGDEYx<~+YpVkznw@hz`*o1Se-wb}Jf7q<_cGQKM4Pe?LF(5>I$U*qjh zm#-%M9az> zAAL}!`0j@ia7xwQwzGb;w6lH`wX=R`3Z5m)k^iB5HuQLPEjo33y`OJ!Xt)va{yySZ z_7V61)cNoZgH3x|OAvj)lmc+{ADH1MvPc!r;hdYE*yF&L*^53{WbQH70e)}yNwoAo*qkG)Bz}I#c;D=qL@nTDzas4yI*-O1}iu)6s zx6|J_q+DbV+&V8Ul!9-amk4Jq1I|!;G%PNOJj``__3WBMNkapuoWHL@LOl8BUy!!f z|BUopXHX;J(d>=hg#tC$+zK!!XWyMcLu-FOFOV#f=F=7YLw)ie=^v=GDqzN z>y_j8T8G&P*vx%qcnKMg92@QmMZ-$PgU z!e^Sp-Os)Wzj+y&*#a&=vR*1a@c)od*5j-J7dSCmF$-z-_z z_7it}+sjwe+uQT*>U&*z)FW!&-nrh~^>+fk>?b;fN3=yHcACRuSl@mdK6l6SlYg~S z8smLN2A+ZYl5DXRsE`K|3$+c$&gGT8h1BB}(GsjqdmC)OC{yZCFl!eYCwH+fB^u_@ z!RA4*CSUr@b&hlvK0-#lc-4LWO<0j%-`HDv=vUhL+55?0B!(6Xd9=ui%lBtN4fAhU ztHR3~-scHo*uRqh{Nm=h5^v>%oUYzZhIW+^f$AkmEbk%V8GDU%j9$9jGxxzym(Lke zeq?@zshbJq@XlKV=A{BOAWiAXYk6HKuQxsE@k{G>{Bwae>XpaEcoiPne`YV85{mYv z&%Haqg93ckDw$38rMdW!obKc_-OOC6SjQJ%Eac_CnOT>F%n1j17nfZg9D7ocpZvfB z*^8sgH&`A*Ut6Zwb9*6|nZ1&lCqy<&%Jg(Zza0RI>yyVP>I1oV)~}afcL;Q&%IXI% z2*JH2IRQ=0xe)ox`EDXOc0fp(+K=k53*ClPsE{{@9Z0{qFFj_Q;Gi_2C(lXrx&9We zA-%@00UmR@^6!7T^e^oBmk(dx4)6RMcUv9t;kFOiBkPNSMo*fQ0{h@I&TE_NyYKi~G0OF8CP<_b7$jxq}^I&3_`EgzzP);Y6qX zJFkE`9|4v%7o$LrmOq3;UXZ$f)BEqV={v9lPp)hbciMZb3%)nMES-lz z!^iQ*Dr6w82mP_*AF-p?t5eY4K6kV-rYo^IKKOB!_@6QToZhs&1A650rt}r6C)kJ0 zcXo-gus`4*zyV6m9jjgcULzdG(=YOjVWsI`j^&SMqqq)`kLLCb?%yZocja^I_casE z`N91h!+}px&?jzN$OkynDo!8%@R)jI=2-ZJY*;>YKNt9ct}O3)0qM&$qBz}HIvnVX z5zFE8=_edi9>h5=aLy53%PdQNL>vlbmKX=GP1If8l5NQI7<35vtT!9B2E?=SEzScZ zUq5ixMCcxdJSPk5&@?!n##{Dhb5L^?&0s*$Y8*n1H`6(EX8cvJ%_7iC5jDs32S{d0Z~@4}{Wg ztYyr~f8NRn^F9n-z;uLpVRL!*@lyfh)85)jU}VsRLw|6kow@^z@iRn(nPKKEb`1an z#=rbHjI8!T&Vy>Ae?(T~=ftv_=LhkPaLXGr@i-m(ZFuaW?V zF;4Szdtnd~goGx=1-3lIQ%3SU%nmqHS6lMW4tC8x*%d|oAzV( zg+zhT!5ClqH_jm9Q!moAV|E1I69<7@LlX8IE_8pTk#KeqbkwC%1;H5kcN~1L^r;6? zvi3h-59@DagFd;w8c2E{o{Z-Tre6+Ez6~#yFqHpdfQ8Vasf3NVxBb{YLnT$bH+<&y zWA12+>0VU2M0F|*fgu> zYVS8M>?i7yerg*|FQi3dPHPi@5xmLJ8DzZt${*ytM(+G?#-;U7&xYZ@|Lq&|`Sa4R zVov|f!qxj|;p*+OaP?+gxO(@0-xA%IX>+9kULr7y=aT`!D{tQg6tTV06u6IH>$v__ z7rU`T*aB67mWMR+4%8^`&ashjSjkmze7?WA{qXUb{X|N~;xj@=dHbP5Gf?LB)IE7M z-SDeULY;}S%+*uo^VzFc&;I@N^^5=b?)1&Szx?j>^vQqwe;g8QpZN1PN8z`~(ym|8a$uG77eth=o-@beG3{rGXkgNWeTe3z)K)(D_$961wNslk&76&Mm9_Icf4BU)kXNxZ+Z`h8)2BbY zd8+OC^fpVLsyOL8jY5`J-lM}ne$%(lGbeCsO|K-h7 z{ogKl0yke;er-7nCoW2 zlP0bkZrbFSJ~?@g;`<}2C+GhQ=5fFI$IkBVgym!3r$y7JLz%2SDHH);-EG;Yq<$%5 zV7kf^XBC(bK9FtA!`1yfm+d^JU6QBa;cRJZtkcvCEmKaf)6#=af_AAf&Ii`e&=1p4 z3^ZkHJwyN?b{wN8Cl0PG54Bm<`?F}) z_{oX;Rx2+Jl8n>@?o)Psns?LKPg&3QiuQjjEz;CIoW+Q^svGlaO!{$7s$$q&rEQc| zN>3twc4{sU?P-eu+sd!sRZZDf2@ly54xYRb~k9k-}>ma5r%mc#1>0f?sQNlLXZ z!yEt9NS$^X>TK$!d~BAD>2`Q5PXnvZ$qBl_$q9Q@Px0dE^QYgdsr`rFZdAQf67tE3 zwzXdAszS~S9(Ksvsi>-a&WAp&!gN1g%=GP)^f|(2Op2-u?dUNIX-k#UFxzJ?e4bW? ztOD*o^>dH#?fAFI!gbmag|>a#1az4GV#q>e#YI(HW({(?Mf^8;d^6shl?EXx1RG)c zEOj(es8G|#hoZl@-h{FBy=Nj0|z*m5T)f;b2_eR4v) zPr&JA#P(M|8I30=-o^Rde`>8~(|>X+gnd@#4We^G`ubaW0qSlg)b+{9HaUL3eRs;b z)L6BiyK}Z0sxnK5Dw&7056x>RbW(6mj5vbQB0zPXTV8*fMnsl$F>R)7teb-WQ<7<; zd9Pe5URt^|x#jV5M1mH~Tn_n=D3=zY$il;%AT9R6&)An^ zGM3YjmyF`z`*&p9df9ikI2os?K1T2sen5E zu!8CpoI4fN1Cmj?>|-?2LP`aX*H%g1wn^QU{hTy$r*!@`>E4;)W`&Iay&kHr{ne~K z{o&=)r?2?``BOX9&n{0+c8_eWI_{ZuHTq9pAawh=4)=V#=uXRgYRiO^ZW^1=4j)FF zaKE2#jvqgER?AUthQP_m_lRH~(D3wn#AA={H=%>*a#}3`R&Mp3o;m!V<|ftYl(orF z^a!D89%?kJq7IL+9NA^LH~i*`IXS@t!7;6@NDgTIQU7k6N>r@ByN6%?X|*H2~i%aarPsg8{imDo`z zpg7&$u#*0b|9|Cw;Z8IJX$Etrc~`vpmyZL7QHy0zvY_ITkfbkv6B?{_+OL!R?OfCe z&rnWNKIEGV81fpAmZ*>`2hAysH-q6r$DUA{hPh0$ISW@ke)zgF>FT0K5N6r9w4;fW zDN&hQ>Z;;A#LJbII*8yimA8*^GkZU2+nkv!>oTjh*CV-#Y;Wrv6-zu+g%X%#W8Puo zVV1ew(zxT?u5(5T!BA0G@2^waN(QPwIpJhlrG>jLq-clz=`HTI8T+chT~XFu7VcW_ zTe#TkLjPmxV(^*)q@d$|FKoB$+R;PV*LmG?{LM)@`A17hj$J#sCkQ0@{v-)dq;1j6 zO^4H>t;f)vztUz(>y67I?4Ep1hrI4{*1_7Z(hXCzT@OlL9V*V*vnRo9Y_%38s4qWi z1xRv-_ZHYz^N(wyPz$Wvj1qiJl~+wNWCK>LN%_VZ*IvG0?Bf|hZSsFzVmCP;KY@vK7N!hV4hNh~@1obKWie%z-)zPs(Wa_uimpZDbkBWM_Db2z%D}&&9t2@(lU6y5GM!F_p&W*;OXfZw+t94* z^ddf#fQTPL6`$hXF5fFHO4D2jBqrH{{@(N@YJA%_p;13aPIWNgCQZgn^l{VfSJL`c zC*=VhQ1|p|U7r+X(Q?9OP1QH?934~0Yl3lDE1J4K%co(elYVGgM3fucW8S4KA+)o{ zXiU26)7!eo#^)b7{egS(8pnnH;U4vvrQJ~HSl)SC`g^pIS4dVg0&lUN?;DT%owf|m z)(=}?^~@CFEb6q%<1x~C*?#Xa1$g5k+@ZRjWBMgoi$^Ojm+KyX0QP-3bW?+?6tDHt zjynK3etl3$$1vK!RptJ2{|v7m9+)DlS@^iSS381*EVVps(OUT%#ER*ljof(x3g`*C zsm2yb+O(KCC|wIO`4(?pCb>8$vg~n_%=f&|Nxng_mE)8SP zv@JQ($1NzPjf7X;IX9V5mSa&ggpm5KDB3XOUn7N@ydvV0w}fn#b|i(I{ggT5 zY?-tjC$#zX)SaA7*5wI~^t@|)ck0b?FJE>DwOKxSkWViU?~#KWx~oUdq`qzHW~%G2 ze{3Fj%!{dQDnxh{`Wx@+Kg@rJCe$SyF=^9vWw@1Xj=SV_jm{#BE@PWa8Cp)(b_H`p z0Lu36vGX`>4}d)GJ&qA^Svj_IiBD9~HYeEcv}Ln)wdq*w?@jY!!kq> zt&<`RO>KO>a><{ZIE(n?BxH~t5h1%aA$r4*<;{?D{8z*uZMy$dVb}nABB{_Kb!|R& zWm{Ao{;f3Gj1#0O-Ir=diA)ljOxv!U`?#5k zs2(JPY3u$CvT$>$rHn(hBeq;%4^-j8I(8nq>w?juoocM1+8(Ee<+%YmQR#*2 z)Gtc=Km#?P{Y_;{M2)yu+)JkE=)SQP}h36J$_Bvu5yXWU=E*_di zk`UOih%OhlDAxVh6|4^`jfV>#e~?!AjfQz(-Uvw+z8$SIizD6{JyU=>WZd2>s=KNM zqQL=(3zL}rx}G0!pHkuvDJUnmZpq`1ZOyoqL^u*6ioUtZ=|zHTEXpA-vpw+a0JU&2#|kBS4O`Yn~_D(7es0O4GXt! zt)DY69c50%w^<(G6;4L2%tGEqx?d+%(z5-T)oDmV_hZi)>+|FUQvsHKWY?D@|-M z5N@cFB2N?^@78s)7n)PtvI?aRm4aoxPFc{YtA}r@`IW zJH09_M6@L?MPR0LKey;A9oI*jFvm5NmI^3{*#>wE$yJ}ZLN*OW(UTUB4!h7@(KzdG znHL8|pTLUn%GMU6ZmaFe@KGR>_s4ryO%pDRCyOe<# z>g9)zmkUETg3;=^S=;5Iox6sU1ITDuG&%!1ZZd%`VO0A~XR)bvj{%7Jw0hHQMUK8x z2$P6omlM4#rmiBqy{-g1#_E@NTCnreVw=aQ3zMm5RtPEJ9|60w%2WjhYYZ1dm^opw zS_mM_f=y%KfXdM&(jcZdF7F8iAf5WqAlhK$75o}s*yDXa#L?TVPLcUjmxYcj=WB_> z>iSD7r=&3|)jsn@PcXMcu)3b8Y0fHlLy`t-j>FG;UD+u60lLLL-(RhNuA5lUt%fC( zRP7`r!8(y9Oq$@ku&8_{%Om6q-FqC(X_F(_`vfRZQOAo*8fwWxn0`-Nw0NK1wTLXa zD73~D`zVP9u+;HrxvqKdh6~_1^I%zCet_XDqjvbo$(zfcl{#W08axLga0Sq1zGo_EY#*2SoOPlXKPz*T+27V*^lOousWl5~z~Z`{qE|VL%t}0L)=CZ*TANBb`CeMLE zNWo|{J#s1m9}p&IA8Y9YgPc$5M%R~Z2BHegQMz0u-K#Yy?Rx?sY3fk5#$%Am+r4F~ zqLr2t6OVK;q47?0``CxEuoCN?mP%YHKwt4}XPmsgrH#$u9jxVRc}3Eaa5mGa3>FhT zG?A6f(DYL}H-scZ6N`k}L5Lc^$x36w<#{?bQ`V-MTTHb(y1HjTR*rNJXTH+V7LaEnDivi5up zajl)PtLLGq!9zABW{u5hq_JenqLH>yI82LCx>4KHuE&z;B$t=C7f9S!7zM>@?d z_RoQ8>5N)0s8LCqO?6*RS?J#eQEV*q0@GpDx(I7Dmrfl&aNvdj=TwzL%Yl@of)>Ps zT6;4&&4RtGv>KrKE616hpK(h%!jnl;SHKBu{IvTk7ivJg0K|~iKj;sYIF=)^(Wxuq z85&86u6AH}+8W1P;T!pL0EX=}B~#f5hB5cyRwilymKyRv9{kE#QOhFo_FI4^ym7U7 z^eiAuB_lRRve!-R3AJGKgei7HgNtMa8os$LV|70UKB+-#WCQ34gipR%rS9x0#N^n> zp`pwzZrA{yEL(Gi5D$vy)wH0><$stPPQJo4lf(&ZG+aM`_ayR`2}IZdt6JuDv8dv( zncbN9jGh!o?8wDA;RpH~Z>VEPp(2TpLJoXsz@L2_5Z0Hn$M03t`hweo+HOaNJ9HvV zVq@G%*q{uaoKW)OmKy@#x*N$eX~{MO4$QzeTS2sXGpfb38U$llT5K z+C%sLHlXdk6>B$(JwQYre4&U_Y=b<%zhmKM-;Hk_!V-Cji#afrNf9)k(31A)#7}~9 zj8fkufRg=!jD51U7CmkN>(c=T@OObb|JL3db(8GmUJWHS?hFtL^hbk?wk7$eYBfPV z0E7jZ-{-@SH+8tPTX=YoBKHg-qy`jq1sVaQOBfBO==dokrQ+noaw_mTzc%%He}mqw z-cEom@Pj27&A7z?2*Py)uOv-IB6X$HUzvWP05A!Lzw}!O^US zokHPKf=E6<{4{j3o`A%;!Is`dCc^>vYd$4aJtk#aO(cOuKVOdXT?c6?rB!H(uC4QQ zs)rIB&2p&^kNBbV3FFEJRZ_Uq@g9Q`4BBW;0I0^6XN?0u2_y4(KV&hYji*IMFnPwi z>_*3yi&vL)jHf$p<-`a91Na4DTKuWm7dnY-4tC_ zwZ)hfS>jti8p2;P8==Zd(=`F_S|PJ*^>(hwWX6N7VE;7L(PYXqTkNO$9T176BN>+1 zZ*L?VTd$sE`SbwlSItaKqA~8tlVC_GtV;;mYHmfxvXeBBRp_&SMD{GxhRg$whKES; zx`u5LcXCAmwL2Px>nAqF>e>=MjT2#GqPU+K*z8EY(XVFLG-mM99P=RL{FqE*NuRP! ze~#fS6)bU1q6sS&yQHa5`bsQr8*qs$bITWU%eUeN6Nci$y#jPGL1z}!W|TkY_Ua$N8;}frG*60 z3-{3ooB-&*gi30xV?Q2?S`|XWWc(;|OAwu@CFF0T_OP{*CM)A#c|$f2%Vw4Fm178I z0Evl$9OSI-r>-GS)o!7AUG$U6VMx*xGN!?-x3wM4zR5BId zasbBU9NHrQzW5mrs3JLh@&H-BUJH5f%KI@|caN|GwaoYR6t)mN_(}#l6?$74!0=J> z0x>D>WOKHX)RR|5fzk|oGoGI#&dQ6*6=>Dma*$?Ome*WLvVa@JIyy5fRP-w;SU(?_ zm&dq$Ky9Yv;DT8Ja2f8@Y-B-ft?76c>*uDN_FahN9s6}Ghmz# zT1tfl*cE0P_@joDejK;qy2`B^(_rMee&M(@HPeT!HH(e-V2OT(`~hS{ zuZ+n-w?m4?K++F_JT#cz5#zyb!uuI0yf}{qD82U5b(vb z2!@~cxZKrT0x!hOiYNGxk6~!EbmYJf86{09#LN|KpK(Yxfp{JD!GIlb8`U7QU1@AbeOzveIupAfZCXQm=ajS-_LHu zFucF-4(fBn~sh*8q9>W6ak?6O?$BN*yy zU{56wDDn#PaCzyTF06K+Ply>Mhw0v?J2)j>GBh3ZP-HED!3d+~&HaZC~QNnEG(*hw0-v_1VY*+Z3Tr8zE(PK9jsF zI_P3bOjp)KSiVkS@(;LcfSzH19wRo`h2>Yo++kJfNv&;hYr7q<`H;pRl>N--t6^gj zM9zSFE@ctZERH6NnT?T|vbrGut!6*tEf4EADBv3om7Sga=F;zNhPmaCVIi{9X_ABq zvK-2$g4inyO@7T*+hjEL^OT{DP>VR`ySVld&o zNSKCoZYTE2Wy-S?wukQmpob6(wQsj|DoQNaT*ytTzmh4ykEWG|_m4;dMJ!;XG5k5X zx4s7+lCdQsgd8SO4_r}@W9RZ-3TJ_$1oM|%s~n*I22K?vMApniBIW0;T%m*_5eA63O1c=>~qH@=f2BS_PzNl9xLHT?H(h2glzFU8ZS3 z9>fMrCX|2|D$7-z&|tr@HM^&d+=2ILp$;Ung5}pCH^QSkWe4GVaKLUEKa#BBtS7BKfkPjV zVQUbD?|%Pi3nCaUF2?7P@mUR$6W~*sK~u1~#W7#DC-KT#2oM1fjWdjB;X+TtB%MDR zHMdzTPVHUrhKKmq=^Qe48^pypKnvFrfZPX`sHyR}Wv<{t%jW zZR5BlMk<7A)t+lfMeGQtCUrJIacApAs>FWkTIEYDE>$PF9Ag+DEnZOK8x>0|T5dXS zzJgu0A>Cq}NzYL_+2~tLk6SZjw3rit5Hd{E*V1H?bil#Ykz+El9DEb8D>1mMTv%&w z*~RJYZmk8POP7~863H2Ic%e`O5Lxj<`#lyG^_D%@=3)Z@3i}J?Pd5swCkME}pkDV6ZA`&Uze#RSrc7X_@YJM@9aEGWahCB-;j|9vKX< z!{HIv#6Yst%%L^S{oYj$Ycg4yIOdbSh1JxJxOaPp#pr_km|jK?jPK0=FL&Q($gJg6McCzxQN~ zmh+(uO@QEFp=R_o1BJuUcu9QF2rKC)jrLC+8Md|m^fnh&5iZ_^)>6N4w+-06*W@?Z zg*zYP+O^rET~_m)5F#v~#V9zlKu_6|H?iqp8-15L{)iUqoFnm%gD>QT&LnPWq`w9p z1&BGyvu-ZE!AEB9H3o3_?vzQ|@wC#P@P9qIBdhluK{KNjVOyGw? z=!j;Cq(MJ$u6^Z_lBM>gSH&*nF=xq-diRUHS&V?d^}WECNWz3Hv?ZevrOvn5-UWc3 z&z0H>xP=PYH$SfY)xWTIj&N9;GO+8|!E%RohWzRdTL@Ogb@|66(@c~R9G+f(Ht-Q;`%A^D`G(|?P%3%s1Jg9iTKRqJ}6}d+sog2P^nCi&w=-b48@J3X)qC`0>ANPlgszM~d4{F(H&QC$Yuo`Efp%HZ#|SmVo!(lTEQCHrv^Df}b&CTb2e znBvhRE?5KtW`z>#7pzY|5uk@5oe{}E3%a>FHs)zAzBj9pgqQ05y(bn!-U3yF+_uIV z_Kk0tGY?AD7o$P%_vPNfT}#eLMJ_v$F<{p?_H5VIvFLV=LGwTC@~!RP!+N9)A5Sk# z#*74Z)g#UarTh%Au|R25C4JhI;eLhlE=&2{lh)Q^#5ziAo>`RaO7EtrynpTe^Yl*K=i4>8V% zM%KG0>Ei>s^xTSaT&S^^804zvF!n370w$ut9}_CSnje99&%wvFXRn) zAo+-%)I_WRa+5az6*xJw>-l;Iwt1g2BLPsvj#2h>snpxuW*(88R8^D`Al(XQ&IsVo zHRX($!z3DM6%xh>j0cUShA4@Rh&v8Qa%jc2;x=!;5p9r)7N&Kms=WA}1Ga_C3W$J6 z9WTZL-lgc_9+t`=qD=G=bUobv{A+{bL&BJJvnTaxL#UjEPr_J>;xY3Cl&Z8O`I+5~#)~LVA5Re{l#C<;0H&_&kHKIfwUj9n%$D zy2-33-%^EA4Wv%W01uvT>5M$wDn@quM3@Kcw z42crdHdUtYol_{!0m=y?$x#4b&AQ8_4ll0sg8_XT?1Qd!@B8t_%TTM-1B8h9SqK}s zdu-_tH_SmI_BNsaI`9HLYz1LgrX+PhT1-qD5BB;jj`ga-J-vZa6X<5+IPwfHJYlgF z4Zb+wfe$5d8!|WjxwWLlE~z&;?wIl)xWHw1~D@Uz_+RqokIv-dlH zCkxHA2i51fJhj|37gBFKA+fTlfO3d{*E$d({CRyoO+xnpl*);3LUT0$@bN!fw6oUg z+^T$N-rE zIE-9J?f!QiBi<8=u)|Xez5xZ3h|Btv%XC*vI-zH7)U>#zNOc^Pd>4Kj>i4;!b>5I} z>?r4aC0|f%u4A{0pAU7-BCyY&{<0`hkIr6>v&`V&M3<}}ZdO9|W&n<13>g0_vYnL( z-jYv9f{}pw5PYrM)$npo@-HgVnIb=?YsMvRJ!p;qO-*Qwuu6?Xe;vuMKkF2EC!vtM zBFaC7CWE?qc))|&fmh8dAdA`&AN}#gp~#}QCxBV+UY5;N&7(iRCFi}gqAO7(+ zU<#DtlM^FLIXNNF?ueT9Z+h_DC6<^&1u#$4ifb^1-EQ`ye<0ZQAg`F47dThI5O<)F zvbhRPFWd9+88byC3Q!=75Z?D?7>I3!x!wG$BaWDZLorvFSXAfhA)QN#XdNwvy^zvr zT-eX}$!>0pSqwlhx%a?up{haIuz~a*HF-`=KuRkVa7b#QK?R>b6}7W!1x1G(`<}Wd zd&Qo>AT8ydEMn@oa_lqJa5fBlN4_2>5XDSj^9tRFVcRm$-0eS7h80l#5nak+5&+Gh zmh#c)ZG`#Y7r7tOm1yG(+ z*%Ml4xQ$c$rTqAsbZPR;+=btOCFHEcwwHt%QPT)lHO<&&;nGm{=U9Z=SEnA&*izq8 z<6ZcLFW)J3aoL;EOg(-#mvB^DAg!%X?&oPo?D;r%a1#fZa2ZQIm-3uu@*!l?g+4{RE5K12qEx1#GO3|iQZ!g5txM17eqY3 z?QX7DsAF-T;4!3>W(v1+2ErvgN`!ijSc#MtXUpj0IaRVRFCI^61I0JltsuwH$6=&$ zGf+hXC#!9<`u8S$^DUyfa*!L=91jA7yM#G9r&?M(Vs@(SOm7I|W=j!w55<@Fi!cQV z5oNk<<$?bGWo!{?6TxywpJt++n+`Dr9BF&erYJ(aMH3y{GNGob5l2BYpz-^7sWN;o z`B$d6X&XAd*_0SC#4^!w(b?cATi5@CGBUD+yLG7T*Jd0j)sE6nw2NOKXgDb@$USnP zqIQp|-f43AUIehyxmjq~@>t8L;CTW>%QtY$EmR6WJQbdwXs9W?MW$o{p&*u2bZ?nJ zYxN8=Uto0=wIm$|x-@{Yq}~xABhFtNh{ff+yg0j4}sZCd_7heY{yAEytk;xGArodKU3zuzrSqAMTNn-NRu^f3v{UEU@vaA zs-=jwpljq5g4m0mAb120r(;Fuhs0%YRc=u~Smr1V6tO0lhJqC}{-Dk89k}pSQSiV9 zN{Uw8iosRWVlqPSQ?kE1)qsJo1LPsbmYk3T5vS-9+o3Q(-fDGR<5|3hg@nC5p27*< z4QDqJE{&jH9dZk@=>Y@X_Ui7D!6-@ zLi(66UEn>O_vG`z>j2Ir43rZNrj%%e)`2>^_yO(pftn!HYKTzFtCtL zj9c5f1cHzZpfyiHxl{B98GU`^j z5)PMpY9k$XH@k2tClLKgsZE>=B2sKCj)~|Nk(b`RWcgiOT&f1jXXc1&No@o358p*H zL#g4f)e-QGk81LV%)usqVo)p4eUQ6^zlA{*!pJ5t1Soyk9aM_nm zAdQY>B`QOAgoeWP(Jr|sTzI$+B^B0?R!K>(CR|`^r`#A5Yjp?wsg0v51ffp7yS$V( zT*DBRF*EqbDSQ^@CZu}#5Z#gTg?G3k63BT`+j40i@B+Fn{qOd~lFe+`tb4;fWD`*d zxdpvCkU8#q?>4P`kPG)Y`E?)9$lA#HD~!e$STN4-r`4SCv@}#qB6TULLh}Jya5VYh zvCx99&+*uk`=g4(R5EkQ*xiYT&F_bh4Ux{uVJQ*B!WmmUzmz5;*%t=wFvCe)m`P)W z8gqGj1uz{~I}8n{vygGTaLCIefH-&I!`!|zi6kxHbn4#p5Ujb!Jf_NRVG5STS<=Z5 z*ve!k-QJ)&q(>23Q1W3e5(z=Q^7rw6B)1Vf9>a9&P~_&>;pFY305_$qKx|Kbcu&Y+ z8C9nl#$L2Fg7GIXu0k>he9woI&zK&S< zA0w!I5mQrsMZO1|!AAeh#9`CpWNw)HijYE>|HnHiTNneN)9wMuQ(C~cL+W!>q{p4< z>#=1=Ao}HVv8jz)gKy(H*eU~$uiHaauK^O$k!%XEoZ%U@AT89e1Hd>t5I%QlrL1iN zQBBTZVK{BtLEINo{uxo?Hy}|3cq4l${3?zsMp2X3+OyM-B<*!jI`2hK4ys*1YzN5Q zFui7Yg2PBdy8q!LNb0N8{`Tzr2EVt^A|*%Ld{aETes^Agu?X{HnoIU=Y;6n*e5>6{G-iMY*h^pzjaK3ZOLLiCEU zquZ*Y>VN;Rg9%?Oz)O%rM^v*q9gxlNcFj{K_Q^e=1bgRo{cYh`LduqD&T;n;d-)E2i+cvS=z|_zPLRP>>?;3 zJVsBkhz2e@3~t2Z;2y(kIvMyVbLtvCUUX0H%)GaoGtMD$=FrpBl0_oBoq77DGN!l?}=X$^~w3 z$WnWhZXq`ba4Txt%`Vb~zD7UTHhlN^uiFBTP7hfYSzL^V>*`-xf52NCbi1J}+bGu(#c5qf z+*Uq~jrlvX%_V<44lGqMW}+#`~be#xJQHapEGl zdx;X*j@mFBdBf2ibe2PNeTVk4JrDKnI3|knXn31TD55AyTl#yujc7M@R+DET-_aoV zoU->O6MMhxHiMW57S8lK2W(F|kRM;?C5U{pX!_%)4sXG8_u_%4;aDV%+#57E&9{f^FYTMa?yJZSjrUh(`E@XZIAY~g>FA`2Mv zLM6K=BCeZ`um(BnEwvry$e5&Gh z+?LcX^66mmMMr`W*w4`2exj;)Fbff-K&ZV`s**V{Sl|57!`3-})ADPazgnMP>H5_y z6rw3(JOB(+P-3n|4s0T6@lZZi#IIE>AvTz?jX1WcCbVsoxv6>%g4++cqONbQt8dQU z;)iR1xSWzOlu1Yt&w~I0NPas4^>tm+NpHx_r5fj6uxP9xr$!fr`#MQreK*l_Oy^n; zhdl~;Bk55;vMM2Cg7jqgnQ>Gt%E1~ozr3zU9~wSOL7}n&$r<90z%v(q?&}1Ha_RU7 zRZ8vk7crK{yMFz_Gi5SJ#%Y#HQI0592crkL$%KR%8x+@Zi*K@mss$Ep(s*Pay;?D)+mMGVp?7)>nIlRq#;Y6zK|) zpHlSM4ePO;?Ewsn^2h$Z*A5_Ifw0n0!fOl+#ou5#P;jK4ox@Lj-F_>m)(?>F)I`ay z&LAdNsS|*fHQ`vwgHvcNUe-s1U7ASRxznuG%d-nAU(poqB%J%`so+tvZBzH1Yr=fO z5Hr9A1$&L}#gT+iQV6abDWv!b2LRL~h$k|*qP}maJ9i4qx~bcE^<#98R)P7V7IF)6 zU~5D(w*l54ZX=1FLrBzERb|wn`)5hochl7^xtg#MN4*W+!FvM5o(amtSTK3EX-R~t z@S~2<*-1n2w=gSnrqIYsZF{o6E-$X(l_bt7H^}A1xzIqA=Il7Pz{SFsOlF2jT3bSY zy4RFAP}hoSmoPxGx%EAU4J0z4gvB`3k(?j;{CI~LNgHTnbbw+%BJx?EJ<9!2fhkuR zM2dx5f~STWU{ax!!nAE6D%!a`MoI#XqVO_N4Tc-ity#fJmO3Y!zhzvrbm2IF8zs;k z?4Mr;Z5Zma19&7k4VOSdtl1vtZYkcHAoC7ldPO2=52sxViZKj_C)YnnR%X`6!5UV8 z)k#SPQh;|~2%4xb+QtM1D#n#Rjq%R%5rc#2LGqJiL5p`GbU@oyO8y-utxt|ehoPoY zgENCNr>Vc*NB=gZQTM!fNIa{n=F-Al^#vvXrux^)*w#^*W`GRhtkfZ|@k|kFz$Fb; zwtK|C)V$uX0c5jUK_?3ntqAM_6ygNYcMIdqBq(U1Jt!&m^1oPg!+J;re!Vv*!=b6nzOqRLJaWSyH94iO`` z1L=^%CMHHuuCw;jVP*u|oII${gr*NTertjoIOzKU2#kLU7sMehvM1VXotk{x5=vIM zn@QKA#g;4;9J3?o27m%XizarF%SV6&K3!i)B9Ks1>q<^WszAk~dIaR_;kC(707nE- zip!m}YIotLgrX~)^qnoOZ=I+7$n%+kE1}{;rmS=VW(j#KnBt-ByN|*&|3F@nIpM8z zyOE2K(LmYxjM!9Y#O*XTNK~>Ck0g}|!Br+5`nZ3RxI~wwzrB8U%Od`~DL?LH!a-3| zHKZ^oZbMc(=)Y)OSL~mM{&Bq)=afR8IVKIc4`6lO1?GQHDay2T*1Hm?%oWy*xA-KT zi%(r8ksm?VxA4G@enc=j&@6Bgj&!=;GY;hsRnttnQ8mAh@@ zh&@qjV^i=#i<+t_VqQ;5au#u|Idvhb&myK?GT6Rx7R>`!0p$o1qB#a<1mzYD;lYfr zH36Qu!@XKPe!v78U?tYJOXJ6++cw1p*atHOcUO+V^oV|?nM1FU=F=Im5Y}y?v_(*4 z_z?U99_zza!ro0VRS}{eEer=$7)T)^J&xRtn7i%r8ba zc^n`sBcRSmbUO`%x>wWnE>%;F zJ4irEIzYlPgcaE06i^}e!8Kr}9Gv;XCpd%*?nO< z62m(?KfiaacDQvwMzdVu*Fwx&2gB1FL2V3YPfag#S~^1qbxsdgM?Hc??goFclch(Z zH{vCLzsLK&a`-Z+LIDJkB;MX%@5CrtJv!?_hWkYoI~4(daYaNHk<}0R{=<#wk#upU zuoJ9gB;gIDLPisC%#vK`{mGl8LIBJKL}A9wwG2=o$)FsS0$`L-1L4?W9!QaG_M@ZVwTlw?#YfPvkB=-|#*^>@P0{IMeJUV|3*bm0( z9G*gC`$XoFzklfl)M73!i~A+H+z%A&Fosh^hfGj>!w~ej`Tis1o^y}ryaX68!POLb z3ujRZRYgiNe6+H1bbyeOLJB{gof1!eno-5u{mKW0kCd(ocEF*fvy(#Mj3phG3#5yl z39_A$|AooUIkf57-Nv#Ad0o08j9N%k*t_ed?>Ns^xn)5$5W5Grrc2bo#eaLFW&diD zQxQlPp`Gb>m%_Z*heO~}4`ekq;R?$IlqX~lUthi=Y!=32pbW3*-bpd0e3O5ee~8A) zLsC}Of0EQm2SA8oKd~a*c=@C)F&{iw_b#P-L;UcrCfEkm0{#{ddF1Qa3^Wn2-;K47 zB5r6>+XRSACNPq zWX0K+N_gQVV~OJ{`#fRd%8X+DXs zOiH~?h$n(@GT#p4W6Z8GYY-Eda9sW-I5-hbMfo|2`Hm=CF&1gh*Ij{T`=7-WiWBpRUbg!*KFkq8!sMm+4n#Ku-9xc>5?zmx{1 zz@%RO^zfQu(rKw#2t;on(CGX7umeQ-2(WU%gV%b;gjJ5uRc8dZLJnvRWjUVF=%64N z3Lq?p2Z5~U@T;$pAZEQA*Z!pNEp$QnL@2YjxiNb=)CM%wz}4J>B}Ghx=5YllWmRZ_ z*OcU;#J$GchP#4)SDGj-bB_|qInaA z%u1G@ztzSodDC5UwtVj1vzf^D{*4z`zrHcHi@i}i=&i`05KMv7;u6PO5pEGbjpX5} ztKEJ5`Rwn1Kj&7zy*nEos`CL`CmM$i3%-20L-F{a5A~2TK+jayMQcJOUDvIwI>jWe z&xUIXcPd+q(HB|GxjSo+pkh|Qm_c+9#tBy+m%P^G^cKi3b}y8AlZYXq00w78t?=mH z$Ly5SXg#xzP!J{PQ*dU0;DRJ;uKe8sPU%kUeE#ujqFy;=xP@iXo>L?du5Aujs+#(?j;+nd zxYt4+0xUg4UU1AnAjEy5WpEegVxyYjH}9-GCdw{c0g$&(J(hjkf+9iT^lv!rp#gdO zrF?sJc72P((mZU$eaZa>&UT8Y9wByltB2?R&)WDrKa|OoOoEMoG-0HV6O~S=$2RKT zwm3L5u$3rI0NRZy>OyOeU!o8{0mCY4xQYRt_;&90?Jr?&srVctAj@hJMTj=mp&wd_ z(mOP4UjxT*D!SKP$lSmgFd|=|MXJIr9{;Em>MhYg;3-a_Ao1;N{C0);_9^EiWS)Hc zJ(6Ttja;Wol+~B8ukv+5U)+6ov^&I%zC`Qo2&nH zEDgMLOs(>(<>x-u@m)CpRU4}XH~Zyh19E|csj0O)!-|zJt;B`c76s#HOT&KP2~dv^ zIDt&Uz@SF_rgNNj2f&X$zf0;C6c{9QVqR9o=E}dubxB2;oWuhXcM#O!{@Q?KJ1u$2 zEv_sfsu;rNo7?%7y_81u%B*(h=wj>CsGAgeg#)q>(PXr^-14xXR9Xp67~3&E_Ka(T zq#vA5SVJ)Nx~t>4xzl!E&hAC^^CfyY>ugu!KOc|~aK@1>7Ip2IV(Npq`9yhK($J@_ zArmRSFxIAVEqxT&j0(~M(;?Nw^z46q>_FYd%s~19w1LPrAIQD&mwJk5dpP1aJ{XB1 zgG58ieSLF9<)E7b;EhLFf>6Wtq#f{>1pWP;<7B~QQ>?YPEyDW1-2q&y2YW5ZIPsv+ zzViV({m7oibvXpX!E+vKek;`O)r@f>A@#;QVR=!4Hkx`7#O^TdrCR5}oj>%`J-Ekv z?+bnps_Oed(CcYZf2CB70!}2ifAQ);AYlcCLVyNZr`i-g;LTwi2(+smMxp7;i zIZR*pJt^WDE;L_yO${?80j8OMaXOOno~GCDp>A-LpZD&Plw4WLCA2k;hoyCO%d#z7 z5y)C#AgzTX`e6wSFoRAOHnl+<^k0U3tRp^|InnW6<#ptA)(6lom zDD#*m8sM$=`>7U%KQi&rS}{0^ z{q0(J794N^ym|UO!i{aD$M%HtxiajV-=WX9M1}?KZc55zpX-5>8h$oZ9VB511#L6| zTd@rL9?4Fq>R?~}&pg|M@2IOqq1=hj_WaAn-t^PCh7^}N6sT&bFN*93AWpQ282H+o zdk{QMtpPJaenZ}&bz&N9E>~bO%|leuP#qDXi#$a*IZ0O~2OL5Ici)hIbeu|rC~ z+|blYlfbs4=lRo@ho5>oJ9@XD9_maoO$kFycp6-kL?VUwnj`;Ki=ulIA*j=-5WnKumXl4paQpT*Kj9m1L^3{ARuA{_USBBP523cilBC@%&7p#_dqz6J;;TH<4B**sydu`qcGZ!xL4s<6y99|lEY~a=xthWVWW+&MG z>>M3E;>XmO!e_7A8n6S}()kms86t(qLIn#!bs>?6yck^n-q#+d~jYl6~c&ygNh_01w#3F zt;ju%lhKM7WyCiBW4gNh#j280$qHo*5p}9Bm8&?Ry%D-Z$Hy>(+#`~XjE|`TS@!zl z`PmI;8KT=|sMy(SAY)V>S|QF_U>zt;k)Zje6^3u0fd)MpuR1k5k$cPUeP*3sanc-xYv}aJ5PZA=8%N2$?mT2FzjVA7ptT%q3W; zvJ~A)6-EKC*i;@>sEui$NFt(v18Vg1ry+HiLd(~u5W>zLdRk${Q`(lYPNh<#;+vWM zl-9pZ-2$bu;3XkCm(&VL1KuW#5RN6~B*kLYX8#{RqikI?OexSM@W22XbFvA;&2+|4 zeYbJmg2nc>o3Bw^`3-`p?3E1%8hdtSVOjgR;PWV^3%E2b_Jh7DNmpG>1fTc}{&ag@ z@&Y0}mydQnggbMq;69!YjHFa5-3sQ^43t7}y|MHAZpGgL9^j#?@|2peIphQ3>P3%O zUK}FON{9iT!?JTaeqvr!?*+?GbtK>v-7Fwx=c@F{k)guPj^*>_(or49Q^Zwvpe1&m zhg2!6Tu8xHqCI5dXVK$^nABkpj0qRxk^a}|_l?)YX_vug1k3zS|RbMV6K+;Q{;{ z0F9g)`EbO>OA4^xU)zdbj8u$3kX5!;{oQ-IN1_i7^HM8em`wT(bTe!nzF$7#f50ob zSdDKeBION7SAb7*rTi3c8iH{lX9V9ENrUwehE8+-AU|a)?x>ArSCc-_QKeAj10jct zmm=F>%^{&wv#sKrTX_4xWKHK|&Yz1jBaR{PQUHen5(U{)7q@b^VDSa4RkN@HXbj-G zKsvcjNKmg?8##l((oxwOA|iM#2-<{S-mO_tU*y4>)dUtQ0p-v@l_IJ$TTUh*?}^xO zP~+I3tOaIW9WJCEtI2sUz+#xmK_656yX%kOIGz89y~~?jAJg-@NHd(R$l5Wfm`05; zhK2C0{m7KTR1x~x?D0~0Ao>=6e#8jf^EWBf#_a*GV&?mjA){284*y$%+D@8|4X#g3 z3}>umuM5vaxO`vmxZ4~=Jb@D>rGOm=MTv5N{(3>+Y1!tcLivP=xrQw}bi~=nY^dz& zrU|8FNEVYVVxmaXLQy_Sn^88J5|!b?yLGs_h;%qVgog-xE)dWsCxIzebF-2~Em~ei zl_7X)r_N8;oZ#h6#9r3tJd7LBW47EDr?b#0*SF)xQ&l*=0i|dM&@m!QBA!WF)L?=p zJfC54INZDQFnL0Lq=MA6*EcM!jnj!QTw$>#7)y$!Arg7#AO?o0wO!MI2P!cfI43k@#I%O{oIn>k2v%oMbc_)PD}D$FK;f1@toQx zEp$)v3s7KQ36Gd}@U^Ls8p&gRlc#Z1*Qv;lM!o%`nsq`(G-bVN@*tsLUwRhf@l1Hd zdWf{QKUNpnQddxh0#bv4^fbsnQa@PxtG0d#Iv4vsO?>TWLWee&WeZz1XaR8ClrSE+N6vQar@1O46{Kx)GIU7~$V&yfNS*e9Vl5Q$zyyv)`LPbImBkNX zK>#h!AwJ$|G=|ya^0{hFo1WkUhMZ{gIHTcV1b3l7?qHL-x9h3nBhy+koHOTwP*KVc z4g_T#-+uh)-r}i#`vFAlI{@b;L|YB$7c!y!vu=P4Jn|od_a`6=86jDtWYLt+eA%$J zF&KYW_FPS$l*so<19Aj0v6VY|w;!^K%V{eiml!5sz7+ab-wAK4MFyg4Ho#hp4S8Ri zGBbBKGC=}brer1%j}vJJJBtT4v0Xp3yKC6~ZtLrTcQm@!rrBv?ZE~48Ae=)}1G`5! zZEr-!7VEjO4!)jlO65b!1ZXL@J+t{i)R7t(Wb9;N8@i^hgcBj?fl_rIfFNW;%4sS-rRSl1kwO z&?I<%Cm?DtlOvm`twxbc*NOj)dM6-$f^O8O1eJy$TL)!p4A$c%)wv93NAdx&v=XXe z>T;6=V3YJPwc~EW2J%&$?nG2R|3VhTgn${(Sh{$1C$4EJu9#YeUnB;yXy|!V%#srWd zk=Jm!>p#+0X;H23lK)R4~v4q^9V z8{sg9in$`Ti-QQV?{yp9v&rPMW z2)(&w60j5`2=^qak%twJ73VMTo841mG1lz4f;neMD& z1=s20o##*=!Q_mi46N7Eqt)^fwLg<{9{x*gC(f64 zAmHVD@R!mj9`=V%9d#Wb&<1l^Vhs4D5oaA6oaWa~e7gI4_n@lE0X%aSz!(WaBeZE7 z(g=bI!8jd)a|1~8emY!iq$0P(Ux-Em*Ino8n5%cm8tpsyh47x@}yIR#1geve)=_HPqJB=fFitB$iS2xbTN6&DD z<8y?zV}#`*G_V=sJ95FqL>}dW;f?EfIKuBmQG~YE1Hym?ByAq&ds{LG=~xGYUxH7G z3<6G_&6B|yLPa3-QBe<<{S64MM@IB>NBG>T1ULB~U`a;o8@EP|>CM~35ny0lrs6XI z>jr>|cZ+)K-k<8ME-_!AAe$iC9f;ld{zPZ(Hjif;T(CW>AG`v!EEykgJQO!iNeIZ= z5(3iDs+&<9O}@JOa&|@bchE8p1!!+wQezx}B_R}+=!EDI*b|&3caLV}Q0}|&;d{@u z=;*u?@1YR@PfrEl;hi0HEJwU7Dq%s^B#efkhs#KK)a)`6OLTQpFYlI&-**tY0fr#z zJGZ1b`A2mPZMEu*j0~}`Af_QO^gpbfskEtR4n>`nS-nG#xkF*Gdwc7_y60wBW70H0cF0KgEcZsGa4t$VU6_yDGO zvgjt&J?UfJaNbf!LXm6=GY}FBHN>?TE0kKpP6R8P<2VD9)%T1~*<}ap$4*ixZKoLq zN$9wlwdgS(bdVfY2WH%=AgxGuMSO%t{p7lBqzqi(idSE>g$z*edK#|XQMsoOJM~~6 z|AQlxLw+PT5VD{BuA4FBd7+lI>u$d_78amCp_t2{0^9fnjF4>4IC+~bHbX?n}6$4fT`Y@0m zAXXAm$tR!+4MkyBHAhggBcxPZaCP-XSV3}v>3vK31nLgClC-gDB-U#)_XaHl;yzMj z2+*A>f_7?^(7|^z6$P|FAltD{ts`JZwQbi2G?1!|@&z2I4+m7^woLPizyOi^8bT0j zJ>3s>q=}I?**dD>qf_}o9~2Ahd~rnAjO;9 zT|GE&kxHvf;}sq`gBzh_>b!RG21^Rw+cWW*-sn1CFQ6PLNLCS-fM!!T5!7f{wIzScIBi&!txM7vqXsbgjDC&!JZ700E`eISlLwR5g0ubz45>Qa~GZpy3QXpsDt_=^A#6BILB5@13%Kd7-ac^IRtf$of@(6p;eD~4|HtbIEKw4; zNR{p>Vi|5@h5~{)M{K1j*m_y7N~cVd8_1p(D`Vi)E;)lHVB27vqV@Jjf1L2?*gU}O z(Y))ppYqmpF(~23i<(VK0AB*9uV#@>JAVQ)sRnK-~~q z_QU(oXvmMZ=E=&by+d0S79mCGp_Ib%UD}dpk5liD5m~{V-(j~AXa?BHblWH`vE}83 z%ef(6Mrk%{6-<(>2(MC&nEbCcTBL9U&Rb!|(ob+NFIgA*BpPSp11n zQ&bPeLVNl{rzpwkU=rZg%g4G3KlE;eQnK^fQ!p%YbU6ylM3Zh5YhDCbO!nI;5DWSd zS_1%u3c15uzv&T+a0MKAzbzV=mH=l$D$WxQdg8ptCh-u?IrBw=GfTNZ%9A*kP*jOs z3zyX9{*s*@LyK5Edkdgf=?I`{eF`+C87YH8xVM40kp;Pq=J7+7Vp5VjhGEi^fB{gc z;*8o)L|t4Hf9|2-wUx4;VZnu>1ho@Pkh}At3RJkPT&-pb9IH_C%^B9syPTtfxG1T)_F({ z+ZOty(1wN@_D^sf0Dx$H)9fD+C{C$#1qmi>65`7BolgIMRfZ;?;l!jG0T>V#rGEtH zq&rM_PJ}H~s>KCH;phz1Dqwr?7w+(Jsk+|n;s5;0`DIU@(%u5`Uq6fMDOT6-Kt8=^ z^4O&?g`{w2P*Rb9t^H%iVw%4A@DYYDYb#BS=GG~wv_!o&m`EYRBMC_*IMz*zcsm+d z4LUw$cu9#M8ed|N^qZ?$;YWPz=#ia$9k6)#s#Wffq(N~&3ezqH^IkU!b_E6ro-r~`I96Tr zZr$7+UCrI}T8@{M!@$*>;R}cHlKOb~9&BzlBeHK}uNL;N2U5U}_#N<-1A?TeazeNx z+{pW*kN9r?Sm)^b=}U~{C5}qIkB(fjZsBaO2R9#=a&6P(IV!uA9=Xn30UFX&e!mg# zkNfykfl8JXpa-fvP*Ry7&Jfyh=ew5Yj_DIJE=zHJ;`RP4e*!LZ8bYs{i@p)Wh~mY* zL$;O3E4>(DBmpOl3(_z{B+kr=F2chH=z!RZa^nksQQ=&?2h&u{>*o{nzCHV-!yq5e zlz;>j7v~&-Ba&{>L82v#w)HB}5TUP9m8 zj4`++Ud!t*?JwY-t@L&Y0{l!SU#1)g5VkNvAwc5sajM5XY&br6#H!&;gcy%%kGM;s zQFg8T`O#1~`Fea`xUPY)BG{cYemvZUf*?RQ@!r7~0s79hv!Um65kI^)AI?aLdS-uL z;OO5whz^R-3a0OzP#^pxxc@^xrP^?69wROXKGKUu;p`LWdL|9TC(M%AP%WOE(1>Tj zmU}WN$-f=x)Z+S0lh0QiBnIB0UED$d4k^{!kslV?U3a}3%|%f+^qD*!nF!=XG#~c7 z5+JFT0(1`#n}5c;&VL`I8ih@R6GsXmS*Ot|I#dQGg5^vwnvu>sgQkI3adV+OZIz4B zG{Nh()F~p_@%}>zH0vy_0Uqrxw7r3ys@ap1aQ0#I!lyvO9{s` zLoP1zt4z<{&#cE)Dk^i;vBg2SY3FMrAe`MOG-*Fz5_P*RR{PvY$5;|Vpq+Za0w3WU z{IDd#u;j5^Af2boc8j_i-^Q2bJ6_W+sB*+Na7Vz33STLOD55bu1}|8P=ZGZ;5j<1K z6`|m-J+6*M&$3}rXq4+G3Js=|{Ff9Gud%H0!G|XO?gM#II-|3c=bh1D*P4esO>Q|G z7B?2b-l_o$U!_pNP}tVQsgHuX1?OtZy}7hZP2skW$eLZ$u`FakW*Tbdf#`@vOK5%% zh24s!kqTrGJ0-aON(v6dm;6cFf+83*AOk?D{60@r;k@8wPN_ZSKRXzZ%x_ba)y}H ziwa(q3_dw1+WgJ$I(P`47;l%WrxAQ9pbMZn#14E;O+U3vyVEv zpYagisAK!W#$6VGCqb)mAxK3PbyYZ=z$lFz%NYeNaTfSq_?U@#TDQp5<((J@9$pSc zC4W>x1#dPkKz|oo^!JF1tOCymVLl#EIN1G#TfRO-JcpDW-Td7jjU}O8PC<>FpZfmt zcZrB^E=?7p6&p+qsD?*!nMp$DVPq;$Zv~sx-(U7}PPV8O_QP@_S+PW=o_;TZ9Z$b= zdh0XEn{*;C09YDiY1pf7ioYUdY!c}v_&d<<*ax8 zOYkA6+O%)w?(}~mu)iPh7)M77Gw<0Xx>i*)NXAJ?WDU*Rpxhm&i!-#)n6qkP#1Np6 zWV(Uf)wGs^St*vvvU42w*{K6O~`^+S#mZR-QR1?g%yZEwx+-L7}SwKZ?iM zboU)=?M%5sJpWpT%sFVNFb_a0p9$-O`0%ZGB1#hw0pa=qYZt6Y_XVR@f8JcapAIDM z9~^DGK%kVN=A^(AG!*d?#5}0kTp}FGcic)(H~hYuJBLx3G0*W0le8vs1K-+R$9y@8 zWPm}3d!LEV5m8iY0{XBFy0jCX_Utlk#EwU)Y$Dqv9eun3>vgYd+g ziUS?oaZLr)8{`|1wUM#phi#Q_&{nXvr>koMlS%=*$g1z%3wek;ORjmrEsdEb&81^3 zetf#$0#G4n*Gz~o*mmRnOmA|uVQn@*H&QN%ic)dJ|A>MFQC`ok0^~b`@^Q2?`wGBT z9eRAWPm*>?$%&OweY8cyEJC4>&)o4-<|e%L-s6gf251HOx%jLg$cipn6bD0-*Do%v zZz%0~w5kaDG*LwAhf+EKuW~$+2ORBCFCLQNQ$;1p8ICH%D>a5)BV;Q^BOR!Y%vWVh ze^QmSsvg9!`}k4KAmYFigdL@79==a82ymZNb$@D)6=b8NT?aThX<8VT0Rt^lh8%|* z&y~72stUz~d;$ScMd~+-3Ry;KG}3>SkGdlXr5iG;U88n{9{8iy83dbIdcj<|N#f`` zFgE7|a!yX3>yH-2!UmgEMT37C#*?Z7N9Z5a2}F5^4^TQB6d|DAuw)BivJ=WpL<1(x zWT&t}X_!0b6-R(6QxI`Iu%8I$G9NewZIYY_l1@>%AE&8vp&NB&LB@ol5)*0I@IQet zAsuFOsT`rHFGplP0f#%aBI)FwpbEjO1GY%#{CdNquB8e9#&RrrcEZX}S zC=HcSw=$=CE)|>wB~LsFW|jCh$Bdndf_k7E9J% z2<^?vUj^F_8CceZE;#M!fU;uw9Qc5ujDiOrg;-0-mw)5`U-|#Rm&KO63Mx6Pd=N$G z)kI|_d?pYCn0+qTGyXYpp9mO}r&Yu6YC{@$cMg~X=B2w2K;m>`0KzT!bx2tGA2@ z%fr%ALN(0%bk4BrlCkZnZ0*KkbH?nR=8tk`1cl_}BwPme;(Y4~kqO{v6{%|q&8JN7 ztWBssZ@u{n%R5)no51c=N-bav1VLL{=9R--FeI%QwL>rM5Xu$sZIudLG4A7b5fvIzI{omMd8@@R3J{x zPl4$_k*^D9AATTACwt1=p(YQU2Hk~hyo)b7Rce(NIkiwRpn1X@15il_EJ7>)KmnyA z$@rw9s|0yZW%Z;Z7;BvkzW1YX)i)`;-f4-Gj1r`W^ zWNU0s_)NrDZL3iL3RPKoS-FrCLjJYB2Q7@GWl6y?^p zpC&q;=bT$fZ*rPtowj?t&mnZ1U93X_DLx8bM%K~xxdgD4#evMZk^l8P?Hf=|$mkI0 zQ0OJy<%|DP-1QKW1Kfm?`f5jBj~Y=NOEyw&nocp(k95pmpB-@pp1q5UGH z_dxi8B4GBmbj+^8Jyt1D#|%cOD*Y(zJZ{Hp)u+Zb*;m7;=M3SV8Y0sMX6yyc={_g6 zbJ#E|B#OvZ-IHD%W+H5*9H?=(8@M{`Wb_shZPttM)bkZ*4&fdExiA2vyf5)_QJF`;lH|eyZc#qx z!KRwG?LE-NsUB#PQ)eU?UeOn#=@1b&baM_9X-;^ydJr+amAB#KS?_M;NRzTf{&&A$ zE!&JvGruM)3Y;T0xY1nvWzHD0Q{KtO($J)nR#nkmOz zb2gGm1u?jcV?-plQ1MbTsVITPq2Frrq35bxxT<<@`c=WJ ztP3i>^^&?>wdj9)pw+^RVcDb5&FfEhkH39ShaSZ6mz^Q)A_rl$hqguB9pQQYTIlW^ zc{i1dcMXkk@fF5leeFK;kJQ~P(Zup6!;X>Xt3deEY(XmSQQEGDL#P?Jo;3X_##4l3&!UUWa)fND(PER-C*GN@CC-gS7IcJmdr9RHsHWKqh{D zdpm)V_Y>_%XB=up;N7%Kkg_ci5=v~xh3yhO1E;<%t&VVjAO=j&ix2gDUm5aGT6u`_ zpn8D3!^ipkJO0RcCeV=R|gF!c>yl%^QK}yaD5Qf60utT7fa3GE_@~N{t&2wkX zH@8n{9J~fjxl=Nhops-+o8dn6%OW<5E}jvWp#gira|PaA)e+7X6{*!zU1=IPj|!H~ z@yDb{pOfsV_^@cnR^QtnSz*l<3d?j4UYsYS&8lPk>KTYKB>Nlk_`A0q`E5h-0F&>g$R*47^i z%PYu)>dO#C((pzXSzV(i?>Aog(P#V;FZri9MvirDLy^G3$9JM2Abbh*%bbah8PaLn z{p*RwU^(ibF!qS5<1DLd-`-GruFo7rZmH}E_xDZ?Kg~O22uV4K>Y9|}ZV@jGQh@fM zw8mg950TO6K_@N1j&dN`f>vTEJ9OUcX>2FzBlcvlg0~{2^3EV8a2%Wb1QazlB;G!@ zPY;h*RM5}yvH%6FsIL*S(xDaaHRsR{dF_ks^;O_toa3>l=ZY>px<{c4LhIh&q;LG~ ze~2{GYTgps5VlP`pd6;;O@#^-z#;H7zUn+a4TU&3k_ zP?W&UNij?!AO+aYrQdzv=h~;+JdtvzMl40g-AgYRj~~E(wcq7~Ll3DO3M_R0kU3HJ zPrve-K2_3uO{HJuezLFvoGB34fo1{zL#9*RKgnhNf^~PQKEjK*Z3xr%;acs1FJ5?? z;7fG_+OrRkrQvtqnUt~&31kuaO%qPDJwPl4C1@++E5s?ovw#+}pneW=ek|84J9r0? z7Zb@prJIvZBT;qig~D9651)FPBOb`q0GSi2_#B%Ee<9%_Caz@Ld|{}FR2E!nEa0}F zV3v+Jm$F;2f*)=zJeGJ%O{p0bIL_7dV&!j|-4!i=)bbwlZ|@oj0?}>szw-QXUlA0e zCy!bvARK>BUgUh?3LDXX#Iwb2s2bea{>x0v8EhnGGV3HAL+OXF&w5fS<|=VKEYiewW_)>VIh71H7}=*NBX#V6}r< zoG>(7=JOX$aeveg9B9{)so+F3;Gf*(C3PWbqM=$q88|%27u2MQaXI3t$S<}yX<;0< zvuEiO@QJ|%kUmwLK24a1g<|M{5HyO(NvuJ|(xXSIKL=it@Hg1Wz0d;Qj}2K*0o`{~ zkQ%5rgHdrl`oJzDQ3IwLxbr2K!(B`kH=v_dr6JRah4v&(LGyOTqxw?0-QMd+%Q&IB|o*%P(s5zR&70h9LJ1ETkkbf;~uIn%O>f>agPm zXtz>Ah7Js2axk6YQ>Tcv-}i;60OiYC;^<3MKEwUo@9`TUurQvvy1m&!(%$LZA;-Gh zFA5Bxz#4<^>R-3=m@r#-tfw&ERoIzi|c+;J5QX<9R&(<3MfX0OSBZdjC&dP$k}6n z$P0Fp3cn4^W>`0(4Ce_jN#+gKXZAALS^8GdkYjchHqZv>`)@2naG^MI6^Xag1jy5~M_B-LH3n zs0>4}K^_frP@u^gUV83~@d`2CChSA^S9c`Oah9GQPk-Ulf6Kh*L}U>5;ku#OP^aHb zIHmKbWKMFjy+{;n#b1|RKSeST_)XBCqxiP%z$i$LE?F$v;*i}Qi=KqUk{1(GA#pD| z$BJUydsgCTz+u%Z_zjow4%$4!LUnmVj!df$&05UOl4Jlq3xfwb%tGLcK8j)3z8A|% zPXbC(I&;tli;U$2zYkrU>2s)^wu72z`>`TT_6d0>vde(P2{*}q@d~&O1)TSg1Vbnb zLhIlydYt4Z>Liowj+!xdT~j-0 zAwy7GYbOUtBsDeY6w1wZLu=?JzFk`Av&61rS4QEW{asA_Gijj!L#-AZEW(cv>4R|e zDH|k~$Leu2gvs!%Pq#O4)(Ra*S{5O-c#m1Pt-fhLUwxo8A4hTs#0pz*rSxN0)12|5gyacf)HnkGR)%aD01#uSE$PG?!cQq26_o_-w-26 z4~-(yYVas5$-a8jSdK;%y_Hvv&K@gN&TDkuknSuf>4bq}q4NT;=#P3xr=bjcfiCD4 zvNGx0(Zf7=RGk_0q~4N0xLMy_Q~XdEFjr0ZCMwdsmMr2sItbfO=CM)QgIk))Tul>f z1-Lu;GLwfHiEKUuEl4mNV|N9tfZ^m|cu%)J7eM2<99-PKgJlDPd#rG{e87;^TYeCD zSD!@Sfi8PC$C~2lw1W+SFoDh(x(lfYZQ}T58PmRmJg7HYYfj*yN9x47fwb7k@F|c0 zG=qL{c*p=82^)XN51>xCnf^*YCHPt#68uwBAFDD#v4T(`>5~JD54UO3;3yPp1GvM% z|6l+1IOnzR3B813B8Ii>S`-W*!}tp20K@{gyFEb^L?qRN#{k7$-mdnUf6PBH-lXB0 z4DM=&7$H@Fa6fbMpNAt` zg<_7t#X#Gs!NOD@0cZ(3FcmPAfd^MQ_ON|UFt|0w1GItpm&HjJ2Azmo95>8q9AVCj zKFL8!3o&i*wE31|xQ~;x@C7($PmZgTE+fG_nj!<#=FWtf#+4V9DB%zQG6WIA9%LO| zDmF2;G=vifeY6TB@G9?cv7`wHIX*x+c+Xa_MU?R(_k-AX2YpRBu@Ci;Y?Q~dwm;L2 zBM}!F)Wd#`iTbpi;9G4YV2DBLg=cAV`UOy1N3XMie>VNHSnNK{37iIgJ4*ks13?s( z{u;+2il6NbKm|wy0vRSFbFdH)i@CnuX7Q423}DI@oAv=cbT!>@8A?^8Lb8%t2Nc!A zJ7LPRL;xhq6aLaNzfy<_KSe{Wj#4c}%2jADG45SP=PLLFl#S#gR&;qtWK$Kf9@ znQZ|(2b<5ojC+Yk=}v0tCAeoOS2&2`uwRlUr<6eyNH+p!1x%&3+=9qpxc&a>#S5c5 z^OT_M?!!MJlK=kc`lMewdg2^dT~XAqy}*}uSlBT(dw}PbHsp8u407NQ+xau+iv>=0*hIpgf<5$H`^ZYCZB&~Q;8>;F{XmjH?vJ-B)R* zz~+3*;89xZoJF^&gLHMTp4)zyIg5lA==T2hp(i?`m`}h;QvoX+=gy}GDb=L=+_q>c zF8Th}YDb3ZmYE#|7_k#tRE8k<1#{|Y4Ug1!w2ym2!!qxPJ=kQV^0N3a1Dqw`LW_TI z9!N&Cn=5(?)b92m;Q#nJCYLa%xCUh#8bDe~J@M;l(J383k)PiY)YTi2(jl;Ja3&Ji6vmRXm#iw)&KDibE2~h^uhzdxZtE` z4_*k3F@VsNLQF%9m^{j|74OS*R>8h7Z3OyS{f9bmU-kz0X}M7YdLcC}DyZK(#x4DV z1SnKZH;_nX>cB|uKN)QVN=hh1A%ka+Ns~f5jND~Qny@O#WTKnx!yKJP#sY=&h>V9a zQ(Ps-mSz?r9ePXSRk8VS)`hjWe@OgS>Nyw?UAek~JG4N2hPd1xBUG)-L%C~d1r^r` zH1-{)Dj3H=#F=+8u?De17LL z`o}1IbnK_11Pc^~HQ#5J$YND|SynIP4Ca%Ck^bo$Y3UKG$KtTyZ;@`8|9tT{p2{P0 zp)8R|{vmAVOc$0_G*V+YjpA=7C!Hn8wYW@nGN%>qN2G*iU~&eoJe|o+x?^Vb+Ejn-kY^y&dgL z7(0iO&88+$qw63}*o9I8YBOW3&^lI1=m?Q!`XE?%aVR}TnwVO7hT_Ocd!~CN+<)p5 z(G7{Datc+pEXYFT1BUKL)zLu}tU0*#Y$EX&L1p;Pt z`7U7d^<_@QCkZJW_kLgv`5makG^Bcb@LNPAx^6II1?_Z z3Ijp-(f91Z zL6GE}4NAr2g67l68=kaUG}{7y+#<%;fvHR1DEe&80oWm{WPw@Kuu-f|t{cc4jnRzQjlvX;T^`GMj}vV?L;0!b?4@THF@n( zCE-h>ZBN^J9AThQU=a%4GXurGH=+a`%^_cTTp!jxuoR}O4T-6m#vs70=wga_&L0^P zU;DzB<{jy<;YQs((s=DP?jwww0Gz_VztO*@4|h=t625XMNC2P!?I`1OMJVsYyV`o0 zh~6sokDIr&U68v&XO{91Jb~d&wS$%xc~NL>)hzdPgXWD4BvukA7OSKvNfLzLj{yg3 z3!mQJiWvB~uWNGg(t1c|8ayD?rh+lXXIl4P1>X#TLArD@itMzJFiAA-8F?wsLYKn6 zpsQ7CzFHlJg{3rwqU_@ml%J{N8ts>TQh$)cH~qmLOeRtP=KnC82%)d8n%yCvnt%hTY12m^G4=#7AIJ*=%m zb^x}kPq#OMZlsNYJ0T1RO6fMP;r>X!Tbd}(_(UL?E6{wHisN5~Yd|-VhDhYS&h#-v%)o8UdexH8_5t+kw-plW$ezB`6KJlVO~OuqiB5`_!kk(W=2$ zXZPqyppMR=>Ogi8t<&L?xJbj&^5dD8t*EiW^|U@{XmidGaOWG^^8x*J{xD6N@ICg< z?z_)QV|~`?f5-~9UNdm330pWSw{)Y9bzOz5d zDA7r>ol-60Mp=~)u5x=g)|4?vB``vW`u)X=zv~Z=Rih)L=+%L<;+y9ueM?CK@d@AB zkG;>MUu8`F@lK>PZ`)s@ISeKd9s2@#?TQl}(SSI$vrMjXR5kjH;kaZ@n|tV2u2ghp zWhl+ZLDL~XNxw)sv8PK$kwOOeCoO4OAH|NOV_2q6fn<|;WhRn4Abf zOeQCNtmwiWV{;D@JNu4P5R?SPR`hVvYX#KMAv2vAS#F=;wxmWx=ze=Ii%bm$1y|}pKVt5ob1l6{fO5Z@OBCMnb$PVjhvXJAj@!&kEZjKU-p#IU%@9AL{OxyR&T zPhe(NJRE>g{)x8l@FMN8Sx&Z!qZ=W3h^34*^6X45ppmDcd;=&F8xO zn`8=$9muhM`x5c$)dpVTEWA^cx|8v;t%Bto2zCrRUo6`T(jySGZ9?WKX5HSw ze1j<&{b!h;&AyI&?NK%=JOkm4m15r6pV2lGdLkDho2|c%53%@aaDGi1F2s{aU!eMg zyHv$@_Y92OR1b;!Tv60$I7Yoeq7GL)1y(gr#!=|wJCzQ(M1*d5Jfz$wK%K_iCz_7N z^g`9%%vRbUeT&F_Nr{LecCvY!zN%H=bn%i@)jfz?6sW^SdhB(O*vS zkC~?l5tlsK=5t3zgcxFf5rWGo8zP*w^9xUJ!9P^em0TE#mJMyd^ee^Zk=qzjZlZlv zZWw~Q_WHlO-+Fhz3NXz5vZf&eYI$4=3`=++4RH8MhoAJVpoQpwSAr>0#xu;^^RWp_ zdZ7RrLj7Hng^J@G@}*~_MN#4~-ajb+`l!uT5>y*#F|i%w|M}DXfhjb=1pD1;PnL&D zKg6&7k(}=zjtMB3Q^1aL?#QK?Yjc#r9`^(E+&LjCE+0G%N4{EOJqVltNkVthZhLwa z63~B1vppW|SBH8;(=G`zrx_q2=mJ$(N0J&DIMAft-&@Krq-huyVeVusDq3N&| zBU+5G3lRK%Kbn@eh>W?5-O9K+vIIJoX)AS?z?;q1Ei{~eenGc^kLHuk^s9GYMB4xYl%lLs!ytv~_AvPoS8%8AlX6C>++S5>c6OGaYM2Y*yX^ODu&1 z&FI_<7*AyA@A(hJ0PKFqo2q>d0B;el9gww;5NqEmMK|&zr=32~tdOWeRR=#y9Q{kP z&=pYqk3iXAl_!pcLJ)s4F16GF96j)xn=RDf&}7LW;0O3qWdldA@TEvQsu18q8?>ou zHj2+Qw|2c3&`dt-Ob9PFHEh~~(w<)RJuMf|Z_|8$7{eg)`ivk8=zT^60D|v0kd{Cn zE;}c_czt)D+xyik{}W-qD`n&$NOMU2`CK!gcp+xL!CSo3)o z`?YCKtc=7p!2rzff)n!oTC#CQdDJNAZ10y!QDcT_ysmMeVC663c<~=KD~g@ zRplS!8e=Z*wp=X0I&}Lzti)i-{Z;zobQQ{3Sw;f=e?Z%*oE1p@$ZXOzP>RM_NJ76d z8{@5`XeS6sGpRa-&NQg>-Az#H6kT`3(SeAl@x$<-y!yNqXFU z_3e#p=l~{(WavBe+=&BuxVFlAI?@z$`0(B^BD|cJ|C!lPv$5phuv| zzf%Xb(ts8xNwWoJJty6;BY~eDU$e#eL1TuhWR-Y61S*Ro$e!Tqm)}ZW+quA0qlD## z#iG?fqE6(bYBqwWHo2`&$B508se`^K2fjoqi%gb1XMZkF@XgRsAW}N+wSmDD2Cmw) zz2l|*nfEM4f7WifpiYXE2i`(>ia{IKc-PKknI{iH%4t->A&6^f6N=-98j863N9T}@ zGO=a_p9npx;JRtnmvX1%DmFfIe=R^NoO^6Lk_)I*vu^wq=GJ+C_DPBMs`7koEioxF z$H?}q*Wdo|_SNh4yVtMYzxm<&_1o9qvPiH@boYS?LWcw7kKdwkYY|Qu@kG;~;3bW> z9nl(NKMrdfGauXh4B7c{Hyn*Bh!ar|!lD$rGw+7Ug$r>_lkY9o?HrS*;bkBVT(I^j z`uaPComtZ$`C6@!K`sEUM3r)()oEd!gxv062u?BNr4%CM&e?Q%N9QXaEFIw@6W3=h z^fmCPAp$3zPm?@nkv)u_{L=IdO+W~k5D+2m2OuhWn?DJU54;vM!;0@(S9leN**vPV zqT7^J$LiJLK;F_i46pc>FNkJx804~Luj=T-BQ>>84_WRI0z3u&wW0E%Xlf&mz9rFs zL*L;o?{@J9V_zW;zJjUEWqP=yS!ceZa6LZmA8C!OdWH z2(SLvGFlLSZ9v*lXs;Jt9$vwY9hLL4gxLiGlbfrDk5-^>Tax}XunXB%8^|k*Q7C(?61iOF{5tZ*@z_1;(Oz_WM6vgxYIDYL}><2t- z4GhHKaml!ZL2bd$pvJO?pJ}{wR>8COc3FZ9V6V22HX@7|9@*UxB+x)=S`7BE+^`ip zuR|54-pgriUzN#1)jHo-+dV=v?5Fe*OGP4C=Izi{>@`NTN+tmim$^}88-zcP(J)E$&Ws$H==nU6uzY8(h z_>G6Z+y9=zxrNnkkO4I2Fpz47DcgXQLxa|D`+Sp}8B)(JG7YZ5FSmRglSmR9_LLoo zGT6!Zr%mGAP1L6beogv9pU#telV)uTTue!*OIP)9F8$$fY?{(x1jAx3MT*!wD_Kbn zyTlOz5;WsUW=k+u4GqLV8n^K_eyA$kALs7Pz3gj$7j?90VX9S`ZHAy~u1@9QoiKn) zr8Xa?6Ng9kQ5GN;U4kT7-u;U^P&p;q&GGDt1~qD*vOflvM?zQ{v|zQG4XfU7RXYeK z+0cHVMFR%e{dhAE&piFxX?!|J;%c=7whhpn$jk4%bUFYLwT|qgrCq7lAWtiNR=fM& zbR+`4THhuMRDcp6V;VO|M6IayZlI(sp&C8xIwkk|9(m$;h-wMbw#<3_weTQ<#g89k zkTJ0wGY{1MVrdggMwKL^x({?}l2;+>=UK@4Q35QHxZBVk5uT+=**7el^s)xam_LIyKl85~he(@i<*hQwt(l zFs^J+y-mL>lNedy8an+Uj-^L}60!f-tsgivNyR|DvgI!{76``zfsY+MLVI#Yhc)7s z+2V$5$m~_OaLcR9o9l@OQHP+@9+ODWr#oITmZ^T2l z32-8?fUWU>zMAuYPVmO@OpsYs zf9s+BYc#;s9hBlPN$UQ{PcaJ|+qi_T1IWj@yP{DvKJ@c331B~=Z~&+VgaCF7Us~bh z?lHJ!#NfVqx_`L6C*cCL-km~pl|Y`+!h=&og2Auvb9em@6G=Q76qPCe^~A=}A_v3< z&odoPL`Q9WBdxZh&j1z~OdzRkfWxrWCcEj3lTcH{Q^Qfg2P6^h7dnI>zu)G~{T9U4 z+L5xVjH$)&iLMgE%<_a#2}1;cPy>wS=(_s#0}ag(z75EYUW#O3{QW&gIO6whyM@RU z79HLcWF>=pj8;g>_cPs$I+=;YtnC0FL19KMnJ(UgIhrCA2*hJ32m$#LTh00&VgWVN zYvo~ocRNOcusI!vqpxP=8lXR`$T186{h@b`e4JP}Awt}M03Te>bNAe3BFw}YSU*19 z(HG}(*A1O~aCL$T$RHsJmu8F9r8u@w`^y1f2eWp#=nWp10wo7);|L6ZU({rT?#%#g z7Dy%dRLt3_;ZY?2v+Q7OvVSnGCAa5|K~)lc#j*a}cS~FR^lg`Xq81u<*xUTo{xgR` z1xMS8>UCW#mvn~Nx;+O0vMotPABRp>rlC<$9lMM~oi>coo2mYXNqdD>{L?k8%HS0k zsU>}a>+?)Xe1Gq@R)!@^*nVXR%rIv+cYoe)JmYh%sM(%Z_{}A7Q49 zHacT`fc`(fx!DumUrBz41+D+bWQ?+yNK4G9Czu3tFta4(;ob45m&t3emyW8z(s>h*hFwx?H4Kl7lD z(z#fYrWL^ZgcC#&t2n%QCv$Vq&{PNQi3`yo*RjmuO@m+vcE-UJUIzOn!bDe_t~@e& zHOeZsn=Esuq{B+dH~KY@qLsH#$5Mgh0mLE1JMov@l{x@fDy!>~#v&QL6VDSme6nYz zHwG>U{RYmP!;N~!zP!W3siUj2+JVuyH;PX9!KC+B5;4I9mcFD;s=na8h)L|KjOleM zrqyyo9~-4lo;W$;SdiA^FiD-3tkyx`OsL522>lJD0`cMzote z0I+}H^@A7ScLMmBgW2HJJs8`KM{schvyoY!p5BOy`^Skn2fu0r#*yh7;&Ak+VwWD& zA0P#Ue||&nw913=NuTfLl9?ixNXx1~CX^oRlQA<83>~D4^3RJN|FBYW_)bxr0U^S? zk&%&xK}BcFsvjjwI&t&+$I}2e`hXA!qpgK3Af*6*kU(NGoshUhzagX|a#N=Jo1gyv z_y4n6tEI*OM!2>lDag{3>EqLe?+_x(S^xIk7lu#~E@X=`Io*&FXcRc%bS_BD_){DL zL+2PtnP`0xv$UC~4!;Jge97kCq_rf>jpNC*+GzFJrfnsMXIhPgUYf8JLQxKmaSWJJ0F*N@D zd ze-2;)21Obt;C%+zw2k)<${gXfsG!kIM&k0W`w6-|(#hk!Gie=Q!=tfsC;sCdigvz4 z23cE2oL2Y0s1jDa{pCCU=yPujqb33K`Rsz=}QFe8yINQK`br3G?r2@aZ}FV*^Qh!(Z1A1o}j*$ z6BF~b;;x5Ea0^})E)}%$n)IPqTL*GLuP2Bbkl8RMLJ)~0+go%)d^WTcC&hKu!~Z0> zA`}Bqv1KsMs0%h+HW%hOY&$lRp}Mln+X{6^+8vhR(lZH(qWLnywMiL;FC|lZjRJz! zLVbVr;bUk_Vr$g2kiizy;ZP*gM@aQpJnin9pLT%>o1QG=c3GepvxncgL`r={>xQ2X z*4qm<^d8-wtLsNjA|-Ik1!(o_&!5!Wy}kQw-Ca8!@Dpmd5*XR7*=wI*Rmk}!)RJL9 zp>qa^%@+Ib`zA^Gij&0r zrle-Lf%@Nn@ATp-350juTVz|5OIFtBa&AyQdZuz4z$gUNLB)nqY*l(~qxtFPq1|_{x`ZAlNHW1O zMpLm!O!9)VS9sL~<*I{;=LzQ%?<2B}WV7&h-mKXlQ3JLXq-B5<=I|(r13ipCXD74V zkShK)_rLR3GqVGYmBcRFzkv!ovcC(O@;Qf0LZP=YN>YmsH zI;G?IHv1_F%t~bR1h;&yoGePQr}uWX+t9V<4^#$SoooWrZKq#w{)c3Wu*+?w0KTR2 z)5f8EyDyCh0E|C;$82oFAx9*gxUA~MmJR`U65<2sq>V%qkswv&3w>-qh0P>>cl%3s z|F_Oblw-aocnKl+gAjtQnFSC~8XWrZ!wXKq7Uo}&rM=tLkZ;0?v7>5eA8!yjjh$}! z@vo9M5^fdXatHgRhDcsg5HK>bFX*B(-zU9Ixe;G=;3 zR{f6Y$Z0vhdILHopzG|DQSd|n46p{BkG6O!t@mwNwMeLPirR$uYO^HUxpwf(+rjr& z_f|h$q0vyFJP&k}cEfZy9lsfbPrq$Cl4~m7=8M1U-*EN$mwruUoC+d+r&>aNSCDp= zIB_Q=!ero720$6>_$fUy{zFJUbJztDMp{Vtk8*c%>$!Z&AVbdd;;plrGMc{zmuqn^ z&B_fd9Oi{hyjoFu!xInpOGWHu(>%9u_oL}`%$yaI4hIF!hE`~x74XGU_Hg5s`ZShb zqG~$eBs5@lYNnG7Y%5o*KJ3<#{y*&39^Pn#6v8c5Y3;~v5%E8YBxtPz21Gh&e2b&7 ziraWBRW%^f)ZmB&Fwk;;kpUR>I4STulU;3hxT$m_aH!XK;9({cP9+_2szE?KB_?<{ zQhw=nj$KG!b9~_SaVbI?U~ZOFz^XdKDBH)HJ?!9)Uhj8`D1Z|`u3=vN@Nm|O;AR6Q zA&p$qO8}n4H`eo0+nY^}>N~~aJnulwhR=}_WSvaI9XkNyUw(gk&`)^KYV%OkG!+Db zyH^y2oSb;s3n1=Q{}h8ffaoEP8&g(LlAsvD5r%9OmED7J(Yar&X4)rhfBD|ib*J2nn1X5+vd2#SXdSpO=O=_VtW{&8WgH;mb0CY-s`3q-Ad-#+Xh;!uQf} z2!a(b;WVPs$U)K3-P$&!2|D62@@UCYRnaf>wnicO)i*9EUk0!M{8eNLSfJH{qHDa` znX#Q=ceF125E%i4_K?s(f0`}f!h=mFeGWc*LHNjv?nw-_G%Hk+!4AbtS>{2kw#)WFa_E& zBo#^J+0JL<^82SgXS!u447VlI&f46D(5Ney&~@X4#s~87N@v!;&0M@iHfRYVkZe8m z@^nha4IWv(C*qVt7SOvHrC54k)f-U4IqkDG;9!u!Fa=p<~-PeBG~EiN8ub5QB_JF_#ndwHO5+^XMH%V>`vnL@G=YY%-)l_8qCjJymPA%+{aL7W8nD^v@JdrEE8-Zl=bjkV z^5xg>Inn}FI?7^L2D~rn(kuWrQhLZ+;;-;zAsJvZA!u%FfnQdvGjc|Y6^B~*-9h=+ zNwz$_3ZmH3tUpaGzsX4=)XgAWB7$0x3P>j@24T}=@lq?+9w=&>*Y=Rg5H{5D`oC7U zX9mwWfZUqSeIy>Hrr?-tH8AJF5`n19wuYnvJ5+@I^?VnfD0mBGuA^_Xs^U0*tvO_e zz`+VtvwSZkY7VyDYoGzc*SmtFC|AZZ=BT1uJQht0jt5G)`(>3EcpvD0hr12cZZB+A zG>=~OiAhCtpz5&UEmk@ffnX$WHEad1?;x>rnfD*VPda1`OKdt5XFV5@vu$z;xtMB@ zcz!1x-{n%!@iG3u++~aY zEA<~z?hrRXiE`L2THu=Kf}L_AwL3}E9FY8Bk5IUT+NA~BRU(QyxX0n}@45K`WFI=_ z6(AJS4LMBk;i3>3l2Ua~zTpR*mO#R49Qn8Qqt?5D6#=#Pg!}YUqN%biK&`bD;=+6S z=aodk$V2kXl9i;Di0e$?FI%yIerfM_1L$DAC{#aGR((Mxa4`0j1uCP_)1@-Z&Uc#( z5(K~loU%aoe6V5b{wVg>8~=VZV`FS2eX;;^mPoOXMTyU3!Av}vkB=qtyRpjF7QkuX z9Lu^I%%HzdPz4==B450??mo0z6hXh~KD9R=z>1IN%^inPs7l(F8!U*og!c|NN%e9^ z6{&RSi6GCSL-`cN9-b*+U>m?#R48nF)M*{avRHwKk218@B`@Gl$dcq=^>x) zSoo>G4=G|tTy$vWAaYFC3;lk`liHmvic)U4RLXzFBbP+pXj78M z2T!p9Ll1F9`0Sp8w)u8f(SpHaYJVSi^zHqCoTR^L>lO-hy7$QAuXf>Xwm_M&`(tCcpj*ANbc9m+C3M3y*S1h*#(MH2l+lH&8m+&3gc9 z@>IzhJI>!zNW`WfP9>IG-0l9}^q@j8&G+1P>-&d>vg+nmp_F*<_2c*O1B8koHRwvo zC_r<#-(id@DFfTqpf5qPw8Uz_CDS=O@pLU;0RSP^CR58-c-s(;w7;zJsIrEd@;{hZ zTZpe5*Mk&~RCuD*aSyQEA-`>K!ldKRo;} z!9wU~l)($BuIS(JtuQ|_4*JQAidNhDqatILk5Uvyio!K5S+;R(S8J>dh8GP)C z2t4%x!A+ao^-p?M{ohD7>oaYZ~#BM8UlF)-LN&TkR4v0P6Z90me%si)nXEJ=+od?aC z=zPbZDo8D&*p7B}a2LeKB6;r?W)yOq$u{)K)z3*d6q@_fU^@;rc8~OJ)AS5B;A|c)fUWOyQMoJ-3&0 zm%Ry1qc6XD_0`vLu}6$!NkB#Z3_v@j;azx~khrlG84lyS2S|0^cH7Sjxy=24|$ZKLsXOG>1I#oHWkNr8$EuI|RPR@d=rYD7F z#Bc+fBuk4=Ma77)u%~q`1nvbP0kG$6+lFi93-+EumOGuq8fOCZy>3U;MVg<^&OJ(j zK2f^FnEJ{eu!i%Qr~x?>3dt#&)8<9M zI~Z4`;Ab%D+PWCS#^vWED;7{Nnopj+^z(BPo6ymWBUb=U6KyY{i=r4f7} zp2p>+)xV4{T|R#)!Wc)*A3YzSYf#JjT0B8dCqMevb0%N|giWOUkV*!mcEvyqhjBkPBpk3W4 zUx!EkPh5C79P9`ZHO=NX%0kR0t@v35s~y3CHTWLv%0=dYLOOoj+A5(2gkVU)KuO*} ztWQ~qn)zW!S%UMl5)gD$7+m42VHi!XpC$rq`lz6~zPcSBnY`h03=0q(Qx{r2v=E7F?a60=M-uG^by zRL@b`X3}fWvK;J7^y=df0q13I+{;lc?8k7xni#U{ornWyV|=74=Up?shq8o}#njb7 zCINmTebJyN0L*mwDPokdK|lmLR5IX{Z3n;g#cQAj774XKpI}GsAl%p&=l>rDw)**V zOvTk`BLLUyD5nBD4ExZbA;BIAb?AV@vFkZmwA+KA-%zusX@RPJ7;`SV9v18&l%{$s zBBk!rQb^|qA!J1>dxziSha*NbqcLOAbnG(PbmBvMNpg-3^FOA@0xB}dvdv1eVNS`s zR1mwvQZRg<(_IIdS_w(wb@!i*sjI2jmGF1afVAPhwqZi%z;nT)^WvHKuW=q2LOt4+ zHn0T|PsDrv|Fl;inK$99)EU_qWC++byNU`4WQ;b^fs8cRx`B$rI|H0q#bERWCbv+7 zR7_dI9FAIM6L0V(lD9|LI`nxf1gvv#Xe-ELQj^MaG$fTkVBb7GWRKW8GMf?)2^ zvIx0Ae9$ptX4`yt@kGrg1#2`?CfS!c;?Shb_nV<5?;$e)JNSDMebD&ZrN8!Pr5eaF zq6R|xtwKXHKEVLapwBx%K~X9C^-?%PM#NW1i-vM&5r-dysvP5U2vJ(lu>Gc94 zZx0(gMEqc4(wUp~I&_SwY-*|rb<9nk^&SYj3b>Du>nWJ0^fq&Oq<}?$SxvG`q_k_w z$Kk?k%z&|cvt#+?6c32eK4H<fu>v6kil#KG zq_d*vHi9!ti{5~GigN&b%7--ttw)3_n3MHaPpb{p1O5R!F%LtEVx@8d|B%OpEDi)D zycS$fReFQDY0t`@t%qJmlanI%2a1$1S7pRFNZ&x%|1i}_NTPg4$oxU3fyXJK8KaMY zxq&1OKY6&D5yBh+r%A!DiM;9igfRJS_i+1!@RJgObCo6iGVZKP?_7Cf7+XWE^Dkbc ztn*1!Em6kRQs-Vqx-~pj%7cC4`UrmUJ3P znQ(K2uo8H-4|mA!0o2E^G9lmk53eLj8`7h%zVht!=(HF<(=#r4sm)(`wn=MJuH9epmUpUrQF%ANk7B0OXU?z!E#6M zetL01_>(O{Z#4eNfutxipV018B+Hc-6KB^cAh{Ae{!o<&swg$$@fD%2~Eaes^;1!X{k^zo1m3m|V5`WT-T6GoG15{va-g<-B|1e=0 zbIhz-OxM;17f!6$YF#1}vLxfbDFLg*VZR{bBK4D&+W8ha#ERU4Jzlz%&{6xuS%R>` z&FA$NKUIk)Dn4k|)04;lpwRKFCQjU*bEP|FQz zK}<4MT4{OxISvnxzu6Jhz6yjb$<=&;029nq$%36o3r9KTEEf-*v14&A@t`D8Gav;3 zMJvhx$pnSXQ$JjH-Q60&5^|@cWVTCm2H_xs(8q7-;mSp}0?C@YuGJ|>T>uZ79JQ$M z;z*XfpS2H=x`xBp3L`YWlPdzGy-VL*`Q}d-g3SXi3e>vz=0MhyE7_%^%{@vfrW{@Z z%20YzNC$FiE^vF3FTis&Af`Xu=+tjs#-Bjte-KFmkbHbVSj{1ordFCxiqS5nJAiC8aN+|AeRb$heL4!*i&J^gB)oCEB+RlU1~d&GGqH?&|uyF-eX z>~|bJGI{$6IfC=OH^{>82k7f5#Sm2&&6Y@b&?pG6>V?|WX_!(Ta| z^!bNB zTuP1sQd@5tj#o}poGJ2Nbf7?p<3n8*nXs)^`;D0IAZGy#Y~R8Sr0tCmpQ_?bhE&*k`AMyR6{O@3;3xB;Hua%c`TB4cqegfb(~V_+MzI*JlL0x zh#OI7^j|~RL3S~W2=LY-U`#SygCPB1y!d2@60rCuKqWm~E8_J>*B>tCo%F3rRq>dr zEkPS?OBe={l<_fq(_BbI(WfI9^%BxUkeIOev_xk1@s=JIO*YVV2r5{9hn*uZ-1leH zTS`gRl3W4PK!anrL7>L7H@+BpM;$Pt@4Qt^2r_14SMmiw%>xry@m2g4LQ~sxEJj82 zN)WVH_U90+)p|P8FPx11fP>SdzOT8VNHYC?fvRqIt%Tk!OTdIGylW!$Ne;j8a?l75 z@!bto4gwo8XUwm51SIM(!b)}&0=0M}8GkkU9~tp}Ds75nh9l~%e;zH&fVr^W?xC|` zb=9Pvc7k&2)?g4s!pxqAHXyvCuQ2Asb=jZW9D#Pa85{=S4&Z-LYC&ch*fv~fK8t!e z)n<*=dr+TUFsY)kf((I+X^Gq*OIw2rUO+tK7yIL3As|XT7KILzU^G9595Bc4X}S3- zqME}bFgQd>+lFp_^wCz$G7SEwvk+vH2^;#m7C;I}u7gg9&-RD9BX#195aV-Cq9Jqu zL5U~ReoKT(JsbW{a*0BbA(A@NV46el=3$4U` zH&G3QcnuS}!dSTnKq%NJn;L+df3^W>%~6Zi$cr;q{lKWJ%_A!9uxARojkygBMwDkZ z1xUpm4uRh$Pj`0?re}7Isfp?cpm~V!!eD=~4pkyTWs<0=z>E=I;dJ5g6NSeK z4LSQH$Gsf|q?#g4f|W?8rBC;t>!DBD?5ri}PmO!mz`_IPpe=*bugy_;vC;=dR5YGB z$lyINAs>FubAJvJMa4uT7lb#I1(?$ww86pZw&?7|`}mnVVSlRK)rTu;?3~p^&U_M* z05B-U>l)`h@f~eZm?TD>9{C$@OB(NdvqGt|svY9fva0C78~hj#2Fj$G0|WNWRa_L~ zqHLccUU-UF;q}=KzJo~w5h?W5(Tt6Q+my`ZBtxkfYc=_Z6FKdL(3lNL7DT4Bml*JhTMP= z7Bp-@?t~*JdBjquMV^IDV^d3f*KHpx#6J%23(Cw?11UuFH*pj{uM2uNvI^j%zT$gQ zl19)_Tz6_-LLU#ZJqo#SZ#8+idy~XjiW;VRNgh64k()U5lf2{Kb%RS7Zmgw*o9~yj zqC%HN?<|~K>8oGL^Vf%0taobBAPR7rP=HQm@xmjZM^5rw6hBsbx}`92AnC(ke;wyX zg7VM;;qLK80Tw@tpoGC-|GcT&96awM3_lAZl2B2BX8YxE7(`1RxmF(1eTi}Mzog3uQ9 zk0QxAcXuI>QGk3e0m#Gs!Lf-etRN9ZK_FZ_xWAG$W7hg5R3hXQm#{)CyCPiIFS!1P ziIs<@4+tR&T8M{qqRFL0Ql^IL7s8?yy)qTu0{#|ykc3r`RphLRA89e*8id!RNP(gW z)ms$Uj-s!lEOK9UN-FO+ous_TAaAh@4Sj5o{SC&EujZ-J-rSC2)HD@m0cIcvX?GP8 z@)dGf6{<0fKi)uR&)j0KUY>D`k0A&>Y=llyKXbJ~K+_&!phW|dsB|lo8YZO8aSB?H{T+5BfNsi&w5>60Oo*6}( zFd=S&5{uzg($SqJvmGR0mnadi)Rl4zL)t=7kWwmwCI;Rp4%E5&N8>%t!gJ8{Y8-RN)p_!!{1Cj~*FoAaY%{Vd|uE`$jLU2Fd ztqIo-Wf-C#YB8Y9{1!5>C@p3UaE}jOqUA7Vje{UMYqBZ#q29))MiV}ZBhH={Js{wg z%6@i;IUe$*v?@6T`M7H%IOzl?h)rD^RyKa}mJUWxozVs@@g!)| zMwk^8e7xAU#bu$(NJX=wd|Fk!E+{i*(w`>eD^BIUJ5CzVcGv9|?&Tj_m}xF76t(r&WK0 z9jd0JtS3H5M?lpIK!3LbjtZzLJoAt~a8N6-Qo6N(J;z2CFmG*ez1cc6N}OLKpc24% ziemn5eNAU529$2I4*C^1yr4>nL&VHlHlaTuK2IA z0=z_QxOOey-i+~D2EwZ=i1qvZ(zdexMXZe8*{~skl5i5qn z%gHCKN@CgqMbYGr7k2+xG3Bi70-e6faeQzXXrWJUGiTH%+E746!VH3usnLzb!?zDS zh@0};hnn_JEYg+2Tsk_M8XR?lk1Hub-@=;CLHenFY0R=e!sBH*Q+>;aUs@gX$Xs>! z$n6%Y`VP9_u%?``#&@qD4oPpuC5ZI-iz4%i^W5+#&MJ9(ZE$5Iy~{ndYMfCV%H)L< z{!A!?P#4{;i!J`A{;Vfz=?l*vr0!P(~le2WO!1NZ2 zK+y(5VQslbl$l)-?op?jEOu4|zR91>J3(V z82s3FmL1tHUK4T16{eQHY>?R`;q5i`%ZI#Bfg7?Ce$?xMTjCE<{L-UIWgvZax*i^$ zt{<}^bQSJfy7Xns3^I(f&Y6c$O?rvtl!KUiEla5gu#QVIwTI1OPd_yuLprf>j6M-| z_`#YHsQYtU6qz`jag?By6G+D1Eo}K2c2#EnJhz-L=q-dw&;ssYO+!c_eJL4e`-Vpu zvg8|nHzjKpV8kK4l|jH!!YoX~*Jc^Vx2WRkwx_Yp7J~3u>E=Fb4n;fJX)D-eh57xF z*pOMFkh87f1tQ{tEG(}V>I0U3Rp6)dps?TUZ{Bp@9PHL|JU z$p-+c$wTbT?$_zm(d=mn2^-Fg5<8IMkRa~uS;AgcC?vkR6GbhRlCutNK_;GtQHt;7 zVaP9t4$+~_MNSU%Z%ab_@Ms6Vp2v@b>bvT_{Sj(wc>N^i+uee)b%Sze|3>GUJ|nBT zU<2p^L5jYGs4fgJmnXNx-9JCF4jy2@zLW!RMSUIy3g|7B{0g_2vnfLa&C25z>SXY} zuIaO3tvykTy?^t=_v^Q>zr}(9s3j*)mNusx7Vmb^uBu7w z*#V(Z00O{SM{^p@EkFbNc@?u%U`|^8@bHc*nrK;_N(q04OKIhUxDX&IqRJHZ{8IOd zxB(4CmX6>TNi6PQs_5uH+3&0Hi?yfFP9-%2=zGIysGZt32aUap*oTO5FB&zdvp-wFl%~E*P^Ut9yoGx zG`A4%CZ$!x=Sc{ERquEKn*7rpEn_f?jNkP+mZ^l29{wthH?*DN?ULkF#aG&Xyw6Ji zb8Sn)JQdJ&dQr~yEmxbB1fg>XH0P0lM#Nd{!bZAi* zTf~9P{p!h-$r1-z<*dNrBP8Q6e}w#j%NG@;%{`H}hy@o9CB9h}75y~@S+}Kd z()6X+O>9}rEl;uTdp|d%0F;T@u6#|3Sjn|YGp#r_)j?3dx%*tv|8!s7ZXY{GDFPWG z$%pLmp3doT;eXEc0?-L&V?*2w(w(;F!yFW>|DNU`bSy%rg*~QURYzVVS^4}Z+U*wt z#0`j6#1yYA9C1H!(_m<(=!iggsS`cu#&ZkNh$5z0EON?&Ap5AP`J)Y_0o>Rfyf~Wn zu7Grb@VvT_kv(wrCK*c)FJ{jKPO7G*eLkxJ{<9B!HQOmP4J4!n?j!*qu%XPTVYlDn zfrcw(q{A(phOdP4SRz}6%^+_9hmFsd=Uw(wh)|0igT~^E z7o^x)Q16fs8@^LFNV%@agKPnRfnmj!pcT_bAGC z%@sDum#xGJV>{=KlIunx7gK{m8x+WP6L$tlY<)@BB{&)SjzO?jEx4I8k3HnLftbFe z!6%oZjC7n&zVXqe8?qTS0Q-`5LsWzg?=e#zSbl(D<0F0Xpw7eua9}1~Edf2l*TL>= zAVg1w(it*oAU|Avmbd{B_Ot7$ZV)6Vhk>X)#N_GdbEjJmaYSo-*8(zK<&c34F1@H~ zIZq5te+u2V+Xi9b74f3Y-HB4_GRDQymH-LP)KeydZ}>3jQ>PRib>Wc0KC#|NDbUH% z77$#9OD|j8kbkcTfmQO)vNt!N#fWnFw^9a>q4zY%Vev)gkBCL#Pxb87Q;1&?u_c#^ zG#GWtJPzjj1B*ForT3<&1Va|m#|4SM9Z$Ex!`OyL3Y=3@UAE@qhJLHJodc01=Lj%< zE9Ni4kS$pMek2{9a`CZK$DIRaE-~nP7{=6WP227(=8M?KP7R{G8tc;4Fw3gbG(KBD zVwltpw`iLS!a++DnZuJ?^Esa1O4%XrFo8&f+8)fyNT@;+nl7iQxz3EXARA=sT{wfi z3r7xQ=d`7(jUZWA zpXNMe@pZe0HG%sFl-2p{9feOCy#Ym+XiOi!QC#`ZPtsh7^@O?*=Je#f=WI(F=5~lA zpliQEyMy#xdiCi%H(bV$Rr8S0!>yJ?H}vA6>K+D&)eraYj$On389~Kjuv}7lWOeqT3$LVV~ z0-7hpfF$)8LkboRAV=6XTW}E_P3K{}U|>h5?ZTNQL;3+0(;fA7+O=_B^7PWV<(}aT zh*(Rhi~twr5ugsBRIz~T5$I(cC!2>7Q9Ll1h(*w64}9G3hQ>Uaa0~pKIAQan_owS# z1dlW|Kp2S1X8L-5+&jHZ-WYbV$7o4Xh8`*tS6>@)Vw({$k;0ci9BC~7Vk=MM`K~nI z|K|4Qf4h6ys=mLy`5%7xiP&W9tlI$+x1yLUFnEXPfWKuvsVnF3F>G`2=2^U9s9a6t z8e*s*y|5qdM0^vN1K~_3V92|FF=kd%tlz;7SLbCv=CF7$%E3osjUL-Q@j9Ythk8?a zBrw1FH_It0T#4zUAlIX38Rm`Tn=5()__Zg;K0IZf%Wp=)lZ67qOer*H7;Rz^25Fzw zfx`}DcUA$3SrUv_@k-l47rBK~eK_TU)HJnjSPtnxNnh=vAp^XE6g7md2w4!qu|a); zPB*?%3%j5zh9xwiG0gYW1h6)6#yWehXefpM6k=6MX^@Wd{17(_bXik~;#ef7Qlk?|au6|wM0 zMTZ*15+06y0k<#86hL?E1GsxrVF_?CE3AXE@QsLT)=zZv4GN6-)U;TFlY-qWj{}5` zz+jnDx*28c{+q2j-o}=$JchT>y|QR_94Sy#_M=}GVob!(G|0qmxGa-XeDGW4oACxz z8Q3-W_%;u7H#&649^+jN?gN<{GfQBEIRLM{s-cbyBl@8z2NurJV>jQDMovC-cYF14 zD>^It)7LuYEcp#%j5}7JO#XgD`u$3DW?%acE-0nsP53{LNGF88J84rEKzzg|1@^E6 zBF(qe#uR@xfY0v$s)uA99^EE~pN50&c#?Wd&XVq9guMZ2vs&Y?&3&C=LT%Cy(Wnfeb{Gadx2DNwSY*7u@m@0! zc8ay{0o=~$hU^dN4RSx2xegeTJ*lnTvpq-3Gx2StSShU=Oa7X7gj2KR}5Nx~go2QI5Pep$4 zq~tk88&1v&SPqA8yuoD)HfErg^ibbE-U280G<0!eQ6vpfV&Ve-wCjMm_+(`BuIL0F zdfU*L+5$5z7woApgar;VK1;JKSxHH*`_=2ISPVL)g~EiTU`1XJMp)XUX~qfP;`#Dc z(1^i=OAVVD0!p2JQ{s)JfDJ-3xdg)OaouwI10mx07=GSaYN zEixHWRIJ>W5Re`o5=!!rRW`y~$4Spp7jTqtND1i^^wv*b{aXmGH2ttxfg7(gsIuA} zymY=425xV1GQLJ3c-Q^(xM#LT)v!sohG;dX9zt0H?}na_gMA$&UB?XQv=t%&zr-P@ zDGVlLyKvwyC(mUk_Diu4JsVELS*+4CZ8h)|#`}bb{$k$}S`|@pi|k5bKj~XSF258e z;31%Zj_?5{y>*Bn705vd>dIRw>{S2NC`UZNMDLvZy13=(bKQg+US=y!dy8-ts+r4E zob>iXuG;aR^o^h( zxxe}p5~&D+k@vQ|3y^bh`$#8=T27lhFW$*yXA*H2X$?Xk{zsIWT#{yPSAU?KI3@I5 zNq|oFt_3-kJb`w0%WVGNRMB^pCeCs7Xa0S2iVPp&zA z#4KgoEVctA&H}FuP&Km21hqD+e=Mvb0KYrp=RGj5)k=7WKl9G}qRbk0{R$cjm`sw7 za#2=wx_*DQ{y<>`m=~RB0H~ziWHTM;isb|Khc7=|dOT;PWee6&xJjy8Rd=(}oE~ zwQf7GuD%A+?iSz8?{CexZrg`h?EEM_PA3k+KL9ni^lnlxIM~PMq-u<>@$6d06BFG9 zzQ?8=-fP|)j6e>he^`%b-NQ+eKBiW~5vs=$ylX5a*>5?3WT99PoY_Pqz?~1T$g;X$ zkq+mOyvee6kN2*E+4B_(a!7;e3Y_(B4+Pz=oQo=kh$f&bRF^xtXiHGPUHE1xZ>EvN zl8Ji&Qr*p(V0RBjpG~?|biI}^SR&99hxY*AiQ8p zx|A9Ua39N`{{D1*Tk_Mb&M#OP8YGi;R7=Qqg{!mh6xghonm)i(|M!Yl`Jbyhhbq2G zLdJ`4-!x6JRl&b-L- zfggA|+McO;ZMP_p?U&@8Y_#Fw%o`3BJnM@IWf>RwM3lXV4ro*f&#KQY2kj6GBJj3* z>FmiI2kqV2-Ai2EAhMOwcL`5leCz=Wj!;VfXr;<+)0s?$FE_WWIOk&;3?7v#;9?8a z4k~$J^pM`LnRMTpRlWPHvfw}4tH<{+nc~)l{*Te!Cf6ltc+%?7C7@OUiG4af7>vNf zJ&z!2S=su+`;7|J4A;H@avQtfsYSX3&$QRp@Nt&&SF~5j|Fuv zruS*s@xGh&&i2wZ6fBPr0xVtfkQaF>^l}g}NZ!;mfgK%0=Pk;&5?>^*4Zi(gL@ye% z_SV=(ZSHMBXAI7G1-OU>EIw9vH!-W6%k2}wt7Xo3&54bQ>4rjhu0sLeJY5%5l@njLjP^NHzxN!sjgLp)K0#Gm$KW1>Gh)L6pqsd zvAZ4Run);Q@tV-@)o3%9h*a4ZyQtYMFQQ(^(+x1XUcFX9>uNze3-EmS6zL#~4{A1? z$2ne2fy+OEtvc3=94_Rx;9H>l1HBqvSEF3oI)`ehz+EeXP{4)h2oqk{M6(I`bMWcH zJLf{Ig>UHz6aSX_=kTPhqlAl820&;Y%K2;tWF!hu!LDaE`)fJ5ik!S1Qdo5BBdoX{KOs(N-L z{I^S!W6yvBTXqSblqprByd)^-itv!>SB@g5nK7Sj(d(9KpEJNz5U~8TRwVT5RwXhO_P_;{>^PcXX zVsLhbfDBC|hzlu`fgS;<|3xoEGJb<50SHMN{~&KTe0C1g>+4b-aZdm9ihu35Z@~^= zI(Cvx%cKuRhw$KPEgGV)<27Tamv_0V_Y`KV@MUS}-YxeObg*}Tfs*IYNas1gp*UW^ z@rN_A1V|FDr=pqAPY`InPzzlzl0Y5i6=d93H%}8`nfb}jluE$q0DwsA4J|Z?n}rV& z4!3NgJW1SqsTP=fCk&7JvJ$d@V$m_S&ovhf53w?*Yi#s`w2xk4qdE$37HX)jqD&g@ z5eSEr?gF7;XM>?Tqxe&DSOn)}qF>_03rb$N3&2#r?|!lPL|NnFf&ZXt*qXF8PN$R; zAj$>kK;g0_uW?wEY3}t1TUS`kDFN5PNKROeC1w=3pTgHj6Hx((^S1lfQ}^I6H3(EE zJ(w1TbE2aRLYl=M6rw$xY>*R;d2J(GdTpcMFcCJmT{iTUQ}g2$2|oSmLEsr<4|cri zE?9;2!owKDuf78`(uv&T=x*ZX`u(z1@dwN8zWJmT^C}P-y!uN0h3{!p*3RcYhvhOL zE8IN7UCnCYH<1D~MAnNJ|NRg1bglUMv*ePh3Um_+sJms^k1Db}=yZE9 zUAEgBYrX~b0+kiIst}LjrzdMm`n&>LK3r`d2pjHX@2Q>BkO3E&z`^mi5rRt0iia(D zJ`zEKj%uIcBj}40sX=Rwk2r3AvbRoli~C?cNQ`~-Z(}OlK0~_-w>W#YEC3I)m63%6 zH58v-OZAVDzl&=eB=v#_dj~?6E|2uPB+Nxk517m9aaOkCZ}*lt1h!AN6!k7NPRWuc z-%H6dhcQf-x{hEBn)ANaRqHc2Y=KY9*;gS64;CF<)nPviq+9;TKk7somW&^abd=qg zR#c>t=Q*9MZKQay{>TzzS#3$*P*lnaoO)3uCI*hvt_NNUU`%?EBW(+VQ24cRWV3wr z@dj-D*hNh01dL2Aj;UYUX zw9ZyqXY7MgtXh0L`f*q!4XtELEKfQErvk?)j-7o%$@cWvqkXU;D-cEsWmm1}@xf${Q|P<|Z?26N6mp5D3xttbkhHfE9wn=Oh&n`% zlv3Lg%7G#yQRly?sY+8Afy8CSrS~Fp0Zq?7MrWE<+KOsHxa@akW2}k8mmtSr6It~4 z@J~O@q5v@~{GyO+e1a1(E7}K_fREI86o_{P&5cx*XlNMB2|GjX&Iu+!$Lptt?Fuhb z6VA0-L<<5YdS*c~2r89K_)JT8u|aW+*w(X-j6eef++N5}(X|1{BN@T0T^*0T{z$42 zx}lacb?Rk>&NYVyv5)#o&PGTZbhKzA7kyy=4CA!)G2~v^>1U;-7fT8ZdtP!mEv6k4?8=XFzEhv+dYVb zzSm(H8y7zv}-;_+5dV!ye6n_>lHj9)CP+XXS+O1k}N2$wG zN9lsJnmpB!&(>G>VwaqPqluQcQgB=L65z8fnx%kvb5c&>u5LOkbjYfpE&Luo(Y$_- zpC7IrdX6rqL|iI(j&XMVv+>d=Tv4k|NTvB2R;`_4kpsokAkZ1QpO>ZH6>i-J+Qkj2 zH;NrZr<`!{*~X5_1kYh@LP?J%wEzngA!h@#f34%;uv_K1(I<2 zWwG&W9|dRcaKkSunEP7j^laDo*IUk0NU2|xXbcJj7;T}awyXL>-<(So z&Ph^n3-l*}wZQt!Kk0P!U#`8NJh3cY?)1WSN%F%Y4_0zqk1FHS3nSUr9c(&&JFl0p z&H5_kq?9gjS=gBgqbfKJ@zMJC3iYGvLEhf3F{kgF_K|>;bDu*{={OFx_5IV$job{+ z1u5YUP&o&IUabiH@qT>B-&v@Ev>f+9HVAxjyv5uKff)lfy8FkMD#2u#YF?7|_NZh9 z7bF=k0Ag_3#gT08e613_eF6oR`Ja$z8?Oc&j3~sz=>k6`^@U`{PhAB=Fw1B|e>EMC zUE@~;?o6|s-OXp!eDD8F);y?M8sd@-*lIK(!hLM5s_tuTuExY})c;nF~* zH6IfP_x7g#F8q)y>^E5s-1{5$$&(OSEJ(V|yAsEvYZ$9Z=0k-SHMAXMyRy~)h3O4l zjS%asKjXoEM9UduEJB!Y!qAQAZ?6eGa4R>D(kc#mTWIb=o7L^q{Z+=_pIe@Na*vO& z{^y(b>#yH@|IL5B{(k-Hhrj>$!}qVhf4_eJe|~(;V^9*S5#J3 z*2JJ1Pz)3>b|5!FU<@w4cedv#?#HV8m6V=r8u0HbQzrxZ9{9P*3K&2kCXEaPNHELq z#byGhQMk5BSR)0tV>$!oPB4V_m((8G?iirr8%N!_drTk5Y6%Je_m*^O7=LcQp)9zy zW#8RGM{?4~I{mj=7~KMHrwj_PEzt3B<0WHqLif*nc(JRSx%Yb8IdxggyuevWzZU5i zK;`|wRhq4G2#1>`sMF0%y~!q0)9z`hS0M=~)TR%8A;D$A8GHOSpB=5Blba0Q(m6%% z7b?#XYSU@cpDBm!l5sMAkjRmAUeMY0Aja(F{8J|Q0zcvMm; zc(Aj56n6m5P|>hay8F+f$wHiw&rexy1)~Io0&+-kBs)CL_IDmM<<2fLQlg+q5%wV} zhL$sVYc;hjjmfAKk&zUOF?&21E!eme}mg?d@Il&i*wj-I2t>(jqDb7NG*zX@i85H8@;p72^$U zKg<_y%MAU&xyD{BJID+gi>a3P_j8YnBPA<$9@qpoBhLfmfwT}_hm3>i3Wn-mNo|9Q z7f5W_8{)$gU6>X5y-To3@G~g;{&Pkcr$i;LqX2>CAGNB%;v*!UC?DlU`9BUS zD{%t|4XIP)ZfJPL-S#h&sCBp<`*in-FwIF<#JKYQ_UCQ_i4urvq{nLlm%0gv8T*-= zwE&?Y7H}3rCwHZJth$0T|STe5tB!$_~&twGUwF;Vz+p#Anl9qv!7gC2KO;Uta;`-hJ!6GJ~M` zsJ_6O@`3^&um;{1lDC9?{hb^t9;}K5jF3azh8FJ-?~lK*tqE1p$7oGrnP#zTvOS_& z3m6Le56BES{l5KE*bZznu03c=I`28a!s43%0<&g;8TT+3r7Y)hE^=}64lwS9B|>6? zvX74(EEEXe}Gd;+*Ho!3h<N2| zKm4LZVOmi*N@z-C{8qoj@~1csUkhfNfEBiFzukQNl%!MqnHU1+t1L2ZW0+K`a)L9%oVJld%}__zvtgl3J9Akwv$U?T?C!1y$V$d==dcr9arDMii$dIrraZ zHa7mR?QQLEy*pJRB0`Fxa1XbfdV@#dP#s}qJ?hKSYNMl@gdp847Ua00SOKj%e5L0V zQry~Y=#*U`>$f8#B*sP?v3_RT)^iRMp$;cS1?flY!H<8IPs52+Xd0zI;ttmI=42n7OZy3q)zf|OSzUQ0@nMYtsJ zFrHYfN$?U*GPPVC9?7yUeR|xVj<($vXa;mNAPC~E!qMJ`&)M=QB!u8i)DT+^e|8Bw zV~^iO?-h*%Eb8GfM+9#RCuI?h3D>nGy&wvvhlmPm9>1!Y>l4)mzSn{?Nsc;xUbyO_ zGK^>&;3!3%gbEoUxbP&nWD7WXpq7K|1mey36ppDhM%U5Inx!&FdKRuEw#Bx^2g1U!3%jE*q9hXjCFC8v;rl6 zR76uOpmA0z&3uKd9sqHUd^(<4a3} zeD0dg^gNEKH6w+gM&L5vGrmR%7KEhWNoDB(&5vkoD#$V9ek2QQS>ZFv=TLSNNp~Z{C8{v1qp2E}H7*Sr3%7iA8m;3k{ z=j6hP1Tg@|SBXkCMF&5+E&@9kimUn?1^?m~{UuKBI8=zdytwCzPXO$_t5Oc6!R2yj zT+A%*>*`b}XzYdu74$!Co%TU4WF05+%Tu;qPL&c+vt4^?IiqQW!Y?`B2FBvy1w1>g z5VK8n0&_4DH94kX6G|y})5?yJi0n+ahAf>f-O7{DO{2CAd1#fuez>~&?e3taB-!!@ z!L~U43U(UgPpC%|#esx&lY!%;nAGw$7@GR#zU;2*J4<3i#~&9k3Lz;Zy(o48392LB z;W4TGKIssqp|yG_OiX*c717alr9^pwFxi|5EeELs6nKFcOg@I1iQLjd{UPEE!ZodW zE~wSX^D(4o!EqM{xu%r1L1K@#3*h0y8_aq9E)~`*gqV5iXhs2Mi{lZIq8>aYgE$1t z==pecnCA9?o{4-VJ@1W{e@;huVEGh&nl)0>LrZ@$f(a|6CWiMBey5N&BY6i^Uw03p zfB%odm7p7_*=Q_^;s!o#JSDaHF2~Gz0G#vf0I13eXr%|_Ravs9N^_1Yx79Ar(@k7=C;Bml{=yWGC5B*qB)=?EGG-m{Mp!+S}&gcAFf z7~hRE5dUCTO0U`tz((;iQUCar-$;PJ5PyaKQz+2^%?@IN*%n-On&Z{#e0upGolr^S z{k^*;+hqik_$7BZf(wxX`?rMonvt9nS(lGN6hSaOkBe zJJP#0unXU;{FyqD8IA?RZLW7)ubsOl%_SuaIAmZ7hyR$=qU;5o@$)fNx|+mP7F}pM zBaD{-7w+!Y-h!^vqv zW)+!Q^ke)z9Yu+5h6y$hyyx%X3-v#xgm8M&RfY~^1rK=nsJ)_Y1keCOhc(gHb02N8 z?|SgjvuEhbv#R?;<0lVG3Lhez)k#-FB0YAnTn6zRoR_LjAyZ^=aF z0KN|#P#BKfb@4P);99Wzn#VGY=R=~mvtJE%aA< zKXMVS!hsj^)9z!Me9fZijHv}3lBPkVfOJ~}7$@Sy7(6vgdt8L#uhcgP8uYqV0sb6S zZ&&fj)h$(;H_#o?qu$Re16Tn$Z2B+A`0w^yj#V}<*`!{Uuf7s~Ce+>b8|K|Q4u zX-5Y~7Z|>UJ~mW%NY9D^RWb}$FeQ11(kI2bhN9_koQuGfE3ETpy8rdCs01;O8d)B9 z2$O`L(8kh~c0A>h!O(Z8ku?tLLsbDhktkOR*>pHeCjGZb{BT1Ois(e(7JbJklLG4i zVkDx)6XAck3w=sZ@>ZN9ab}jjYhOI<54ZbLYzDnx@(oc)rZa?ODMj(Y<=aE$Pi;2a zu`!*CfSkdSNx>PqsR}6|vo3*eEQZX^uZ~k3&74lH)Lvw%pFI;(tp;rWPGqWC9v84$ z`j%EE-jk2g|B-d*(LsyW(spZ)A+H{QZ%Of}9>(p%%{^Ie+BpdA&hB}%Kj}Rbk=%;^ zxRLFMW&EX$NqypW01v9;7GjD9T>$16od}($eu4MDnQ1YSqMSBe`m)xRycbsE~$jXqQZ$#&Gq zc2m%(!oWz>+SFx__k>}kEJS~ctT+s!ZXDen`}<7%9JyD~bepI`Es7mbJ^fzPN@1LVBZ=9YWPhJ93sgCGE$0+1aG<>#=+fbN)Yu>bJl0ZN;vA6HRGUs`Co$A< z@sG}RqdK%`413+Mu|S{{TM|SS7*EloJ}w6vXOuLnNSd{L9H@7I1GXai#F_xULbn7w zV3?$QFvy@uEwP2f_hnCV8Gv?xQ#5R$JCd}6duv#iSfgs6wHV>breL-fGCzW)W{X%V z7>M9yB!%ZQbDYN&&`UB*0#*orY5~X>AAX0Q!W!Jqo?R_^5z&S!Mv;KB@}nE}SzUi0 zNr%>0|3Oaew|ER1SMZ@oPX?!LExIHtpK*H)xJ3-$()IGP@;?p(Wf_HyPrnU$oD#*0 z(I-4l>V?PwMR!gw(S({@e{mM~*de@4z#AqB^h*%{8G9bFSQ=2Vh*3|w`}7S0AnI6q zbCl^t&2l11&-7M>1m`{Dbn9jgc71s%@BD1fT^!OUK>ru*lF>KM96 zwmif)s6DxRI@}E@!$IO|MCL587lKYcl`g&H3%tUTdtV0VEa*}e$;W-Ivguhy99)z<+BTvG>}XqbJ0_E?v|FtsK4Qr<;VF~Xr~i$7sbYjEZ79c?W33&7uPL|CDuLG5IOEwz~jL@mvJ`;r}|o!JCCywaT_Qo>CqPN z#bzmvLz?`tW2{H$7rrBl^&Q740%tJWb1(?Q*@B{jjo}Lv@+ZlK7*t7qr{{(|SFT9J zvzr|ISwN;imWy&3X@kHXG5zs{y>v&tOn?wb>X726(>U_u*#et^9H>X>b;H%Ll8s)$ z%MLj?Ev!%igwHe4i%As|L(*eQ&Q4MX1^h9nZq#th(Uvv1TAZC?VqJAl4Rf5k8%=SV zg+-S*%3)`q)hrgS1AUw_Bnt^E+)^$0>DzsG_y8T|71fIcPrwQ!lSJhfEH6sIbjPM> z+q;{o=@~KysQxkaAP_0{nto^HkylL+SgL6}^{;J9Z?;IO88}BS_4DqtESePXh%95| z(_nUh9uvcl39=UsItF`|gx{XXlQ3X#1K|zQ9kUM97Ah#a-FN1i+MvFPKTm{4bOrmv zaY-#jXD%z)qE`f{2NA^rBNblAN7=`*1|iCVaENoY1tOs+jl5Q+AmI!u0RA|(7{#;W zeW#YqfyOy45c)X1X;1$vpRh$_6qYA^9(pAQ_x&EeJiU05T1DxS>NQ*K_*P-$IZZBR zcXXJsRi$AXh!f9A(>|;L1+=*_oYQV3GZpi>(~t&^)Fd7H4bmE5aQwynF&#%Q*dDO; z+}s~Z@kW7RamTXBR&X@|00kEAFB&;vq6Z80FFurou#9Jx9(w-N7FX0&&XMm*U zuP@!FM;uxK!5fwmYD8HEmEQ1~mU(+xWIh3+!5IL|!C&MTwvUi67c%(IT`TTfpcEa0;drbY|Byh3)}Le378S@CryGuY|KGg@6mB zM|eN%jXGON;uOp|_>saBXF(l>*nnzmFH<&WnbI@S0B|L%MK{}Uw7CyIhEUjX0O$qh z7Jcaos-4_Dl5DeMK0CeNe=CJE^X5Sii!l_~kmnYX^neP^%|>L18S_rZe$bXGGL>}x z`<>E)h;6}litt>_$qjYP(MHX#dH3o{=%m~U`?@v1UQj40>3p1fh{bK3JkS(f!V#SC z!YQ~y--zA^u+Gen`D1Vp3no$To|N}V61L4KmtX=k0w^kppL3LFF*Q@A?a z2a7|yHThuT?~BR$jvsB(jJ$#z9f=ppesqQU=QGy~CK(!JoI z+-j0~6bckL()e(_nOa6&6tZik)Dj>&vjmrk3|&*e9X8x+7w26a?Jto;yz1!Yi{N&^ zH?*e>4x|2QdDKUPWT0^YN=lwiD1ZIv)08SSY;0o~6i69JyHW5;>_RW+D!=Z)PQ)%i zcYiz^xj?cD4uawbjd-~q{TKiXO^pa--;>@TzpB4F2xSLgib6-8(E)>`gFROWE)q&t zU-K2QwS^BE5H7Q??Yy!}e|{j-LdUm1nA}$pfvODpj*dno5>akK9$yrO2~28VH1Nlj zP*>{2{+S(+G^R*9uLs}#vm}h+}`r7>TM+f2GBKk(V}rm;YF#GsqgyX z{_J9?HyPoffD+*v^J71u+zw3;a+x{MFG}uyoOn4&j#!yQr-)IKyN)x?1@!U!tDOLT ztBb@Y=#gr!c2Eie1BYLHV_MfJSwRg+Q%^spn$M-=7!}?>)t3J;Rf#y-cXwBH)2&rm z0>p~c!-WZxLVah8dWqR$C^||m4BS-)$P)R@&RseeRI#SgnExo7^p!EAK0pG~cE|yv z#G(YE)DIdELMz#*=?1xHdlZMUwr#GT&I9+CA#<~yu(YObpoxc-8FEH9`iXr|-{qtx z_TSRzH!z!byRLmHe-vNhZ{&Xe!T*%G7(B0>d9oZSz<|aA>p*Aw>daJvn-@>522FZK zHi;^Cl+aKB#9sJWg-TFR!}D;SxGCRV-F{4D232K=N(@BR-pj?_pGiWwfC-5DD4ovGUHcm>E=x_uL#g+aZgeBO@rdn5blZtb z_}d;+Y55GvJymzNcO(k!Z`N1c=T0iFl&ny*-xSe`c4z-Cr~B@9MfUa5E(tiZpu`~8 zBR1a;Z~hO9#<`QeVYNqJnC0+graAsNE>@2rL>SmrlW1ZXNoW>s5Wz7C6wyn78lJ`Za+*$%Hp%GPPWo}=xsG`q`<-kVZk*teu}$E~fhrw5sIGI_?81_!)k1;M z-0i`Ef@}S~Yax%j+oOMX58;KVa6}Q@wTOzst>hnDt&C8miTBJ;;l;<0FaocS({%V# zJj6It=_VFBV%nm)x~yZ&KR+L!LqF0D&j&{w4Och^ z9h$)MJeV%l$jOHC_}Ea6>L$?_nJzkpXbyCfZZPJ}?XB_1%`{t0Oh5epJPs_o017&2 z$aOn}o$2GE=Q(cVShvs-ipVP?a-G4ZfLtgTLVpjnnHQBQ42I60q-4Iz5hsDm72#QX z)IRE?cVoZb2}|ft_M4+1$%?K6^3HgAJPd1$4z&`%I)Mz>UwvU7dW?l}1Pa-mDVT$d z>ms&wm5M@+pKvuzd^Slf#mWCQ5~;V66)yQ(Ih=cu(+O;-X2YH*~xOJX`L${*+EC zb-h3)rwIDOE@m@gi$}|6m2tX`Y=Rz|At8}#<~ULSc^IDuMy4C1PyDr~CtB(CE*~lh zKbo5<-r&Xo%{m?%7p-9j8lrEc1#lz|HsBtDE(+gu=~^!% zfN%mHZnsTgl<*fiL8Y1g&k4}c)cSZ8k7$hHu?J(jf_F6rbnWKLka@!$i_wS9;1}?{ z_btI?Ur8katrE=Org7F?|v@%KH_T#IF4FU*@9L`!1%97g$0XP zpLYmYCa+GTjd(*jk|P^(-h>I%(!=XQY;c@V`Xe%fprG3lMBC!Fk7cf`n-t>`pqWO= z1RfWv&|=)QWkc>!srpm7NiD01+7IN>ZXPdX+=82K8YNe9)3!i4tQYp`|e6&C-~oB+9K7BrZ@Fj z_XW+Xu*tPR6FY>DDAOyyeh?D9lV5Q()9B1ba73npm!c}@Ze#n#ySIHGdykvO#RaHJ z0_5}XQ%KqI4C8p3LfPC^E9eaAH}f|PSEjaFi8iowT!9m#NcBd357Xl9^memmq{VE) zV3z|uC4O-?SxRC7W$C0H;SMMs;;BC$|A0h^^vRL=sM9NMf0t@ZI>JO4RMGg_l4uxEanJhM7%Nv1wZDBSL7n#fsWHx^O%_b3>PHn)@ zAyXz3T2SgQuY~$Y#*R~H2(Gm&PFv*IkR6FBNNpfHO(K7fWeY)aR`MbOy*L}Q(gK8x zJMgIu>I#$(^z0o+HF1VMMS%#FhM$z zfY{CIAb0h6Z*t^^Ky^npp29m#8CBzMF+8Cr$=B}>hU*O(_WBW(wy)&7PMc$j~ zP_jtGG!DscAgI7Ori+LGKgVq_bMW|VHGrik;_O8;3kn_oa*L^*IFdFo`k(F;^qbN; zgm@DYjp(Q0EkE@s(9$Di9+97maRmK1;yw==I!9WC(FT>)idN2s&W6EN0}Sb^pwbOX zGaPb|sD^{jV8v%Tkb&%TI^@7@3Do@cK0mL-1~X&@9E#H0lcPEU9dCG3P0d||p&?;U zxsE1cfPjb_2PXfb{D}f|ysOl0Kw5$}rN$BYp$52Wi&9=50AqI=0@@NCL~s%|EatQ! zgWJH6nv2s&Lx(->_&80D4Rc9uEp1o3ElK!m2teiN*ZdKu5#3O{G~|Eu&_J~qzWYqr zjo&~ABRvBT9o$TkGA`hQhX=$K(~@|A?XVqRbo7iRE5F z)?F`kme9o>iHFvG-5p>QppqvE*A?6cu!B<}3a0J6J573xUJ+24C`?JOm2PI2i4rz4 zoNl#i{|v30y`Nf6-3szb0|i3>A~o9VsH&&5Yx`048!q88=$Lw%lYa3@Dw)kE6jZ}f z>SGS>zx_j|B|qF6!0V7)vcpm~kQ`S44;RXof+A<{bzkAt zlV7Y_$s~t@bn^H-H>zGxPShJ3QQ@C(_gHe`4HXpUQVFN^YzG6Jh#xZy{54I3Zeb}X z|HKXRpY`&fj@oW0L8E|2)z>}J_tjn|Y^w{Z_cR_+vGQ;IUv*~G9gthXPFmJ$HqmH} z9ouS%^YCXt?g_MN{9}(&u_@4+1s}$up$!UPDLkF<;?fae_x64g$JXw)cy~|p?|laE zm$dalRaqrztjg>F6zqafHM&RLDn_{1$s~EJ8kq~{(70ByK{*k+THsHZTz{KmYQ<8T zy-}02wd|!(`iBZRk4w!MmUWuOBr8gaG1$LkJH~YcNq{hpAQX-52T&G&Cq-T|(+rmi zSdq*zU_6kw;c!bwbww&ywb!_s{3H!1RQS-g!aF@qwi$R6Jk4HR)gSYZ52zY&2}L+W zagp`KpCZ0@&u=!pHzk*uGHAF^L>s;X*_dPQ{Zto2l@@$0U+D03wFt;dq^d%28cx zArR)sTG0yP9_6&f%cSd2=5SRuh(9OxBtx?!53~?*8!~qHOW8_48lf$=9WZnejr_vLdk(Q8lRS|&fv=;9|YeB z1rYR)Y$-lg@uHIbHI=+z6T`xStPIVB{n&C$Ev?HSe@=XbcSAa#3TgzQr#@I7rXTfa zT&R2~*a=jP0`X)M_8EUbI!v1sNed80vL9&?b@Oi_yN^L?W6_>=_P7Ipvu{pJQo)MG_)UCsY{jS-B;rFn~&7K^h@#>IIJys{}@t{oFF)OjHT^+ z>;)sq4#$DiTPc6~Ys>JfD{f4IVSN1O0LR`4NbHH*nHUA?stB4NR1`Ryb%_tu+nlcs zho#gXcGvIt&D)0=P{6Fiosr;{emFRtNof12c>Gq(Ai_$?s79D7Pj&ha%_GiO^Lz{>03VY|BQt5hx3R$!_r-j^^BQ zc?Q@!ODYIi8E!UE13H{xXA4(~h~wtM0I@Gc4Fm{H9NYBkAI{DV)fiwy2x)_(z(=&9 z2fMKeG>RP8Z?MK~{xnY}XA`r=e`OVT3^GUwV9MA=Vh$Q)!zuVPQE7CN!2yAb1AlLe zHh60Wd|9ED_oRB0Z`;ZjXxe`7*>I+5Q zm2p5YTg|eRbfP>8(ft$&n`h4?frGna{DQjZB%92>1M>?pA`LKE2^wxNXPm`-KuqsL z&f=#Mg69G9NEd}~DeoOAF_})eZnE%)Cs5ec|JUw{4(SWOF`Zm!$>gw1gH%J-QXgc= zK%T9_u3@5f%^pAP?j;&Lgv4(gkfPQ`=K(?cxtqZXeGBV6I2j`T)7Iqlzw%XZF5o(W z8Wj#ZVz4uBd0EHR*_$SWmxS#wmJVaT+_iV5rl&R_WI%3E5EXUZ@H$B^ zU)&LY%;(XY%U(f}8dy>>9FSFBZ5}{DvP}euw|V%8k$!0IrEP%j$oqStZl*8`x)qlN zZZJ~x_9mfQTl8+N=L=R|4U*kM&U?Y+A;t^KF6o8AI5Q=rBUmJ{rQV-}?!Z_ET0E`l zGz$$od#~>$qgN_9nzjU|D|EavY4n0}*w2%#X7WM&-M~oU zZ}sH!Iy!<{V+c8~;jw~)d#@S@-z;^Az>AQhWlR$7NABHv!}X}ty-PEcpz(=rsToy5 z)o#;0C`amSscxOrhY0+y&|s6_PQU5w`3EeCK)>3e(i>IeD~~SsTwzbdVpwPmEah$1 z!dk)a=j&w#x?hQMh(ot#3(^{`#g1zOxIVmhCc^@^LI5bvs<)#Z z)IwICV8%*1L|FXxEZ>zOcb-uwMs0@L=)C^p27B05t&^Hv)#UeRncJ>A$n?d^!c9dWNSO`MAKD}J@7o@%F(h|;$iB`tt+ z_S5>GKu|%c9m)?Oll{qFSE995q6;0A#5MtAJ|LB}LssSCIcca-^h@LXOPTsMB02h={g<>Y0tcky$SjfUkR)z5uW+EDQ zHoOP!P-Za9qe?*AYxqSn!8VrXWb74wXr=kQjtIVJ$J@d;1M;)C+?tKg6^s+FhF}~k z+>n{)3&TuCTwFtk0NWJ#cfI}x&ZE!41vZC}O zRbkf`_Rq5)C>{6o{JEs;m)19OGEilV%c3LIMK%H6W1Fau7f@S9TwR#;BN;+6S_=iI z+2a8zri_$1+@LvVrto7*Ixj92m1p9F_5HfNJzrBneGG1Gz#AD#HssEZ(|y97O*TTR z4^Bc5gZWDhCTNKr2s|p)H09 znxE1Z@iD4Y91zG+1Rw7rP_=7HhxUg~8By+7(PbEXO|=lKtNP#H)`D_MVpU-kT~GBh zT;4Fp@M>T|DI(tF&~IXJHgJm{mr{y;q{TM#eLbN-uc%Cl_4UDwrNI+mBzP(mp5S?d zC6VK~^LKcB5i~{^woF;W2zSC*V^1o!8n6txAgPRXY>Wp4-6VBc*k2W7CixfmKTVR6 z2O{BI(;9_*XTdxB2a;u{1j3_0&R!)JdU9nV83^w2NMM>GYD$2Bz~uz9$Jg&ORFx*E z$ls>u!t(^A$lw$t`9X^%iD%T|YhD-)TuwIW{!qXLSA8Y5r-$!BKnx7P z0)jt`^b))gAQ^)J=Im>b*FutgH(mT#4&mQ{vX!O1{^YC0gSY zuFzxYuYJNk>007F{4WIMYtWGT_5%*;v2DGGqI>pe!^J=YjXV(Qrl>I3y-r6VS#&NC zR()u3)7WoDWzZm&2snWgG|M7?8%;UQeGiwuA?1rYTgDT%bqZcETm>hE+bbh(-`>hc zL6wL;bO;MMG}~~Hla7reE~P%PEi(`mWkFRtyjo7pzM28SNL-^Zh_EF)W$ z!u0Tf054i{(vL3*R0s-6chTb1%dSfDpWcH3bY-LkD#8pxD@b!dCy-t(+^}M0eY(?Y zUsVpYEdd1#kR)W`;*e03793l0--#im(xBc5Qm9>_JOd37q*Ziq2H!ON9A`lc@W(?s z4a)*;dn+11^?6rT8lHDQ28B2(aspeSV_4k~DaWx~mmGjmXG8?i9mSQF_FU4};Va1L zVJAT z^zOENeXHC!6>uPh3~-yMMu5JlK&wJYAGzBM=tCyGV;6pm7F(MD&&~v}woPmy$RjOe z$dF7GVc#{*z`wh_7zkXj0uKkaX}auiYIP~;OM!+d4A4~lb|66o9wu`Vcd)yG<85QO zP-q%)7iEq$WQNpGMOX6(E%o8VM&U%$O-jgpU>TGoLAmiCz6$4}r#5-k_o3;28V7Z{UOW%I@m1{}+ ziQWlpnoR*Q-*JxM_k*rOH99F6Q*uKuLxAGAC_u^q^3pchU+{-Y48+isG8wzWh;RIi zKjm;GRe(rJ3i~D+p3ZVu;NsF`DwraK;$Ou)c%~}hhnh7KRLiY1Pa;db0&wj3Dy~!k z3+6@|RLd=r2@uA2wSN=yUi*x^<3ZzlNJ4Z+?p@RHXHyt35_FJ+=Jbsw@MhWTEhTB8 z*<0VK6M1&rrXdX^#D-MUHYhtD&*GDCbG8|gH!oe2L)(`4kQJm&gX`60A9qm1rgI}c z`-AY@tf_M&(uhj2tVY`25^~!FckJEpS)LNga*mMHh7%CH75ZHEX5-xyG@X)g#}eGr ziw)rR?7VGhm!;1-ZgFE)e3Ik5DS4f)iGipIpSx+HwpvlD1OygbaB8CC%;_f6!`fXb z<0f*+1+q7k09bAC@%MI3I6*Zf9ak1Wuf%-PgL& zrYzDtQAB{y(7l9@s|zW2og(ucrNa~sQY*r{{_a7=M(}>G&(5V#=xx)O>X%3^xqHf? z9J4T*-<6h{j;>YT&=p74(Df^MUhzCU)}R)r93@x?7{oHVhkrVNY0#LwMXC%kPE(6dZ<$3u^v;1B_rkYHO@1gk~Xx?8)&rlY`B z+tWpSVXXli=fBfuu&8jd*k~@5trSNHp98eEc~c``e!4+6%Mm=rTyJ%D9>oIb&elN% z21#HNGQj4eWJS$9cmmNH5pN6yW1vH3LHzeFR=`T==FOxZ&R;c9XjK5_;wLfiF^Q36q-AOv?ymr3M|2`zss4)HravQ5Css%H>wXl?4 zH#s2H2#KQ&v^L>#l7rYwqZCLKP?we{;rfnF>9q!Ae4Uiy2uL72j}@@_@bcLN21gqg z5#QpoqWD?So0_|e{&O`=T0|gd0tZK^BeESwUqow~08|XMiVl~8R+B*Vgt~n1$Vb9{H@GX zV9sSd&nNuV*3XJW{#FV=)DAM*(a^pT0poCjPleF~dIVfxKpe1Ltvax$ z_KB7()v%35tW)zlfhC+&{}xu*)q4Hvx3@1|uHU_U@&5I1zpmfDe8od%9K;=EV5EBJ z%5t|Dz-C9{X7l(MmsfoEuz7ws0ISsx9`T{6cgml+6QnlCTqLbTLdBNI^C-MI#C4MZ zNvS2LkfBl!8vGz1fD?`!*C1a3@S-FWx}qHt8e@0C>HH-w0HVA=hWXeqE(8xVs6&pZ z+Tt9OvFRZ8Nyt`*SIuy+S=#K-0dJ+6c_y-FepVT6HI$0B)WXn1wnysO82aDL(K2Kt zMAprxhnwHm5)3mK!rm<|JY~-o$gQ7}QLhf3glqO4GL-io#zHh6Z6N~(83Y+O4Ulf| zrDd7KmRXS`9GM}kIlsA)tT#pyY!Y}`SWR+2%%2+HQ5z50f9RtF=QaK4j-PjSN};g1}ZkUOwN}$d2#zivbR6k_94W)UEh8I zs={m~kb6KSN1qQ$!_}EdAKHSnx!T2)s`o6D`iiYXEV++YlKUF}CHILT%7(}o{1gPd z?mkt(8P#(;x{ihC`;UK+FB*Rs+%)NEVVd=~{I0lkhj&4kvdhv2$YVjnhEXcp&5xE=%2g0gK0ol51c=AD|f2~g8-SMU1*0I+cSOdK2&nYfqcH%OS&nD6 z!JK|IxYZy6+7@_q{*C{1nc-P&Xd=FCNo#Z?Y!n1%dWN6I!0)QBaS_I^K@_2gCfOA( zXaJ)_BPP{~E`{LJ4{tMUmt9<=on#YB@LKpcxE32^7CN^B9v?nHjDqz*LRNf~ejIr^ zOCKaw$LoWKQ56oEFb$m?odikZwZXY4wXnUm0DodIbnf~3Q@{U>sjHIu#4ceFNXBPq zd!Y3Le4=w#l_AnqSK1h{{<{4t(|+M+DUgGqvkLI$77|Z?6U)B)g+FX^pE!w=G_!On zVR`f^coJWjgxa-2?THtv8dw(WEB)y~!5|3?q5X>Pm2EBztp1Ufyd4y#I1bedJFGci zPgfaE|Et*hiqHWvL~uV_nrYmkmBn_t1t2_SNH)^9LLfu*jIL=ghU_{C*i`>umeW9E zea9Oz40*Naa@@I+O91)Vz!pp^;rJ%U6bK&C$D8#X`6_w4m?aO1DAf_VdBTf~snf0F zek(Z>AmCkx;T=4a-)U1lr(A)*a!2UeRgw()63P}f7e7|a3fzRaZ!Ivw6^xc-Js}L>m#vUwhHss`kH0G7+;leA=OC0S=kua@X~2&Qx=VFHr{uzCs4k z##pojL`llJM0o*{ zGQH{~kwO%Mzz>EbZ}^h#I+wE1hwsbN0ky-UxJJqA!wrdmTn21}M7hp4I1X*Ckd5t5 z{UJ)J{brPAw(B+A_biAH2}}{3T2KJj``?8UB@^E;jfVZHFTOu}h!L1cb zE8d4(j&)!Js2hP5!k-sx7_4#6L~5NGE;&6qX4PtkUFXu5$x|K!8sDceX*#E_2Aqff zGM}7IyCe0SHC^nQ$=MR@W;^K4M2zB66%BS;NL#b&mzmmlYMRAIENxOp;{C7 zk7J*4J{4K>#eoTuQHo$Tbpy1~qz`OXY+QPP6I0S^3OZqX0j>_B*d-BMObxUxH zgVR8_K+Ax#B+)v@836Z4{?ZR5GubeIm$Yv^lW4M$%Z!Z-JWgP8kMeSpyG zu!F7c-R>^Q-U2UfXL52ju_GvXNxTiCR0>OOl=v0(aZ zwde70F9S(FlXAxydPQ!6iAB{_Sgfe?AQfdhqP_C;qd&Xf_4cmt|MF=AtQ9J%0xAnw z*22%W(w)iVa#NU&cCi=2?; zzR~kgZ9-s{fpu;&J{Fw-SX=ibj^Wta*(bgk1`i4`PE~BF3LQH}I6XLrBu+p!g}WW3 zeX%9+7q0D#PQR=rO@jV9aBs|_e>&F+@)!+|k>q*`Nj27-1~gdA{J6b2A9J6(g7%T2 z%0ecX0VrwXe$~|FhJy&mgf2!0H0fyLg5?>Tg>E&SEq0cTocaLOn-qrX{hxIz!cYg~y1-pqtdkyPaH{ZXkEwaLmxn8+@GEoC00E95#aEqmV^> zV!xh^XeeT#!$Fd;T2;t{1b125Cr1L`mJUyJzDr1UXxIv`l?X-aYO;w_K+42FRQ+P` z>~4A^OG^b?WSsl@eryfL*p*gjdJF)6kP?I=RloG0-FL!clPQnQWRoqOeW0dz(~=Gi zT!f9?K&-1)D>+rPnLkP2b`tp1H}~4r-#e8FXvKyf;vco2m#;|!3UgS2DuL?-iq9B^ zVK**~34uYH=SukBqb~$Dh;SBWWVT|4h??y(=P}wc@T{S%V@^nsud$hV@s~GZ7pJDx z{2?#S{K)q2vs(iNwhjAO;G5D5Yfs$A27Y-<|2V7yQU(_yvC&V#IWdk~T?>|23Jy15 z_sy2PA!YsWQr4F>c#*xnLatKku^>5joNo@QyC$lkXmpU}QFLVm3JZRIlsGqTAjk1x zQ#*7${)!`VF-K^(!2}oLHBbolgFA$fKt|^GhMqz$Bk2%And_pe6GRsfddXmXr_*xu z+Q%GZY)Q!a3-(Mqu-4$R`e{bc5F@OvqwcmuSd!n@}sCnhvUs@MjMM5 z0`gLFOOS$TNh28TpdA{ex_xXh;)ce#q|w&5TTvzJ!9Ov}3%6Cdv<443rQJgaNzfXE zI0nKa=pB+Gl0l(Ii+(6%*Jf@n#_WJ`t2aBg?Y9DS2~A$*25!ZhTUnxMR?~$RZ3%aQ zBn+OPwSGD^1l1&JVI=jr4!yqM-7hNT#2_1JPCWRyg8q*LLc5%8+eLo3!t(0F#<*wC zK1U!0T0X;fS~+b&!9Il|HI7}e%BvuV!**RxPO%H zKYq))$PpcYF9mjVB)R8NrBf_}rH%xoeh0(6Q(ytN6#j9o zWQ(}4UvBrUxUhsjh|f@aLEn{DB6owSN9;NeS9iB}y+~&Qvo&m*_=Ye}0i8V>s)hb4 z!P5(Fkp$g#_m%EFA=1X&adUJwNh8$Ms*a-^ZC575^91E$xU{EZ&UAsx5G4#r4lt|` z3DbDLf#5L{j>uqG=E`T2GVHR{5_2?k$dQFVgci+_C@I~6GDb%0WF4(_!AC!gP0eRpM0uD`~SXxYJMbr82 z{o$3g4XdLYm%s7bUwYyiF&6m3JLxDlpd98OPy;ovoTdmr(hs1D@*omQupkGSGY-DY z->-N6FydpkZpj{wlb&F_o;~Z~T)P{Ro`{V&%-3uAqx<@>7^Zx67(yCc9sl(oA4dw4 zMj4adu7Rl(ejITNFETvyRH2ak;0knPQIT%JEf{{-?E3Dy$whPk*TwrWW);^vap9Ug zLf|AL`C7&VpW({Jiu+o3*?qkeb#^WQcueq+ks_5sySt#YGuu2|bvTXfMdlZ}7Z#-Q zy-e3D@xLgCC}DxH8Od@Jno?PAYyOcN^4;ORfo_YW8;`{#=>-IBZ^^zW=oecfAj>Z)XK21G3Kk?LpmT#m%xZATw&R`H2lw*?cFX3n7N;-vf zP;(yG^U&qP?juRRd_xw!6YC$a)zI)tlOEjIO}_0Scd;&LALyq{HzTaKHK&MtB{HuB zC*aXYjG(0A?iUhw>5&Vt5MK|r!RbWXkvzfph%!lyvIr7N%&!~Rajc3deZMr)C?|?) z6vrTKb^y*$?X?Gd!Z`FHK{i#C+lHi3?Z#P!a6`j0y}wmbjix@#oWgddFR7uvKaR23utqS@QmW9@7J&bPInarL>MlAwQe4yUwGg zd44#)QMSXMmK+7Ip{p}!qtY!?{CQ44H9?f^KkiS!vYGIA^ZO^jDJTe|}F((U#w=@4wxN*#X)^ zCN72s38ItSPndqfFeA4rW9oNM%85Y5_^0~z(W1y`W!&(i2$W8K%;!IVt%KC1PYa?K z@Imgg>$Iv{fQGx04)1QZw~)l(MxaW4E153Lp1_>dK@&EARaT=MM^y?X^9CT!V7QSz zlWr&sQ$-mL;W~F;rye%iE2%ckBYL1H1e*x1h8Mh z@q?%ZAXoj?uAA8g(nU8Pep>2oAgOi7daD!D04!U{7g?ue>%{h2U zFaSY;AfF@?M#HR-?ts9*N|a0_#&G(8`m<)tFHVDrUY%C{!*9t8G zLi5AZNFIuWTAn9ujw2Qh!}lB4N?@Fo^+r7C)I4@n^?997aZMD?q(Sin5MnS44iR;= zuY4VTuH*+->^RyHVL2WAoLHD*;upImJ0IvUV3N~SMuG=+7GiBT;CF2*nD<~)S_?=d z(#`-WW`EzXDlxmQKg^tDm+Wc;c}mJlK!R|?c~4z&J)Euo&0N<|dQW)0y#>SKnudsC z%c!O!mM>qUoOfK~VN(<;0?It-OF|@%@M1*0@e6XD%skYmw9{}{123bH)V$Pq38DHfl=asT|zw1D+Foz%ob14)#IfAUD38hn}S_&R>4r0UfFD z9}a4r;zTnF&LlGgJC%kNLQoNW_d~cvHgjH!r6YIyPlS6t1Y~N<&9@zUq~w{}E$%t} zA|PzTxnO%-EQ`~h!BEw}o(4e$FobA09?Nr<-BR2gjxJj79Kj`+82mZPsU*#5WqI;< z&P7;b3xg~vthjLF5Z_U0oTQyVV`&&guMpq>xL{%NqbO$gc7!l4_aGu?Z#4Hao#RF9 z3XUcY5^zkoVGBQQAD;KV30a2{W;@Owj#B^TdKl2pHnxrYm7c}dyB0xft-BF&t_b1K z6Qaus^Q1d1Y&^pwQ#2DL_gjAV|F};0LTnjM-)A8nLSL5y56A+6CS|g4)o?|h9FGxf z;UrLD-GTHGl2UM=0=)#GMAt`f{i(K}u!EIQ3{E1(DN7tHH-hXj!d;REP#%dGIO3Xi zDsm3sUNX6m%7ITsV$$qcm`7HtXhG2nDUDBOV;C{XpQf#Oxi5jrg8{7pl#Qy3zoDj* z1WO{EJ_6o(&+p6b3e2BIuy~Lg%KD^mwyc8TYxU48p%FHyR$RfoV<;_g2Nj{UQql$y z=ahf^zoKsL2tOlAP}HE{iciUNg|p6M?d`!64qE!Nj7adKq?pCyC4M|xeI&<=?mJr- zk#ZOuY=Ry6gt?vP8h&RCRLtM`IwEEflbU95U$d1^@pAVVG6UU^pS-?1@L%;ao6jfR zzmYZE(u4%SfLv~a@$v7V2DcQx2b=<=$AdbVuXbcw?WnJ*aFYI$Tm%3U#G`1dWCh@O z*>n`P-mFK(v0AZaU9&8nYq;jr-1K=_+35q~2BO0lsZb%br+?1fz$^-1b8IX4EA^ui zLw_)*Y)l@L26DCp^*q{-5_C;MOSDk4=bb<9-y``8}j7d&jy0M|6q?JtFWG zs4f3&160%a+5Rn9wSVojjPo3rk~X}ClWHsRl8x*Wt0>4fG&2A@+z>XprwG*vtv7G~ z1*9IzrEkATR`@LmH{E*2deWrqtdYOCpHnSZNo#=mSaln8Zm7BHR}tIMBMFae_?e)u z_>y$s5bg>15V8gcJoTDODs|JfOWpw$trXZDoS1&7;Wi6S5wWr4+^=>(TqiF%v!}_^ zbs1FMG+rh-rDXT0RgmD9RgVEv(sccunL84s6LS~da&gDl3>6u@5ZqUwgD8v4%&MbA zO}Pze0Jv{@me&HnS%$j^sRgwnKfBh>BIoe@iz^fYET`GgSBguNZHSJ@mE>eu>jJ5y zl0_N(p%aM2!&SSc1rO)rhg_T$x9FNFyKr;C6U_A zBfv54VJtIipdM^wcX+t!(J)$z^>l`!Rt7ATybtO?ej)=9@0O(%074gLRvinOO6PMI zil_!@(2~Rk(5kE7nOl#)1j;Jjj~%?>xW^xOE_mC%%l@t=_;4{ygI@@d{))4??eMSk z24`P-j=Pe206B3o)v=`NgMnsYa@A|+W*F(M^bU1(^GSF8*)uuiI4h_M=IET0qq2Mb z*tRs$TV##21y}`oYRJOV(&E3zXp0YyJ~5l&M=?u1Yd^NBVDvV`Mma=BehMES2xbHq zTk5{>LBWFVAJX8Uy)79$Bxis4jQtO(52gofrlu<794#n$uh3eIL?_PQrLsJ^4q$%K zYs$U=?84z~3c?KWyN8XOD6{?)n?W~(p-DG2V6ckkAR?UhF&JJ%4X9?hIo zkRzDnNiZB&_cWD`@*)hH;wJK)0d{jfO8Pg3dN{n$S84L!?xe`mAB3S7FU0c_CMVR3 zVZ625E<|V!7(k>9Fo10U%8C~L@K0+%n2NKqF^uNTLL^O$MBs zM!_st8YkERYskb{^a&lfTN=KCi;luA#i*g(7Ij$aeEC1JYQ$SU`f+@D-6Hb0+A?IK zsKg%h@8xK7r4jyYa6`4Kxq@{)Zm5SK*e%a`gL1h0`v!Y*3;?zcCOO`n5$r0=3f32D z=@pE2!9y)=4tGe>=#m3FgA6?vb(-Kpf$=xAeLkgr7{Acra^qBN*$?9AI@LmxSQJBFc;X<;_Ia6eS_he86#K(FB`HUrmV~9E|XxCsJSo6ON-A1cG z5805{S1iv_#LMsg6I1|tG51dk_7`SIj{OD(N84#n=rI{Y`&;D5%56lz1iZ$NYIa^M zLOLm9^n3Pv9M%6Qzj3Ju#O}q_aV`aK1y=-%pMnj2yA*(eSzSQM#fRTfc|3IWzLBaA z2LUO`Ei7uVRS&M8kt_b8jid0tP(+|cPhdZMlI3bxsP|DwGkp}%H&IdW4QJwl>VXGt zhn8lKg2V&UM(NF8t<7ttSE=` zLmW5e0@l-DHB8;bI97j=(KmmXhF;W)$X!DB2R-@lz9({CBRF+Nxuc{uL5~kH%JAVS zK#mRx|834=k@ zE9+UA)$K`y)l2e!lKwmEmPQ@@D{vZa0RAF_HGV$x@OvZg3UqOb+PNzvA3jN9g=+l< zYH}$gmmTVT!`Cc*MGjdo1xb7WVq*N)bm&odj^R~A^}}Dd)K41Yh~Iw#L{69W@7h>; z{{5gu0E*XA37}^re6Y*RR9YdjiU?;C!>NTXj=tC+g}A`z)}Z^gqSXZ?4QZTPh^WkFY0MF@( z6N+K_(9OK57cmdH;O4q#9PT2bp8~=@L3L8zcGv$HO6wLwo^pC4PKeoYxB8AP1Bf^y zB>+-VHd*1u*GiM5rm1({0Q1}?U}vP>|NS41lv%>m zqkoM%=f}@2^qX-!b~ocZQ2#@7!3U5IRI z`PnE-p4JACELB7%ns_`MS)eS*ybm~R?s#qBVGJLUIhehQ9;uY&dBQ&Ueh11^Bp-p@ zOL8Nc z1J?d7E`xH3J8=CV=SW;bK#X&{T9Nwjqd2(~x3q?&Ha?P=k=~m8ygFrCUm+-Y-+Sdw z7F7O$Cm^McTL$C={4*|6@I@|y%?J5?5?CeTFF>?bG}(tE$qDd?Hcz~(Eds0C2Fw@z zTgML=M`Yq%UuY%@E~N;#P<06%ZQ8p5iqYeZ9$)RR)(bBwg09TSRi z@=pICP3Zr~TymLmGK~dM!F1C-5l)|Evo6LMIZ;6>8E{XNYZ7#HH69HPhH;~d@m3gJ zg;*|#{-bRUI~HBB{(2X2>RDs;Ty1=R_DuWT|3D=de`s5fLCxU@CRDOdcTB_k%G2sS z4G=GcXdBzee|gSAj!c|e1f@YUyDNtdoCzuAT6$e|*LU}H%-w$FTGB+D4FaCz!T>b6 zYZs5jOb)oqm2W*;7;~4V8A)y`)&3s3DlW_jL}0SmP9>2K@r%ujYtx?Tr|7}YAbM{l zIb*V>oWB{+C!zgDc%h=nlm_JpEk!@o7Lg4p#Oj-G&z?QM5t)fup0N31?zrUG;LvTr z`QtsoD&_9i9~@qFC#OvZM%7e*Sy%1uBUoyl7JLtK8+=~?95mwF>pO&>rO9j^n#auJ zDmL;BFpmBVxa=`OdVm*AN_yfs8~kG$Zd8NY$uMETiH)p9B@22{zJ#P0Y8z0A8=MC< zM5k7BCM;(1wjdK&E*(UbbVm7ykoOc55XV#20h@zqFYTpmYm&$!Cosd+bxdkS3EK30 z#7a7h+t^;ml_l){0S$rUAYk_2=?OfUwjhzrEnM0dJx`>AIy6g?Eo8cO3tc3IA#sxI zrSh>znOA{w@_pBG2dA!E@AtI;nQ1&`$)uupn754^$@cVozyog<**C5PeugcfgM3T6 z!e6P+V3!wH^*0iJ#V`5`O*OcAhDQMN#Pua<#}d{El(h4BaQ)Kp7uNV_{RXcOVw`3^ z@Jhi9j2a|BsBGck9uuO+za#fM`;@bw$)=kN9W8Fy^u0Akm4}K@&hf1-pkmmqvh+cZj1G zJ=c4Zm?1haX|&-87FJ;DY%h*?4Q&j0-7 z>iU5ljWo{yi_K2ldg0@S)LWQ28~QqfXAU%&Q=~|Q2CnZzsfA!F2WkupYpg_erWz`5*pUOySIm(xF%*g9c2Tm*yp`#OPV!hJ+b;}S! zxxi_LRQM(plZK0i$8mgHD~Yc@+#H}Jc+rLYo0c|=X~KgIlw=KUGJ{JkO0zOsvQkDE zRtEaW;KRPI{U*>w#v>&31Hto(Oj0K;_wErMpMI`j7J*nYMZY-Z!vwE#iESrmU6V&A z%}YhZUp=4@lo?)24M=zduR)Do$Hmu~mXz7UlSUg-n4qQTX|Kth9p_ofxkrxAIKJu* zhxI)>e4R5nz!rtBgv1bZdab+89hDe(2j}nCRv&MRRtmV`+uuYQWw21VN{(dd`SQ9c zThgjU)RaYm$)(XFcsOxsvL%}-mg7yWa9CxYM0N)%#p7I(x>XyDX>5q}m2}K8HLwJ@6 z+x%0@oXIj6Bb|N6*hm$OX0aST6JSoz>EywEdr0m00hHtuW+Qoo41T{3)+;ikXfzBS zK~f?L{~9F3lS0&zXryrxp0J$vzRAgXhF6PCOfLNxee=okTLd|WZ7 z3W1@gEsR^3aukz^`uzx1kZM=>tMp@A^N%vtY4?vVr@?EV#YD+RbTB7u0ay@#u@MLv zf8V2HH!8(>)xKk`&@!lX9XBMn;6`9ApxmeLf4Rp41!@a!gp4D-5dGy2cJa#_(giPA zj>1}cS>Q&eZBBh3041ENt$Un7eJE_0mkh12sUA+Z;JNSqQc3EW!7(v-lfwQFfCbYi zO^$92Jl;N|os7Dlu#aU_p4>PqYspq$=@F1qG60aHiS!=k$4re~{qqBeEJ1eiBD#iY z@obN>eAJGc8n6eN)nx>=@^L*6N`kQ^Ha-Zre0<_i$TQ)pe)W7|`bw!`9ZWN#wt?d|Y40u8i9NGXfM%(E4_NUG) zHH*?u0VQ6$lT036U?BEr*b>&_YA_B5&#@ZIMlm%+8fFTdx($_B5*zLUIbXw^dmMXm z8>kIZ65Vpd6)>AfnvxbmV9{>A=dFi&%mEGA(zK7-t7`CT;O9st=hS_JXCvoMui$R~ z6GUKW$dzkIMGXr^5xN7wvIV{l)k$#4G5$)y43zCHU256~L#L2Lc9Ls`aKT*xH1-4@ zQK3p&5aqZ9w)9V_jmmO=jnTM>%5xr`=nW(ZjS{<=r z9>NMf6RWk@YD(#mtRlDs7=c=UH#4NOtUL7`O03Lb8vWKZ4|lt+eJOvGTU(9OH@Q)Q zza|bLD&e1H#Q-h>z6~f0wgi78v-_kFdoh6I)s62_DuGO}pFtPEgh|YC+!Yt(jL+^` zxUUnOG%`pXBFN$BvghU#vao!t3AuS2xSKhGz@fv(u<=))_Gx=%gtLzZl5tChu_ghB zxQctUL2gCx^mqhxTK?T2G?EZp+E+t!CT0R*2CxM!JXI0oLN>7)S##!l3KlJE#i=GZ z=wyVy#8{IE3Wy5WoAd&bBRqbTr4VqYtA#8l1QR3)=@}yt5DaqKVy2Ehj~ZW$1Q?0* z7-3Pn+;xPFDK6h}Qv5=u1TO1W*Z0p&*j-lZ0(Y>6mVJYU^U|@gOdA4ch$qpBvn4X{ zw{a z5st_E{Mt)!D_aO)D-ot1d>UDF<#l)e>9##oq)=6hnR%gV#fOB+4T34~lJ*8aGJS+7 z#|qXYbV(v8(CvN;sb4Zf>#M8J*K6oe8d^cRE90MjxPc6^V@VSY++OdRwa~DUy`xP? z9FT%8p-PxxViXhy>9_TM_wkdQhOmxtibCUn01+gx_C!n8fK=p2EnCEmh4a9UkT3ug3&LFNUyD{KPTJ}KUE10??PPjsa0VzK5Nm() zCs2_=S`TFo4tov#O+Su2zK6qlN-cQ`ImPVNbXVHimcR5Fxm_rEj(Qt>Qiyq{N!f1P z1U=yy5x?p-*fv-dpkH$1ct+^O=1tCwv1WWh{s$-_>jS2I7{^G_((a!4A>%1uUK}Cn z{_AeDAww0fI5**{q#md~p6tFeni8kiP?8zX4;vTs(KW!rJ=CE>N+f%jrBAPayP`V- zK!~m2Q?)uYV7l%7^({j*I6#uHrAZOow=ji6fL$$)VcL-ez)us8r0oY-MMdfx9$J6d zP>#Y@>(Su>`$@6g_;8Z4v< z%E5zcXWjSMWr+`8fUtT}D5L|R{DM{yI8c+j`@1Zp5D83VxZ*;y%$l0$8;@!K2KNE7 zuYrc#k75}T^#H9cE*}Niw#No8Vz|qY@W3AQ!a5{jHZX((!=bYh(1Fg>bg9g7{ZtOq zdWAp~LjLbpAN)e>a7REuZ2uBiOc_e$!(o(`-7t4Y@fy?^!zFG$DG-tBnc zIiGJePC%uL{9c3iB)`WTjbYH8#$UOj!0%GIH zqION*-tM7xej^oUnh4pz zV$BV!GYMe>9{_XY5EHOnvFs?FmZVRbU`h+iSrqR-Nd%KOPS}YPo$Mn@4^Z16NgKSF z3^?W@djD{Dg;J7o(hZJK4Q4WEcfxB)ag+{iUcJ8iT#yFaJ3JdWca{%5&j4Cb zF|@04%hK(}?!<^|3K6**_>=!i`BF@990>;_Jm66FGw(DbKoONw?t)E}eyQV5SqjBm z!zj-JMv`I|SW6p7#l^6~<7zlS*UfP%w~ZZaN&o;iTwfR8{R zHHCYO@qRC^x{r194Mie2H05;!_H%acZ{Pw+0fK+s!{d$u9H(^dW~*3_JQ5OC zkibi_lSc8}KhmEGBIyf3@H1~4SXh{%f|^0F-n{efm-USE{*&sB>$&I;W8W<0wlYF! zkjTKe&BomL;d4tv&qL4D=T^A$SuHTwI3PNgdSKe&=7!JCD1eB>BW98GsnndT6aLr= z+m@qz6J8+Y8Zjz-9awh+cA3I!7P0KYpBkEzH+AcB4^Td+Gz8}*pbMrHxTa7uA9t@b zy|Ys#q07IpRblypnPc0!A3Eg~9;rfwCbZfT&I;2gR$RyTWjiy=3f&81K(WBbBH+XV zpDHzuy)H4)24bLLjm#?0X3DsbkpwTgWTr&X<8Z4&d@Z@qPP)r#P(Xu=PiKl;Ze8j7 z5ZF1pJ)yLqx1oUKxrpd_4<0h;E}Cx!X4OntZ$tmtCR?-M?u-DC;tmNh>mfZZWk`+* z`jkjXB8+U$aq5Ey!1EI71aea`m!k0CuKl6FZy!9ZDwsV=$m^g;fzU0Oy-RwqOR~>( zhk--_5JX>awc?YacmmRPRcFJzKHsZ8G5(%V_9&ypO&j5l^I`yO|bg&n4Y7}^xR1jtyrnC!d#cPZ3?%cYnG1t9r1ku?mK-ZERLlb;a~dI~!;YgxKY z_<81pGn#58I`JgqX{^!9UKv+S` z(3pXhDpT!%5bnds3j=4Q5Q>7%2yX#+MM@D?DhN&Hm$OV2;TpVppNqf~iKk7C%>aAjZoQD}E{LJ6I*U3Z@f(uS8rso;$$OdwFp-e=F!ZxSeF^a5ol0b*Jo!)E;q1sm1Mrdc2)+jI5xwrBqnpyb zw8pGUeufK&Y9!`q5H8_@qeFafp{00c8R|-DKxcV#XF39L9|$P7P;2@DmLl>vCc_T% z=X0@1wAaGI4CJx9;Q>COe%XN6Cq=vwrNdyMX&5v@xmxzyh3-@`3>kyZ2V@Vv1>9Xa zC~SIdmD{YkST2a~k`Vzrox>5{6&RX9X&(o9>h+ zB(+Kv3g~s@0D`b>;e4ZJ0tVNHa8iouuaen(kR3NMOd45$Q9_=Q_#52&^)1;7!R)-# z&Pq%}?6C329-Xd$zF@V%i{XHGcZ)B^nb#Oqs9EX!gDNEVm(TN0A7#%}4!2JtLkR&t zU6jzDLSMZb!)olj(U^w8t)Bs8-qz5DP_He?|I}nJ2IHLBN(~FIK}&H(t5TD=2e>>H z6r}V8fwhpz5`AVG`KKJh8BS<0_5SXTR9H_Wl1xC0g-U&fe00hBH&sizi24@+ zNEDy`Fll_I&d4SQ>PfCDXKsmi{dhmHTq>M<90C>kQ`$@>5;a26z zDT|3l6|$sYbNooQyuxUArG+{X9V`X>v7?p+njaZz@+!!~QepAe{?OoL(3MI}3Y|>= zE*S;5ZGGA*l9k3b|E^uNYl7Ib(IdEaEI0N06&w|QbekBQkjncYaRD*Nzy~QouX&0I zGFQ^=fNlp-zk5O*LnGb)3@2Tj;w3{Yf}&soF^jXH0W>fKC*19C8<6$jQVf&*5;XMG zw6antl#Z}oIj9n-7s*Nz=J@-ZHui^4D46h#a7VS^0n5Bf_yVO9ETKK>6Ux6Z!)0XL z=tIZb+qiN5Fv`*nZ`KLv=yB(?#3{4 zqt_s^*HUB}+*mg2v?Y8Yv(Wc>2mijI|8ggyl0VsR?5N?4vPkq3^y%+j8&%N zjC`Th$SiYB0mw^Smx_)x7%7PG@Mrzidb*yvf1<^y0`xI@!7OnUyZp6_4pb`WuJ(YB zd6DZ-l5s?s1aMc=0Kc)<@&FBHYvBOZ0A(mZuW%#H%+N=K61S96sHXK}>annN*p%5* zl6u1fL~{Td8U5aUlbE)4taC!FS*>y~bx;8yRdm7O2Mfp_f1ryG!Y~U#{+;Y$`1o{2 zlw}UB2{;gB*WBX=B=p7}5U^o}AFbabJ^T|+9Lp-Ql*b z#lW=)X3?ca30&v3v_m8a*ERb@VGD6A>4c>>?5*-xO`_ge*Nk9}y?w1jPmC3>8j#*@7RW_5r6INH(}f6|`&nv2MHO5s&ucJ55Cl7_k$V!5zZB86uoyPA$#6fGy-H{c*2 z-&q666vglqCcq4cTNOSw(;-enoTv)Pu2E{&lE1}&7O%Ynrw2zTg}N4CjJwpVRjyFP zxNuFN?+GomOEMN93|@fJ!*2YDtnwl3(>&&b?>P1V!Ng_GRC;NAhD6Hz}B8N)-*6 zB%5&YT>|V!0*0+d24yXfn6vvA0H$zSh-w&sYB!>jZgY!lP#x{RMtC#@XM|wkw-T50 zi@XnrI)2BuVk^TcPg$w@>u>L%uK~oiPiQ=X0|eAG5Q-flfpiE`PZBhRwA8>`z`op;AeC*v zrFU6G&gJ@Lj|3rn*#f6w)o=;`xv)`B(;DocHOQu4V)pzMy$kT{^ytA8Nt2-3n92_M z(473E(=zzE4?SOsk}t0RBC`~cr^A3pT}e#iZs=^LUs`VcFGvs1z6W`Hq>o8KR&bU0 zVb6NtL6rqAD0UFJ6QpTK=i5a52V3Ymg>X{ojYP+HYZ!2Pb8xAEHw2RhXao|a;OQ@7(9EvtgB+*`HDFk2>?vtq zp(*b;gC113cox&*i$S1o6Pah4N@gxSfyevh_Di>?+eEEUkH`!AX}T?vZjjzffI-x2 z!+&4tVnK)vxER3ZCA6Kbgy*^O_l&2FGUXeI@G4zYn8bw^nMTB|$gCg}MC`H57 zn;IR@`s(HXBscQq3No`W(?MW|#Ek!Go6=;DC?v_smiQY7Nd!phDBI9`4lR=?UHF-? zx5Mgq*3cC^hhld2(;nx>@1Ax20_ ztXSkzc&lWKQ1#O9WEY|QpeeQg+7NkRKTcQ+5P3%;UP|QT;r-j2CC5}z{vDT0 z%zPSzE9}zK{E0z9-Wbl4RE7R!P|7fGoVds(WHvy=1Oo^yYt*FS2h(%J_49aCuy1Xc zX)FNH55gQqvpC&gdhH_)!$l=`a9xcr_`_o&gBrLjoM~Y0K^ViCtP5*U`I?FW(^F2{ zXuaWlq!<-kgY+$>92#hwZoNO`>TAX2PyX*-?d$9A6>TaI_e#MM{4IRv+m&#ov- zk-|iY-VN#8(O~{xE#!{SiX) z1mE_WT1@w~ZsfotNaqNm5CH_cYjYdsvcf53&c2LY2~E? z41m;rXuvx&h&c#0(&TFvO*imjxPhb_g4i%K($`c$?{i!#S;#IjruUV9Q#%~tJQM5P z?{6i-gN6m+yiE;e3IelWW_p%J@jO-^+B>6Yjm!VqM$y6-jF_61esv>K;n!qIB}San?H8GlZdURCt4|4K%&v zJ*XXI{=(xaW`Qi*CLI;Z{_@isxG+%t)!EkXTbL!1SAb5H4#8>z=n}!b;A!NTE8dXG z-F;Oi{>W4SoK%I(8b=YF13=74x9aDRw+QmmVdpeAA&YdjwHHKN}%|16Aqnq0@Sq*G%W72nCB9sBj@B zl@Om^)>x`~;IxCu=~q{Bd&s-}{zmi!XoCPT5y2*2Lr#+gE88AG^KzAiDx>P>FmQ9u zxZ^CAWCo-x`q6!sCL}R%{Q|;n3*#_9&7+`mjpQbcOsSwH!bh=(;0V0qCl6i<1^5rl z!S|ma29f-OwTZz(-Z6SplC0{Huba>%4+!N^Y0{0i#}&<|Lf zg1OOJQ_;Z0dvkl=(-!j%fEO}Sy&FWBSv&5MAJg4|1D;d1-U98wJh@x_P-JS7t@T^U zmz6ktkOC`H$WtI_r#%#ZKb)*EwM$Ft?E^G1Li!9Z*Xn2e(@Xh-_*62o^2h95wi5mx z;^vrwN{*)-jw)%!zVE%#nC|cOU4Yz0v5sB@um->tDsskZBv#go5M(H96)T~Hgd*R8 z2#-!o#0n`tVVEm2DSG2Uw6Dhz=vrxu*9M<|@tY5Gi&K**xQ28x!8*V;f9E)wZObda z7b^}(7J9HO*1C50o4ST8HV9|OMp36II)XT_YNCCJO$YPJxms|pk}GFDlgVp@r2ugr z%K3wz!`Szd0Z9qYh_;7_6hP*GObqhT=4=m@2o62Jrwdt#qh#9t_Sy z#F0x-{e}ekmH5E07!cV~lt2qF@jowj0ZNs6v8KYJPL7Ak;yaK97da!*tap#&CToVu8AjfW$UaF) z0>x?gEr!MyJw+i;q^(X4p8HFMEb{_Ol@muq9j!uc_#bMle2*_dA|&aMent>-`#TqA z23R`Jo>@dKR354kF_WQObPJ`W02m59_muYh*p3NIdUT-t8bCla->aK{2?9sHmYOx% zxM+(P{fJ_&G+ZA!SAF}^vD9QI7g_$Kg{^@s5FHQU*Ic5Y#7C3rGfcM!p>I**7FH4N zyD&?^Wx9oJezc01KEy=i;JtacJ6jf~pMOJakE9>=0WZJq?gbG2FtarD zi;feDn46|W3!r$F&Xu$_cu3;?&;g69L6VUK*e=#i{`s;}yshNS%q;*ajD zveopej!6!J3DlsZN(7&4oM>x75;8>*z=@V!D>N`9kK7bl%1EbZ2p~M6YDpzT?6bu} z0<*w%Fzpe#duiQ+xc~wrXieSM3sd8I1llPrNu}2}EmD9ppTd5`pOx|_@h0#`-S6b) z-YB3;wUrLjoV+}6Q#X@l6hJhM_pNOX3O%oJSH(-1$a3X)VQm5-F9M*EAMi(>Hb4;) zKpPx75?{MF&>Jqbx`ia_pym-OO=uNqS0vo*{q<_|`VCZ(#@2!WC>Y@vJ6y&R9fU3- zH^3%Dn5XhH84xO8yhi#3GU09okS7usm84tfG_3%7I0ZqR9iSPtq)ShHa6g!Z9YAjCIR)BcN;T1e`CA?xwGyz#IbL!;9nP+s>8 zq)EB71gN+mFxBv`dOo{0D~DG+8K}+d3|a6#N;B7ZLb3AtrUCuC`>c%7rXmpRrw;x; zkv{~TM6ZH~hCI=I}EK2QYy#Oq;mpXigsQ7zQeppQg&&kM!R=Y2`t- zfUGlet#Jd$D{#J+;kDh~!AknuoiNGwWmkC~Yt*M|gF)iNhEimM8L_j-Hqj(h zF(tJRbW~7rpV}%rk%m=>vu7x^Ht4OBVwGng=G+7Pccn5{Od{t9EVw|Y{VO=&fgV|B20?J=qaMgm*dtK#Dmce|=m#9`)jqr=uOHgMAP(ya{y0 zIKkv{SzP!>@E# z{-VcMsZ<6ST+tII_=%_$>vHVR=Q$O(fFN7G)gw;|q}UV}m=vk<_5R)cY3x z3yGEdAJ^BrgH~k7Mt*_KSqdD~1u4fsUjWvw^!FIK4=(dKT3N)hSU5v+5GadtB6+r- zWU|#bc)Kott9Cn4-);j8D5@jic-ssG;_wTHj6U{4)ri3%I3u=5(uh?fJ8|s>`b>k znlFOu6r^%TIZH}f;k$%M3O+eX%V=P8l%k9m{@Ah6!}Yv50{H`9u3PWgvj!ACZz$J9 zaxbDeZtfL|ckWHJH@&H8Hrw5+YYi179q$bD;n3BgV3L0!E`}smPIC z1DXT5m3x+PG6uXwO$Lg3!j&asIDwHmfX6{(zSv}H+D-=-aT))qoxajp<(sws^5Sw@ zrN8|{c0=*|=l`F&Gh2?^$h!5*_}YQFfJ+b3|Le57?Xc{2#JORh3Mi?<6v<|h8v5za zw{~U%i2}eX%9i_dM7K2&2_TWVa}R5;=fHA9o`(1OLz z19Sy`6@3FI&vSQsINshA(7C?xtbeja(A**-KtDa5%CJH z+amc&#w85z5`|h5gX!is3OZjuP~vi~j!*s$KQTak)B3|b=I%;P(ECxO2IjK{{4Jp{ zWL6u0D`&V#T5f1lzXsC8E2Fl}=~5!*15|wagDiOvEvHelJ;D?_CQF4=-GXugG+Lt( zPE_M2FQl+lr9GW6~zGkVHVDkAm@T4~iOMHGkb_>e9V_++M0nCrX~y zH0-oMAoc-PflLzOc;Oj_m6T@h+E3e_Po?I@Ecv_sL`H!>=#Vv(2Fvh>Y!TkC`X6=L zF>Iy67E}oIe$#3dR*S6RbA{fK>!>JpY|x;n$u9eKXCpb}<05%o)qliDDpDp-0mhuy#qNLB8EHEm>~DAm zOdry%S-r~%qQWzHf6qtji|ns0f~z$P!3Rp5>}Rqo}Mj{q8qYwP5px@ z<2U{QIo$l*eu$rT_!;?{`Z95;yQJe4V+G}1Mn9V${J$%E*QGU>CCn^KtPZc>mN0vB zgR>^OvD}@y!zL2AEckI|w0w65RZq2dY|&+*D0Tm3u1yBem`05H|@whszM0_$uL5OxCM@YH_bwZ%H6=F|e zpub9)i=-I7EUp_|FG;w$&Bb#n)MxWD08lqD4588hwNe?j#$PEzFac$t7sLvnIWYzD z7#^pIxjpRLQ@yZQ*tJZ(5Cr@Q8|HrYvcjhdbyWRI%}ZJM`S53xvxp?z!tJdIDYioH zCoZ|)gv8JoIbjcj#u0i~f76f%Ia#k$Ll;M`ek)Gs0qmzw^B{Ba$5yFZ5Rn4(Rr%?b z(IHnTg=$Ds5bAKKr=kL-+nycbHkj``ax)-Yujo|;nV^cGva|<*K8gLD7G*dbw@F%8 zzy&Epqp=h20J{(PRWeojMI2PPS_X)rMUWJ{m}H0A z9gj|T?XDoXlA*z!uMCFfc^Hgz8kLsot4^eNTn>|HyP>F?v{0E(FMp1`AAJ522pP0^ zKsglM#_#rYQ7;Ak@g96c?>r0O@N})x;DVOqE)4T@67n`Af&mImSr4tCs z>3!HB#_pfq=Yd^hKWXyu1}JXT^i%^l1N{e=!1+i2;g!0nNW5sL=fJ7MONT1$8 z;p*|>?h(uXi~oxs?a%t?_TkB_LI4gw0$6q-)BF=wE=}v#5qY0M*5e8GlhxEVUC&_L z%Lc+F)Hx=Tz+yVh^7B{rXbmP=XnBsTD+|>Ku2`9B7=n-G_77|b4KwOo@wfQ%Yc;?eoBa-- zNcp#L8@Hl{Ec>5|7S4OnTcoH8xak0mxvBG2AzS;MHCDg4(>OdU7~Kxb8hXjIz6i#)w>o^lf+rpSg(g z!Q&5nv$ z@t)Hu5BpydMzx1tqmiJ%@Hq^RKYqCByCFV&M)6YNs3xTr6auKN8Zjv%A@)Q2L_)U< z>BcbxbjqX4f=?G7A)&rJ*BKp7l}bvU1dS{xx{Un&pLUbZ08wePe?abLP^PBERc*^V z)EqcH;y1J)_XLmN6#-0QWuk@#Q5$d?Y;jlbq1KHiiZZ5moGOlhca#XpuuI8PO!)kI z_2&Ne15*v0ZC4PqQJ&bQTR(z4q)?YA+bw`LezK_O{XxhX5(Ri$!lZnr4xA%|BsZ-` zfP$iF3aGTG-G+g^G4lIs!6%vT15eZ@wlrgG)2c#;#D33h2t^>{!T4bX0fD)>(wlme zW$h#>Uy&O-dVT1fG8zp|4VoYMCb~r2wzlK^Zet5_2fECVc-WFH1sM&ihTFrw;5SL- zL^i@%I@`lP(FMs7tmpQLNxDa9ODv&s-e7_Jh(U_`8323%6CYvbcuT(qS@VQeQg9-} zfO>}2v@&#;z|GhSz?Vra`!(hOfhZ2mzk}_=miiBx4%3D+XynO#)yNFc96Ai;?hX}& z>dFz%OqTgB0!q*^&y2ng$GuH>Mh}6&)xi5Wr$;-Xw+X%HjN3cU2E}eV#ko*uKwz@; z)%PhnozaC)xdU_(;h5FZ{DUK6a+Mr-@88ammG#~2@gNYN9^@KDbOHPGR_ z6BQE;mGsDkar7ilCp2=l!G+rht-Y4s<{Gi>lUo>&eO>)S2F9^$(pyAh2(>Q&J@lhT zpFjqBXwO_$R;l`SL)wPug)GP9TCCTX2!_d0028P%Q(E$qJ5I~%Swa;MaV*jFq4VHg zYsyj@pSbD@d2Q&vmGmEhk2+D@zp@c32P&`JG9|}Fckic{*$usxUCRxS8QAao6wXTH}6svBPdEZ zxo?284&@A>MHyO7O$ixH24VSWpd8!v1e>5gK<$hUM$6wTls?&mbt;`)#IayMaXyQk zHEY<^M_{Us6ps%~`*FK18tfDz2m9^Gd*XhXR+oMi=WCkZiEf-Usr~WnXH_PjMNQhW z%Eet}Pd5SONaUIL>i|CSHT?_u&sLtDJ0**!M1t3u0U_M(i8?wzd|b7(UEru00Mj4Y z1oM#x7@FKRhdTqM)zR49qCJO5;OV3+kPpFw&X?{$ZbQ!#E|>?eKY3cDW%uzk`APjO z0eXP*T6K9C6u6irFTG>ERQMB%4(T!`w14<#d;Nc3Pas{FT=?qfF127++#r5P)=RZZ z8p57#3mry-@bh$Eg!LkhoMWF_%G0eF0)xXF>0J_tH0Yu5ZnV_^u<%2CVFFC*+AyQ& z5P3FQk$MnLNr6fp3I@u=p zWHiaT;nxVV*o{Ecq}Jp{+|4v*13$6wNJ&8lsvnIR-tY`5XgLyG%3S;@1;55!9g z&T5wcx1vSay`;MpzFHkR6Drr3FzGlzSphMol0X+=S2wwI2_ohY(kb=9Ry}4zQcAii z$U4D@CJAUi%wICiG#lWZU_85BN#5b>i?7_4kMS7Z7lLf(i=y znHv}Yb=o4hS*b6G5~k8@<7vA{XX&_SGwue{N`V{{&4x{Mk>aLj^+$|USQ77oXBkik z9VrL`j!(kY1jKIjIcrrsW^7cDMQZ=NqJaSdL$4g5Y3F%pe@q+ZWEf^nhLCQ)_qloP zUJGK={J~}GudZ7t0T>IOuqH3Fs-%ICHu?CGymuWkZGk@0?L#}rf80H^*OUG3lC<8f z22Bn&7n-LIry3*d4k+h(*@urhp||}T=x97~moXBu&wpy^UHYm0q)OC$FW3)5D}DR% z@BOcaPxkE{B}o)wPB9rGUghr_jNg>&H9zUQ3N~)AfNDv5CfDn*a~F)@nm~|s=dd)y z@fD0A%HZH`2-z;_(T3x$sTeca0+9% zfh8lf<39K0?WoX5Li4=iEyyeap^7%g6UTM-;ht2H&TF92Oanr0Y%sC>){vn4QJk@^ z$l)vBpM7`xK|8|QCnZbfn+=@mIziGBabg2HzZP*&wC`Nm06ofwKi2 zrOrKjx3D7f$L{VN51_DQC>KFRtR+uO zFLovwrpX&%1pID1NmZMl7m$&%*ROqsBG})@)LQ6c{WYvA{czxs0j~`A(S{`G=FCy! z?8ELYz}^qQaahVwuJug;DGzZkOycfE*P^!SUAt3vNrJ?rPHtD>+jaEFRLGXstij9= z;nO&F>^P!HS3p;P)=Hkyh0rsY;jSQ!EX7Zn8sJxszdi1^SGWs}&xy+?s7qP<6l~ZQ zVg)1}C^h>_%{oQCRa&YI^(SFr=syvIl%Qj`H`h9R0O%{pg6Zc73L|_D8PcSbh=YTq z0VHs=X%fY(uP%9`CIaIUr5)&|_xMZi(wfK|(4Q)q!{6zs1W5yHAMC_E6bf$KNk?SZ z)kGPNTgX>GECDe$0+$%Z5OdIzPJ0)u4bbxB`}*mXgbP3#)WIfDp}G3%akIs&@E-z! z=)U4Bz&l>1FrjThd_!O1hSql+R7eRDiEV=vfC`!gWV&kKfS}d=yo;?_ zGUf~-`9vi*;D3@ddMK+|Lxy9o9uh&KsPLQhs~=z`=5idGuYUf?KzmwbKwD|ZbUq)jI^yL5(@Bnr zqt{lNw_9qeh$7V}?BOIDK)&BLIhzAd8_Ky4}K)iv>WG?R*oRIUgDx|ao1(c^AoeimtIExo%S~ttE(<#rWiB^UJP8vFwpqnV&cJRFagx`g3QPqIH}Uj4u~NK zK7DNdHl;HVr=;A=Yk3a0p~H-0S40E|1r1}`$6ABS{kib?6M^O)sRk%GF)-wrlK9JT zwB2*=%jfp`RAU2GCFnJu0On+%VUw#U17Fe`I|NmrbjUlwG@CaxfBK>R(x_oD(~v3A za17Z9g2!6~Hf{U66PqwF&5V_V1j3c|kShlHlQGeUn+YWPmHsIEr~k9;fyJQ$N%tFh zx->kWJdgmSOUsdH)BIZ=-Xz7UuBbW^7>EI}11E2`PG>S`Vd>WB2cdDft1}dJckuuY zF6j^Jlh|RBPt^_yF+(^g7XXrW4R?fHkpf7sgL);g;B>1_wfsKAQhk-60n9Frxyp*fTb zj>*PSiUxZG?FgipCUzLXDnOvo3ghbLW#Bj|KO8!X3sD6XbuLc;tT0@lk3A5Q%;kC@ ztpz7ep?wciSGdNPI^2A&6oY1y>RjZLI5*>OmFY91&mJt%bq8BUuN$17a9lWlC|+P5 zmh;+iJk9R%oX`y=Lf#Fch&IFNolKz4l+sEgw|n6RP_!4YxGE|6pm>n80MvtJkC(2u z)daDkV}FNOq-k&#rRbe#i~y*KSL0X0lgF_?5|3}CL&5_~1GOtUxa!08mlX>#@xZ<% zC_!pRNK^3hG?4AtFKlW+p!PN%qs*#M>F|bP;5%bq)Z>fb_NfI40Lwz=wT)vU-y7M%V};*X<#wH9gv4(=dqfZ{4|XeVF^yOGQ+ta0ZyWP3;^ zqcg#~?#hG@2jzqOY-A|s3yT9+{o$xXJYItn`N!=IDt^~Gb62tihLQOx=rPJDJ7Q3v zyNH=e?wmPAT-0v$eVve{I}>B3!?Z+&Zmy38PFBhkP>T(Fr=-)7>Rm;ut#|h zqr0sP!Uv+qzNYyA9=_YKlda56fyw*$pD|@`ck?8FBSl!zX7rj!tX}FLHi7Ry-)(^I8wm&g; z=igugG1a6_FmLbb%RA6X5ANw=L-#S~F!jT0@sN9kg36Mt6PrnANtPB}Qy>R8Tu^v@ zr*z?1u~^2p+ngkmX*^vgH0o0sbh5i1->C^BdQhpGt7sXxjyl1P-;s~3zyA8YQkAm< ze{u4#?N}+=jyj_D+CTbu+>Ba}fL_w<=l=cRR{6k^gcr7hK&HsBchS4Eq81oDD@Q+9 zxh5)B)+u)U#V@I;1(c*G_5Y^8VJhhS|3d@4aBDFRS;T{x2}`izQ8Q z2fDnZ?*kn`AggY5&Ep2AxUzXSH0(%Pm2iwC=nfdp=}bNgI5hz9C@6t2gWrWdw=kq< zP_Xxwn*iT+ z>uIe}SU_M4a||_n4&#^E6~71Ba)+zqO?!vFg2*xZ_lN#NI*K1GVEUfOmQ(PcmeoO^ z2ojkpzTN3GI86&7*FU}6-d+=tTGRoJEW|nZ^I!Cq8WPW<&t-CuQqThPf-W~B5}=4Q@K(HwM6odvM~`P#ZOwGOhW0kQqqO58WeRPFBj=knZmX zLabLedk(6DG*`a+>P0xF+yb$rBM)U`vOxAq!|dB_lF<=FGT0VKXxTbVXTG}wXaaEw zndAquJIZVGl>h51t!W|Z)+=(95au}{G?*QBfRKUnw4Kz~ZFF-l_s29v{^Q1FmyhKY zO#f5fOT)73hNcS2`R)H8q z%273JbGqq+L7RvVn zEh-Ws)5@X`LM9=_gcSAjR6(3~ZUP^HNA)v!a+ub$&lgBrUm)`lPN$7ERs1fH*%pbn zo?<$^Jq;91(K3y}R$1oY1y)+6GC*n5N(>BufGVwRrmos6vv_xz-pmY%JbM$ zMugQ~>`NEROmYu`PZ|bmI-tW{V)m{6<~>=4yX(V)8e+->bxEl2)W z9~Zgd-5xT@JzRdsSh#!oxpv1Z>GtKmFw1+*T;9dIK+u_`903%L;Lq}RaRvQ_ty72_ z_=_T6z|151yrU)r{seTT&GeInq4M^3SH7y-l4f}lL%SSyzW7ozbYp^rxV`58RQRsX z3m`%7nj?qHYw!3H@u*m+dl<11{G`vHf;s&&{2rU^7(sWfv+lHV7UZVM>mv-7xfhx^ z!D`|X&R7c4n;kLzgBA18KR{9 z;VGM@q*A=`*Zv2;Dp?VNXC%4njOH@`JoZ&%!;@C#u{rBwAdRz!8>@B)awaLad&J4( zf#ZH5)S@L+#tv6?_u4hjV9t;TuR!h~Doni%(DnJnmez^`IlH|_><^%%C#8^WF{_Z7 zhJk!h((Tm?h}+jP9l!W)pI@z1J7fhd>L`h4Tr1E}NJ{s#D#N}(l@xS{f2m1c+w2Bd z>LUdNNsl=;<_rDsyf60f^~leI;KC2DWmy0Oe!G!DCJR;EJst(Kr_qk~j%}N7={bPE za#+NRS@83p8(K(;zesv0WfXs~cpZI7b|2SLxhIGsZ@TaVW@^&>l{flUJ_g}%i!SKl zW+$wRajI?5up$FTu3tPU;YFVBbkpvPM<^x44o5b1^9%5QjA@r**V)nF0V5WZ*}8(p zLR_h)>&a)V(D3VlU6LPfC@r|#1WfOG3Vbbcq6|h&EKQ3R39&s&8RW$Mm}^d(oje1` zLuiE}g=YzIfCd6Qp(Mu5ds$U$LCgTvVL(y2n8B#y#zRg#gd}(f1iivkK{un<*>nm+ zD613rhu3jm)Kn)XlfE49hj4#^)4o9mYR_@72Xv=m|I~^;WRYB5U0=U{Ck^r)rWP5}cfHzx zZp?oav5g~G1e5hhz61#F*5%glM}Y2)8hAI<N>7wUTSAAdG63k z1Ci~%%vkhE$HC|CI`Il^)A(Ppa&GD*pVWgv`+Qt$m^ejwAwG$sInH)Y zHyku8(FW$VMkHd>Dqy(53Di!>Hyhf_IBcktWd0(p&{OJ4Um^sDh!?~`3+p#k33rpp ziVmRU4fN#i^qEpQG{kCe?pq7@sW{OJNO5Pghrr&Au$GLdgEqCu2o6*`4r$55J1S|O z5{Q4=X#CT^WNio z(f;D?pDVNjjF(kH(u~-+8Af})Q7JPzVib}hdsl^VY(uiDg0!LWi)}myDhsLH>U7)? zDB&Z9i=5HLxMwGe)K%2e1)qUhW4Fa`OZWJyfS95w8QWuh=gi5PH^A~5af54oO3A9j z=++*0hXW5yLIwC0N$8duCp0{EGrg&8=aMs`|Ckm7G{79=(3DA!I$sXrW#D2>=C5rW z%#jf|*(r8Y=r)bgSWWNv_CQOZ} zpjemfd-4REWkBgc=2$SLM;f{O*dFEJw$*aA%ax#Jr}}BN3pYSUtJ-o}?-Z6L5(7bI zETMY<^2jn?8KlDeiR{VPC`Nu#2}SgMM#Xl1s_4qaUlrvq{5A3Lm$~N4gaNdm1G3-M zY|3HK+~wdX_0q>O$u$q~I9`17@X6G!dGqZS#}{=yq7MPP{hK>mDLBeE3nMwI_irXl z?)a`2s~szu zA3j~nzbv5LuS+zP1`IUntb*2C#w$PgO!j7P% zoo+LjC+(RoEAYa}a3p2d5A|JmT^lMSyDcx8gs~=In+x*0&Y&z>`4&tXf?+L%4~%^8 zo^|**Pt#4ShXD*L<^+o!u9f2z_uGL5_Ip40Tr^0Livc^76sX7fTk0}4mXkPGVWpEM z0ftyXDWQFI;S8)x*Z!WIq5R*1hOYRnSZ?Y^8N%MqOVmMuu_fk({1Rs3a7mgt$JmA-OkAbG)A1#<57&_qcr1b)=Wkagn7DGKRW}|4Z(Y8beTtuR8JwG?6EGJmjn5 z>3af|H;S;A6k6auqc8=7%jEiH5nt4QD&*&Wf4tLD=Ri)7u|j}287^M4F&vr?Z$X*g z{C?Iys*6o3O%Zxep^Nk{2rebei8?=JXHQGq)JryV%ECyC{ec1Hq0?ID>~zDygR|WhasIBeAm4G0)*w;uF$x0k$vvpfAk~ zTl8a(Nr!4y`|Sx-pY2f@W-KTF)iMkAoE*>wB0CIHUx4k4pXW0j8|2^t#*j=!DG8Mo zH{zer>j@JEI1m6ts<(u3Cmy~&>!kWaRChU?K9$x+i${cM>FCKDBBTjyqP!Ar;;bd0 z@c`}*y5@G^ZNp&pnV*JqLLi5)Mg(_-cIn$fq+n<71;7~^xEe_#NF&3&)~wmoW7@a` z@(~2$!-w1Z-&6MT%O8LK?#0#X7vKHz>c@Xv{ruu3tDiP;>l)#(NTET9=0jMh5QMaW_5R|$}8zIVTt_tFXBrc{!k^GA9P&jb{~ zWFakf@tdKv*x!q*_-g%#1dK!Gl0oCUts01J5r~K-op{1Q0C=cx0weXOh}1EtR{P(}is3n@{DN`@<1P1M3JM zav<|*=|Uh$N5un23AC_%4=-gBPV3nbVJ8+xph})90NZcuK+ja#A?1Jgcy%jj$PRgm zOkpGeMM}+n*g$cZo2H&2@o=-hO%pHd$L|d({PbFX`d@hh+G&9;z%yHIiY6NYg1`H3}~CPMimQhqS3KZhmM?zCK#$h(9= zJQzn@50goL5@;fy(J-%MOYqr9+tQJQgWLL-b0%d+StHFSL0@!|6jTGT#x#;OkT}H` zTKmEYSH;kgHLX{s-@Pikm(E_!~d zSAidSY~Blrw3BYLfkz?Px3t&Of5VeVb2aiO~6{1`AB z7{Ocl2fvzksiPmi?UtEC(`HNDULXJlyf~h@=bTXt1TO|;RdDkmUJ1fC`UJwio{;>O z!Y+BN5j#_5`3wm4rUfkqe5#sW{~3j0h{zd+)FMLN^U(q}NX%LdEZ|$p3UtG`XO6p; z=l#-_mv){OvpC(vTHQ~0StNUCy#dUXsDH%YO=aB!T0v37y831j&3y?>nR#* zHBqXWxu6vX6-+8p;Ks7>4DPJs=Dx$#d)S|6IT=QG9V{lPH{wFd^V?2D*O8@|HUL11 zDo5ict6sX_fQ7;baZC3*XUfuC?@zm^{N-zN7-84R@wF%z)omEvH$u(A?-!mr&*>4b z996TGNTvw?hLkDxG6}b^DO=0>jKyBkW^||1fksOkZc_B}mSFSjSqY3MEj9VHrLTaq z(ay6!S3+$u@4DR}15s0;0FW-F1}2?q(vWK=~^vw{|d@YpW(xI7=K zvJed9s-m0#?N5R)PB=}(rH336>}&MLh2fu^^SF6aNPAki(Qw<+4u1MxpOd+#beg4D z5!eQ{9SH$9Q_pwmapXZmrq<@K#Da~p7FUp_0;6|9GzcJ(Iu)Q$PBwIA+^F-Snq$a7 z?+}LI-oWpo)RR$A*BG^G0SjoFb=TWb#aW&|?CzSyewM6Aahf~QU-aOF%ba&A8(leY zar2E~jDM{Pid=R(L`^8C(H_!g)X1XSo$D+#qwbqK$OypCD%1$ck}!xfWH{}o+z;}= zF-mE1q~i_CILfrZH`Jl@1sJR%72+S}48W8WLpJvX7ISvQ6&cjxh;9`mGW_uVF$X`X zaA&}Yy*0E~tW{Q!Yjrrs6O`8;zI4dRDtZqrp<7P)!n&L^-6-dAQikm!QqryY|zz7sCb0i&^q_{pnZx!{DSr<79AWIy-Qq zJZfHS4iM|mKtOLke4tP6JIRH*K8xG?$|!4=dz9NPQa6Qo5b} zs1Er`O-k0U;%a_LGvArC{q)eQ3=T?@Viy8wtPe?3JA0x7%Nhs#Q`Z%Tbj!zLd*#!g znmgI%K3E=7R;5&!0fi$LYRsJS(v#`J|(BQ;5wFiblp{8%Lc29o*5auw9vwefh zGvWaGogQC$6#zSaw%_XG{HzTaFQVaE{fyh4x^Sf5Ive|oG!eKC%9DFK_5G6#0Izu= z%y!fSKl#h;Ykb81K|9N_KMFGw{fIsmy_FRtPsTQkYKq@3E(#l7g2LMo@VFI-h6J6oG{k*&CT? zRki&+yr!DV0L&iSd7IYsr)HJj(#UXp;Y)r1u){v|$QoXOL^;B3fDb^L?qS`wC9Okb zL^(9y2E0S%Ix4xWqilj(%o^heqV38q3;c8b)oJNBsSWyS?{9bgk!qj^%D=dIzkp?) zI?0Y;Uwy;sdTw_Qula54AlI0nUd}v^(?UQ;+Y=$zhK(H_#}kBj$7Zn;y?uXpgFOTH z+Wz~~47f&xsUDbdso| z%r16({|U(}YumfWc3)(KhtTYP#S~^%>2HzQB#R%eUvoD{o5Zn~renQb0!z%&){0^%*&;y- zHyy`T3r=}Fxt@BYv=}Ij1Hr~Nr8fx0mEAtw((x7z^mHmJPDV)Wg??HB1^ySt@U15# zsa^j_9e8ch41#2wjU%GXW_39{5-cKGocN-B6Fq`H)*!n81x$fdCRj5zSNJhmw$DL3 z%Gk3%i$vYmz&yivqwBidNgyL-sD4+T^nL7oMshbNCj+KCn-0Yppj>a7{f}DT4?6=z zZunaqBc+uPaKSwT+z-Pg*~R$fmmFv|gwCx=LxY1;W_ujH4w1J8lH18Z%k|dg5t_|= zy}($V@Ao}B6`m2k1w3HTGjfaTV_go$%5;C%2Wa);>l^pve23r9pU++va`IyI=L8NY?($@~dc z50kba?p6(*@Se~m{v0fz0Urn*C8*Fx6fYm{AB`alwijBFsnuriae$E;oB*~;Hc)^X zDp-{ni8smXN23S=Dd2@vZ+ArRcG*ON>GXYJ90auG=s5pCW;0+5w=`Y=JC{5JJg<`% z*7{3k2q*JQrVTJSz7Fnej_(QF8P=+Rcea0aiDm65{B$O9M>I<;jK-M1`Lyis+`mBX z`FUl30({UvNa=7iA+>h$QDrMWi^tp<2G3*8=||IhjSmQ?>hvBX;h@KzPZ7=h^PF%{ zIDeTP&o~J9bfohWZ*fulq*sKpU!= zsTrB8H-gM_36e`x9bw6(pM>;}yJXU57+WK`Ei=Nmxn*zx#4NPeiJj66Nzh6qW%==z z1ju!q@~C1I207Q0Sl{R2^1|gEXqcOYA7&vv&g}1x*Y?d^Q4$PS$tt5Vz9$D%M{C)6 zyGClhm{nO^XD8J@zuaiC2ja;b*T^D-o4Aj$%ED9q11=uWxN>Qq3K#gPkr{mI_kZ`5 zRZ>~@1p-tCny2(i8i_VM;`s0&<}ic|bTg{fsH$&$e3dOoEs+LJErM9c)%L9Qc($HV z4F<}`P!uEaBWqf#66$SXsE`bpgxql`I$KEuDR9Jq>R~Z-Ae%=wl8rGHAWxh7$D6B1 zGRV?1IdmpV&ZE#SK~o;>lmK98K=VU9KPL+%xb*6Q)1+0=`f>im62jRuMnwnR4#E&f zcslsj;<;eoTpTkD{_4I5os$xRzzqdYnIde1xXR8n(M>AZS4)156A_JZYNPUWi0*R&kwHxEf3jun7^~6=p?D( zhjVek5X=;ECuy9)jKerfGLak%)ksOdXm^52pj5&002v7*)NzF|bi}-R=&dJrg%fZZ zcI!{7COQRL{Z6Jh_)htb)-rgW$oD37xaraqlfcbW{_|7=ATJ@6J7m3fq#QSS81FQw z+jzG+P%Km=k5EH`Lxq?yp1NQm%h5ubb&Tsp>2BL3$nOfh*TTOt8l$IT+MFI29=DKi z%N~z}J`-H#=;9@OS&Y%ay@zog&hCwHuhE5T&#by486w#}IvPmIcEr83r}%4qNb358 zCi=xtovFlu0#wCT+C;aK--b9m>>hyxcj}f+9048B0U+bqw7uU)6G1_p6j%;U)Z_+F z2lJnUeZ){hibu5D@XaUpnlvv3iY!;knEMu;RHXeQ`kSA|mp65w%GFY5zZQZIqd2*y@8=er%uDt^pO zY`t9H?*MZWM&cJorn7RMoXfjI1kKhjIV8YmH~yB|M*~PF<^e3oTd3}XmKq2@$Tl`5 zYEAyC+WE20>oM*2->v*jHA-?|*4Tr&R%?$kpLqR(SI$57;sQzqZRB3mTA}2Rr~7Qv zctsN;EVg}taZAIcE9SXkN3hsEjhS)4-zgshd;BitdlaUwh3{P~HCs zgy^i}DC{HzWcij7HmJVYCiEDb8G$1Y1dk_p)eI2}x=O;OYY()Z8Fu}Ade~M#B=uP_ zIPohz2J}{!o%jl(=Tc-;2`7urv?6LdNOU_28lydcnPIAiYL)c^%ZL)S2`AsyrHZxM_Re#-!P zM;0?dTP>j*-0vmrK(?ColjpE8fpweaVz9Y%uER1)Glm;rZDYI6h3WPN4pbuPjLaIm z?J1dqXttKp1qW4DHQCeJfLj=QQ5gys z`qgoY;vWFOK1KEVajSXAU0I|hmj}JsUd#j(xT9x?p?_5UQDdYtJ| z3lSCQq6Rfq;0f_9)?Ra=4hQTII5;PAf};!;dz>r7>v$AbnmQQQD}8NO@N_x7eupw9 zi<&+v(N(+4LnNXNbv(u4n_*Mx+*0JW)k9F>O$C*KSehy@*E6@1?qvcFI74zOByjhI zTmO|+1GIJa>=mT9kuyf8!KSW>{lFk-gRAF)XHd$rUKWDRt=x0MZki<_6NKXuI1`Po z?&dyR>8{CET;DQ_hQ@wvoz(H|#vk}5CQ$MV4}%4Ch!h~`l)#lbIRQ-q zy+r)VBZbCX+?OsCNV|Z&peZB0wrHYUswF*5JdEIA&fHRXpB%Nra&m2KAyTOjx6tF0 zX2B_s?vN9Mp8_3ySiS+peY{DYOkmR%2rnsl7#Jpy zLWgub<%@&{`|DgcF9P>>#o&KWxiirj-L6H|$ zXu3)ud>uzr-;%J-X$sg`YT<%S5G4VXR>qA!lpPX}a4*x{iS+FGX^OZXsF>u49BnIF zfoP0%7kk|-TaN0X6AbeE!)giTB&F0=TfitV!ZwiXhaoNSbZN(GMhTNl=wPH4Qb0_q z)@^*#XdXB+MqZrFs~gzSY5I4ZIOKUL{H3&~Z>aP8t0tAGQ**cAabV4mjogtlCHN!N zYg6eHyhpOzC#HzMGWRkIt@(nEfcW9RSMW~U-dpJT@D>6U{oQ%-h&t&CRuk!E5sdl! zpE{Yn*N-CDD19(Si#*!%0ZUga4v<|*F&W?0P1<;19FNNyKttUyK z^5qR)2B}z6G1uB9n@*oy!%l^XfW`>J!>X%XP9E#KahXa%^+YI_XKu% z?K_qM15Mhn0YXE6GuWYUwOa;5t$V4MoR%se;C)`fl*}hrx(Wx3W&#@FIlXC-i){ek zhF-I$aVbJN3arUQSOl=v?!o*iw+5g&YxAgJ)AR_P8K`_}+R@wo2VH;?{y?aO3rr%Z zy!fFm${^QH?#p$xqW@WvW2Y{SHSF?lkZd%H zHwvh&H50oL@{JS##;0D4LpE}G9v(D>4IL_5&_c8e3ES^39Gae}EGo73>UJfXweXyc z+@nway?)Uo(q_x=7@Hn}Zby?m4$QU*W81zJ(uP_&=z}Mk?gNWy3NvtlYmF0xC{&oj z=WjGPWnk|q3#8VlaD{QSHzujc#HA*`y}i9Ijvve)1U>>d5I7{SMbzde$z|reg}Wg; z=1Gj$myX5gLi0w_r^;aeKqv_$f*;+cNvsWN;__|3@OvLN;pXljHph*Cpp}x6E&DHo z$ZElo!9#~fth3+UYSj|(lXyC;YnnUGnu4<6tCB8;qLbpSAKKMA8R0Z+lXNd@tA2Or z=0D)*Ds4|ahoWpNqBJb;y?q(P_Qez|*p29X{(G(r&AsS`0NPTpY+|5~8JHQ-;r zH9AQHvxc6w5!*@{bO&#R-Vzow${#I031CHkn+eHV0Ii)sxGvnSdsrxQ8jW%cyOfXI znd8L;9?LDs_(zG#%U(~YQ5Ibr98S~$Cd&hw>8kQcy!;g5iQ zi{e%EFuthjrubwp&x)$PA~H5{gkn$tWzXxXjdSHWj95Mh?a?F65wU~dEj-2--RL2S zjocBGCcuw-a5ZG4>}#a+Vr4~%6AVzeOmbL2r$A7{845-s`iO)Vm$bMKuo7S&6_`WO zRFmHiLp}eXZ78Mn)W)e-;`aD)yp6%PQ3rdj!uvquQG-Mbc^u*$l7e*A^BCwI#P5So zSJPT4bn0~qH2#KGyz8O<xbhGwpSpvHHngV znM5+wL1gk3q>MNH2j*|HZ{U8QKGD(787`a>;l$8}lc3lR0ZU z$zf22^&4Jz)@8VrkLg&Y^Ko!&f&2z7M34K0EdHesz-|lLmcj!K1=pU^f@qAX*@C=G z{i=8A0asF-?jSmw9u9)CzWCSc9b@ zn86F%FlMvYrrSDa3b7S?SQ6ZA)?$l7A$mpiq&p~~2vrmrF-YWT!+t22WVlzvshBI$Uv*aDz{|oKaC4e@>8o(Qndz}og zC_POhqL4HjnMD3sp)G8R!dO>wI~3rNH#`}D4>>l{is?#?v=5JW2BW0VP=KbqIatjJ zPNo*FOUNB|Rxh{DyEgAIt6#O<`vWzybG6VyC2aIvQei;J@;*JTplVmQcQCY_8yD1* z+!6BLC___PwsD6*k=POZ=FKgN-98t~heU{gdhAYh4{Awg9%TWxcJ`T4F$C;t7=U+l z#`qh2K{2^tz8ewb;hR*8&vMhtUAR%=I= z@t51*`%4c#*jgaJb&hy`MLCzB{Pl%p}IA)D(k9fj^_7Mn^g=Bg0@J zxk?X$DnKP&R1e4M+ryjsW8P3!xH<|wrA0}XO@?9$?mb1{@GP_ZQ%XnFy94e1KKDe* z6j`($y`+3kqQh4IqzTKa99~&cw6-WHD#?ykMf-__C4bZbaP`Ci;GlE(ToY@Uq2*q& zqx%B>@o;Ci?=Y9A2^#)NcfgS#I^k_;t)qBG_Af(?b-3E6wbN>THpcVLA*R8k4Zu)@ z1b|3)2oV9FKns0p08Sr7l_0r~6K)9?p3+ezZe|K81$}mYAg#_6(0I^IyFbEL^=^Ah ze_mg`w%-*ut?7sXYDO+sO&(yx(Tx}%WUc(QfL8!an-U~rBiVwS2sQ{*SWocVOz0RQ z8Khr1)?Y4v*D2QOGNzlD*^?Y2Y=_v0tb(sAJmp^*jSQ5ZG$XM5yArnvc1iyzlTND8 z(F8Hc&71kkvVSIOemJz(Ki)fXFmc}L&sVNN1+*QS19e3&4iKUE%NqVF%_n4^jRC_1 z6k&A&pTNc-2aLJ^e5`&^JU?nqp{yXff%P8%!!V9nm&xHye_i`VecbsDTr*vJ9S~<= z(eB1B%w9;SDPdZQ-1bwR{0MP@7?WP;k1`H_VV{P%e}8}W7zDor_cq+N zBz!tR($R)^LW3nnDC{67An8FDMhWHlWCV|Re7YGObUO|J!3-r!Iyc-CXiE<*S7S%7 zi6Jm?7*bLTMA@WFIL6&I>1w8>q|AA9zO~FGmbc2RPLLMyvd9&g^6ju1`5<_?k1HkAwyvn}Y zv`#*7c6-cWZfiJ!V4B45)hDJvLcti`R@mmLo7+`xZ#<0#$~}?)AbCLCi9RJ_)qR`n z;i4Ir_|ve&m{bz+IrA)JP;j!;@q@AJVFtHf z&(1hGVVW@e9c-R8LZ9v~Uo-_esda$#rfGJUQgq07{KtJdA9F1^4z@BavYv`|40@$G z{vS>h+a82)7|}U0q!d3V&rOdtIg||w4avUm{4;7%&eZ>~#1pkp`ZJKJ-{r(#yUosD znI`@SZ4E)u7REIG=VsZLNfu)KXQxKM(a`*kYJEx68^(V+ zXv0n1gL5j{Y+C@z_mAY#{!A?;@wZB-q78lv8u9C|zrhPh~=hS1f1yg$LsFb;8Fbm?2l>iFo8 z?$zNIww;tEhygxE@O$jF57R;2)EQ?(f*_uI*(V-u(xMON0dR26i4GKQIl1_v zsCoo|a?W-eKtKr@0URRt7nmM{t=WU<7E%NtN%M~Isu9JI@1IHJ#G zG)Jk)Y!NPB5zf(2zybY-s7&O+ao4dz{*Y+p#J`_5M?ruwV4t;l_N2gE4 zm8T&Wf2C`O*pGY-adHYuREi^~@ANE#yP^F}=vFL*rkXZL-OzIPs+_gGaAL zbW$aZ1ArI*vH&5J1<^RF_3T;yFK!`{=?wf-siflc77Lh!fd)L7_`~(>8+u;|ehFDA zMAPsHvjiq*JgDuXX6X!>c zOffV}otc&A9YH|4u3*!m&lZNT4&rqfRrG;D?Yiave1Dg$2$Yd1d#0|wfk&Lt#g~bz+wARkmlO8=?VrIyr_jw> z?&X?cu6}>dULpXaMh)E_p~e=@;OHpfyZNMZO}ZHw338eVNMH#By}@t7)RXfDR)EDP zNG~QAKWBjtCR-9)w0Z#y2K+D^Z}>5Gl^8@IKLRk9``em7C*WselxjHf^!7@*;Rk*< zBp%X4LJK73$iAM9R4KV4@rZRukVMV=eag6cZwH3O0?Pl*Q-h0P0!}DQynC{|$~T_Q z8Z;wMp5DLS96?S8DLuFQ=8&@wD@f!mU?h^5IA;0@2fxL=TJ_cZna*L3D@>YHIMsdU zZBINC^GBE^de)xlm;3e(0L7bMZ$9w5;ZxbIOKgJuqbOAPEsL&4UXn5u2~q58c$PAX zh#X3oA@@|vCh|`v1>Tpy zV?}mOHVdSW`$TIF$#ah0v@(D2>iwY=b+Qu^!3(8AjxHT+?P4i0voUR1c9p&(^*&gy ze(rbgSHKU}^}#Wre&es?LY}Bi&@F?n2R@th7(^kFg?j44Gy{b@O9mb}uo}A!Z5aEW zro_m|VW+4fodWs2J-&C6oVd*G2S6NJniS%BMte?-XNIg|heBGrQRT;tD?_CA6=e_7 zJih4L}(KfpdDmrzg z*A11_Xd*6(NNE8$+_VT591Z$Glzav0>)E@41mg42zDSE8OVr(U0ZqZ|UW96etC?)6 zNU#xy4C7t4)K$?f6~NrAm2{z<&H-a1sz<#2{K1jZp+Dh%ZFEHXfGNX%EGPq=Cbkk+ zofj2Vvhv$s?)%=CqHY(3Pw&wD=V))}Ru@sD(2=F%a*v>1_(-uu%Nrgx%Ht z8P}$F8rn$bl*S;^F zvLF&wQTRTp2v=-s0H*-Hs$9)t(Y{$C85$syV|LaBjSw@FHlvo-HgrV$VW#4kUmAnC zD6Lm&(ST_$^PJ|}FrQKXXMCg%?QrvHUUYXz1Jh-^gG~}%=R6GVaHrnR#(=r?RPecj zVwYBsNTIMnZV0L8_#=%89FNVIrXJ!1jw-lXKST1tQU!7ot_9%UQ}Lpy9ROwr65iiL zCO_&hqxcK^8-)?rZX01ODf&&1reL(}g zc1OL(&zY^zqyQDHm<_0WV21OvncF zgbw|7hl&n<8ZCPEUWoI47E$112E_~Mq>)JfHNh%RIs0oGjh0v7AEOn7^bG7gVl8On z?ZVr5?EF{X{=~yUo?^4Ma8fTW{-i^(9YQ2X{`Y%;+crOIjzUaW*huI#C+$s@yW#rpgLYA1F zpjUI(#$AZziJ=*$j*{b06S2UA;ojM- zuWvgGzHj5w*C!S@c1)a0Z0`IwUp>zI%qCuo{n)o7X58Fn6c5q7+n~%2sHxwMpL4}` zNkt0vZv^J9j^d!u2RXk9bCBmWE#RBeY~=5ediE$c{|>sPI@FP70=M;6frjP}10zF5 z8!0=dWXFYvj;*Xq*M@X|KUhqtc-fT)Tzx`{7a@eVFg~}I2p-DD)V9U5qu-aN5K4ha zo+D(h&|8AUu_OLAe(H8E(S7&nWa!3Eu#^4-d8AJNmZHG<^%L z%#G)wC4-*=_X0jGtY-=NiLDN^@Cj%T&*nU4vxxmTMFDocPYWk*d?ZCC!@&I1G;#wS zgN>3DBqGnzzQK-h{AxKioJD)(%eHhQ!Z6^LqYE{IZCmVb_RWT75v|p5%;B;@9JCSR zTbe=TMlc;T5G_ebrP@_t4JB^%EguBtNcu#}E9}HY*k^tEbsQ8BX8`v50{lqYgr`_L z^QKwZjqBGrrZA$5)efB)9P$sh_rI?tm&DEq5UpYhHd(ltPs+MCz938Q4d*qCH(!7K zoqmy(B-O<4G_7b4q4mWfLJM}dhYKfgvV!}Bi0QV;NOJ+C014*4a^SdH>RdD1X<3>n z$WGLt!ccH$j4=%QEwHbQ#T8bL`<~t=Oj*0tmA0Z7W2cJTKypBG|9C?K!f+c}rw|0s zDbJ9{M?1_G=nBP>Ku)TsaTy7?ydkYexfe2$@N_Zie)-sQXVENHIX(7Bq3a>5Eo3-5 zZ8kVhD6!`ywP5H7{QZ2U4F}D0=~8l`BhdAjjyxap&?q{(xQjokpt{4oNA9J8S{~3` zw4XVKHtc$q{!Lo^^5OQk_EYEv1ePPEA7wr8gpDqg&=|;aLDm@w&*?zt57Zxb51jPz zfjZ51&@sC0p%AAK(Iu0?FQb+Opaow9OiT3qa&BGtmZ3D>!bFd#!j4X6(DmUnM47Vy zDm((Sl#<44{d(aCfQ}mrM(UAVP7(%pdyNm^>B5%5G$)Q@JbhfMrQ{JwfD2$oO~6xj zK-~OBb<1{{jIPHC1Mdq(z&Xw{m-D1N3=kC}rKExaE1usN;7p)(`-pdTMevKrX7j!M z>4p9vM@R;?krx=0lHn1j8VNllo(9Kp{MFc#kxotq@&Zm3MDNww-9|rnQEpiJmkF%S+f_qgIj#|p!{S>o9(Ze1skXEk;5Sdl8`CtyAXS=e8+#??^wfyaQ>hCg#N)P2x|#ggKy6Iw=-q8~7b)(Net zdwTv+tY9huJ+UK6;A|U0M~FHI^Ze-YDHbWNY%Vc0uy?1>l~5*%A7}pVo`MaOqRe2~ zk<@@Una;V>OIhc(!f4oMxsJ|rkKc?A98_#QX?=gU#x41;eo!7nNt)B#*Zaz{U*CPD zUGeizlk}3=Te~1?u~lQ^*ktPn8wDAUenfCuDw|S-#)ZQJ+xVwhsEz%$Vl$R|>jWOB z){s?Dhe~EWGTkRDBJRP5dJ3=u>`&sQoLu)}lZ|)Dr$1KCKqhj&_ zJkZVU)jJ`k9%%XC-H^$JHxv9U1a{DmoIFL;Pn^06Gbwk3haMoC#=tyib|_c2@T|es z&zU+IVZx~udKyLE##NkKtR;ZnRRfc8m{ZpqxY##u>)N-=n*eot{nDPr9D}00)_%kI zkkH2?SOGvN3yT?m9Y+pv;VB_G}bsC)e39J|`_l zbSaif2%Y>5{z4!jN1tPgYzBgt#!5rNB{4VfiO@a)UoVu$L?do) zE_1n`hQSZ`BMcmESSeZoRLn4Rw!8F!ho-O)F>QRnv;oBF#qi)IBsi*+HiZhnUp&t& zI+_v35vJ@VdjV3bJ&pDB#DN;}7yfr;R(ABHY>NtV{|>N`3#x9~s_^9tqLgr}Q{q8B*%Zkf z`Qc{N^{<14O>1YS2sUCl@Dlrk#mQk_p!veTlv}C-m)JEt5S0251lE++3mk{=W3Db| z_Y!xh5k)RN#LpNY8HU_bEpd^%dL>E;?{5@r(HwZkNs8NJ$Uiu+ z8AuQ^zMK%KG`Ic^K07|>kOuut4p`3wbtV77>yU!SM-~m1bSQNo9-lm=}-|*c)FMU}^TCc9s|sx4xHmxR9oUg^(ploqZE-5o9dfJuVCn|0EDyjpIW<2-d5l zYtX;5E!stTW{TKa!qBzUTi|y9*CFh46XkuCg_=>6e0{i87V}rli2h%Yq`YOodcUo4 z!ldXx6?HnGl%Z+gF}LSZ=ZCpx)DjdQE_6mli-ySXZZ1*a^rkQSXeF<@Dea%+oW3b316> z)aXP@s~<2usjOx10rEzYR2ErTOsD)ZCKP}9X%FG)f8`q#=*L%R@@!!Ofi%{=*cWYu zEB3c$_>*m~{v8Oe+6w;O_^T~Y6-JTb9@TO}FpAHFMd8Ag#E@ zrkri5zwg8;5DQQ9Yj@|Og60k#!Yf%zE!jOrvV(*PPA_y9xCK)t{BqpT+#3bc<*uuZ>O__R5XutUQ1_(K1x89rK@=78M+a z7y@Af#JEusARhs^++FM4arYfhd0dC1-%ef4QUC+Vd{~w`;$s3+Z&3%t8}KB8uG~{S z3itU7UFMEXSZcf-eKCT+xcBrt7JBaCt@zF8^~7Q2@Dqc}Gk7m`2?GO)9%R{YeB)2L zMom)Q{(fbg;fSA*F|ISxYn;;l(v^K>&7*fx+f-BU28l=958^3*mHXl@apMuQLk(_7 z0dp*WQ1JcZhnv2eq$%vnVOBkn7KmUawZ#>r!>D3`LB0bSNy2^o9etrJzB1Z1{+_-x zA+u~2nGJU9;lg7Mnq%+ehHx3dk=4+_he9u&VHBjZrqdMg;en2)1GtQI^Z2l@uPDcI zs6K@5R2~v2F?8ik)qC*3?;{mnYuXP?+5K z?cm!E`6kL0Y&ll&dH3nad2Cri6q_K^MF2tb{V03(AIqQ+4|DFg-yziwO{h7>+Yt16kO zr^_Fy>h!zcNiKO#Do(vT@6l?;_RWSlZOdvn+6KJPwvj`SQ>WWwZYNK`>6WK3#RzW z&zV0vrKd&fsYjs+H16*|mIE&*M(T!Jw`!rJ-5_@umaeiwN&)MaP zDgGJL<@QsBZllx;YGxChVb43PHU9LLGfQ9z-9Fi?B zfZn*V-5f0Vfb~uL{$L`WUSZ+XeO~W}j+&eor4qbVUmqZJKC6ZKN1$!YG6bE2{YS9w z9^pdkOzyikdN(?gag#`Kqw}p=qCoYT&`d03R&hNyma%*$=7H2oo7iK2-{u6rxZ!NSMo_(Hp zW82IQp5A$5@PeHlz6P7!LFb8ispOd7F!;r1jVuJenW(ziCIz{tll3I$JI$=Nd)OJZ z%Z62^(4U&)$l6Mld1?fSG9uo#J> zl5a$S9IkQO1Jl3@_lMZjkik||a6!+^4_^#aMV3se9#R%`t-|mY+ph(xLPiGKxS4DQ4OWr@qB!#f1D~wS%Fja&C`<4=cAH z^Lj>Yv4Sqp!BKDt9q#zkVgBakqb~47=`WTXW zxH9ZBaaioOS-3PksWUvgg9lC-nDe0GEG5zsztq|TRRb*q&E;^eCbU5J)RW?C1<0z` z09g=EP}6g9uD5i`xa(V3zrWl6o*B?>KEH=$wph|B1*{$rSc}dbNTldP$mXnoX2>%d zzQoah!c%W%s8<@TBtD{k6-J8P*~~wa1!qwFiQtrszImfgZsx3&+|v00L4V3*!NBRC z)(5)wssI(f{`&tQf%X%i?&q-|LVJx5iZe}BFAVK6i4!k3hmd_sxfYN=hS$xPdrN;< z)-IVM0=rupzEx&ro{>M^W*HMCrW%gwalu<+#ckQ)5DmO*W2(}j5nG#F2m~r5$-^jr zX$o#)etFaSdZLrmtozApu8-#sS*eqDp`UHZ$UBw z;3HffbVtIW?4R6iWZS(?!3JJ3oo}dyY89!`2NvMsD<<4vK(dm3nrkR}c*$xoe zJ#7!%o-;Sx+nx9eg>B!Im2Tikq0yE;Fgb<4`GG5m58a* zG$IjgC^;!%N0nbiLXyRpp?%&^Tl3?`EJQ=d&C(1px6@phe~A)vbOGa1DW|h)eLL!p}KN!mC2_k0#W!8W{zh#n^gC6YXM21e zdUv1KzDUd{CDC?x=f#Xnx`ihPyey4C>SQoBPlg`g=_fIBWXOy`6mW}u;E?zCRI2{b zNwGm)jK~U=#7VEI zbd)_I13^`>Lhv(UolxS8{ugLel2mD;$!a!!9Xu(VtnP@s}UHM1dLfqoB> z2-~Y)7O|rUpU(|%JyJ?E?b8K7;cB*$96v<}#|b0E^s$s7v0MEMHlcPjZHzwD-=;ck@?DV*Lf5xV^G&h;o{d;UNt z?t5Vb7@5WdIw*m%Yd40GJ=c=kc9`kFr4l77;*H>b&d?U5;pRPsXdqCW=#VAtDHBIC zmaB0TMxGp2Cash`{dH}XWpv4Graw4u6fs=R)#2`ag~C_|o%HDYlrjKUt8t&pZy6*ojFGduF@@g#Z^8~Ljm-$htU<9`r(OALiaxo5#-%z zKq1oH?P?}PXzXz(C?tO#4$Osb*aw;(z!pj^9R9p<#7Q$*GSsNq$%z?)XDQzx}?2GU3YM(D~xLjnxhyJ^@LJdZh|l z;j-bZPdBD%jBzI!)fRvP9a2uF13at4>27&X#C3$Jb z$O#`QR*97*+$qX_x>VS^JF$3*!t)nIARv8T`GA(Hd4kEaE;9<8SOcNE5`R1Ix_B!V z*2-&JGxPVc2^-w0iJlw;#E_emXhUv$SP|Sx)YeHODuXn24Y}-s{jGG$&+bT)WuVE$ zehsWT4C^AOKL{1dk?es}8{XC(EiwLq&joa(<&m^P12KoyYZtxc(0gPWF`HM$8GvwM zz!ecU@zNp^FpRvE=3rllsjpnBi+exA9c%$Sc6J&1kW&STTVhx$gxEPzrAl+{i>!I&#A zPU_uhS7*qXk#Qzh078m0EnL{lB(zO5+X}g>DM34}_td-v`sVW*`qFyRDFaiIx5jg} zgq}JyTdnF4aWBsf+me*p54j!jM{zi3j0rMkJjA)ber|Gml)j;ny7FbT-( zp^-u#`8EvYcI}vrOdC0tL_WVo8tdZu$9je49MUW-8T_h>PQNga86KCcx-i86BQlkv z9q~DcvB@xT)~5DtI(6YwHhWHa1zpL$-3zB>)3$LbEa#?KE`1Pg-vI#B_y6|L9{cX4 z6T_M0B$oZgG~J_iql{ITmEksC5_ehf=9#7QR9WR|h8J!Rx);PY+h!b}_G)KKOo*A& zRCE4~nB}diV;O{g?DuFXxzFZRZHKB~+@_(EW0CBb?iFYssII_Kha{LAG)@+Om_p^7~<)RKr_ z?6;teY|h`)QHl7k&;!FG6Tkjn#&PX}s5W4L8%3nII z2!~z5ndv~%!{Iew$J1l>`3PyLH?xlc{R@+J*_))vJK+!QF|nEe2ujXl%4>k>X=bwZ z;Xe!?Ag!>K?hQOB79Yp?dnmGtB}P^pafhbFxg{UWfgGO0g@(`hGGO|FKcg)J;S9hG z_b?NUB^P7jjG#&m?81Kib(JIR^wg$V6ZK88O3@V=#z!UT3HRy3*nIjWmmQ|ibP9M- z=tP2zs@P}#Exn4mk8G#hWG^|*pW-Gvbpi|-baL_|l7ogS1{laYWJJ-TH$=pVHyzaE zCc5PWh5FX0BPUr)cPB|fXn9A2qC8#bZ-mMR6HiBH12M?-r-m%8QTzeFp=z@wUxMsl z=ZBjfcOsFBh;Tq{Q99`#z9CQh&js!F#p8}uj<6{q1?BIW=6`qed|oZq-C!!F!NgE; z-52QH(EnPbYy-Q+f7&XGtQ3oMpQS&y~AHzmO09Wofm=KX)`~g^!?$MN!5d zUfAztCERBJ&chj>Fok|~rfD=7&$`KAM{5e2@{T=jWCkG9L^zRyt&tX%zw3m{(R{{G!2x(-0$uY1>4XW6ujH8D$UY&lg|ZvxH!O|r zwMuU^q*}S`qS;-i9F5W`#k%mV@v(7Ecx-6vGC=U-R83mNtCu$t=9=^|)L1Yeg%C$( z5Xpx3bqyvK)J0%P{yY|4kqU0UDc)Jq6EE^)HF^6m3d;}vD-Gv%zImF#7M2=1GBTR% z0M0~D8I@TEmART8NHL0)ykDF4B`jWKr-9JI_!liHjP~cC7+hA#LjhQFZ4S*a`npWv zWO%+kfOM+4*AM#j@UFeyeD8iub2R}`k{TF`vBK1_a}als%h8Ksk2y&mRIa}@Cryva zu!7SewFUz(>~F9OZ(+y`7jNS7!sWcJD>ONv0O5Bm)M!otD}K+|h%IoL@WIa}ftbWC z)G&Du>Ju9teWR#xJ12M7-($jCY&bB^xA3@@5HrGiL7!^4Dok1BVqm(hEL%p#fTpM7 zy8ZX3Ed7E1{;mHs6hJLN^LQuPZuVe~c0~Fp^~8^2?>RKl7!HT*)E&%GYUjEp`E>Qw z<7NxJ1OE{k?C~C+&P}Jk=m;g>B78^azu(mx5Wh|Ii6;s7{01gGKsp8dUNqLTZ~-=i z=ZIULL9o4KCN4Bzpo>eoc?uCHtGhSa2CUQ5%;}@goYDn#fB#9SI9EQ!Pu$YfNX-tU zbr@whWi6?xWGf-S+1Vh%fGvRSOum!Cy?dZ9$(8_j81i9ss8bT_D}O^ze!2pgTG!SP z-ROs#T?>T7Rl>*wl-myBc7j@nG{*hwv$oMf=9q(4&@C5gX6<*{2^#Z!eWEk?3DEV z^R|h?(KB?46#j@T6Uw%Hx@WWOE7j%Gh!!|3B`|ZM$tNThlL7*BS&!fZ%1~N_M%sQt_~z)aZSq0TQ6iVOdg% zl4I|u@9&>;EpPz@NXm&*)!n-*J_+Y_n1}!1Roe;e@JS2|1cDp}8O%lSCfg=?Eti$L zDi4r}jXTN|Pa=OjmAis?4s+k0^5?)H3hJC)DRsHI8mDO@Ye{er>43J|=fB$-3h1er@JC|`@A>%?9Pnu%! z_~%!nNJ`L;f~Nv38Qy97DglpY`70*^nFH8?3%39{4KbU|A9*lfeYRv(URVzkhDAUf zqN^*q7yRDJHAg}IB_FFx5`4qeVHr-e>;A64E5BxnJ{b1A*O z?M~o8`7DKK}F zHB+Sgt1Bh9Z}5EW1$SPBA6;y=XfRP!r5)xIl+yXEo*Y?YJUD)Lk&hyLo95rJ5_~U>d*?`sUy;CAlSLV&;w&1?J zb)?V&w!I>L^n77Mg2$kBKZ}Pxw=hlUXYCJ~?381|^(W-SJd@3GmS)pz_^p1>eUuWD z17=(C5-$?O(c@K9Dhd^t0`MX&#?Rp_(-6_-pfl1F9mz8F)R?P5 ze57790-mC{N>^=f_b+t&{s3HJ5(?@g5&91hjBIZ1Q_3M+kR z24#o%@in!3_;l2U@~AEzW363}5|W#U=AQ(#B(W z0Z~=>ItAh=IoW7UHG3IW8O|3gIm!3x2uX8C(fH=vtH_q}HIdCU5%koUPlhT}PGX_F|39JPeo_He>$Y z{Kgoau`-4VG?8^4Oc`P<>BE=T*1R?AOJa^eU z)Z8U6Kso`d+Y_cpaFSMr*a*C#6}KWe!Dd4l0Q!cnnHoZ8mHcJhU?eL}BQ+y5M{7VS zG_k{JRuRliR^nY&C>@^Fy>2P;@cthA>D|QZwr_M$b<=B&EGeqF%Mv;{C|lsl>HT}& z8rD`%oCe#<5gg($Mbb@XfQ9I$PCessG2fx?4Ow>WuP)X-o>kIU1H(Mrzf&PRLk=-SNsvqa|xvml@&>u}ybgV_R zEG`kE1m}C0Whc5MQ1j=cdt?t;j-tLl1dz@YJh04*|e2K89^(bH3UL9K>5(orW^&6)OzeAx1~w z%eY(g){GA-ve?4OVpKs9$OkVjWE-{o-r+oF z1Vs>1fQvw*vsi6G%7lyf81X{n(fW|)YSgCej=em;1@{B*2Ur8;vv@KORi>bvi`h9{ zHnUUEJ_vaF@j580u?B&lW?2B6gHvGdwr$`>Glq2Q?MC!#wl3XvpwzK?f*atC1Hh5O zGsP+p6Gc3$_OfvTOB0Q50#5pDSR!e7*y^WA_rni!Xm#`*r-R^ z|LM4WgTxgBAjnv?e6u2-(a>Y5jAsgtTK=#^t#XYs!$2yeRD@nZT-!;#Ci(_y@1H1| z_mA!l&|0WMD75xSy+Vq;bq3Vcl`SBVC*G^i9)2d(3)Ax! z(V!L_3l?f^wt}xaj~D8q_Cq~$?m@c}(%aVhf~59a*mgj4DPY9!=5ZP-xkFTJ*YKc} zGH#&(>3K=;Pe%wr>MVZ6IOmksXEVh%(#3ecjQwrOSjnuixiAgrfZ}j0ojbrGSj(WaD_cl8&Wxq6x95-Ds zfIbzb&Een}-*9)kJ3P&s-EBdJ*9zH)TMWkFV3lk9)L}IHAo(L<(xDeE3^v+akjLG3NiypRG3g@PV++VWXCtvZK4n$jw%YJl*Gdg zgyw@!brY=6rt|XBMGq*m0Gv40p=G*>kN*6!5e?Bw;Y8k6Gzr3ay7#>lWk=u(vHsBA z0_(PiWuXC4tBK8GP7xLvK!5dp@Mgkq;{B?|baiDgQe~TZkDVb^`Yul_^Z>hN0MWs; z(?yQg>=uwD?Vqs53x6H?4Oo$Zj23!c%_Fnvjf&L|Fz`#*K6z} zA>1s%Z%C&7F!V|!&fyzpEAa4%Rl9lC=64@BRwjF_x@PoP<3wx6rXm>{>Ike^E23*> zAHO7aH|pjO9u0XLnq;=24ZV@LZ4KN1a9e=zrpRK|=D-od)0&z(ls@J=?GryiUu@9p z2nn+aaUs>+KxTvwD<5cU2OZzDAAFio*n(h2n~BhqrtmDijf?9uVNyjLJu-xlV}VWK70?`? zu@I%^`fe*bNEy!XDwaTNP}<%iM2Z$y?;cL19ABePp-CYyBi443Ve^;1@-@?!oui?h zk_LaO@4eO{y5OYI`DloWNCKf1G&dr?4UFBxwDe(9x)Nde_xcMNu@3=CHm*H^b2xhV z75%3bJ+E+ZpbHIk_CL)aTQmgt$1~4wtPj^dJGB~uLm;mWwC8QpgljMTl_lgK5#58b z9P9e?3u3DcK*dT!hT?L(OjkD@_8cQpYq75%pI~Gjuv&60EQHOSvvwhtXz#htORdi>fVc>6-3)N%S0(yf#jft}Wv3dH-e=bI{_R#BG`0xo>MWT%0me@ z9X+Zde2pXs-a;GI0IBOxJsF;{W0z*q=LE>jO)v1K55xAdY)2hcWjo$RrR@nW2!&GW zHXt+nOuc|Js}y1|`tK=5KPI zw;%Q{^P`sr4@VA@@R4C!^$tv8LzsnNWC_mK2sn`q*nqhpCCn&?w9Q^*Z^Uu5j8UzJ zrPxY1m~^>!J>?UIt5PF^Rj)CCLER8SEHYKb^P+cv7lDOS2~Cu)GUTh2?fW!~1wr}Y zUmCww?fw3MbyiLk>pS*u-*x}y*kZu>fI2{S0zt>|*Pr{cZejj(ONjgd$2;CP56;wu z#=9w7BK8K+WP62whS*4Kn8_Mrg*e7qtV(j4!{RzMxt8>=_CVJ(OqNUlnm}`a-B?&9 z2P+LcT6qH6A+eqbRVWY+L>6EL(29j6;N!?!V8^nI^2$CW%za{j?5+(ck2W_l5U9K( zLya-ApEBsDSi;f4KCT}?&jcaR@4uib`SZg+cMWI?Nyr?pXrnt6j*7*0Re@09|C6Ho z10;1@k4eM5PMx&ByYPBJE3YZf;p7SKES@&N&TL>tPq?Ej-s%kjN`7_Kv3q&EHxjG1 zQW^*z8flIvSC*<_NL0T?RDOoZb9e}=+Wx_{K$1mhqy)=bYq4^vP(ROW@^CqPmtpBj!GOdI+p1ksq`wg_q^ z2k_yC%@tqvSUef#_$xg!+yxqCfZITfE8Q+LB^77Q^3y#0I>%iY=|8-**0SpAUnd_Z zB6eYb&|pCt)l2WVV$W$6Vy_1mX`P9J|IFJD-sp{g*w160}N z%x%Db9zz*Alo<+W#7OZJJ^jLmyG^_2y@U}kH9^%5w{4k4fb*6)aS|Ck+*d-2^wxT~ z;?YKAS7y_vupr6-^u13K2$T_3Ov?sEJRU+G>AmZHZ6t$KJic%Q)*urRQSc8O78qM4 zqZ-pkc(QxAx*Oqr?AKs)cwELD(q+NXt&mAyXDiUq@fySYa=D?U_h^HgAy>wK{de3tz;^J-U9Rd)C64WjMnF>~!ybR5ZG4;Td+QtKK7&a8+sXoS|L+wS4 z+5Fcw@btBt&P`U5Y@*)mT)L3nCN*FL7>N7h;hM@Ft-)C&LOAW)`)C?U@l2k)z@TY| zwc(z1n3eIV_cPeq&-uKM5YaTTTo_H0jY4G**;vCvB1932<;owuNHEcwe4JIkyixr< zUB>x)6hrx!u9N87D)AzFog=ZzmZYb_2#Z`Dm(BFuvJYS0Z}y-TIo8zzo*x+Qno?=F z-IL)IF49SF)qYgL+l|&;A{sWRPzb)od`jiuhYuMsyKZWUF#5-yN|PL0Tz?Jw2dj zPWD%q>@;Bep4#+#uC<|O2dSIVEmBs!L$xW6Tub6wpgK$JKv`?jYZ><9*!jvP*g2!K zp39k*7*fa?-GhSY0C@D4+OUnQi{4}gqw?W{n~>5O;anw}qUgG;Cb_#Clw&?{BQPj2yEt1KAb?u&-JLA@HD5%Bm#@V7 zpd&g9G$R^`XCD(8^?XqwmWnu;vYSIpl4d1A63ptQeBKsiW@4bSr7(d(*lJ_BRB zuq3_Ww$Ky16Q8COnhgE*igA_4L%Zgk1;vAG%s)Tha)3LC>0aP5hL{-pKd{FI?k(`6 zlHVn*MWp#C==i^K3n73Q+}? z=+uIc??LqO@Lq+W>US0MLs#+FGT&(d;CmBckQ{C3$;QJ|cZNjLL3pE|(VYDG-uBkx zfoAV+n9a=dlAb5LeJPYfZnhgtBB&#!qp0o(#t1sVdWE(>J{Qk85TqUr{n>H}>=nU^ z@JgQFt432@RsFU?IDmvYz4I|H4ltMBf{G$9R_ce%mPRkJYld?AGgj$^`9!A6G@%42 zH&`{uiIq(_SzkaY?&6HBXX;-abhwcP9_nywe1@V61`O5E~}LVNy1kw%t;_`0CbwiD57A)+0rYIH)x@x%A}?VfTxosA1P=8I%mfJ z)zt?6U!A_Wsl2H}(wEFVc4D-1`EFG>G&l-`P06zW-&NEQv2br{Q8=p9qOv%bBQT z3GXiDQ5=o+Dk|`eiB;jeL=~k(f}_N)Ej+l^%)@Y5{O#`ULqBNDSYzeLO5Gi!7kgPc z#^aSdGY@HdM)y3te$N>gW=uED7YZ$?k1f(Kr7cE#)MSNp%aCSh=d>m8IvgH4l4yb` zUZGz|>ys*DJm6G7g{@|7^neyMIuz+Z1;Fse+$b4OWA0?0VqtTKQBGFSyq9yIA4D8) zyzG7|()nPGh`Qj{$yh_R2c-F-5c7so$;1#GP6nD8IpGH-JeGdwVd+3tLK7Jb|C~6V zVJfwj^b850tygo(r{#*i*R1zS1kRbXn6F$4*|3Ql^sw=<11y8K(spqeHSqevZZrrT zx{$|eYnp;FF42<=1B*&=R0xLVl?uTPs?FefVDj2qSf*S(Tc}8Q|EGOm%^~0YZ+`R3 z*i2^wKW=dGg3^XowG?8v0kgG1y*gaaCm@Gcp((Sc7(rL&`iU^0r)>f%f=V=s5Cv*A zpaku9v*VPqFc48*Na$&=de8O!)9n{I#$VHud5(7d?X7CxS zPXz2Ny-vIU3~sbRuL9G9a)x3UicUT%)3~8ysJu~`{`eYx>w`8cwE)t@EkG4iJ>yyJ zU0fbFVDQ`)+!tx|qKfD6U1p?>FR8Y?5CP&PBS&Ffbf!1aDpn9vI13D4poOHwY?cyE ziRbQi^}?z@`SLZ4@3u!YKJ?2=FM|k~0lgp}QB`ZR?=8laDLsBR8xt1m! zSwZ~z7G8|JV|NywRez()fF>R9I0ReM{f@8cjQ}2@EEPZB*-ONh%HP}Ce2X~t;$!~z zul7DV=m?AY29?2f21$vkR`LZ$*noxYik>@jMH!ALc%yxkHN_Tnir(=o?#r;YS8;hB z5R>o@B0&eFy_wat-jb_(vmi^1^Hx^*tm&R|Sz4kMZ6FepHMo@Y!1BbvTQX%7L~?>H zbTTC;RN)(Jw2~{Ub+FKb@>A48;RmD4vz^le2|uO%k1%7YpHaDF@%HS@ zp4>CH^?+HVO;Ek#|-lJ-RmVgm2fle&cJg5+=ibqc_s5aSGwu4;n-)oTIs)%(+jtBvMI&JUj z43Z8*Tg-6>CV_!#2Dv-@m_|w0aR$V?0k~={1GBSQ1(FP|9m@Qt#KUh~N3Y+a9A{ank(+IuWguE>TmJ@j)RSq!;j@LN- zS+n`->(+3e+eQ{Xtk7EHBY*fgi|-H3J3}=tC0Kd=;S*m)<9Z4I9+6w1N8zhn7Bx~T zL@1SJ0ZvPWVMC=8x5otfp7mfU-6S-@HUH&RN?~IG2A}oLzkG^GP(|}fxUzfj8)L)* z`!;Ggu0XYHmS6ftiBVKs-7uZNQQTow9BUB)G)@;lL$Nk>i@hgJQSeMRy)#dukf7 zci`?1h=rPU8G-JWh9flTaEKPHLn^oWKKg<$F>Gbi)p`o{q{Kpp>T!vqU^uSuI~^@- z*mcn@g|4T%!c z2~H~Lf!jFhEzYcwOq|_Au*E7qeh6}>04AX_Q<@^l)gGpJVEW@ ziByJRrobSc!&5DLEn8Oxjbxt{W7i7{|wQ;+>ln%053^v%6Q7Cy)!9IV$-C5 z&V_18+~amhkqd$$<@C)O=UaQw%l3zoFtNG&7=Fo0>FN1jb^c#6IGwXh(&nUFb>{4c zLh;?hzI?g=?(N(Eqo!f2y~kcBnI(K3ku4{R zS%t#_Jls}k)$w~p>!Yl{_phuiFzx-^=<3tLWQn7bi{nl*PETj$LGhWmal=4^eNG`f z9-bYS(z-op?xRd`x9exqHGz0Jr$QpoOt^vm)E^dWObS_gx$*;VG_8M!UT!Rf5thQv zK#yaQOOrNv5#DaK*OAYhU}YU?UD%QkX0%Xl_=WJLz;l+AK`Dd#YN!-lJW`S&>re56 zO$m}PpBHEe%;09FKgc-8LGcm4=1s+l2bTKXm*U;SZvR9v(`?)cycOIsM~NOd8D3;1 zZqo1@iW!mk;A8Xg%4utrGH!VmJ5LJ6l4&5av}9Ne}WDeMYG%ApOv~!E~WUlv4IX;Vgab2`?T?zzuQR ze)o~#!v1@)_8<8yR&B6ouqMEEGK(XVXrO^5xPQzTk8chC?`zoEcr zGy^5MnH7{nk|P3E*o)S~jAb0;#mDe~`W0cdLLCbfVz(hwYWnapTjvG`abQG=0pg(- zx7@%bL~<$I9aaU2>h@6)Ap+03!0|X-iTIV@#d}4AI9q@hDL}HVfY2thL@V2{o0H}G z+v`w{jb+)h`#pYBG!#*l-2wvZUB!@|#5R|yYTj6XJ;S zwqYg22zoXHoPDv2dm9d&@VY{?a~Loytu}s zy;Sx|p@te3cEXjCf|xYx#f|6CFx!+q>#a z7!Z+=St^8E;|WtumLo*W->KTA%Vrmjc8zU}mfRN`4M{vIs4{XMp7wBQ&2_Eh#o2B5V3!5v{NOsrz+xnjH z%tX0A?Fb6hUU3TLFSjC7b|Is!5j2(qzw*icl^dcKj?WTUDU{)$*$h{S<;V8%{av%q zhaE#D+gf&Vs#`U&Nu$}t`POu`7U-Jcw6n&&%+EI!ob+3+gXCzc*Q#cj>})aE0V=ToY~XcN_ZnCc_SVKoy!Be`g$BV%^!+7?prg zVRcQ8w(!%)EZI_vK!kNU5lMI%4hJZW6D&MNKw>JJ-sMmy}j95?ifu{|B+@lZN$wjr?d@B~B-H^cje3jq`z0nS

lY9HJ8a5A{@^!LQNbXFgqn6U!oo1LliRweE{e7Trsbfdc{EIz z{P3x`t6vmS8wPS2RxT8jNI(vsF)2i5a~m|>JXwJJd;|l(0UC!U67Q80R5ab-c7V5! zr|Clr1yrKbVB_rd8)YyapZ+f0!dOp5&@TgG3FKudUlD%{&HCVrsD?j|Q%mN1eS;}y z7aGUn7?vCOFryZ_ZP&Ok`w6h$N=iDhJY!Fw7ZSQWC!rw(-6o!r>I^`>Hr0V2Bs!oI zbrZ}~f&)qf0G9MGVC|zA74OLMt*Kb|Kw?1kj3B4P`;x2$Az%BdS=L{U@y4*liqA)f zV2y`Y4zdP(M)>)u0o3a|WT-gA7WY0ZN{~>uG^#*D!3cmA;8*{5<~cb53=1rHPzW4n z95W%p8*n;Z)zAY&SD6`!mx|6t3Hpx z=4}%n!Y`nxqJY6BQZ$r^!s+#GG2fwsovjpIX>nssBnaC-elh4EDo;89)J=^_Z|}Vv zS6D_6kMk0)7Ls;@#K?p;!BOYHiN>)nuM;#BL2`sS!~RW4f0Up&2}ABwXT1o zP9_yJ<{yU3>w=-j_zusIooGyEN&EY3%7~0xwqe;?QTo8PJDH5??k_|0zIsXBiCK*H z7n2WQ+C3R5{!2FPC^N5t!_Tq>CdlCoX@c&(j&q2ku_Tdx9FTB^D`c8@=DD-J5cwS9 z!8>{kOU=^yS_TZP=Tb3)9s!6RUvhs!2rkL)J6;)^K+fC3rnJ(wU*~7OZuh(92^bw= zjF0x?Q^r{k!~$O4ZrLGsplv{vnVNJLvd=AHhYvL2I;imVPSVWLD6mr6!Sn+UG{O!Q_CqhHfom1#&2&Kgk(S-3O`qY~5C%vdH7& zQQr{uJtG94HQ-)w{6VVF?=lGN`bUVM>R0bc5AQzWc&hIE(SRCVi6HT#MaV>lF^mms z`VK}&UP-SU*dOHzL>Vc^>x!G5B9;Q z{O{a$jUZqwaT=w`-1jL3a~<&7(OcT@CqODcqjTC2M(mk;6@fBkUeBnVA&zbNkQWf z_*{e+$Y>LaL5q@=zyMyjbznPNKb{}U-Z_;fM~k|zRA9s)R*O<)>k&mbUOxCbL_bIX zwsUZSaVP}V)6&0Y8!`Q{PUaSs-FfbY2~BM8oh8a6dlRNujs9Ny0ftJ0H3@nZx{|CZUXHev*O8~2byIREinLIy-!?Q`2)dd zZ1Q3_jdC9NAqE#c)sY+L<#)iS6Jh{EaMU54avW+-X`1bjxR*sJUMQ6L(?;T@Bu`dI z#st;5Ot3Djc&HYH+xO*Vif03-P+9st{Z*X-1qFQRD;mXQmGKP0)5Di+gAyhd4pcfR zw6%{4N`CFpteJi&5(#jkJKbO5XF=exe;i8Vc>LIh3_Q$PoAO5nladO?pp6#Iy=udar@?c=@5Ry1oy zQ2|g-N&^k`Z0}ByuCN6ZthsfGQMnJW@ZCki8{hhD-1ec0U3&*7-9o5GoZCq1!WsR^ zk0WdEU4quGtsKFNMxbBZ6&KP<+A| z0M-yTyy;SMdb155Mh59*k&6{dvzXO}7iOQt*Xj^Ybo)y9T5F>R(Ja0D`L`HT#2TdW zj)_}~#wxQi#JJNBX$FA`!DDoTLo8*_;q9{V4s{{A%YAMc?cd*hR^&M(HrrZ5Cze6Y z(ggwx5G*j1WLZ7_R4YsDl4)`MN&YCfnr->uwaE9g{yF$w+G?!J5%vMmlQg7!>RK3O zI;clpb-usEs;peUz-^O=K)ybGpMIMn$DGY@P!~c(8t^anpx6MWkI$+)(Q3jko7hIm zy;K&>F$pd0WdpaUMxHjFMJq$c`&p>Fw+yTTXkY=EuKI9ewg$!oV9}NC-6jW>w5h_~ zOeBl*{2X{fOBMwlK*Mw#5lM(A)Qv?M=_Q$$RHQ4V$o0cJQ`QE1kM%c87ile>D;pBi zHMy6NMIIi%GnqgY`iMQuUx~{Di4tW?B~H4~@$Ejp&5I&7lNE*kGDlS~oTu{h*ov+W zhhJ4Ap5JMpK12QJH9u|>;;3{nr*p@yOMQ2R-eUYD{~3ro(3F&kwt$KOiNt#g%Pd`x z(RQZA3b8hLB!@oC9|s7%Q82m?K~D6;XtyH4EH}x5 zc;Rl7$E0;?bsi%Q!%Ahne*4g>Wu`^j2KP9I;YC63M z%i@RCx(p3-($}h_$U`W}v&%VmO`bb%5SN~XRKG2$K9Np#!MYL&kQ=xnm*h*UGbk=_(*c^0(&$?6cjPgehz2-1G5X+ z{^BFH#z~qoRXBgIOk(j^=b;clAqw{l9daDRHLkm=pRm+hV}gt@rs1HaN$80_fetP3 zpFhL}Cou28!cjZhEViIhmuRKfL1)nFS$Q#9ot`MT$p%qF;GXgHKG#B=@!ZaDUt>Z7 z<*UVvEFAO7{`q;kFbWroLU`HNe8sJhz1!vKwv83n!_04 z4q1J@2s5saZ$AKhKtI>ppOlGO=pp$CX)h+Qby_Jo-GISH9LKLB(P>RyYz zvwQgdoh&a{L)5R(8HS_*W#2CtX8nm({%DLH**A1AQNwMa3J&iP!ICxhx-=6In_>q0 z<25%f0p0PpoVJzC2tS1cc1SHDE9CmwDr>RntF=}z*1esHCiiMcE+@Nkb~TQS4M=le?aXZPhSy5EMsfTF&o ziruhy5>=q#o;>qOuxpT{UPAFhJ&syYB?b88=(OO;YPPE>eqV3zjpQYzM_#ueVEA)E z0HQU}J9w(|y9f|lbfsWvAt$u0DS3p;E`0#oJoPS@5EoxJdg8DxF(Pfyt6|unL)Lpf zKFWM~6l^9*wzCwN?;2THt4g<G8k=2Ie!~gTg?d9ivDeI*8LbD9>?lq;$B?W@s8z=b) zq^1z)b@d*9>$bCxFY;QuV#38~vvy*Tk z{vInB&_yLd688+B(3Zb%qZ^Oj1tAP>Fg${&i*~6lJG+=V66$`yny}Vt7)IopXigr^ zHnl(;fKjkwfSptT3K92+$DR(2iM=lljYV*TA4{Z&#%%~< z#!^%F@c26El(VOeEmt+#4&o{oANEp$_~_+n8gcx^$GHTSj>^Ex7!iqt(N5)>EUb|; zd}=X(LzuKoKX|C~vZ-wl2$B@zBQl@+YmxPBFJqje>Ou8?L#m=WejMki>Y**N^mco4 zkuRxx9>q2+5(kiMEZcD7X`KdhNvenPaX>E=M2pWWuhWEg(kGj~6 zCO_oA7A9(Q;js`0a2K$9&0KH_eER4LdPk%fE zrhA4b)WdD+Rg6))@G~szmPE+0SQFuB42`bxibXdF?4t&iE0FU+(}QLij+=r4T1Qq- z;8(hgld{5onIr8J*ve>#LiSn0xr-OFr8wnf1QtoRB8BjOjDs=eK$p2GVB~c$T5HM$ z6f*Jxz{6}7p0DzC&qA}K(y>(*nQh-cZH?V$ii#IFpmiZJxJ7&us6{ToZt_9xm42N> z^TfN%5EKElT`Ym|ZK7m}0i<8P zv0o07vb;l4J1L4FzqusgIir~{j)7on#Qg#VI)D|= zKW9z}ppUD#{?L9oTNb8a!86Pj=zedv6boz&bb$xXlEa=|Hx~JghUA+^fZLCt#y{Bp zq+SZp5Qq?tIEM39^4arw|y)C5nic+_Wj-6jb|oD>s9!%L*6p*OXVUcApl_` z&*-ieqxvY6mp{I@rlrB~7dQ3)e95!F^IxF&FXg%3%@8p$cXCm#Rj2~JLKbK`w3DkqV(V9 z<&XZGk?jPgKUF%~Ysb6<`40D(YzE$; zkEfvf7Z&%A1Q|%mwOW2I+_eyNLCy`77v`8b5&||#_2~oRH{aBcfS|xulYi+h$Tl|f zqQbS7N>%vzz^?bZ81AsviV0nqm&8dEc+b%}L?vtqsuTeG7URxvwZnTKDq)NY8^C7S zvSDJq($e8e&oPy2BmjMF4dnJ1*5LXU4~{cqA)Pyb5eq>A7yGtVsfjEPurKXrq8~7v z>9i*l>|k^GkGG2;l!AUFeSh4B(WL>f?nj(SXy*CnDK)KO_KBt#7J7`G7NOF3dV7bZ zLk9DO*W^@G>1Oh^1*!slon4{P{0CeD5DZ5#*6Q?$`KT%vRs4D_LvP-X{Ao~;0cI_% z!0@LXl9J85DXC(m4k?g#Xy~4RiUnq#UVxLwZbJN3gA{`jx@bTJ>m^zT=>gnHSFInK zoN?q5eI=CisSNQ8@>Vt-z7-iS)}mGntj!$vL3j_;|NNpJOZb0zG)p_UL69XhW>W!*;@Q3-r zOX@e2{^MyDA)p^iwbF)6pPRzb;A>gm*EJlz-Us4~4#f)03SPP8K!=dj0xZiG8xI)a z{j;dPGvf0S)=4vO5sj4PG9mj)E_ORYtR z0Ay<6I}}+kry=u2L6Sy%5s&RBmcw;kgkaqhFZGA`ThF6Lb0|OjvL3?<$;5mP?S^g} z5lZqTs-R~X)*u5zpY%h&Znpt0r+#a34@82y_n*iTY&N2P%_HEJozJ5Kql&vjeIex?P_K|YMSL_F)#ySV-} z7%Jv$*{|G;Y;G3t#_=*yxB)W8-V3FhkfzAuLp&c~gW(;_M=m2v^A`7Y(wyF0@Z?ifxp*)Jq@GO$^u|0X&W^7JUMRKOHShj1A5Ava4u&FBjCt;Nr%)z&3kN)&%EWe)c> zHI6gONcbe{_Tg-tLW4&03{x-+FCm2b6aPQOP^$5PglLW>I|=^!%*z>>1 zm#BFT_X&zs0YnFt#&{MD5SG9tZ9E4KGHZA87i8Ya8UJ&nwyjXqz;p~vSsazJP6@AnsaUOoafCl zIE_fp{p$%`P96iaI4tEA9;V+g8&XA;-CTrW3ej$RgiTk-nc zjLsH_h#++OC4gP?JV4>88g9L+V7W+%3KVy%=izh+;v-VG-2$ui?-mdT3=>I3!d3mi z5)6Q~eJ7tkv(tlxhT{lzoLBnetNIIHcBGhNKWt#{pW0unUSFACnj7*`?aScv!{tPU zCSE)|%t4AZTk-Nb-PQKC3a;mWHDq#>?p(1MVy46n~#{wZusVo}1f5BR^8 zzM=F9!}^!j=#9~mXlZ|1i28Co|HgM=(azAuUm}i<6nwg(5T|x!ZP=L$5~vk=1Px$B z|1qs_J`yTfRbSs3l1P#sNFM?FLJ|}Z`9%Z9{WgOChZYx7ZM^DpBmnbxj%=Z;;4#^P zxqElhVu+p1kaPLRZq4*YK~0r^&@)VWW}OAB`?E70#}3dUv`^=7c@EZJGJ~jXp;M7QJO_7$pFe>wNr!wUie8gRPd?m< z##cw8=(bY!!&@qRs?)L;0){Dx(n0OSqfW0)6oA2zYI)L5?q*ATt3?oAS`_f$NRohs zAuif`BTR>jF#`v=NlJ0-WPo!h1(nNi!XDmXn3Qgx_T-~K^4}Aw=;&NVk%GUj2#0s)?yycQ>DFY=9kGElhKoUD)N7YQrJ$PC3-yR=ATnH#k``T zK2%D7cfE9(J&m)uJVi3#zMX;>^u}R6*~~Cf+L@&4&!P*Z0zg-$ zvUL1jI@}mT)n6kys4F7TZQ(ecQ-v*9w!+_q{}Ks9ss_ajdLBkc$$F6{+?_3MU*%ah4%Bm%H5FKz8N{IE z_#PyAW%b~{W8YHXLu1v35&{!k17Ou)wEIW0M32FDRS^&F2@8seh2EDy+1tV|+pAW; zulFXQPBY@o?*4E5iR5eqi7`6ua-<58xCgC?`5lhGHtqUr*BvYtm(LX#P&_L_%N!ZS zEebmH2*W`u;!>uK51`??@X&se{oSV%tHN^%R9GfKS)h0)>lnUEr+W6 zhgKd#Y`^11l@uiC=@N^tao>s8Sv-GH%5&&!2>GkALee%EI|re@EWgLIRk0sRK*}XB z9^KF-+_t27DA4$UC)+<4t-zD;M~M+~#Udkt0CVWqJH09WXZcc954(5ogE7?_G6b+S zsYGY2ROwqEdIUg^hD*fP2IW@9ANA)>|H~IaiK%L#Y5@TxBJZ7)$sC&^hgavy zDDg(&ff&vf6A0^go?#h+fECD0%mYu3-viryNGOX|3oQm}sG8DpSmH#PJZGw3QhjGK zD!)_<PmO{HzR**L4dqt~s;{8!@w$dn&I|T^TC-jz8jAq6B8Dbyq(ij< zZJfJk5$8yc&yR~~Q&a)3|z@%)?j4-62a!1f?_O-2O? zOK?sUZo|1lb;=GyUJHskA^Fey^ps(T{0I|&*!lyOKSO;t&t+yci?^FVcI=dwsjnXe z%iJfjV)C4(!x~Q>3Y&>aow$ zV@aP)-)fC+(AiL(X#0n!o!Z5+jMmc>U3tAltAY83i77~-^rI;W9QrV>wckF5*$=l~tJjJ~S-_wu&a{Nw&Bb}YKMIcQAM zp5CK#-DioO64OYrj8YQF*1nRt#L&3{_9_eH{Cihn)k{D$;My26P0dsVrJVlYggIHZ z|3LY}wQtUjm?h03%=X|bp~_ywvxk;&HX>7Fvt?ASP&SIRD$yE33^AT+a`5Hf14B}Y z?)5E{sg_($i#Iih3nmxTKWAWkgjV=5$8+h^P(n6Tgt~~ zBS8_n{lXW)-Pd*lYLf*;5mZ)k*suxO6i)3mF1|Z(nNzLwUvBsHwlhZv={xX|PCCam z4>ULQKRzOInGNxb^~u)^^20Ej`iR-06Y_-pVt#hSrSSFus1Y9#Bqb-2dSYp1%7>Vs z&%A0W{R~|{2WEm7EYPC@Q%^s1B)u@;TO&zhXrc=D>NZlO#2t7 z7d-GJ+WE?m^*X`chskrKVi8&-mVwL=PBgW`O(%)RzO+0J5w}!VO=Vty0*FC5Njhr4 zaJAyK>?;@b!$bY0qV>f3^Y|s34VWt)PMVDa6%WBUfB2UI8dJUb{x45+K@=ff{i9RZ zu|Gx*mi^dwV?XAO1b|vIH$<#P~n^WWA07@wkj8Zg6<8QXa&gC$cRPi`utvRce zx_ysNh^-?l4+}d{m!}@aHi6c)GT(TXt~sd^Y5B$sfCI+@Kv)IcSyA8$!L;P67wn*X z3V5mHH3FBzUjZ%Rb2$mZRmBiYnR?&xl0I4_fizv{e29gUgr~Q3st;1qhhl(mOX!8; zOS@i(tbhf(-_p`+l9p=pcuQW-F&HPMZ|pChbE}we6U(hB%^}>(YHm;8tLK>O%0f7- z2#8c}jL9U1s+9ELa`+o_1YDNfTCrwLZp~wyC;Inw$?`#iO!kxrz2=Zv8R6;YG4zOY zqq`!gFPV8J#n;Deb%YICH#P1ZD2!0CA(IPl!%y-xVsdO`41x6wGFHxb-sGx(`dPbK z(EVnlR}WvEvEcf-oM=`ri6GGQp=}}~lf$I6yrhFhi#Ji}K=ty@?)@y=aQv1k!sApG z&Z=Q!6@=3k5LvK*P#5C-h33le5L<-I!CIKyevh0@3!t4BV64Gf0(=smBOdBogtfpkHc|pjs(;(Nm9@+TfkTJX%qzHdxy3H8 z&A_AxsUNN#6p1x3Z6$H6WKs}Gm$>dHx@t&IoCY-}h(>^US+EfiNnZNtly~)jxd99W zQvySkSPG~O78fLB=}8MF7?-+Z~<@Y6?s-QJou zRtSxnbxjo&$QrK?l6>-by0d3xih)+!;=4!8f`d&BQa7Bjo6FsA#wIn~b?J_w?nCc6 zs-Dyk@zJjkSi1#O=65)RB`TN#3PLkvj}X*GAyXq6;^hjea07;}_hjs6BeH|WUPN_y zRNr>0t6tFuGszLh!UwRdKeWbP}E;lyPhjx@DB_`x5s}Pi#LRfKo(< z3U<>0<>SBhUGI}K#aMV|tAR9-ZT-a*tHS*c6hZ?LDf##ZQQJ9@t!CgyI!-r0Z_rsV zB~RERrZ|b}q`z;dA!OkM^8_{c()r0ItK`*f{b~1(Xk%H3zoQnewX_xGg^)hkWWmsA zmlZ}+ti?FQ|N2E7lZY?j8S@BIr=|?}(dA;}YQ>nKQYfqgW|nj8LDL7G3jCrb1eGK} z;;^Yutz(%0)K>^4LwQIOf=*jhCsK5g+lIVMUDd_30s1A zu24}oN-s29S9x@@pCiQ}AfUnk<)xuAK{@rX$7!Zo^sTj+T5Ca$OtV6Xwg1$g(S=GC zQOH!FOJUIq>kpy1^j5X6jK&_QFp?DLgG$^>-wGT9?z4a_HpB_xB$ncC_g)!5W5LHU z>}9^EYT@{sV9jB#rq`0^4H>}KWVf%bhO*n~OdHKTG`8A*aaUlYQAtBHcD`hshf8&t zD|c{|x}F%#7S6t;b^Ma?p^w3QIJh?fl*AA6zw?SJQcXyC_pKk%9i$@WBt^HMfpqvY(XIa=zQE$%9W zNkB1@X~$Sz2D*Pnu0~;ET^tz-n^rR!>V{W=GNk0bN zE-?8uctd(AeiL4rbMdF6lldNW)G)y=lsE>cDkNZ>LHtaC&Fpt!%l*|A`>-|U5cdne zJHFx3eXamhw%pEVj5Y9A;R;jHAXSaNW<{8Nks+=HRTJaVy7(3n9J?e2Fz_d^JBJ%{ z@D+N?U+5FtgTz{a&dk&9*4OV^Rue`T%`tK5bhv&x>S<9LMMbWyGfMhfLInE;J)4{k zJx`3vtT(@hiSMG)fKDC|Wx&nB6H@f$%!s?DgN&K5Bsmu@CtHMxV4Cpk;0wgi3=X^p zrn>vgXvJKVSPsvdIjwO}D0Y*W_}WVjD^XuH;t!1}kDj)BCGkUsd*G>tO;jHx zdDWO$z?%Yd$PNNsFnt{?pK@Qvm)k*Q$!(I8dJ&v&n z$W^i1C(*_%biB~bgRGQG)4mjU0>2Afm0cV=rPu5`HG>zuwQ|l7WvI0R<<$*9Uzl4!u;Yv7tGf!b_Ap9=i3`P;gl}-?T>1=oMh3A ztkE=JmIP6F^di3L*YOyG71t1~qpN1J9BU%R6)seR!&0*>Xh;-unk`DH(vzRgXVdsD z$EpWL5g_s+TcVZg+mT*DDC~w!uCEPl+uL~oEi2yAyFRY*cA8pjhnR#mgqdloq68aF4>ysDYZZ~vnpQ0#`Y!N*~mg;c1%y9T2QkJcQ_SW z^easn$q0&Sc(PF{iif5y$DP^{w2MyU=%MbX;XciiiFVk-=`O(zBDti#4zVfu)>FA< zLh&z<+?VkQpl_iulY=iCC`TehGw^xzns7!!QwD_|8`xI6Or`4&WM&@$8DSgd>n!nL z=xJZtQGKdVX9%?+TTPYzUXKI;sX1j0Yw)1@OBS|G^@n!haw?|Y{@{Xw!^Ob#}r z>$cv!w-(FU?}NBhh3U|?nG0~A-uCFV`p{%VsF2WlfJ1zS7sk0E1rTQ9$fLk4`EJKu zT_-cX?5F?LHXlX&3jCpxpud(}n-9~GHOe1v)tFkTI2wzaNU)&u1y`>j zK#qs@LJ{8u-nz@V1tD+R&E6L4XRs+D>}AB^wCPb}UWHqDmv;z6OVSO$TNa?){CeUKCu5z47@Md8^6(}Bn z;HG#C(AC~-k@Ob(B>|+F(tWb433MHS5eIc>yiBGII!;vNkdU@ZSb1u9m*+uw9Uur1 zgJ^h`=Wu7RaPU0cC(%s`uE^A=TEzp1JH@j2c7 z1w0Go05J2{WE*q=QO%4O_$o`&Sg>56@K7UG2kW1=a^{w&K{C1RfRev4W+?9)pbV8n z-89mtOzyluoq!xBT%!NZy_C|mLz8ztVKELJ_OSKiR!uqpk_AH_xWMT|7W_BJ3UA=> zV;@I#1Pd2Bc*%5UgrCZ4eRD>&7J&v}NNWgmz2nC;tmdxdjZ70z9~ri+miQSAE_(4U z*Fmu$2h(R|k|S_{sz`c1qM}aKCYxDt&>9pS<%8rAF_KLMG!f=(n;tt|7Pj(>(f=Og zD97jA0L8_Smxd!nzj&I|KE~*ij~j5j>}R-Sj_FYKLzB~a-%P?!CFOd0j1(07z9%~y zhs1h5`+2i@y2mZ^OO#%6c!TH$ z#wBRkuwB9iKMXDpAZ^ba`mX~KGmKFvb%Kn5*v1S;r)LT3*v=6$i}AY6QN70_`E5U(T$^%~-N<(w^{ZhkEho9-4Blrz7##{Z+5$P;#`qWkZ65CAmMed} z-}B$s?dFrZcx*1uOOdD-!^%S149#uzwv$h3wb}8Wctv?7GARg_sgH=Ex<-d3en>~| z*?rzW+{rNX3Zmccrg>xHgy{~LtbfBIe5IgbMr=21BxPMnfoGDP(MZgUOX#J!}$`I(h**A%G|8sm$pCy5dxae z*o(HXyZZ<58dN^Y^8Zq;d$%#sh9!T?5Z5YFv{)17bnfVZZ?VR(p_k2446uLLs5N+X z1v;Dsj*(=)Dj9U+i=(CCk`*^CGO=A^5W18eAmz+(FTHYOez%w1JNJ$FIC3J$jjn0Q z#h(qL>0vBysq+6?i-HJcz%A>}4?%X>Ikre`%YMbGc>3G*F`wwx7=wr1KlGyA zo*{{z2P-+=tFw4~s5bMphu|FkN>htOD-q1#&EP)FzE4>J*ErCl$rDUfC5pQbZeI`8 zzd>!aM$rTWbK{40v419qntSYAZXfq~cy#NxYiF{*=IXe+0-hr}Lh%hnmN1?yIith! z05W-pkJIg5EGg%t^S(tlP%-AW`aumia2y$d4*{(r?c_G#k5_-)J=os5Qsd|PmTC=0 z;Eh)nR58#RM3pNXv2eajtS-u!@o0#St`d0o!TTxKYg8cFo|8A&2YkXs1|9)U;`T{& zP}E#zRBw^Un@bowJbLCi$W%LP+gQc`h?c%pMAF&=z6_P=*?hE`!M|IU z4B5KIdpvzo7L6fcMkHi2we46lb8xYIA#(N&YK;BkhueIfY_(;z=c6O+qR)+FB@}J| zp*VivT$9|ySpGQAWB$l80obUlc;A~@JgzUw5Sxmp+H;d6Q0Qgget|x!jJOK-6*8Zr zZtlnX-tcBSyrmz&M(A_&w}<-v{(y9V8neQ11iRt6U~K-#A(aeTlnZa7fN}@oWHzF7 z2%1F;(g_rE84pU!!2J}reZZ0V3=6P_dqZj#K-6MQK@!aQ;HC&7c6Zt0=U?8w`sMBQ zi|<~&{pIx!%WGPwk2~!nbHrKTLBbsc=)4FAPvxOx(${;yYG=nMzPt3nH;_%2z*@su z`+9&@+aDdFAH{;$vMqa;(F&X}wpi`3wJ0|fkP#Bg8%^7? z5oc^>Kvn#WByqW>!POOMA*tPGr4a0{jOItABiqma^~8qQz3}6Wz{b8|@&tN-f~3W! zvxSBrx5idx(firmsgKg;ROeguoS*CNQ*KPeGu~Lj$2Xv@pR3UC}^B7oC!PI3mC!Sk$m$P@H&YDqqN|?%xnrC1FCyf``t} zyyw*6Sxm<*t}U}1R(QOKmq4{yPYOnhCCfcFEStz$Lq7nJTPIItv=G88)Io{!E)+r! z%v~fYOVAJqJ#0aHhLcXM$oKUNspqAmKLt#@k7f#iIHM-x7p*AYeL%Umao(#OPdH-}PBvC`?HPePVTe1Ad zd(*^HW@d#Bc`q_Go=5};!Hwk%NEKOENbwlY_71wJ)9!Ut7)NLdi(!oyL%ZmmCeG27 zIVPza;mQYg!xbQqH3Aag$KpXlZ#Rprg^X+ZNYxVy#u`&Q_OmqvL3t?nN9tZ^_nWad zn;WSA;QR^EVhu7KrN5kZLpW8;MeNqt9Jn)T*L1ez0j=l4wgci1EgYm}u&%Q~0zxWL zsBi~r)8W9n*`t^jfB8YHa=O7zt@v+4#`Mdra;HNOq>@KLh~(*%b9T8Q^8S`OGtvts zDQRzH^y6GYQy_C-`qX%gKbXxNUKMtG3kee4uhD+O5ztYv-0;a1QY6RQGjrn+SSoUO zr38X%EskGdiuH!^RJ{&85DL<$?7;)a1J@6IRy*zu9W&j~A~;7dof=FU*z+m8#WVJL zWveIU{Zyn@yy!Vr05jDL(d}MQ-#i3vRzjU0ZR!3>j@8enK779lLO9k}xMxwKwFQ2| zl$v|j4@*E4u#H8(WEzdO_68kQ)iQ|qYrwzg0E7$tPJY=)HyQWy8Z>0vENbw-z2{J9 z#OQ(%#qZ_=qV!+Bf5j-{A8isjUBtVED}^~Qpui%rIoDxm*pMDUgW7hsTzn0ERkHSx zg7e}p5o4X@_$omqXzP#-BKOuT3u@C)Lhy1OjFhgwh|>^&hSjWA-*Vmiv9Z(*rGWY! z;cyXaQBU_2K(mseNu#%h)KqaY>@?FeO=Kr3 zBRz98|Ap8{-?f$xDD=aOV2!_&mMe}$sRbL@mJ$QWd_4AaM#C_{ZRTOe7=b59l703o zt&mIL7Lh~2Gc8`kmqV%tlfeAa43TMRGBnIdlKaJRQjW7=#0vO-;aPk1LhDB+vcKv> zrki83bOm{8y@~++VA%jegipo-7y?7LzY-I99lc9G-SNi!m%qRI%U@pezZVzNF1*&L zwV9rxFVf!g16YxfgK5J_ zg6%26Nl@KR0Gw|gzufeAl<7MhkTBpvQb}E7ok;mPo;-v;i`RrZnPFD?a2~quvvLV9 z9_}{K9((JjXYpc|OyckFq&jMg=J6Uzva|tOb#{pmH5+as@UHBwn8Mn3 z5AQ}K+xp!DbJ;O9Rs2)rxbp^epsw|x!FJP%!vMett6zWu6ki&;jLBeQ+dV0Qk)wri zyW2|^g=#l43$Dp?|oasi>llpqx{N#NzDs)9&H!_9K=1DFNML$&_LGv4!!b!!^2Dd|195 zL-$q!LWKzko!tqLRNfZA{Tf~bskpz*o?~aE&cDKlf@1n#aWFae;f4qx1Pn-rFeXCx zxx0wn{>kZ>4bWzgkMK^%TYxrZM)cB6v{*EZZb79NbotZ`WFzRsAbO=Y(tB})i?%!S zQ#DSV^h7bZrO3pr>rUJ$&qp`W?CEy@bT0u(YpK$1E-LnZK!viv^8@X{ruHM1GhOQq z-B?B;9#ak58Pn1(dU{n|mPsIRV*j}9X&wxt`7Ys_^_p*hGiSI!h}#5HJ$;so%3N9H z;?}goI<*&GEt@Tk6Zk1K!x_H*ls)z^vpQjTv-Q3SWYvjPVK}(3BWJ0nphttCL2T9D zV^D?i#e`__*sJT8Y((eL?uFve?vbcejbLs^(P-+jjzAgGJ51(%FzK0+RU zE;zKrwqWsvcmMpCf%O}U_?Dy)C3p~rHuroVWI4x?c9{K76$yv^z>_KfAs=nf9mBXA zAr{1=;>GPH0X8;MT@9qw+s!?zhD0}K0P0onerH7Frc!8!2|3^ha*(fn2Z*cBD@qI` zwW}6$>SW)rfHNzIp1)=qHrZNMrC%_CtG5&^fH|08MDZ;;xO$*M_6$ z=i@hVcqedf4ARXuwco z;phhWWy-`0M8>EBgllH=v_If^=mAz545?YSCq1l>cN9NKT=AdDH#|G7P_@7n0$ay| zB)dxA+#lp&422|HAqlXgbwZKEKTU6UjdgQsa-C+3dDk7k3k%JMyX%?{Ak(K=)=+v3 zSI}p?Ai3!qs&gjP%s_!dD@4OJj9afx(``GxAKSLWCTy_dzqL2_sNS$2534*F^{^_l zsW7Z57x}q|>(V7&Q4BrRlIenjmZMKM59bO17M>fLz!!o878Zhv11cVj1tOE<6_e2y zJI`9YJ^=(!+5#>YZh7WwqQ@=65pHFHP!Tv`N!}mR`qQ*P0ZP3n<3gT;J4vxPe3T#) zGw2kILlIuxS#4KeCDawG4KNg9k!1-Lm!WCv#mXNn1g(8RkrZLeY0{B!^z$|zuz)bW zsgsB`9$cl&n8tiUJYJfXru+s`51{mZ2O6|2$($72Gwc8$-Ipt@K|3C+hPT?U%L zGqe;A&&JZ7Wj|xX^7Fkk1oxEqSY}DNT@0*+=SRsMVci_eR5;GIPQcabMp*khRF?;| zw(tWU5^HM-ddYgEs2R~kwXsRbf(PTCreC#19z9%eqSmm;uCH%yK0&{0!76=fCui2)sxM6s)v@%?TPiJHLiI+P}S1h0x2*EhBZusF><_0aN+WCmP{sJE2GGOkhU}w^d?{G_ZqFk^+gMYkw1Hh zD)w{KBay;kdc$nHlL_HETE%Ldz*?X*dkG?=4m8OR*%Wmx31i(f^wCea_%I05{muTjXc z(7za5n;-z7>7b(2+c)Kt%&nv)CZyhLARUCs=&u8cx0%~({A$tb$u1H>e;$dUM?+6y za1doH>Sg3s@$|kB_pwe0cc9;e(0z3ci0fLwDS-p_orI1G$NW)*svXAyyorN3K@5@5 z*9T%q3K6x|S9G(h0*Fy>lr*r^Es5%>oi z5H1sJxP2@>BW1p1AvPu*Zw%!+D25O-Y5XJM;vf5)l3M~h04gRGS9W7mv1K%Bqpa8B zIZj0miAb7_`TH4NQ;5VdSOnWm=z$(V7|MsG!e@l4>hRpsbJ{=jI+i0~x2!=_X0xpb ziXrNRv)d5&4XjkF@;wqv?Z*dxJ-d>(8!Qe=iZg^a{qvoU2Id$Z@+ndE13`%A6YDfp zk#ycJrQHbWE?YsK`?c*C;>!Jd6bc1Io)IR<^9i0DA!j&)R;z=Iw)Q5;XnRmxs+L&a z{8p2{)+tL1;zJpo^R>&xkTuHU67@q!y2#Wi!X075O*Tua2OjXOA*s^Bxebq z!DdPfuj2B=EJ_KBL+3s=m_XqHkg(j6ccRaS7h!lANIEC2s$($M+v&K|`dVV`SwQ3E zfY+>5tKBfPCS4BwJv=Pv)U6ucl(My|vGuSy9<7%~F54r$cfni4+7dj!M zYZ^|s=-_l#135c>k-*(j@}rknLD!3KYS7rAfEe=HY{4dBphjx@*QK&8x`8ciQ>j?v z9}v#q?c9<(r3+B}l`!!3&=ipqEdW7qHAG>6YkXZkQ76-vnW){KKmehRB~s%Ov_FDi z@iJ*f!ea3}sq@ht0K-E1To4s7aVX<;rV0+zvP{`ZJ}5@cw^+vzH@x2s$_ASy9`EF% zXzGUrLIa_<1!RbE-&6J?X?s*Hg?dFHD-N8Ogg5oWLa5%{h#Yb!3`)50F=T=9Hj-6t5j0%kUJ)iD& zO}bS07MBbw?ZW(#7m1+nYR>+$s3>2c*=6Spx(j~T23|Z6WJC7)CpfD4jh>lFj?&8p z(L|&K;+X?Gj1v9PNo)k#03A6x1F$5XI2?98$%bW#hmK@M;o;uqadwlb@#T`6Yzk_H0 z&UCuS_nU@m>(5#aOa?eoks&SU6Qyh$~CoVj}cNM=Vx!;gOVQO z)a!KMLcvrZfm1EvXoX9CMFc*l?u?cu?PBnX@T?BY@%h~9LKG6F+9YpKIk!@L377aC zYW?g)3>+kAK!%bhWhH_w>5Xgu%m<~TuHPlO`kpvT-L4gQL)gIQFrKHUwCb+7T|6w| zgCM*5oY}v?KEA*W5jT@9O8)+$rvk14L0@7kIC=ueLU$m(K%0=yC_Le9P|UdpF=IDn z`og9f1fgA00D^&hh`$wea-yff5cx{;Juvnwptx{Q+XWK2$yx3D4dNdBXq9mE3{Qh< zCaM=C)g^#^RCbTfGpLgbx}XysMuG1n$T}DJ?tv8oZ5+=My>M0Y?XAw2%K!MemoxM$ zz+n;Z;8xMQLzaUs@dvL#+lH+Sv{oH|>{&IsjHgRVbRuF`a5#uC3B$v6Z95=N+HzQ!}p%Es-KiCUQiwZrVZ{_lBvlh;b})X;f$?E ze+qadNM69hwg5OVoR5brE+nA;b@xf1Q%Y4V3COMhL?VG;SRpxkdW!Y2-9Qqkbn#wr zmT~Xfd^Sc+ErC@xH`*(q%!4Xem&o-qwZp|ciedNH7@kz&tAu1Iw)Yi1GKG}L+Z-_oYRcMxih)#sc)6ERoe!zKAlW; z45*Z+2YcCtx?{T^^5s(uE=s(Jb7NWv{Q>2}{h$KhWi(c==C$^YH6i$q@vi z3)oP~yvV%P#M(F>+6(u{Dik{Y>*j7<->lvd&|NFu<~8Gg0!|U42()cyF&SZ!KTo_L{@*Vq?xgAnm|a76u0N8X>Kc?JFkaK`3T+(ZWm zPcbZN1`VVxt@4*>QF^Fob^wfnzGp0D5^?Dhb^vy~rsu@B^EoLa$fhu~yqi0L_~`du zATDV5ym|U)Lt{_Cb`GmU`C_A9Jsly;Y2t`T(dhPaq&Ug^Wl+AVo4{OpGwymFG~6Yo zwXHP?c|__i_IpNZfkp<3SoO*R?ew);WZZ>4wCrTxMKZ&P0FZ`v018{t-4rY?T~3tp zz$Q}qPsaNNKoycBLV}V_jd{#zY!+NdNK7H5Ur$Ixy8_%?4U>oJLc9aT5XpvKm^FYG z0fRy(Pm9yGB=0ExE#t@X%-*Ui9TYPP2OW>~F5ni3FoCi0m10L0IlVcm-D{~T0^jiW zGZr$@X$tbAxyg?*uuXlmO8;a|U)j`yg!V7rSu`eO>0j-KTL-rR<3k23afufXTo+lfyr>Caz37r6tOtm4~y(?C>fh zRVFv#R#Z8$VVy6~ajRK`ldGHnsI3g3*4+K3S`SUn4OmdPUzADuXHd9ov%05rT~XDg z-%=xThE-O$WCzsiep9?K!KmyWZ<~YC(Yk~*3sq7iXzKHa$Fil%AQJnQ@|yYtx;f(U zHHHH<$UdBPdynVw{G81*bmIowsO>y|zx%Cy_~G+?Z=RxsX5*Zn;2NMYGxjdDh*($S zH9|<{#=vD~3>=zA*-|BVK*5ZBQI8!&0tS77qUd~XAd+yimjy1znU1_1qG|^4)*!2R z{k}F5KU8{@@RoSDw18H^rA`;<0E7N#%BD&1M4#g?FE00>j*@9v&`hJ} zy{sN<7Fy!a`sRPP<{N1M{)PH{oPa(hN?^zrmXNdK2`2X5%K_sRXQo<$W=^%i1_iK1 zxV3N7il7*WJs>Xu^el{8|9*cK#gT0$+X5z*Sz~u`8$1`JmRkr)3ozPiw$3u%xsNk6jH-#n1=qN%V(d7SnV zYgX?>Rwy}M`DxLDSz|wwb_lq)!^Dbcx1mVW{sWlNy^)c*U|ta()Yt*#l;M$jvf~TS z7StR)3S2Cm1#IWeo>qpS=~DmpqY4swH`V4wO^dA%Mb(zFfP_ww@FXw^XZOBS-)|QL z($&>>w{pN<2f4V&(0_yUi@o$*+an#A$3Qiw{Zaripd1Kka+W^3Qsl^j2X%)d9WtfV zh0&Iq9p2DI1n^br>4ohL|4&K{6yxH#e2rJ@s4#K6sG2v}`;M|Gz1kS2c1@$tvXBUS zo5!x9Ge>YsGwF>dn0g&a28J0`gBVLQ$1aB|K=O!Evo^saKE|4`dqx100gYdnw8ii=&j-}xt_&i$~3#R7e(Dv%3QoLqQz%2??ry1$cp}lWXOB(DS4a7 zG_T>Sk^wdN4aJ-HDmsHW>+!w%soY!F;}xArACml5$_soUITlxpSBihA2@S8D(6V=Z-fOEu-;t3{WB(+tZ z;mmw?yzyS)>HrCb!w1jDhi_Qx>EJ1PO@l*RFVZZNJ|FOhq;XY3hHd*zDG?mbhF zy3$uLKqeKI7mYyu7-ylgfX1a?-FETQ8*D(fE^!JbT}BCnR>CYCKA8r<8ncA=?0^Cq zwpox00+;2~ZE{xw7Xc)43I0&vCv}2$kp3Xcl|4e9k9$Ndg&SjCVlG@ zOl|SWIBfb;A!CU~7^WgTG8KI)nnXi{*K{QPSUqyb!xS|q%TPp+i;@ha`p#|OL#Wy# zlL)Md$+=7~-!I;a;!e@h2$Au}bS1{h<^yO{oK3%vzgvP^ex!cR9U?DQA?mroRH$0V z<2$O!m1QHcI|JO8W*>S8^2>3>nA|-vNSSOUD&WI zuxNefekgE@O+)<)RfIA=uJ45=RGI8ICzesP#zEY{z5sB#LKVqA+V8+WcrAgH2p!YE z*;b9H;q}uaif4?m7Mu&hJD?9J$H!B703jk#FNiqtQ4y&kffmYVgT`Js&oE?ODzIg^ zISv!90XHC7aa3Cta^6AR_%IE>Kula)m?b z5)pAq_3B zu!7253onKbmVFB~tQ-iG)*dqELmdn$fDJbVjX_@Ll4P$T3$v%{QSBnV>FmUr0*YZ$ zlF!hUT+)dlj7uKkT!>-9NJ|o+we*(J@WYKdymyPPFUm6yQ8vN?$V@Z{@2wF9?VV|g zY@Zi&u}q0rN@`j)ypyG2;W`PR6v38Zxr>hx`$O_{r`l@;^td|_dzP56)ZqWy9Q$&?W>z`;&g4RGLnv+wiBOpM_hSoMR z&B;TWvnp%fez)1P=-jJpg7n)AL7A)~Y$ek3pPncgnx3Urvr~GOVA&<+yM!(SwK1IU z-%a0cC?hm1d%*0`84PzdnGCwm2;tBT=qt7ga#Wxz7A1CLJuB8vH<)8QqC$WqxAo@c zNbAxP$pKBt>ngl?k3wTGDPs505^IaoFw<+911Je%qMcI!3TNxZhUk@8$1^MRQ4sd| zxT6{-;Sxpx;vVdV3yL&3screTrreaF_nsa5Mg7oXhD+9iTC)R(d)Aw_r# z&kuf(sem=r;@1VbFrMcRjQ6PdL0F!nWJQ*-3ipYIi80|6rP&Dg=*)0HiS7%lSZDIg zkM*a3EoH|?T*U0a7n<@lZ8sP!bSM1f{joA9mK1j~Cjo(mwKj&Q)TVHFh361Hn#WLM zw1G5+>fq-?!oc}dTe8(uP@m_(7}yU;G{(d*<;sQD?!sO>tv3npX-nsyXY zU^oxb2AjBBroX4kKi>Wf9$R1Wz#@%#gw{ZyuJ(qE1qW9Y8@{{1&IVtro+fDFWz)YG z)m;a#qRUA##Q$qmN3Q>;eJ}x0Uh52Yh!{nb8p1>M#dCcq9jc?&hWicIdB8w#XvzIk zzxAQ`V#*!_On! zCns>f+ZrDOjuX%Hoj5VvPJ+9GfuNR_x^=9UG*ZiU&&B-r`+Zd;7r7R>9@0{Gdy)Yr zElXsPEEbE!dP4KWz)+8tF#&mTD$oMy2>XneJCeW&^W22k1-J+g%-~CTYQP&!RH??X z^EVaKs3}N-_ZT@8Uv1wv0-?g6G1#TE+aTi!gFfMc&fG?JWD%pl z&{K>M&mknj%&V0mV>`03LJJEwWu&Ij!J_J3@tQH}UM={FxuQB9-1YYmi0h~h^+lACzh?ey6iv2LPx{t*F`dHns4>TTTJl;plHOP>jQ??@)3C|;| zbL}rz&sMkB7jx!#IX;(9M<{JElLC4$TJnTJ>3MVnvw~nLb;6##olmE9I$s^KauARV z9pF>mFJ%h;rDFhD@*6htgV%v{!1!bT2p24b7jJ7c9 z89cVes9}eM{YY74`{z2yVx?R- zFdh+w;GK)VH5ZSt&Ei}56d@2JCLKaRiyM=;_plWtdx4>d1#gfnNpX0E>a3VMGU%Ql z2Qvyb;-O^c-rTYX0}KqRux{El{4Dg*jC-M4AoWWaA*17x$%AZZYG)+x5 z%D~bQPPm8i&LaeM=jTiG@_Ps0OI8}=Uk@3U=|W6xHDHJ?65~S@yFsE)1~C-6*Q)iQ zD-+fMP>4u4L48*wyhqvzlnoM4_GXLu`^eT;-fUES!YKf5A=#+|slouIsA6EDI(mXy zZO$AGNxK+8G&_Mx09hFi%)AmD&3LFEh$Ky3EiURRSlfR(A9d>XaWCw_0UmKl2C&Jv zop3=SYbp8~LB>FIIDBVtujXJt?6d_Q+zc09f^^&vvl(oO{hP^kh7c8?{pkS;_MpZG z{+B(&J(cfZmHPGA)$zoIe1b$L(8?gAX3(FqPSKv@QUT=An;Q6@p^Cym1``QlnOV0v zpGLKg+t0d)#84pK`fQy9_Y-1VyXDXKDk^UW*%;h{Ye`#;e&JRYDT)dxOZ@7*q!*xNM(Ea3e$5- zZFEQ*2lYQf!cGt1)nUdK;fLF4b3Wzti$^_Xi~tMxM=)c@V1PnkJHZMrhtmtBMSwDS z|HzJ^2hA5DkKvb%aExcq_MSZ(o|vh8S?Q5Z;7v1v;EAl1a8EQ#FrGTzi&XD4kr^9G ziw8*Fk)7-vp^(-giq+{hrDV3yg@ULbAZQjvf$1r)T@h+2x;BwxU98SItpxszk!r=#sJYf+j427Y7)gJR=a%Ct827!_aXA4nrW2CgS zgS41@Da|o-pGZamib1I(1QzM672sgG9NeBp?T?~JsE_KiW`eTMi3{}0SP%k1;Cm1# z4(<56am8k;QDpmtu?tSScBrBk8%WC7sU|adpLybtkQ;w}2Q7wB7LrRLVhE(5enux? zeK5Y`QG?nn(1qr=L?hBtJ`0w}?0Jk-KSttjgeB)-Z~ciQ&ko?%s|ODMr<=&aq)@Bq0;bMjjz%(`>rTty1pr_ zBJdl^zl(kF5XejZN-9MF$Zl{+#F;^5CRDH*4UohGAz-Gz$#-dPOigyG%BHS0diDdC8)a9>7o@V8;GJ9fNz>5t6xRFtTeMn#M z@S-aPG5quxX8Rs^32NIKBFhDjmn#uFKwlJ}?ax;72;o@4V;@u^ zVuvxbv8v+J{i9=uqd=dTk6gAX8*%=S*@FWLvbG?O2X1AV>1&LGG8<71e1LM@)G*dW zvCLGlx_QYAvE|*4Y9~X!NxC<2C^MEPFC%8O$& z@{{{3;`1)7prLiU=`x3oqo-r!9!7~Cq~3+~${WR|jyYUR7TM`b7<}I1!yc1fXf!R< zW(cShwuk((2QYm>R}Tkr3uOz(M-Un2hC*%6#_%LT5k1(Yf<*yi&S%Fd=?_q-zE<;( z+EoLng%Ox}@)TtdbivKULn#XiO)NYjP(>Z@E!3q-mIh^Y>=C?R_|O^HajKm|x-GN- ziv=>#X9Gj?$WQ{upfSqV9$y?bo6ml=vkKH5GZcnd3d@5>H`LI0vyG4s=rGtTFXjYE znKL|J;2Hu?sjw9oj!lWaN27xlu!c`FjRGJB$ciYDdy0w~h!KX;TaH6DKKJ&;W{RT^ zXK*Sppj?D{^B5tnP=r_*dr0L$R$?xOF6ut(v(8#w4a9H0fk{PbeYt$4V)I~Q&g~F> zpC>1%Yz6NXgo(=f;0Y~r^Q0a>2|zK!aOpO)Hse?(WBVweJ!kev@$ z#VqFv#&wnYN~uS^+C!h=bUn)Yh?Rwsj!U7UX$*fjxQroK=2&|RdyOz7k=)6Q>Q64R z*iw>3AuxthdSFFhzY{lCya(X@c0xy6a87>?xdYVTGq)3OhcPtjko&WJ6rjnuw^6t4 z`R@0pK;j%+g^|X{Q_L=KvW6mO!f6}E925&1f~QzWm6!C<`~woQpete}kHBOQ z+5&weEP;Z2>8jf5J*%yTaTh8(gp#5Yf<92$yR`+2rPQk9s-4_;ajSK-x&IE!bLTydU?~0l5vZa7>6rbUR=ov5+3G(WYlo=f~)7L4|Tjkp-_2Iy7mx1{<)s$ z?T-i!F^(dq-ARVXG;bB;>L%9q2;(95=)U|xidtqk#i%d@!sQ*_GqB!)*!<4k#Q~=p zXh`;vv=nR`vFtiTd$T*T8^SvU?i)yam7!p8KGmu>tl4N(1=)X=L70VYE$m#OpWTDM z5^|djjcQ^9Kc_v==Lol74x{}-F!v#<`N4~UrLFvhRLtdYF-PpNuPfe%izKFWg4aWa z5_F1>>Ra{jsaNb;bK^?o>Q}~P`_-RZA#1+QaJt5Q+F)S?I-p7%$-=?HQG3cmKJ_Vk z5^pj?5Dy)T5SPsuiUSle**iRdCI)4K;p&p_7vIx1LVBM`D-r`a_k{(21*fT$ZLCq$Sxl{`LoX^H$~n* zd3vfaiQf?rCl0iISb*@T&&|SuLs-7SuU&=+DAf+30D@!D)59ZZRb^g*MPs~XbRTs< z$nuuGXC?#}q+Ow0L3kF5ca4uS$U7&Hl6kRuxRfn3!0_w7%a)8+r+P>jJ zmu|&i5;g)w4v>)$5w8Q35%DJF=lX~G2{G2F1!FS(BhwMoWY18{8D8Wl!;~+@^C*A_ z&GIqU|AK?z$&AM{1WS|xg(rb@3zNTvOrt2emk?dbsODU$-#cpNY9$>9W`OV&ICUW> z#s#AH?F@qKC^%V&p~O=K*{OU}e|eL`#}EHib~*LUu?Sg%>%t-Ojv)yow0(-S_BSH3 z1ONt{h!K){V&NDamSMeEgy?0??oZli&dcPaUW^#z%IJB$F2Dzg~S{gemQ+=j@VkIGW;6F`(Y)T#dBAwg|e>2MOMbcpvYF0>5w z8<5Y^4n)#(;iwD~g2w^3geEqGiVqO(12v*QtAJTPeJRZHTjU*7<*-VHD1w7PV$_I0 zo~etVH|fB>9u8L&2*E~qC&As~vX2ZDH;7DvTBxS>?*Y=?BO^VYX&ExbndzCEYqJbN z@DWAq7E264u!o!h9Ke4Qimg-N0oq|)XgOKp-2;A)xCLSRli7Iw>@7c{+S2@FF}O8% z2OO~Bj0SDt=osnOeE{}IFe{xL1SJ0^8ROB3YadB`Q5GH90A)ns4$B))L_ii=2q|C+ zV`!IbvzUc|udSzfx#uc}%Rb|)5!ZYH*(`&F6g9W)gxmA&49cAG3H)@iMR3;Db=b;W z%6mjC_7z{{?3bmp*;4gYwzG~cOAzBoeQ5c*(y z2Ck#ie7FxW6$ldKEI%OlI?Iqb1~}e_;^P9IP6sHuj08#f9?QY1_G3O`-VG$?VkkGG zOaYELJm7YY9N~~QEI84NG`hyhE*F5wyc%$Rynxjc+DkLVVO@11It2IQCabT6a*EJmw@^h`;!N_Rs zM&;gC0%S2THA1qI3mg}b01Tf{WmcxJS1zV>@)n{6HMxiCkc)(qNUpjf*1;3@VU>i( zgXRv(38@*@PbEkQO0mG6djt>2W26g4Iu#gn4|HOFqG>fTo=c*8n$_CeGl;atbLj-} zq3~U>z>{hL=88GJL0WQSYS@G7lK#vvu#E85*Qpu(Z#gO@l3i8(+xMYVI@*5j7cH&?1RCNDh=&8NL$Dr~3 zJ!FM|S{PoE2EY1X_hY1fEpNU^X)dDunF_x65|~AhC5RPS@Zn4M6emiK=C&d8G5~-h zlQ*)o!)aM8bj+cDCN!!H{FZTVO<8>u^ZJi~~e?1S|ch%4)o z1UZoWVt-0f#!-bc!w}Nru@sQ@hJYAdOu+`N7CBA4I2dy7!wnu<4>)-Zk&{zE1@0@& zbCo0=q>mskqt?aKF+&e6MpQ2ui*=SmjD@)O)|nTdCh{=LSs+W<0BLlP9CBZ0t#_8* zvxm$Lm}e=0Zw}UoQo$(TcVXL`RSFrJIwOk}u9)}B+jrUUW91!MdI#b-Ga24f1h$Xi z2w-Mpbg$SukM7M$;rfiZgz4vykTji|bOfOS*8%eK!gF(Eq5BataJyqR@pG-pT^dba zuZ0&TQXTD$A#}n)JBM0nb@QsAK)ag3zCOf(f}YS!N##p*VpY+t;87%(v+u-ee0w&| zordru6g}PFKRiKoyP-dgLRLFyNs##mu_?@T1}(M{y1FIlj)EQw*Dw7ka^imJKdjLlw!>J zWrmjDd}DJN|NR%aI3T*obGQG2S1CeJk?9O?N~Srt>s5i@mvmTY3?amblskgWF(3*y z6AxZIRr>;&ue6jt--V*eTwu9|qUz`bDR^K)XA&%r+5i}O;i3gW_&X&Zk!#>QDCHsK z7{44z`cKazNWw#Z$>fcp_a=umL!a)WFgh!Bp|Bt%RDY`z75h$L=V6**F{6o=0vH@1 z{|O%Xh<8R_o_zzxPkzeD8h$R9(BHu@%NK|*Eqwn^PEl(}!n+eb15Z)h4+$A9c+nM2 z=J2CaU-4)7Ac%<9&^VB?&&c687*1}OJ9hdNL&~8#Z3gR z=$Y1#SxjbYsYE(LUwDJT=KwJkNZ_6CU7)W{WSxM34d-A)-93f$_tfugoi?83L0o(% zNYKH#?^Sw zn|p22u2X0jtQiqc5LCuvMC0N904Y0j6hz|;_Kt=2T>PQN88C1cb^_$mfw|NI>D;>> z>Hy?vfg2uNhw;=kQ*Hmqgjj@{K_lD^AbBKK*Cn@ygZMVQoS07*X$c%0-rYv#qfw$h zWDZC}EIP`lL1c4a?cd#A9IM~9ZS2VOb`yZs_Ia!&86oVhg^vSZ};Rk~spyKt0ED5p!e!3Pb z{a!=*WtNa{zWE>g_x=1sHY<-86@aiIFqUD~@Pk7vpGVeJzBYbMJOr^LtA7TERj4a1 z1T)Dc+^L7qzeA;X$rL1z(7!YPsFczR^6tSH0hcFxD1Zd}=czx*=-Ja3mseDDb;XA; z5~x2#@*?;ujE8Vj^_EI;$9XF6?MVna)RgPtP1E#(1C)=}xzBjOu4 z(ypcwql(9B^2>9=K-0w}3a|KwWcL!H#kX=>mPj;8GW&=RK#Ez!h9Ui@9dS2NXo!_R zhQS>|3-SpaTfAs6q+S$>DVLsk*m$UJGF0h#2ACES5kx)DX}Tc$3G|%CH44d)5z2)U z7@Q9T0XdG(R85oCr0hnIatZ?}iX$L(9}KN_E-KCW#H?=j=ZG%QtO%3{P;LMbVyL8s zT?~8rav&n3k?89g9JY|3&o-+TkDEK4L3KZbcvbs$I)Ya|>uDp=_9-fndFP^u+yMhS zW)FP>m?z2!n4>Y8(t~x5N2U1?v+*2@n=9npQTBP?gp&?OaEu$Dppq^O4Jdz_O90gm zxnl@?Fl(Q{c^H<_taj0eMnGX|H5^?NWguQq>q88XVi!dQ_p<}ms59MDZ{jdE_ZWBM@B{qKuaSA| zW=;TWnAyGOoesK~d2N(W8zkth%w<-mVcJNhu10QogwU;zWL z^KyKJ*KM7vU@6J6rs6Qp5io}#hcl|lqI@M1gXp>gOQaN#fEm)nE|le%)cffe>8;`Y zgCrpke~~0wXdp$mC~ueRa+)L~L)Id^n_;7ePcNeI6#9|L`&cSTP8T~-gwhBOQ9>MK z{+3OVsWtX4cy^5Q&VrE0mV%Hc1@0J>`=GBh7%!zzAc7pA9EVj5Qt{AslCAPRI-aRR z$IsBR87Bsm$wWDTgA)Wiq3*94Ot+Xy=wigQdC3H|-ZdKq(tCjHfp)kjBYBL@S^?o0 zTfblAEXtrI!lMM`_H3&y!p?BL;mnSaAv#y0JUx z1PV&o!bzYkR5Uwe{{*rS?|`^Nq|t*C5`JU4reh7S)-~xv0;~a!lCagv-?OHPL6Kh! zY2@G*a)P2s4!j=}8`=j?s=M=Lc4f`?S+{hrBT`N)g$iXh;_H;{D?**-JmILW8-Ur#aF;=H=r z8Z7Y<1it5AK?~OFk!Enk4}n^7`_$BiUq23iM4CZh?{<;lkJk*h6Z~z9jWKmcY~Wgv zm53Uoi@kcpqO^uGASR;pcdtkH^eMi??tcCF$)7vePht$D^ISYx%xaey35nh>jTj82 zkyJN`ELI6lGb5U*;;!uVj2%!uOz^G%Er|0YzSn=22tao2dVLcm(6{W26@OLPKvXA0 zOBI#pT!LF3S(0Y`qVricU1iUIBd-7Q_~0L3Kh{HP62tX+=0hJ2yMta&wN{dA9@I34 zngSC9(zxKVgmXA9Z z?sE{GN`b=VDGKhM4SPM9FP^VYzkY1KGk-K2B~Cz!``98%y&hYDogzg89xgW-=+hi` zS??>@h$_G^UkCi@2BYa@_QBiG5*y>Xgo>L^Xfg-0*Q!pvp2kFh>7dAyt_f#wa-n8P zXv4tHFx%O@`FaVS9JtrBCZ}}YhMd|ivFQpUD1T!LH~$TFn}1k|3)dYZ}iN92HQce`?L z3LG=aJ9q);4{}4xA+NkC$*;AUfZc-+PEfF)coGkk2{h`cQ8Uh z4s|2&eLbmscAVg0i^MZot8ZQb~lJ$Mg`97Y1jOU(ULrW?xg+ zj5QNS*i+#)G=KsM6H^Ts2MzziMBwZ;yDUC@I4z+x$Bzo~csDQ3;AJ4>0nSsr(}lyf z6}7gLo64`V`Vs@!m>v` z-|}m^xFLG@3#Ye(U25|ftDv;TuW7D}9O{U=^`*=NXs{PVo=E&~6it@-10CGHkhY$0+6(vw_{xE@TFq{*0xl9&#o4=+dP z9jZ@`&kdr)_oVT>zkbYm)esb#?s-JN&_t!9CeFe3OKY*Rrb`OQSSi>(U{fHBa-(je z921JYk5z4|`zNp23r){Jaar^wM|dMMJuct9zFo!gpXBXhPQ2v%g#JbHZf*u-2qt}l zd{h-c!pEu+gs9}ql|G0}fo_*umaUY6eX zZ}Gx5^0JXc)#||ak~nWJ7;piP-pCMc>Z<82ij~&Uu&8?xGl-|9$=|c6VH_Do&OQ8g zW`jx_kf*Bx5LpG)EpeE{&J)E0d{=ut^;Cua%|u57NxG*6#hhR++T#VdNfM&Hg$vM9 z6CfJ{gg=d$k5IdjU)mr5YRo}cjEBIHr+0&d zNG$V~7>OOuCHw8W!KW85fEF2E`L6tmedl0TU8@F>@|F5%u^uJVLNAsBK7g z!Eyc$DZrMK1rjN*h({l`=GFsvA)NG$t{kC(R+}^{A(0)TlNZHc%#cLpPbSyBfTH?h0yt13@u^!x=$o zYHnti`I=OvjwrRA;y41S;qBs)4-Y3CJtoWf>^eTXTsSD+iMjIT5K~0?!|3Yr{z~aZ zm8}Nm^m?x(KqscSm1jCMwm2-CO`%A$+e6V8sV=DSYK+N=?wGGARVfC{ChSw{DO*B# zaDx~&Wu2aHhW4jnKHl43bcfTWL|Z>#uAy&*o#}*LClVwD>K3twq!k}e-nlK_5^{PS z0*iuMy?HHe?<(HP-J$w`M$7opv1)rza)NpV;e1s-B26r2@kJDmNmEGRDLIceFY?7T z#FS4+7z6r8<~njhm|Ep(n&3tG-Oq2{{J#*=sn43kcqF9<)Z2ivt#ipyE@p9Yhgz7(MLCCLk98kmr;_P!NG`sP+eO97=GLCBgr|qV zh92Ckah-*~==t5}RZL1=7wyu#$ecK>yss#4{%Zmkf&ZCAT?DM8XZklUig)W1I7Z;nus*eVkrr_D8BpOkDh+(EW^EhUrb=2Tr%_gcDvSN)^w4;PX8JgBFumjW$jBNQv;POg@5r{>^=NhppVu?9!xHZcSEe9G(j+)I{ zWZ8#;14sbJ2w>(;^z}7W(__2HS}i3wgAA4Crdmg&xguL1uhlJ?T(?QP+;>zY>837ukrL|AMsqU+0l&NU*j=icO{_GvR&KwDe8kr ze96sg=owx^i+K#trzO%jz|Lp%TcS)Xx+qY~$aax=P|YY&5QcR!M(qL>*!ee?f|2@w z*@9C2bDuE3`wavPUi_ltrG=vcijB&6qSGiS<&t)1%O;w(#|@u?WuKuQ){iMNOI|ld zuSFK0AX~gDa^ED`%g`2!-6H=Kb(SsOt$e_5kL=griQDNBqF+RP9l;{l~xq1q%_)p#NJ!-L+K zM-T1I0}DQ3ET(o>__{9f<9X!YeRImHf_rfVH#;{jrE`&aY17Z&I^U*)2N zNa1S}h7`8w%Y(IX=S@0d8&;4;BD)vf4|2S?JiG6EDWk7gz$5Tx$OQ+ zRUnAmCK7gR?Qq2>R=cqfU+B$9`a1GH0UJ&ztdp3?HF}(JMV%`#z^c>1;)hZ zW0Rpgl+`?~C=gVS;1MrlBrBzZ3s`KX+3ZqiyGThMpoU^XCAigx$pTqMFX82f$PIib zh41AWuRNmNoV()O+>=99;iV(G&x6umtXDj=#mMbv|oxMcB=(#R*_Hpm}uD2-(2S4ndZB*8UYjwIevTq{0WIzCDXtS!-sm0Yv)r zAFujAwUzo%M9dyc@j1!G3BLekWPSk4#BV9t#hSp4NW&Z}UJ8Vwm}oswzg>@wr0B_z z_D7u>2~)$Z3}}lecfW5nGc#}Tb{*0e7@BGXcd1BbPGzKx5m#&HRxP*061uo$Rd)4F zzEt7Rk{a2xTv_1!TbPUFU$-=N&Zi$^eJBj6T;IHp-4mzn@VdUz=m)dU-VZhNz*7ea ziiC2!PMbnQ#;T#wn{)teJ2sxP7Ul*-vDd2s7z5&yB0IR&KB};243mH=(pVc5Tm?DrU3f@0`Vnp_E+Zx!`F}ZvK&Of+} zKROp$oZ!v1Mo2icB6hjOZ;RK2{+{z%CdoD56$PtGqLc?BV=Fibi>=0t7NH?x^nxe8 z)Z&PMaHrIh21}m6<%kNy6a5FCsEHutJ?7Rk zzH!CJD7yCBk~nQel|-<$Y6-$TZF#PStsH+FjBE*jmlaJ1DLJcZ@-5`Q3NZdm;xb=F zXC}HUPMyz~nl4H@Mdz2Ta9%U2zseZCYr2DxH}+|TXsj_;D7g3`cGms5#4%nAqF@)> zJWD{JD=WPGn!N}0`IAk(&`ZbF981~=vWh5i$VD@rZwaW#AF=|CWqmsJ+D&kCZSZ6f zuN!+mFi8#)B}3_qENg%#VgsMu@|G6)gQ9$2pER)%#rH;!LiPJd56UZbq29^(A_4`& zB{#LeuIIl^xg4+ z4vpzE0rX-0RGs6mL5yr6-qz3GDyws^#y8C7_S0;N6+|MVJbRj`-_)E& z(nVCNF*m(Klb{95yW}0)q zkU1u3O}9auttO4J1-NwVcth+vGEX#ViBR7vKpGWX)k5!Gife+v_y0cGKc3aLYs=C^YIuZ`cZGLpiY_f`79HFq^d0 z4Qm1|Pgb&?4X?7{hw4sDlgJpzvz!7F&e9Azmg-EtT)HWSZ)Jn=3}?a+Bl3biT#$VY=AhIAqF&!cARv z775xqm&6{n4#dqo#&d9v;dgFJs+Kqjppy4kNcq(ovN@0UM0+%CZG=+gADXp8Gix9R z${Wr!#9_Lfs1Gm|m?km(v-vq?ae?5KZYr%--X%Z4!D+qt+kA!LJS~L!fU*R_+rbh) zW&bo{e(?twMdYZJ@|ja!o}uT@v(;dnNw6|cd9t0!{iA58Z?2+LB}7vQxO#fL#j0E6 zDl`gh?9*`Dc$`LsM_7P!4_a#Jpb_jm&;4s*TkjUg~)I8>&xXO zrIkoCWbpC5Y(w~p)MDQ$TxoTDi_xkUKxg`A;!=M_tt4bnu%NL>`_UZWs4n@8xjTS{ z&kKmAidVJ2oXubo;ZIgpc1BgnpCEoVAZ5DSyuQ9E+J0kgiib}&F$(otTZiQJ5(XWB z_XUw=+BESs3?9SO@L3-T`4!oh<@u)A>kw?dB`KitePlwD8C^)teuipGGvyq1^k;uX z(FS>cRV(C18K`K31lqZRfD=VLu7@Xn6XMeT939l3)g2CtCq17pI&b4<7|uGNfOre{ zT;GG&j#qUkjW}Oxa|U@AN}F6Q6XZG3$xut<8q`dJu0!`V3EpLzhUwm>(1wt9unn!G zVAU|f@%?6qgY|y6IF|@IBl>P9lqO+!Ac-bnhoV!{_eBz1g}4EMfcAJJSH@+D*Ak`v z;t}7X%lY&*>Ia#lfzCngCpj;8qNA2OuKu&x7@C;L1tS=mu7TEiNT_Wq;S?XH5iog1 zxN})B*|Xe>o?Ax7uu(ou-O>ZD6dGQUvqDVHqG zFGd6}{$zpy6Tg~!D@C2jl!CtQM1_8R^~eG0uV#bA>S}&N>)gjl_GvGuixbx2c@$3@ z+I~jDkMz1|sLiQZ9o1|tbwg=rKh9@AuA#|pzb0!B*r=yi1={yC?^V6hwTmLAOf1_htAFrPIasbvVwU)%$%|30)JuJ(hL}{hVa;q4_ zWVG2&h-g!!;UqS@xdK`_*E(ams3b=QBe;ee2A-1zc2z==nBs!RsJ9mLBg2=?9ajD^ z=QG}KKd>Nee2z8(?>#d?)M#pLy|c!s@;bmJaxfcaC`?|SI-dz=vk^2WW|Aee1TALB z2UXo7M}qp;ub9#2e6rX-e8-qtjKUHk;=^YkrP`$+?Hx3Ol((zW2iZ+{d4qBikD&kO zdj$Juw+tVw6Er^B3l<;cGM;~$iJb=jR+}d5AB*YWR!S1Scmy~I?EyDOT5Izar2@p{ zu>&9G<}=r--$J8dK228U1Att^P6Cyb7R|yXt!lxfG8i{<7mSL${8&~0aopm9{Z6cW7Ay?;-CbK z^_?%dhQyEbY<4li73~;BRPi&xP;69^P7g=_s+eR}71%tUJ&ARZI>PCZ()(eAsu-&B z(^h=`V{wquB&3+qnmPXd+pP=7hv5ED^{MdO_Y4CuTsd_q|7xniJfd$hbZkk9!8P=R zp0Y1^?Jz)aZ5tz=iN=os1~W)9yrfz&Q$S$&jhX47lU+jb3!63UwvKp{*s&e4i^-RNva>mHNF>El zgG^+FY*5HdOO+}9^|SmViNRKyfEr<~C9F4t*%}Aw_PaI~+)7Qwi$|KOpsUq>wVf`k zX0GB-u+tIrMYWZIzh({1&RI*s7_8{CBFS~cf3>Ua{7+HH**bg31Sc9q93pz?LjH!y z8`U!8uPHL=Qp80Yea~yf+1M0Xpr3IUP;jZy!O99Q+B_^0(FmgT5u=f~ZK;py!QY9R z)kti?a&(1r@ekd+7WBqzj}9*=hWOx|-viHb^*@JdcwSwXa`_OophW$cT zS6&Z%CstXGU%ubKy;hSEE;(EGwWe1LO_g9Lbd;;@RoejX)NrtTPn^HQ**lm-qu>p-XSz|X~nw%I<3+!o$<}d~QKl91# zE$p_d?^O;DMU0fzqWGGkehA9uY;X;b&>G@{foCKmBl<%H)$9F|4dtYn@5~=pRkpJ+ z<1xNB;4AbCZ{#mN&O6>2kWX6L0WRoeH z_Hd5)i27r#`b4MGXf$iPXfwl5=+nzPp}1vYVmx~cbOaww;gpGN8lX75EI?=3@?$0o zZ`7zLaCS8I-zPJa^Jp+h$4xpKxWI52iLTy7regVdb&7H(zmrSdkdCAhw7&-%(G))a7$L2I$ zWcg>~Tpvr*kt-RU3NZpW-jlOxth5cp7qhIEYWx_8Ep_)XkR2%OV_-Yb(#ODtq_L5x z6eTjJ63)~nX&QwrR2n(=P>rB8R(Q_U@0$3!$ScjQ4nbG)Q$x-*UKS=0Y6FluNe%SD zf4_AJAvc_&pA3IP5N4Gks*9(MdL=-uI6uq15UP?)IQhqba-w~7-x?yH$GlyCbEPCZ zieD~njEV;4La1m#=Z(?r%qW+A3eY##S5-eMHv~O7a&$>U;hKZ2h?({Ih&QnkcO@Ky z2KpCSeQ9FE(5b1WF~9zRS6XN$wst< zzXKw|QXfM``)~Ese)4A#%oO>4{s34ue`P^nXYE{^h1Y=nD@QLsvkSeeMwiaDqvy;)aOA<)>ARlKPZl%%n;Og*qMz}qES*TBhE3>3Ww@%Px z`-aoVC-_iLYzsO>>+d}F^0Tq4=s$cvXVVUD=IZyX|CXpo42-Nt$nR`mn5b`oXT9sR zxi~`WM|u=8AB_G>4!7yRfN%MjpX7pGmOp>}_{pE?Bq1N=s&+>;)mjNuKs(%7+91QC zLT!yS+E6&kOJfXf`x;8u*R!b7!DMqrPBmr>lHI2iBqi7Y!roz$PHz9-m}{E}`Uwn$ znI#w14lcBp*=NInOth{1F@@t^GNIZl4@K(y!*3B?&p+jc09_Q)>;5 zYO|BoX4oVt7jYbDDpfD2jH7C_s^5xw!p&xK##CT;G?CX*qcBZN)vL9~JhjoCAlymS zn_;u*zUH^gMyqMKX4{2wGa0YQiSXom#dmtaP%*$YFCtg#J9AngLRXv18gSnBnnFt^&$55 zH*=h&AgjimzQSi_g!+d;dkPVDfSP7>j(Yrh_7g(zpL}(W95R`_@x9*WrD63hqQz|z z2oa`qY1D(d(I`UB*B2TP31=oR+_tp#u$?o_H390`D&j%6HG`S3+nQGOfwwgP_?m5i zA{(pNplK;aw`K)iJh>PuvKZDYC@kfF;G&X}Lq*^yt89mt~ zD~HyH@-_dG+W?cE52bVzLaWRtJEP|o>ntW5Z)jCbE~&cb1B%)3hB(I`5T7kW%-~bR zDpOy@a-sHE*fQ5)Cu!_*KsSc%vOOnzh!&2U9OL-GYXUj3Sf%^Lqgq054yq#5JTbQJ zdBT0M-8y^{Z$9M`wKwk?rA!TFVI0f*`3IucS?4_8f>$WsH@{Yz6+(&p7O}WRTCJ|( zFaSL@Rgj}8|G}6-A&+x$c7jnHdFoLqz7ItYqcba78qIQl^f3kNdhi*Bv45`dv`#ib zIk=i83!IdiCc^=tOfzQrfgU(H8rUD|VqY@%X=*}}!L&agkC_KIfg?d9WVrqy*@Wn; zZei!Up1}*jO>31JlhNKx7M^TC_30J43Mx^ifKaJDA42I1YsC=gN;Z_yZs6dRz<_k_ z3m#}BNVK{hEI-sXQc%QK9i+N80KlBH$=LvYzp@1m0_c8noq~Y;W$P)}c107&If9iG zh#Nh0)s57<0gC?h>_ZBW(kc8xD_gnBdQ0rMp8m@AX5C$|uWXSn4CWfrbyELd+DB!DaP6D?jRs zG9lFxxxf~fA_KBgO>m;Y9*~5usu2n#D0(Yf>Bh?iv0nwvaPG=B_E5++q~<;bhe-V< zli~7l{K#~Ww<^Js3=gSqsOK~V#!y1)XXUf0U&&^KkWvkhR131!sJc-r|J%sRIV^vq zYSB(|YamTL%go$L8+1T+ByKWO;kmAki-YKgBfkf z`s>JOyW~n0&^uu770{b;$`(hqsB2CdgId6>Q7`y8_@{UtIz44sNah-d2}P0O^6B8S&U<>GwP>dsVC4G>NBWujc}OuoN4>lMlyeYa~I3kw8DG&%J)OKKJ^s z@Vw}Ee)yB^1Gjtq$bHa|FOBSi?F~8BzkbYL#o4_4qaaaxQ&9=NVsqK+<@AbX|0l*5 ziS6jRFG%;wS8JB{AyV1HRtlC*<5Yiz$~Lg6+*}nL>Yx5wC&bd#tQyuI58(2qOR&F) zc~M4jb=G=4S6%J=_WFW2EV!1}ws(fKDxk0})&in2yta{e0emneZOX~TB|cfHvLL_+ zsR&#XG)^Yt#u=L@h z1U96%;BIG=-I~%v_m3H2Mjx`<{zoLNd?5Joy(f%GI!HbgJs4-#@FX`p?EcZZoLpYr z^l>P^(D_fZ*_S$XgyqoDCaCG<&>&;RZ35!WxY!=pikj)xmv86NjTy zKO0@T)OqzB{~^u3Ez@~ObKi*Ne0Q5?;`tJ<+lMv(R;Tu1O}#DUKdjl`|MMw-%H8iH zC7*{RB+zSc#1f77^eV_F)LxjrPxhM6dzy{gy#XG|v|Gsj4`j+L@Au_M4>^e-|Hfo> z)xTV#T(prl%^#D(?U5$)!k3BPN9u!!NSj212{Sn9Ar7)K!BQF@QA~t#=$p0o1~4h4 z;4l6em8kf~PO3f+HMC&06WR@Yg9ejw`CF4Cp^4kkaEiz=sN&!vIhgk6>l?VrBO#Re zLft14x%nP-HR^;>%=w_A!S8-d&Buf+Do&p-*^Rp&DCTYF<%Ecn?B=)(tRE5=np%=m zGpF;UrMilejf(T=F^n(CJ5_~a7;m3EwTb2#U6o>|Jl@_GgGJ)aM$=(pmFu;aS*FEU z6Xc5OH%wSog>oH|JDh3OQVpC*bukOyfDOcGHsZC}{lEeB`rcYQ9?CNlrbdFjD7#+V z-0CKzO*5(f(8RF1sZeP9-h5DP*wt1*2Bo(jR|BMyBfnk_u3hP-`2y?|Wl%0*-g(DA zuTeHNg$@P0b|p|+b*{sunO6Md*WjbF@8(B}lwC{-5T9R!QLc~*inSWf`IlwpQ&{!Z zX1QAPzRY*c5(!D*sIQ$N;zSAY?vx~&2JQF|dC+8h#3v#56Vx?`;+RZ<7OU`)L}*X{ zy_@-&&2pKD&A-!Xy&qxce1|)!wxKnJ-sjV!V21s2NC4502zLB~24XeTaYWjf;@vAQ zwfoEL8bO$FR#9U;&4F?=+yyIu&j`dGM%-YprDV-B@B=fW4_oKu?J>8R#Sd?#e0Ad1IpnIJyI8TNyts>za_!uX$z_3v zekX8Fvya)1y!s0Jwphc8aS!84iaxrI*su^9yt9LS3fyK!iUTs}>Lb%Sn1Wo{M zpw4x7Ix_EQm%3`l$0vsDJK5!uM3U!ZzmxH|Q(Ph^zgD}?-_HdGQLn$Ohfy%2Y-tQM z6D-U#XVg0ZpD>H;WGn`LkW;N^lD%otz^Z>{R29_4bxL+gy4YZn)VxGZ zxZCIb<$z&F%bQgNP!x+`nj9p4V@9{imdFbP>m)5q={Xv+NxFf`kLllqcG5pXR;w5t zp=6w&T)Wu6ik4!Vr35suXv7e(oDRSY((}^1#}?lJT+vp@7|tivt+0P^0I6=n_0nvY zo|mqZv#V&NR9ex%QXSIb^(nSiG*$CZdO{u%S3tR0f?d!*Ck;rg>*?P|pnr2%D217z z=yZFOZsS3ajnrZ&>9%sZ#ORIKzR9p^nyUpiQDIjsM$Z2L{Obmp$3_(mWn|DrMH7@} z`=zph9I+=ke;&-B@P0YFef+;njVWs_ItN0Kyg1Hw$@n}V#$7<%L85@lU*67!N$ABn z?ihUOihBOUq&_gIZ8ffQG8@Cj`j$y-&+rkm&u_5u`hdOimsN{q%Cn{ed#HaHlXps1 zK^1MMz24vE^A8$+tdddbCyn@(r%~xQ$vzPO$p#0e*1hQ$P9*<7Hramq5O4%wn=p4n6AZ|HE8ohc7KDV$*ERw=2jC*U z^S)Y!O^SJiG4JoBp5@Eg=*{3}h@riPtoVl7<0}X$*>@QVi!uaUXiejwBflH%bn1x4D1CE8F1OE!b~9BrMh zPdDRJ-vW!3A*c5eouo7!JR5tOA;ksxIK=vulk! z52-|_M^Q}Vfn=~*6(@uxbLbN(qjn9Ta;Z zVABhsa%?%bl`X`P0k0jEq^qVDT>A-(MedPAOP9JL^}C0)TwF*r=0>GTOhXjHy#sAt zpGgB$t7l~Dv}>1@!5@ytR#l<^W^rLHXEADiiSB6Ci@RG7iR!uBvG+ui$y6L~dyCp@ z@}~urfE67QTF>ff7~*5{mwP3?D&__GPIV*Z=nErZv115=ug;}}i3ov=F{o-1GPtUi zywS|>7)2grcAQ*tPc)dUs=ESUbpuM6sTQO8CunyNe&($;I>QtI5k?a;x0giX=P3G$ zgG;WfiA#u4{8?^;1bo)(xPTU#`P?m#N!`<+wC5S>U2&RnRrlUMQ zsj@=0u&>-d?5Fg&D1~aoW`92R+!iKDA(3)AHRO7T^=b49U(IJ!Ae)0){#pl7DHHy9 zlN-DZ_^$yRC3?Lx_X#5c4^p+4qa?g83-IHk+C?-PwAnzZ^}Wc&Y#)s;9&v1kF&_u{ z3u&3bxAa~1(d>iHHvd_KbUb%nO@U#Q71x(0*<^O%O z)Br5+lHWN;+RhfdlOghrt2%ExUFpI8?#U-IM$L9ta{?&^DF5+MQv>pjDJZh$&Phnd zNYYSv$ARHk6EK_wO%Y>d;oii{qA0&)C2PJLmf3FA)F&Z@KZJt5RpNk(y^u3 z=E%)XIY*j4kX#8giNAQ{OZMhQfB0{*7mvQEGzp4n$iMXe`m)kQ5z`HPKpx6t9n<}? zvN~AOXqSHOzI7sy>TIO02=&nJz`!ob>E&QF`E2~U9^oxuKeD>s3`L_@VQ$Q*cGFSJ z!=mxDkf2C1A58&0^Dh{V><^}TrvovCUJqsT%)i&OPfL_>LIpeX1tje2$4rzZ3I=usZk9slYWE%XVg||BHo-ro4v6W&>#F~8K1E^DscR$4upR7! z(R2uJG9Sts2`f+=kM?<;joxGfKVskfV&+K|WBAQ<4!ffV)PA-LTVL33QW=b;b5#ms z1D%c*9po^kz0#yJws)n8frad@XmBG@mKXWKPxtU?AW3+K#!E|MhWnGU{l>wAxB)Gx zeU{>1Na(x1W>MKs+467M=h}up!>1`|7#Lm63rgTF0sH0h658<@5}}&)@T5VPyY#;h z+gz%yMNnz=J1_Hw2XLFd)TIQIfpg4NHbjZGhUV!_I*Vo5bqo_!%evfeIm7vlGyTis z1H^adOZU8T%fG`gk$CnN?S`cXZwjNo4p!IaH%mOoQ!P-_5KIExYSqVH=MMq|z~%oi zR1Pp^DO*gH)Z`QdLUd?(IcpTw{@{ zi2wRo{A8=uxiQdY&pQCS#jZeO66zlEhZ(YyKyQPMkT76wli`7|Q^|Ttd-VLPT$3Sh z9n*m)LK!G%4Oyj-^9ZWXvRaGJx9tf{xG!I6XY+F&7)VNh>%PUiZHy!~;Jx_7n=xPG zfrL8qu9V7y5&OFCa_9;&nZeu4n|i=#o70bq49#r>Ij({Mn^9FqgSA~5W)i1ni89emFgm3-efnpL~jOv8?3H=8BF1QghwzcvE+9nqTwb; z0BF%V9;~O3yuFe#;s(;|1?|4Qy#XXXllARrcD^JMdN+E||GUhL6Lbuk=n%oib`QR| zf?x*mNh;Bv;Rw>gXz*Mp7bDH43^6Y#e#43!}$$l zQ@D=8V5djBvKb%G4Vobf#fK)%0vn^uBrx=uxsh?2XJ@W)mU^qE0oiF~1LY@`O)NjH zY@~2f=f}*3zL<@xlt#{2{=j^HyMT?E!<8yKzJ|7gR_tQ&r_|hnC+xWtsv`6kkBllP z)vw4CaDav%WEVh&@{e8**~BuuaRAIHt^|kt2I)*?0-sd2ns_XUNRg>*3!15g!`#H-wffMVhbX zEp&#s=9#4Kd4uMmLNB!t9+(%8w!M8z=MeYmY!0@aoTrXkkW^rwqs)bClIb9SMBE}L zXE0Hc3vWIZ?6!MB(fRDs56QKz{NYX(Q z2;$VTeYwZt#N=>v54IWEHCcB~95;j22ijCWfMMX_{VP?gzq}vF-m{fCgLTb}NWha? zBNIcvGlWoRDMMu4Tq-udzGy8EHw2pud2j>gsPQFv_p>j~MH}S(6%n}xsHlESAS;0p zi?HaR{;ckBSguvBC(kgySk95E2A9mW{#!27^r%M!l>9AW8PXQOa%qR+(^iiY zZ(bM3Av?Tk%#9+8+|9fU1MdW1ucw1cJao5!jWxu#%{aPAgMN@suB6yv(G}& zGaF@}#g!pNr_i&!hV3lgPBoeDm$$Fs7$?onv*9WV zQs0A4CG&~~CQhO_v>zNss6uVOA{`NwX@w5vlm}kRmHm?@HFB365EU!AX5TtR%< zIvQ8PoMdP>D;dMzR)gD*^9gp_Xr!ND#zj@@IUIz3m|Rb8zW;nRfVMU(69))m9|Y3t z;XhE50Gr>*2ehQ}9bRt6{wT>!h;!&uU{GZi86{+T99aV^+(c$LSL>lfMEy8_JGiC2 zHhMn1Y$+GnC6k>9X!WMVJl^u34uEf6EpD(a;_?294j~RB(yaJf~5jiw(uaZXj)dW7o!-@uH`nzaLbrT8*PwJw-U0*L=BA4Fa#UtOl zYl}-%cjSl;RN{y`vN9vQ>p&@_j2nz71J2f9Ww+naf_O(G<_>II54e9?TH?+YS2tGs zWyP#^v-ziOSI`9PCX@9G2;z((zfrG8SqU~1ttx20+>W}!N`)3?-9YUZ6wxE-xjCSi zvx3@l+l^>BLYGT8k#iwAKJvrA%M~>lu*(JV1|NcjAv@9CEU?LdT`rK!n?#5Zlikr_ zYLG4$LKjzN%%r@&+UaU4N9uA(M_3Z-was?An$#d&E`*hqR=3wvX3O0romGs}<#LX( z911);Ur*IQT`q`~@pitL)F2%$33OM**CD^#b`9-^X}_2x`R?&n5#@XT<7B`Xcen#=yQVEh>vCxn z22K5gyI5QOa9u7=-@y#%yMt}38?61p0^bu=hX^TN(7~J;3&i}hEg^0&N;gZP-0qg5 z$BR`8cDAU-G0&4IU{cp5c4;)Bu02_xFKlXF^+(d9Cz zuoKY@R@>bzBsoeaOUV(~hp>)HJv2%0U@`UMv|mn)cu89Bilj1a+qJYGq?3hE?Ay`w zqoCVQI^R(k-*E!)q*sY+->Mh4MSaT=x?BQrq%o_z;!n{Lx?F;o0Z}-p&(P}KZAEGr zjaT{2bBcl=6&IqmHc#LK#65(S z{~p)O-Tpo8aYO3<{n7S++=?qHyVKQvL>{mIRIVL$8mzczUVxWB1blSQ%fD1iRGx#@ zxA>Qgg$7bhOTO@>Vx#tS{7&#tc{c6<2ifQn-VD1D_$_U2E4M40hnC+D*UUX2ZzGa; zfT)v~_WBe^H1B!&%x}N?O+F$}%zlzm*b?n!o{;9xU#Ihn!4%nSw8y_DuBvA|SDJZ;myDc7uXy~uBE}${_^9gY!@Zg6+hy9~? zd;MNfzQ-m8&+=I!0e_R1G={{Fz`XxYvs3yTwbCx#v#Ls%U|HioTt4M6U_;h&bogv< zKe`zE3qy4#OhzW#q`Uf;$Lu2$G8?AfFiV_(-NVn4#tu1)kwHT_1-t?n++>m#y+KO9 ziG;TO^IWO|B6nRexN4eR4u**TP(346y;yZ2yk_s;FJ3&N<`m9f%wW&(kmu{YWBYcU z`C)81AnCEn5Z{Jwm{%cfc~c0J#mD15qHq8~AfiP3dO^)7j?Zen%p^awOwr4(rRiLt zMw0SYgW-^Q%XMmpbfiGG;sOMOB`FT;GQpHiSdDV6A|Sg}{_C(t%0r*)7U`hx44);E zb|tVjrRYWgK+uPVpe+qY6P|an;oD|BM?uleGsAB`_!42&6RA|`g*^KwP|x%pjnBdj z8TDO0+3YM2XDzt2)PfN-hJdB@NAn`bdrFQc*MninhQ0bDzdK)`-iKVytwDSHE&zf= zadUDvgrMFm=TkVMF#PM4{tGe9reKLpZERU^$nW?s<+*3>lf$HOIEW*ucs+c4>ewbQ zj2Qb_6jlCu6jf>-C}fvqbg%vl*Fs!QG@NfoL%UeeAaiJ@ahs9)J#Q!tA1eo^4$|V~< zJGKSg=!NaX8=JdyhIA{MM@Y{nBdSFFF<<)6bDQ&nd6I|I3_2r}+_n^N3q09u9lD&D ze??7qn;L!#0I0;Vac{dGJm!2HO$YzF?bBJ_O46canJ<}v$#yX)C}b^%+&@^{K*eDm zFJ49~0Sb;fpMETZ!P~`@5tN6CI$hn%G^9TKeNVy><-PBU-EL9{FO{5`*Sz`I@X4QB zyod%fR&Hl)x-yY*9pTGyxH@WS~YWd$?LgRiJ(P#X+ym$mlf&L z&G^(FWqKUSHKvgxcq{giLUXW)RPDl{M0UFCwXKA6pA(@j8_#7;>#fBpOUu+uNTuXY zb$OcfE+C5wQ$NKtTzVeEluLE+>+(SP3C4;jhQ0^t5M+>(zrM;`TdG1w=|rCWLE=4o zNt<7OoZm=M0PZUShHkD>*90Hg^A=nV>N}16 zZYbFy8F!@a+oQ3o_{3jK(K&B2`G|<*&V*W*tE-7qiqqv(X}DF{Ib{6N@goVzIFWo< ze9}=RN#L(bVqEt>u_EepE~K(~?vNRR%vXYvq*zr0ptaN70H&gidLN6rd|mnabHIxB ze8T70hP(%8gsb%THk`DQr&jevIyV#+jCBU_>BdZE$ce+Msv?4biLG5hR|i8wL%X zi86eoG9zkFf(an@v2eHU8M!Z{Xj7W;5t9m{zOBb@Lvl`!mwg@#%WBuyw%f5R>u{oI z)1gvJvm$MLX(o2pbW88n+m8)whzEY6J%4l8sXg%iG~b zz;I3HQ%2`<$vk69s;e-z9mZrlz|v6e@@mE8%nMt{#hCN0f=F2i>1Y@QPg-{8D}XHT zpqC?PEUaW#F=tA5d>{l@y+{X7j4f0$q2t9XgLzqYHNUPY>MYVttctT0)(b>b3G5AW z3%`WONt}8wMx%??C&C#Qr}Qc7rAErutw*=~q-*p1oryd{@XA3F5>$h^d4mMco|K|( z>8O*ahZ+{mq>m392U`Bh!8fa+Wa?l7vO22ijEf7~7Iu!Z!d~fcz7jm2kbQCS6-#}h z-IKWeBiG*-C+~K}n0EP|Pq`65x@(33-$~$%^wOkWs3q9g3a|tBv0%tw_qX8i+S~3D zT0!}m-N32hW(c+O`{CkTz5rV3b=N0RBv!i2KGH|wqq0189%0t}`3x_r6#=aJtNC@d zX?Ooxh~v6u29|7!gk94O6UUeHzUeeODlZBCk+i8>g)8_sJKrN<|%^PMgEND7sd?o9WI0W(^Ox zY&jH>kN@pYE@$&43vY@Bw$Ja7pTeGbt2$L=2sGuCB5Z*MZ9^(bC~CM^?YkX$zJwJo z$-|SgPhy~s#U>#}ECW$O@?Sfg56NB-}WD*I-wqx(aqBmkF5|7Gy91i)AT$ zcTs!apHCM1hwq@*9FeKyU2ROgPr$mC2A#bo731z5Y%#9aIpnT}_Eq`Ki|P|Dh9%Yp zQTw@l9?2^S=7zv?)FWCkGQ%iP#=1D=`iLrSU_qiU{v5ZW_(E^)80*p5*-COncr}Xb z4JNaetv_2it4i>rvNdV)ets^v@DFbMJ!&7qWeiCB=;IVhVc>b^4{9BzqX)GQ45(Bg zf;zcPUgthA^208mh19*BC{LGd>>Ntfy9_ybOcJ*aT1nU}`->@RWf?9QaXd?j6-AAi zs=J{KWZ_K^9zJ|eI|4?M-HVSyWcF_(21om_bnki@0KpXE?@~k z7QSrJpH5ac&&RVT;v5^DDw}3YDGsHqp)ir$Ap(5d*iM0K9fIyJv<~fJ1mA<)Y^ty& zWqyICCE!f@yU`vb9m8#xW~*&B7jeP%_-iVYT3W0WK$k~IbT_h%Wk^w?^9D`rf6~9Q zJr>6Esr8AA=;G9|;URm&Gukgk56+pY8S&|%1S)bCr6;cHS}h|+ma#a zk*mUnws>&tYBz|mim5ZG_Rn(lb_qWY-KAe1{+-q}<{mKb=z6LCS=gR0gX_>!V=`N3 zb@b#9{D5SJ-QYKMu|>|B;-z%sd6?Dn_`AYiQEqT{YI+aAjlet%8uL0woRxszv~)`- zK0#l35}&t!82op~V1oCt@mtu@y^?!3G!Y!E^xo!~?x?590BYBhS7X<^{%}|7GpF>e z;_JvoH1Vt`;eP15i3)Fr`!q%QgKvAYJaiP7ov}O|#!+N0n26qr`0buIJ#-ZMcd%0= z@u)uFM^jRt<&MWavnC?dveqV3v28s;$taOKU#g-1l8Ifvk5YrzCBM@HTG19NO>E0^ z9z5=fLepki9D_ecu~E!-ePup8+!C36r%m}KH zw8`~i`d?DF&Q74^mKH{8vf>AQqe{`$s9mIkUG0WpewT%hNIkY+6ao00=HXnE_qz9Y z@CfRN0mPpZIk#!X1G*%EJ9t_=nA5+JxYW_k`#dHh_TK%*b3*n8Y%_YB=S9n%xA$n3 z0Hn0Jap59a@O9yBrziJ^{HQ`#h5Wc3$#o@V*jGbN z21Uq4Ir0y>^W5_+Us9w!ASoy5`P25{QebtBtuA-T$~JnR__E1P7}-X%dcbiLW3~X^?<}b{Cx74VEAOHdF7E#C?IKlX-1R z;hd0VHEposkzIqQU`uWuCdAn;`A(1x$L6aE2T&p`tlp%&lj>HQi__G<(mb460m~(E zLJA`0>~8_z%j)=caC3#E=w9WE2sq=iQkW%4dW%U^b%(XQ;P3j=LWtSIEox$Sy z?*LeMpkxUhtu{e}c~Zv`!oy@#MVhJX=yFZ9=*1!oHuK{x>&v}d4$o#YWc@QK+xXq} z;u`-&H4P@nN39$F4%$E_-qB!oiJbkHRWNL|A=?c#nV3_mV$@;}KW}A8Hdg*8cw}nu zw@gEJg$z0}Md&v=$lpgY!+Mc`csa>d&%g4oopN}bX>Hj_F<~};2CtQxRo3r7t}&Zr zOBYmXmgXdd0iUlA_Hij%nD|$1SIzeI&-EO<#Fo?Q6T-?6u!<3@`5HC!ke5yC4gNG^ z!Z);X`NC=;g>A~8Def--CW-?+qq z;OJ$ks6w$f#gi^5-)zYgYQ$mrBO~CXtcH`xD?zh@jgUfZU!ac6RRI)*wE~VjsYUWV zp3R0+ToE75CRjm8nz7i?>djyQ_~yQeF8vA9^7VSt$wmJ%!>JyC0D8UeCQB?I_uX&W zNz)E{nQjpQ`VZXQ(aw+}W^)Wn7cQ@wltLEXfI%6PJP+eLRB`F`q&^A0Zx1*~khq;Z7)!>8%^Kd!m$%=8J>8y5#zZV< zg-SM2oTm~oa?>MlcsF(e$RnRF<`pD$ZlBRPv06XHWPw&&;;r%?ZwV`uPrAS!iMf+q zZBHJR2|u+Wjw9m#&gGpF4{C*mHiK?~?KZ>sq^66@Z&jh^6p^$UM5@6mrgk<)Na;Hp zCblg*8_YW&I~yZh(02DipeHCCqK=QK6m+`d6B>>gBCb0=5RS5&^BIn@lj9iw@T|VQX;+YMmKjL31?2b9i9QAdm@BV3pLyo7teO462 zAral99mFP3JNn=7KAvV)3y_{AXNQ^{^$jfw&#oaf7`rq$=|(q5#dEV3 z1-8%kqe~_os%>vn)wG%69h$`|4b;N0W8N>8e#i#npO%&YLC$ifYbXDO(L!mJe;nE( z53=O==8q$r_83qd_j z8r!d#XC{0x|4eJ#xAV`*TAxK-aFgQiDZD(|#S|uyYVbRrK%(|=a#R$^nmgA9(6$hkF%Y3IN1r8;3z9h-n!-*qT z{S?3zSdtmDIGu#ENtCN4KxirU_?ntcB2*`K4yj0*+^tMq`d-03Y<``@Z#O4CMwt;~ z@{VT_(5P<$xyx}q{cdtt=UF0rgeCUi20Mg8_FMb${Py}{KF#kbcd6C(NRV(h`%DZk zpr(M675>YDv&l7zVZ%(uBTvd_$v)On(Xw0ga5WzjcJP)1>U|L`rRi{!83fH6xW5h8 z%N5<`5?9GaYWFx|-M4`dX$%1ns=+GgHv-94a)&YGL1$Tzb*%$U`HJjtvd{!u=Tw%5 zHX9S0`Ake0U-mn-a%*&fx+w=NExcIc5dzv1n@xY3eavtWEw*gc?cLK8wup!O_nXEwO|*X}j3r&*0{Q~TS0FuFWrTm!1Ni2M65HE14uoLs`C)Lt(8j3XOm z!qx{U;dR-kXLo-+8(w9@4}9z13qSJ}AF;zCwZ z!5e5NA0WE!c5ZdL=!b%?!t;7dHJ1_H%pa?ID-?@2zk1Sh9z-=?z*am4YoO~2;s9n6 zZNQK(ecSyX`0G1XRU8I5_0+GsQx?aSuX)hb>Ixn-AIfYkt(=TwNFIQrdkrxI=>V0VmNmb;(YPf^Y#e-VA1I%;}ap(`Fo4IzF^%A8N;%%#153Y51FTWYNy$ zeENDi|72`9gY)m$Tc)|I37vTB+z9o>^d1hNjFP#{mn%d8e?Wo73qC{$dbaCMJEmu|u5PpsGHU^anqa=|}1kYniP-tsff%{;gy%Xk5OmcOh;maoKL zej=yo_1=B@0e^p8B5+MF5Rvv|P9GrN_j-Su&p$w85F%R|seG{sp!7uEA*!W|dDOzm zFB(}36{CU#8)gk^25&GS(XI(Tu;uy92xed+4wz9$yiQ!RtspU$u_I7ClABEm2d1Ot z6(Mc0yc`r47L6KEBj5rF4S1MtuCPDlw(cQlE-WBC2+KVFz z`NS8Ko}Rse!U@)nRi572O?GVtk4>&JY#X><;!f5%lp|-obP5<3GAb)m5w-Khtr_w< zyGCgG;PxVe1_3@AX!VBwLS_>DLrFKPtp*r4O=O=%ywnM70}BFVuEOXDCYRZt&1Z86 zLsNvlf|+)(>R_fFz#EKg5aBlX`;guC2M{a-b;59>yJl&nc^rb1!D5ON)vsHbEp(J~ z=`^+{j)$-~upTiQ{D&=zd)DESD!EmfEWu2KdqD=HZO@#l=0qC1Vhk&8FenrZ8;m$u zt=88WW<0s+Q#9KEgsypYHQl)HGP?$M+n{^JomYu54%cUX0HzSxVBE@UvvTB6{Ec3_ zmHqwwk{4Ke5WKw2%b_i8rd*@M?z;g@tK+AIH@)ok>>k3w)qIX5AV>uQn|A-h$Bw}Z zhv;_3VoF7_lUbF#vI#0y$Pv}Qnsg4Abkr>hYJ{~-7H`}v#+6dwCV(&2(+`M_gaxa= zoLpXYjS3I^G#hsf9ZZ86KKjr|A%o3iI>ISg*~5Y)P9Ihs@9Z?2bqok+2eV7bE;&_|@>DVuA$+cU2ZhC1oalW--!r1a7M=c3^CF7jFs_Zxw?U))x((02)^D>+}<-zTGK0nGrEm_ zd+}&G*lb&NFqPJuvV%Ena(H*(pY=i+e5k)!tR9hG*WJoNxp6)%0qxBDvU8s7NGiP; zt9Q02ZGr&Xr>VQD9;Cfa(#6~-j(&gyW=%FuZ3pMDC2|kLwe%hTyq`apWZ7s(e;&(~ z(ygR(gLdL{mGq0s`CodZ?o3TP7)=qCaFDBg3vg$4zzm#OP`n=!+bn1`8(3p~Lblo+ zpso#6A)tDq%t<9L-BE=Dl6te2immnDaXUn`>0r`MOUC1>NqdWwJk_-w%64aCAF(Ii zCxz0;Od##^hTK$}I{iV9e73rMP4Ylj&p~G^B1|my@AYzUjkvl5u_Wdu(CAxoHb19z zqecJik5FPxx`Hi^W*Kf3v6owmJ-Om|lzTj{qW4&H97cEd6SOs`^;V#e6l< zb0Oh#Wi<(b7VFsLg)$Nl~op8KeR=DG2k3ES(9OZ8T&E659e z{A+?xlmD4mXOjdXl%%3R5=}H~H%Cz|hMq`SMEnPuERmtq_j5SErVX&qzw;STgx8(* zS}>8;Ti~b(Ih5C#BND!W6UIu4kDx_*X@Ww`0lws(Y`B}valAt^+z`k4d!a~zqF;Oi zMVO(oX4T)t^^|l!nXNM@7<}*E-Hec4!FbBTT#Sdqhx(P2ymIZnLOtkLG;FiPJDNg6 z8~_<+H?3O}RBH1xGFIK>5(@H)mBr1wqm@tg_J&80#3B5;9Hr{Tf9Q`FgC(kVf!x2<59c?CNC%8i7r!mE$?W4`IzjQQ z+4{OanlLZd^<*}H|CN%VrA{NlHjQWltqecl_W1-|TwneHS9r|-W^!F#!}fXV!|Xml zk{UW{6@fd`&F{e7p@nu{G|w&Ci)OxQGV?!h_JOC;;H*_H(?3w>qb_|@7P)ORdB;@t z-HD`=!%ojSxC7hCI0k$|%83nL;LBy1A@8&!7GD{(Oy8{Pi=_}n-SlFKjQX9+Cdn&O ztNZm=v%z9@HHX{fGW$5mKJB512%f;OEz7OM;(-xR-!uE5L|xy{0$xuCm#c@q0_y7_ zhi8LppfX4txWy*k59Z%wH+Y}k4E{D)UHvkcuJJ~{pEYbHY()q;EE9+a>HRFr2w?S@ z3+`)z>*K@Dh7JYu=#GlCZga1`zhX=buB$Mcg-ZWnIb+*p1>Ff%DChhOd3u1}$%2_* zrS|;W_4VQ7$8ZOleMjCYTg-FlV5qbG{HMzAUzoEr77jFoB#AyuKW zQTOz2{+8O#Uk9sexJ&(`ayOgwuHDThK$`Am6IfNd*`$BY4`pj2@PTc#@jieJH`@nMLQ9RI zu-UGE=MMN^9`Eg=+{cSYtp{44{^jxE(`UyUciumezD8;BdsdHaoH+EwBgLNQk9B`| zym$B37D`4WUCpy(+q}<7naBt=&U9)lf+-nju)IY1PZ(KOeMq#qQ4z7)`9I8{R?DI~ zeru{842NsvWl`tjL#7i)u7OhDP0a(Td7EWcJkZ*#3>8d+Jmi01S0v*Ou`7N8fpxlU z^1qwCb|*t0OTPnRX67Zg>R=BbrQ4IckAs`7U}l1`Y1AJM7K7pBhE)P!gj%iP8johy#|1~5%bA@z1FME-3mIIVlQa3IAq_bM~v%wH4;)W1dN+;qu zC$tGxa4M}|n8Cw75upSgF1^VPAzj)7+@FnR14a|wK<+I1y-z^7dZ85u(*Ld zYW#P-9|R}}Vm|%IDTQEogI4IsJa4f3nOmj$?E%a#rMkWMso8yIayeh}&d+(#DW=K= zvBV=LQ%HrDN`=7ZYkJTlt)RT5N`&@YJj`__BH<0S1J5V?%h4H%mKh{Xxc3cKaYBUx zJszV71gx}3#Ffcm1?GRi=UewSg(5b=EjQpi55FK^|9^1VlXZ?pG<*{FYW1;=os+;CfrCVbDyYt+5Z-LFWq zj08)PA=D(#u*}42SzXhdHt~tx2RTzXz}3ZX8o|kDKbe`y+cCFbU~ZZw8W_05+uMEH zWb*Jd!P7TckxN~d?5T5e--1!O+1>S=eSEt~e7hdM!ycNQB>yQhcGozHPXi&&rX0eG zB$so)yP5(0R%9h*Px^c^TdYuptX+;USxF+}3Ec1hm5p|~nDFvSEXoT&2(J}j(XxtW z)G>ymWxfe6wBHflNS~;E!EwLAk(Gya)nOH+(S|K*`m}` zl(=$5*DFXt@YD3fBYvZy9_9gF)OE?~HB9f74bKaL_q=Zvu1=@wL6!Zpe7ya>x$p=l zSc(oNvv6S=tE7grrW;V2{j+~z3mX*iSJT_#Z>w$(96cp2T||8~2@J0hd-~H7*R&+9 z_V>1G;pm24VWg$RgO-V87sM!Ywd)Nek7jFL$q6Ov@Q#(zMsVDU_`FYD*_tNp8PkSjL4ht=g0s1#bfy#0C#@hO6u(=i!}>C z*uRn0VA-DzZc(+%@YMF;zO=P7tE`IDsLeB+aR0Vg`<-l8D4pxR2dX9gsvxoookG}U zvWII{npIN6n}Q|v-b-u&YwGd%rbj5bAQnbR`LYyasq|ruX98n_w9xIjgb3Zk@Los~ zN7t8J6o=;IrPEz9Ngxz%^(jVej?14u&9ae^>F&E46c=BqkN-U^Kc(>h&tH4&(4!t3 zq6<)l*(~418tHRAxUC%LH*IYt*djX-M#S^)YbhCoY+xCI%f1LM>*`jNlrA+rSUpe-GacI(Up806Hvds}fA^1|hMF zq96v|DWOo=`~WtHuUKTJxiV8xiCj#t_r7JGQ4EYsWN&0P#4~TPzM;=E9ZO2Lgnc;Q z=hlX#CQNuMre~!4J{9{;wg{{RqC$9SDq1(^rWP>tTDt*EJz&?6BiJQvbc2r&xVW}< zjPY;;J!E?7yjN9=?=hgRGGv^f;ViVx-9Glsj zZWrJiSG11uOWBU71jctOGqt+Bs?Bq@ZZMK$quiuo^#)@Ft1>%UqmtWTl*ZMqH-L?t zK3{ar>o0W4IPM!%!u~=R%j|W|%SqSJ{UHhOhA5_@Uskg%E7Y6oB>i6fBNJSn2@cv1 zM1H}d8odp^erys9*n9P-1(Qds>=fNEX8!-4dxrBAZ8glk&X_EY(?!qa_&K092 z#Om~dc)h{*C%azU+*%b`j8Me;PP3h6rRQ_Xc02Wu5DS2czC?>yxb5HnI{+br&U}xK+^1hzA!xKrCMwfO!CW1 zA00J`sA6L=pR8z|eJg*(gIh0?vfjgUz|Q6a>p6A<7xWf21HpSq%6ip+?6EHO!_l@_);n2|)ZVvqKb|oy5mc*=@+ww~7xg zT>}PM4PQ4tQ>^L9BiGl21XBwAwlYM~f2#AT7teY=@|JT&J@BJ*e#AGAWa7Zy+*EPw>z>85guE5YV(2=l7csby4 zqtEe2vRT->UitdnFjKdtJ0&+_fA?8OOxA#1XQc>lYyUpXg;*C!D)=r2CfjTyh41}* zlp#&JJ)s*wqeQVSx8XX^ei4A@7XZ*(}278|Kz2hgT znT*=WEjJEHAgb0HOr~xcXO5WA?aPecN5GlHFe|>jx6&&-uU*0n;=9+&59Py(doRw; zv5felz(PaX_g|JpSYQ51P4NQ+7H89y^)6j7GYWht`?EDul>IoL{fH0Ge_Nx>g{699 z-+wtpHZYUO%6z4AvR>Qbj3eKN@ylgXobE=AW0;)HAgT@Xi442@zDm;g42>UAX6LxNvQh94c7nF*+XI~-9?tWRHT>@WcG-`udvFLO;v}me zGnN|V%Y&QbV1*=rNcDsC5q&QJ?ZM4cD?psOC$X~MqMT9Z#zF(jADT=`p=XdqpFcRg zvr$pWEfwmZ+`etL@l_E2(60Rd?0pG%WJhs-*%&Z4F*o5@V_4SqdaaSPTCG?=yr(U^ z7kk*o#tfsGH`1`98F>!v%CH6um@7cI9KsO@m^*>QU`V*a6$plaxgi0Pa0Q$YNC3m1 z^Z%>r?)Ung^G2GHW{vcHyVKpTySlr&y1Kf$x>}s~^6Zasi`v2MAdeD|8_**~wg!Uz zh;l)VWTqW&hfMxKUtr_e(_L^p-Fcg&xGu7P!MOBQy$V#6seT!Sg6zdTbO}NY#y|<* z9emCVWQ#juc(G!Dxwq91(cU4xy4cMv!o~KYUz-#5c3yIib$h*Y@VXJW*LmW1XNgy0 z2Yh@^>>1PL<=(*?3%4}w_Uj69z$&AIYEUgigNGm6;)J(pzD(Ca_){Iqlqnz`8U<}2 zF`LN9o2Tp#%=uP*nHrfXQ=rjH=m~G2GaLaa9EW$?o)8!RS?;&N(tSJoV=$g=Vy(a& zpxwt(Y~NJf(K9T6C{Qf@@JKfQpe(z!9RMb&-}{OQyM6v)Q4f*L(sl6cradxzo0@Ul z9fihBvnf-iSh5TxW@8>qJ1afqMutHFm~%d!0v$2P>&2wwDy(`kfn4Tkr?Ju3c_($m zOgxVtWun1MnPP`Bka*${>bRm)4@-e=^pZ?bgTDd|B9SUg^p!@r3jPaN|5|f56ZK`v z6g!N8#1n@^S9z(LE|YSiu&lf^K&XA68a9Ur(CR85n#0(`0eWv`)a4u9)hWDEQ|+98_#NZz^4p;~!7G;9 zVdjz`;(@0EKjY@&6|EVTOf8PCk)ka2`N@rN=KK*CuTPqjEb}0mK(N5HYZZP>Zel_Q zV6)vSz>13Bb5!+4VT_EdU$bd=Q;&uqH^zX%tsj)GZd|`+eAC83ZsF$jYla89g&RRG zxzVvfM&dBe1x9j%+``=YHPXBk4w{wc$6frHEg76*peYkNigfqa4I4yZo2o13njHo6e?0xLn0O7|ga?hOR&* z-W-WE6DsS|nQNt3)meiOi-pwzbonA(Z=F+U;>$jO#+$j4j61cLVn zd$(=uPs4&+3V!S%r2AXGEn$B;n4)XQx`y?qVVN<%9LrOGx_Dc_eV;dBtB4OO2m|a! z9*0$1@|p`7rBrFoRSOGw#f>K>cBnY`a2ZT^WV6v+<>9_cAG>r{jvYXCSx`I`;wH^( zg;%h^VT;r~2k%+_ope@lN(mfRO-ZuuK341q>y-m5id5iP5_bdN=wJB^%sxpO3!WMo9WG>PphvsPeXNT!z;17wN`siaV|sPbC_Z-UvItk=JwDfE*?PI`KQo^N z#iEwQiCznjp{Z$+rIdSR7n$WXy{SU+NEc-med$z&NlKR+_1V18Vi)z!;aH*M7D3wP zYE~9>1V*fj+A?3?lwLL4Q(eHe&SxSMQq4vg7d~^%<5{YjA?k$8{_9N%8A8zDHfJ8z zug1eqLLv7Up7$!DIi4Rj?KSCwYJI9uHC7)9rPI2oc}_P3&j!ozmWCs^1N@^%MR5r~TZScYBd-doTvtn{ zRj#|GQwqY>(H7&%$iK$bwQWJ}_!iH$AZWW8y13OfWbC4S$YEOpwvu!2W!L0NWC6(L|+UrZMhDg;L zZxK-hq+)=DARfsHkIk-%F0NdQS6a!XD~jWH{r-@foI6 z)AFzZ^xp-hJo7NP=c6+>EBe9Eiy|y_B$lDlOsIC zlv5yi3*a_@=`bCH?n;JnhJje*NH8~X3&k0A6c}<88hSn@}rr=)S_^i>)c#4VA=Gqb3E5qV(QVb}2LX>i*m zcX(CzZvmPM2l8vZCLTr#>zREhnMgHLrU2<0q75WwqvuJFgJqekzGt3Hjm(rO(C8)f zB;(Aq*|?d_``^aKN0eF^p**(~Y|IwQfh*X999wAGQ5uqxm-#7cb4 zMkY3qDbsCa);xInDSc+_R(RoZ)*Z%|Vd;$@7fpng-o^4a#W^6zU-g#`L9bwV5uXBl= z6c}MHOu{{430wvLnQAhv5ScQ?4qG4*m3o`y4Eu=SE}-*xtR`bfqm_6bej;J(>&KR9Jwq*J6AV$ zVw>IXg-LJh%({_j#mST@umTzIfkb;*TAmpY!&C-y3h0Jfdcpwa3_3fn%qX_1j}*^} z9Zr+XT3}F{iN-T!iXFK?;$kL3+(|w^y=rsje$jSP-EryN?e5$w)2TJShWONUOiX$z zd-uw&)$4H;hLP_dXnHER_+mZQs`+wzB8@2}T5M~&8?G#Je_S<&Of$`&4w+K>Ybr`& zl)Vvm;<~u{404DWbu%Blq8-LwP4NzyQVGN%MZ?unlG&JFJc)>WR2jWbfSGogG}22o1r|3EQhm zGtV8)&lH+7z3)`Km14K2i)r-Au#!g1pHhMOa^ekE|2ncV1H>Gze|>5-jA86{=9c~D z512vCh1sckHD9e90sHPXt;G*fnBV)Np?L>EJbW0*EYd7-DB%OiApZ&bw->bN*4UTg zdOu~CylnhI;4yt>b&W$q%OTH(vEF4@U68N53vz1LjyB-mLv{%%e&ANeY5>NnRXF0V zjud-l)0bEW)hoQbzhS+vu{vlc!l13LT_>0~;?>0q_rlepJqRo@-S;=Gu3jh1P=%g{ zT3x;dWBKYZ!TPX%+0H@~6|8z$hfkW`Zkkq+4Esdu@i{0R@VZ$~*NasY$D+7Te0~+% zvDmJ;N7?x~6`=ox<8u!BzFaw`PVL%bqj;RKRhJCidG`(+l-V9<57m_iS4=IgNI~_D zJw=(DkRRFYg$2HCi5+UOXR1Q6(t>YQq_FB(0)>l0iZkunk!IdKRw$|jIR14DDyS;b z5$P`coAJ?Wt0`sG;3_xZ3=_Vl^K%$@(+>$)UgjkZFW~$gW<>Iy#Cf zqk&qz#^Y5j%*|D5(^5(u8PqYBkx!uVhFjLPSFUV}*JJ%+C0Ag2*24L*g2nxjkl7J0r`B@R0j4OiLzgeOFmd&+!n$#KbmvGMn!o zi~GUYJiF^h-NuFPvGiPr=jJlx+E;9`!*s4L%`+t9)X$~nlsfl{@eygV%0ySC+$-A! zo|r1eCvd|5#SmG#DqiB;8VVV+J_21+h2(#>n z@o1|&J~43#{tt5B#MNb&upD;u2sCUOLosIM8@XP!)N#;X>NwW>b&a7arr;r}of}4C z1XU_oSifYLZC9~8N)R>;7zhb=q`}l&78R!Ev*<82pP@vRDMSyF80lt3lF_*>D%2yC z2L@ZJFw1&2`pAt8dE?*qU5rOWkU%}Agj(cNN_k=qN_b+6<$2yuw4BD1xSedeg$5i0 z8c*^@NJ^>9lBzZZrb^~AUK7z8AR~r?k*4v>pCf}Tg+y@T&q`?Gkd!gl5~l92T7Gg^ zB9a!cNW=kN6(k_CkO0NnsFDIw3x8s6#=q7YA@S(?Ajz@v1eaHfhU9^n1jGs~`BF6) zNqtsFq_mprYQg6mW_?lc^^(pXLJK)3$vQ0oiyunCjw>~nLZK2YDK$_bL z43@tWu%|M6434w6Yt8oDT)olaorhG$TMw&NwfEqJjx0@QN@r<0QwNqN4QS>oW234u z9oZWfNXlffx3p{)drQk^*qdr1-g<+Mpn(0QpbhMd(=D-EK!sQtr$tB#eU&b3k$@%> z2?ux>=kn$+rfOM=VU)z-H=f6;%)&vsemO7Us}j)j%^4ndC^dpG++%ZCE^Dm{;Kb*| z$}UAv+iNj51@(csf|{AK358H{mD|8$vwQ2c%Mdth2teggcG1lWULrqO znY$1>3b!%Lgd^$=l}EVO#Dx5ah5p3ER%U2yev0)#7@yKSnTMB{4B71XbC3|zoS`j7csVq4b7P&di=p8vM z3l0Y`GhEg=a@g0`=tg1Yu%b$RUF$C$G5Q8B9}w3CIK*`ya0E=~K>^9C7da>}Cnhij z@-^rdWezAMBSW*-MUKa;i=51u(uzlp>P3))p2)8wO62E=xA<`+pv~h1qru~FvI>vC zisUZ=Tk_|Gj?1LZl)g;rOdXa<&Lz4z4(KIgtzg;K)TxxD)zQ<1F^r^4))JbQ&00d! zvY926^K7rzT8(;jR~5>8HIu_vfRtDEdJQUL+H8CTsaQgyFJ13OtI1qt$eeJrG_f71#O&H9Yvo))nEi{hsE3*d|YDF(` zu28EKCnhlW!BFz7zvt^!<--y`h$tRPk;W7Yt>O%}_ndD<8entMGGoJAg^f(%$u+TG zBhpGBS5!o>Bp}Jjat#MOxh7EFv>_cQ?NCT0r@Q+QjZ#@5{v6MHyzSR#5#Cop^c zo@lXNtzwD7wg_wgRIA~FKx>e&CMI^fh4NmOwM4gEE@QUWMH4(Rv9Ecsg$>uVzeuas ze>4|NE)a2qnXtdi8I)o*7o9rdvg7jjmn`>EcghjbU3e0adT)CQa~wn97#+! z!0CsQBtVFMBg4l=Q9|KC#6lw;nvVvl!lygqYZSEwWGMqY!m%wRb0M1_;SDMoYxRq_ zWjVlnoPV``K?g;smUJbno1Chp=^{7h%`V|{Zog+);3r^fmyDbi>piG?_NKQu0iq}O zOYd1C_KAV}h`BF@?OV#Vb!&z8)I&G>aoAfqcIKLMoHhEb*tpLj09N_!*d)sKRX`}n zQO1F*d9h_eaFdD)Y~8Ln;07lFmXrj{!TOsB>&&iN)Lp&)H0VP+eeuO@H0qE^AeYq} zg1Gor#uorXT(>sZ=J#wpaM8{KksF8%Qqz{T<&mW$e# z3p*kWT&R<`Md6#ieBEt7EBug^X;sx95?%dUjsjdTARX!iF+Av<^7o?!W)HPaql&NM z11m_D-Bc)9<};cp2vf+=a;N-2MN)>QV?T?ckl^b=@)@!zMDzuy&wVnqgGnYsHb@9i z_!`tq)$3JYjCbOpB(+ryC7P{iD0!(HqJ)xO3hm6EF@PzX<*oF3*hy{ksm8l>_-Uiydzw{W?46WHujiV zE$5~ab0zemr&YV$;@(niCK_jFM;!lVQh5S4FqfP!HjlDpoFQ% z?BH_6X*z6cu~WN33xSun$FG0_B{ycRX}zuqnn>Au+Rm5a;Br?G8OBPQ>ob@Q94qpGmxVkg(E z7mvW+1)0IB4@zV!!WWNOf@4}nbS4wDAa1m<-(xahty{Yc%Z92>jMU9hzg!r> zDYasK8ZmtG+Q(%v*Z`==SH2N^Z3deD0l>lvG(t`!*kEEA#vz{Kg(6flpzDLFhm1#G zsj_23Jbd(ZL^?LZ!pDjMXyBYYXk6QayDJ3oP~ zZOjuLdPF!0He98`90JfYb?`WDHW^DQmgYh457SMr8b32nnE{#UXB|{|Y1WkVvudBU zret3EH-)l9*%^qblBg!takh}GqUkAjnr#Rb4GZ%EMMMbf^x%o4o_aOtGFHrMONysA zzAgbRoiYgs^~H7svSMv#4-~+m{;9X4tP1=MIM*Fvj>VlBh_?SB;GK~T8)PVnS5b~T zzHI0QW0QvB`@0doM8XO=7BL@el|ak~3P_x})ULpLX?t-}a|r84(sgqx;jO z6CGFit?a8NcW|bQs*u|_G?Xi!%Qnm~B5CBO+LdYxM)c7|rn8l-o@0Qe{4$a}gSV)(s6vGln*^|C#o$W~;nu{M1#pb)``Fk(G-K38)9{#Z#oQRJg=+~?EDr%|9*udt4Cy{I zLxh(Z>~{0*IdBQYHFNPolL%ql@^kg08+m*-T3|PVRW_UX7ET}XcKWa#$!#12j13KK zjL_g{3=NLr23BFZIm%rf<&|L6>Mz1f!}V5$Lzxx;J7eksU}sEU07mUuF**py9o_`A z@v1X6$`?cUN7f$vvabMmW#knIv0@;mmRBUJ>qDGDm;wjZ%72QKIm!#VB*8xb14UTw z$|DA#R?Mtz_@GG{A)PqsC30vGR=ZIQyC;G!V3ggAx*if!8S}u>+RScu>Vnl4I@Er4cmB`lsK1&n_)@!r}^X5Ci{!d%`AO7@UF&@WSBynC5CoSD{IS{3$VP zM{+1D8`%C4rnEeUjQQqZem=)EnqwNxS#8WIs?0G}B0bweYG+KPN;_jZRdUXpN0}xx z;-%#f@-aJNM~3Z4F4uQ716M=3r9*1^4>4+o7_~!IBZnBLNWhiCJUnJq`F~t5F3jfh zru;@PG~$JF2o1no8`?C)3zl4mwK_Fo_i%W~u)^Gs2(QDCOcC@43K5$JA_{vGIPRR5 z0?cR-7=Yg9dfp6z)~Qi|0!y8%7pCCtD7fZWA2y5@Hfy8)7g<`q5sW4KUDo*LzO%I^p4i-nkhOv>tMmIO?j*k^LZieKsloki& zq+ng<+lKPU=FPdGvGLK38*_zXv0y4Z3@2F4bKzsTdhUkB2sW@zI)`th!6gApH6t5B zN<)0l>+c(;HV?T&qY%1sqod>H+;|94Y|j*IJ*RBgm@DNrkBt@G%^P!5n+l`4RKJ%4 zFeFWaB7_DTCP^F0Q^Ug;z>(3>sm(FaR3gP?M@%cvxTOZWzjlp zJiIVga4*baT*M{Ij!FY-J1*Gh%Qead&Gz!c*J;QYMT>3pnYacI8@V;RcVE0`%{rMb zYv2K<2`>?AavL^*NMP7)gm3sg7#=w%H+0U>$eCvnTjUUZ<4vdCV}p3@%Fnf@YK2+1 z`G~DVClmi2yYeJji{E&ulg`E`b4QXkBH~|=qzOdjDj+=up{+%{tlgyj2wqZeS4-R2 z2$3%4FIC>YEzsi;-c~5>aGS+O1!{!`O>s)Qxj-`r>_8?dQ$ysj?Ru*~ErfO+gYuoO zLTDG%>WAv}-B8NA^fV+)!du34q009V55nU!^cOB&%jvcKjruf1%O?GaL}5! z(Mu$b3v-ncy@JDa`V0PP^2ij?rUkkl@!j?M9K8(z)VBv$@L*(cq)C5+ggt;-n061s z7=zw}_+Frs8wDq4^Z}07ci?U*8uC$z?1WFB1^Oom?`DL27Qsol8pNHVVgJ!uCeJ+0>PcB7V4bqz2dUG=Z=Xh5mLv=Y?pDcL3amPTPev zzqh*)+f^yo=>P%;<$>Qyk%xjVMZy7hx?L?axNdp^XOJrqG>70`zPw(gc}^9=VDlMz z3KxP+S$&qSLGTi=>Af!c`W!@dz~hlbUWmxv`T@7ybm{!t5#{N#rw~=@^hNwAnW;&C zdwaswj%t-YjeycsHtA-BTg5rL1;4O}EP`NujNnnQx4gvZj&~q>oZFibvo24cKTo6AB7v!O?J6Y z|M);1;meUK>HG&1w0-lH2E2}OmdYAG?&o^Q!*oYbpDOpFGfYaWGV4mwH$MVA0dDt8 z^A%w1)9X}>H4Qi+qkDmW;42%5y7Y<-5-GuFJ|7v0z6lm17#Bb0@~~xJsV%R2&lsY|HAt(=3-8D3^6kEh8w?X@#Eb%7K$Qz!n!h+vtO1OnL zD(KhGmawY+4d9CGVLApdB}b4T#I&mO~--4dHSJ=HDT;Z*L+=nYtFP`Yz7|q z3#6#_<#NaAhv4tV+~EwwKlra!eCRkm_#2pRklN^B8~{-d<99bNYvTy)`DJd#P%ih#qXJ_M^W{gzmH^b^hNfy$$-7`XKLiMU3kbUKVDS9^<_iGvgjU^{ViU-I{)VwKv%gXRaX8=>f+X- zhxlKt?USGy>Bo48PzD&l_$(~cCu{J->ecjg)Ff{*_P3h1pc=XJp{mJ?WaTcoKVpBsBA?*hTVj->R(0RXLif0dnl=~%9Co4he)L)sI zGdy;j?uHn4?KM20ur>)K%RZ^jAL(&Elq4Ww!VuOUbb;cF><6(_s~V#!>Mp&h(3^VF zwmohOYV=lt{Q_THsJ1mimfpOd`pxTli`Xj^J^I(3i6A_FNen8TP@cckn(XP2Ue#Cq zs`TQ+q#4;O?-ci?bjEKy6!e6Gdo?t5zg@EJPwT_`{k$T$PfTP{HY}mLz+Jr|K8xt? zzxBAvrsH%k#N-$PJf~7(FRpw^rx!J)kNKPLbQ19{m3NzvC-^*({tIbFBg^q2Y&ws7enNP0fxInhL4HQle{kh5sl6PqS9w$NR4tH9u z2E7YmzTc`1>m2$%5@fp}&5S_ZCA&U{?gIrwN;Wt_PKi6Wm23U@jJjYYp2a{WaB zT9!3{xh3xn;F3+R&kp@_M<~1u0&VB~k!d{K;Lzg{V;KV{mD&rwEeCF^V@@8$b<;g< zH1x@-c~!2&@hy28G>D-7+S~-;J@mBrHe?hM6GUhy0@cz)vk&EFz1@J<|0IG8FHvzK zM!fKTMYQJFfk0Z6MHqXSsm)v zZuMhcYiu^v`(5$>p`IW~b%ok6?+B1UaR2>B&`$?z>LKw4s~U<{wHOk%fzm#}?8~^@ zqB*ADJnB(gpw|N*s_2aoB=v6OLsfk|QdJL!K2+CtqIE51>;q8gBq&&UGLWo%+YRw3o64DZ01EX=~`S@hTE=iNDMD z4DZlWJP^>+KOK>Tr>t+bK1pkCk26!)9YLwytQ4DcXGCM4?nJ|P>Tgo+=@OBrU+85D zMtw>0w#N((!R=4N=6x6Ri+sZG(8qgFrKglgs7)(;erBo?wTeikk9aVstUXI-;a3m; z_;ETHG1g_!UIZ{)bP&Ig#Q7B+ej4p4y&UJ!>?MF+iGaLrL9azffxtfcdPG8R7ydhv z)WcIO4j0eBffQvMd=esx^E-d1{w^e#0}`F*Uv(ZG{iF5Ru<)5Kefb!Q=KAFgtS{z?jqdn6g`j zvy|mEM-Jsh1K^R5!k{$Ss5p`7W!}Bf695cj)dNT`U1GC>g85BLX;%=` z#1^$a@zZK_4I-T=&@y-tLztK`aL>aM*JKk8I)-2u5S0l{49E+e3~(&Fnivqj>jnfH zlQ1iZf%EQ1chMBjC?y8aGhuDk2{&TY6I1rlTTf#1dAbI_jRLMOApC8F86Ix=v!52d zlBt7S*{|S0*Yjna<*-MrNt5|wcpk-U!aVT`E;EwYEVx>zmvC?t)8&tC^Ot!~j=25y zOgJ>QP%&V?+yw+sw3trCfO+GN3=NUJSxn(;c6KhzT9}xkd6*}59P~aM@C8&}*igat zM5$6!2Rhh^_;Fr)0gp3G*`9y^b6*j+pDn4%Vn!0)i3FC{By#qJ*${{UjKN`T(xi{oNlu(oysnkq2 zAyY?M>Iy*_SVRzqDSRRWtc>i2sY_9UnB_6I;q6rnWxV(zoF?LNhonKv(561wf^?8w z!Bn&LGI!je|3xo5EkqzAvFwaN(r0&fF3yIaF-1SH=OksFmKDJPwiD1)|87a3fA z-V8m0IcrRhewd*sTffE>eeJ%^wI;0~hxd0V8*5t|(}?>&HVYtG>a~S*43N)u2P9QU zI*_G3Y<(Nkj@rR2h1o7Rrm%A;OJSa63AO)B14xy}`mi)FQVtUeiFPNtNHfcL|6zrk z+gjg-(6?(Y&NlEtYw;Kg8owkPAT}?cuL`2al)``p2Qk!Up6kcnSmI5V!##fUpoW?;9+TbLY<$T(X-^W38 z-Y{+b`I35RuTlfsO=b_9AAb_fwVN~aHUw;uGR?9tBN~SR|M^#RAWQ#tgg+w2dn0Yd z)hxSFJ>bD{^~F=b+B_;}-@x?H0+0kVwa4QZnqQinQu`f!cK2FD*+TZ*-wuJK8ABv5R)M+H|*wPoZv+ zvG}Io;!n)9IlB~Tm%_5L2GRzCy+J(ofi`Sqs0b@X+2Jj|V;&25I{IRb0#(Z=7TNIZ z2n`XF&b!f#l^~s9bK=S8r_r|ALp-?T6YQKvLX*=065?F6wW3&f>?Fu$ZSf?4kj1I< zDWb(u*vvqmps}Z(5NWXFvFAxX&tF3G+5nTN+sf9%w*y3|y|iz3QHZ<5w=g*d2#doT zpL@n2Y-?@N2(y}10hC4H%YyJ)KwxxnGjTtj=vQ}PM+xjC;eYN(^bn-*coObGYs;B) z5Yn{4mNU50j3;@k%KkUb{#;iEl@cF$7|t7h!Un7A#037!Gpq={k}rgXq3cSHCfGU2 zDRj&!Zk#j~Y^r%S2e)AP(L9BL(QzzgO^NgQWg8|)m?r?HC4|^s?(qZ&F-4k~P`M^y zwvi~3=x(McFuUm)UWaf9*IM;B!l36r5D}{!xhf;=5+fYgb}M_5`ypW7DH1OT7%Ms* ziDt|Q78Cy6USJ?`tF=00`YHA9MHA^@F*a2Ov+CAuOi;kn6%q|P;Oy?Rzm}^Sp*(XE~ z^gMxz6V2uA`G@iA-Ff>2BJ42W)BI~Y4EQb*EE~!nBAR4FxfU*5;#WU98=rzahaQC_ zi%zMCxKUQoj0Q!s2#CE>lNyrdIe2+Ee8kMwYxP#0-{6xxbSBbZ7f`RZTev_+7a|IG zIP@C)`pRQ^J)+8&(wh;|0tL)k|Iv@Z;`Muo!4=Id_-V>9Fnr0t#f-`hj~8cq5nT0r z3?i)Np?zK|1e8OF@Er+iA)quVw16N>JzB9c1%FCSx*eR(B?f zg~zxGDq0=-4**fmgf3|?t!AAENx4gifk6x+?YT>Y78uRzJz(@61aV)OueMIP^likH zh3kJJ#1=mM_fkynlc~G_`yWg>mi`lX$r<=$t2p3wO=c7y#j>fr@>X-9PUT^xX+&f% z0p~u-h02u(D0BRIgyf+SdNM+4)36PBc zb8$`Z82uTL(-zqh4+d1Y#;44e5mZK3^e+gqjrhOeS78h$;@{=0*0pmCIIZL5Lf;YK zcpY)ZDtzQa*^Nj`E=RmZCDRA+%cD*oK_F=I{Yj*#6PHBkK4D0dRxSSA#GyNY?3hNF zQPTYpkrs*4<1EB9{%8_mT|EXi(dKJWO?Zy32i9WZ%IV)!JYLnCtcnQKjl0|oi?67h zgz3cHP^*}{%B#I!v1aFD^VQ5AosGZo-#kY3WctSOljyH7SvyQivl0o*%MlxjdbaDis14x>T`(jQ9W0c31#~3fiFz~Ul<+AH!AWPh-O(76==#?+D z=x0dBOAeR@eko4BmIVM9&%==$Vu!H|=;KX}J^+ZdPAfTy|9*~KC)0DDbrL;iJ!SSA zIfRljg*GB!VSWNph51J#l+W+lcVPR@{K1{u4^8gdn?JB~7d;W_#(!WLVcUNo^UbjT zzy{JhBPTkBnD`I88i9cSz-J=C_8<5>&Y=7Uz8b-;%9rKq5wv_+zJ5J zZcbremhVHr^JV#AM3gVfPavdxS$+ngU6|gUFH3kFi}hs*XJWQ5%Wp{(62A6j`CW-C zUzWFUxK41b74T&VpG3-+B^;0heOaCi+OvIGo{IQh(1P)0d3TN*UzWHOjffcD5$;(b zEWRw)AQoS=MJ!mOPmwl7PV5C?o&!sruO*q0?t=Mb`d zS;8R4_hku-0tV&#vc$2d@@0u*H;lUWWjTY0?aLCHKMMG=Y$3t+WqB>)+Og!HAZR(3 zdXf?`=Y{}Z+f z6bJlkKOKm<1ZcSjVr7mMF2t8>{Vzbt^AY2)*=>K1pILtMPdc*Gup=1oTS#Mg&=v@HYOnSL2^SDhT=>oWjDUb^_A~nVkSH&L`77 zZ@`Viduoxx+8gsCpRhC7g-@Oc0^3iu5HiE^`$jPE(hFhx6m~iL2rRSc;92-F9egUn zTIuji1TC+!@8U0fDDig)Xs>b)$MUV^;?mueYNdi-?HJ@b1U)Uw-y@>2^zyqKBqnY# zOjpwO_10GK)O#otI`~ycy$B(5iQ>NV6cD^eII0Y zGR=SVB)T_zUav(;!mvmDW*4g!ahPo#91?H%#0BZQ5a6dQNhr-}r-7ioY^v^;Yfc|ZerG5r zS3eB?$#vRUIeji#GOdDh$CY~Q8Mdm39*@*^ zX^xJm-_Y0NNR8XC^2(aeUov?pzio2wjth3~&2QhgXaByvJNF*SA9~#Wo%ANjAi^BF zD<=XUMUtf_p)VlLUgE!oUwDcCHWuZ*mY4V+ATE@N@uj=*y2_5;y+eF@2$JkGj9rM& z7K(7nPrUZZlU1}C%bN9i)l&me_A+0kk0MPW3qyf{l%2kJOubx|#~?{*`n|Y9xv@+Y7Vi_SFwJ^8JWv4& z4;(mrJqGe(3{2Dee(8M;$zxA=y%zy9ek&s4Bjx)0>0QEG5#XcNciy@$0`XD$Mj*bCz8#2<(GLRgP4weHe4K6##5dD#197~N zb;|wi2IHx9kgiZ9P!Gv*oWiVkgT^~rmYijQZCgkXS zNboj_|A2^I<*{x5IAU2`(7xaSOm{WB?aV~?eZ&&IV+LJ7J>Y>Vt6aq0i%8J3pJF3w zkLzE!@4}aHV9p-2E>$};8>!7Y2w$W(GA++dOep^7(4RyrNwCsO8v&^B{N<@U#t@W8?pQ3QU5M?xl6K=~uS*B;v!~F4ue8e$ z(i)WW9t8aXj7(@70+!P>-@zE|#h0mSp?Cz>MvjTbBx!A$M^1IJ`!s}%s0{JsS%|Kh zi%uAM^~5n3z45`kW5J6acTeJHcWIsGoIZ)N&Uq-O>D6_ZyW z{$9uElr_ve3wZLZ(WE;e!uF|mSHEIYOgTgh+Sw#8QF6RQnSFaEjjJZbA-7v`#?ow2 z{A$Lqu}}R=L{{xnm(!%1Mot%@zJh1M#t~HZsplc21_j3Iv<)$~PuxTLRqMVmzpw;ZdLrVe#l=rWJ?e<{w>^uqR5ps^1B6PJ8y$7{!Y6sgfEiYUc-Ml@Q?Pzb zW~ezdI$7x=u=ld`CCQgf!+W4q)fn7L^sntPHSh5Bd;Bg)&pPq`73##UYGJzBvtInH z`(CKMy<&)Xp--Lx?UMb3~ID(jPTE6nsV`T-{Zc*$CM zczYeK1GgcXQ}R-GU0XP)_sx1`6YJ=*G=mcAMK5z6Ef{i7tWY^ElwIh^wlHigW5j6CUil zg%m)SR%bnBNkD>Hpgmi9dCbA{HZFcBx=ZV-?q02i7WKi$bXM8szx>f%_b3j@AN0V`{m)+-L~9Lq=n?>9yQv@HR~h~M3L#_k^H1BC zR#k9tPq|QrLf_(eB4To7mn)kqG+JP4@IF1hevOtJ_0I*>`c$Fn&|4$<<(e zPp0SH^<>)ln2we{_VMkbP?(Qzx8fJaw|9Xpi&<9aK8X0VMGr(&*`%C>kTE?NLfAGv z7(+a4dawm)zUjd>#KiP~tq}vJ2YZoVn;snE49fJNjG#7yVY@`j45qD7Xgo9=< zS91!R!8{WI&kW{yh$u6dKSfBH!CZ&XF53*|)kuglgLyrt`(`k2ktq1GHiLPG#FZJ$ zyE$B^_wkQq2J>OW#SG>X2n5VvK7$0?4CV`n+h#CdOAQC(?m^Jd%GJ|1j zO)-O6kAPuCp|V1Wfs~h|mQ{Kbve{+~TM_rn7;a@)Y{K|!1o)hY&28e&dlo4Z2DqQitMFi6 zLQTrg4#uTWR_{YENhnQjfJ07d3wr+^*AQxMeAA& zc?5buhcg3>nI3H4<4`LKVo5V3N!E7grO}!)Vju}7-4F%2q{jR5j%UPV$gXXV6Dq~CYp4|$XT|*HRS1jm zuDa}e6QZ7Z&wnAJEfZkg^Ap5U%zFYeK;P?iXg4fYeOsT45o7z~#4U1|96QYCry6*% zSnK`{GMnNmWb_E&mrVmR$x}Ap_>I?;u8XdRIj}xD`fC`3YU`C#VSOnlM`t1+Cr4}| zsE?%%-p`EmFw6xnMNI9P&5Q7frU2mqOOk4PqdQhml1yq|+oNXNi~n-8`}>i0cRA!~ zXi58q*UImod8BzoOaqqo4f0R4qRb8o^fn`{g0ydNB^0eZ3B%pdb37%cH|Av6JN9C7 zMX7W#t@#PegS5Rn-ENKSwDausSX#)IDor{S$$AxlmmfsTcRCjlK4>20U;Ci>%aULp zG`|an`^M#Q67B;lh|LRsj>4(u4T&Wm@Gxj8s+FQk4?&3S4(JR7ba&W0<2poB-!%=u z_SUsmF}PaEJw~td;9-q?BO-hW4z!)P#svV{-TbmD+j?aK&v+o)BPQQ0mq5>$;w3>`jv(x&nVsZ zksvBu+^Nqd`|ZvSdNZK0>(iv^mL1XpATboW8iC+>#RS|ME#-DuR&0M z0#HlBWf0t30B+I941#*^*-GQjYJPgzddw8QF!z557zQbBhaPy2s!<~Uh)AIcyEGT4 z7oh513el%-@N4do*gFJ}jIADldlkTmhyGDT9)gm;g%OVL1nFkPG}ogaBit`1NE=|f zAl{E|9@o{=j}hvJ%cpnXz>_CKkC6BS1&$y4lMcKbr&0hI0t01 zWQT=KT(^81;^qk|de1h6Yu=n$ewyg6JN$Iop(AkNK+oN&J_KE#eb%JPMGFg%c(poX zSE!6Sc#v;LFHqlj78vg+AG}bdsf(y8Gx6U=r|_xW=itAyfg=l;TnCl~EIE1s!adk^ zh@{FH*;(dAO9B;S7`1L;B`We>+%2RI`|o#m3onDNhrYTrp!IlNj(7-)UkV8ifB6Tp zcr{8bc6fS+554eMiFfFQmmxH@@Xc#4f-Uo3axQ%w_9le+IPC3S2Ka&bG$KAW>1NI& zz6aP}ot8&IfHlHp zRk)-7hcw-!_A-^u75};afunz?zHs3W z`d>JDZ%p7W-FEnhj#Dtxxq!%Al|~WJni4*v)tZurfKTwY<_!L|w>2P4`Y!&ROj{p+ zG93b9gq_4{1jQe`;TIVk&0!H?Y6A!Ms0|#@xRbjSLE(0mv!|PpCcXGF0^Htz;a|JG zCxK!VKeUR$b7hQIsP7x%Vxffp9)v+SnO^>clj#UB11UAYHX*{WoiG+!I&gR|9pq@c zmgmPfn|O)|`z>KwuCn#`H+%+1=8NLhO1UNe!iqD6hKjN4E`I7(#h!tf^y)bX@VV~` z@atbneGOvvrBwEp=f`vO)CMPB0-yw*(W0>3@R>BlOE)0)!q=nqNt7Bb^#d7^8az6E@NPg9+obCYZ2U zd|vuMaVd2ukYhMUn}Z3%v@Mu0LKg)SMrBS|KsSmbGb>??%E2O=#Mh>kW1JR(IX2TX z0tvX3`hs9Wj{XV>+L00aE%OxEzd=Ni;7K6oYGHvn%~}NYOuq_2MVRzf1ldA~y;>T( zq)AY|C_>t;^0;-&59CajffR``?4zAL}$s|Ac&^Y4aGX3N%R0`|YfQwE{ zl*_PDtYe?p!iRm$gEF(srS_0HL~;Qbd0w)}#_U+YRPJ?S>S#FIm*{5+vC-i+Wq(#{nHeJ6`_kE!?jFZeVyq zz4{5hoBeA?s=g48VybRu>fehwfQN}XXYAuN@yMq0B;{!iQ}T}8H?7@Sns$+Y-P*LF zS{u9nOD^Hy!h2c^G;cBwv0sa(n{LM z3jDrJt(8aDz6N~BxD7b5>t>Q&ba98=;R!J+F9Zsr)j|~Hbp4$j9tG)v)@I2Lu`^y- zr632;-4L;tkd9Q*H6z`3wC0w2yTp54%f?8%8*Q~+g&$YkV_>}%?$ryW>MeD4zWSSUYx}&5O8!3rIb{H@QIF|jvX9C3U+9%#dbQ2 zVXK40`f}@$yIu-T-t-EynGuW;PZAnOK&}6D9;XHN9X(}vj;K@lB%60>9ckMLy#3k5 zqN|O{^h_&%WPU}P;tf#O3mlcqaIJ6`a0F{wQpIK_?_!6tqBwQvYBWf^rBb@-4`wzXe@L*4+NT;b5&@%g|PWKqyAti8znik)ikI- z%?S3N_L|yOzWbiigf2&;piSgAHTWtt2nJ_vwIe-6h(j}|MNg1&rPX8LZ2&(qFZPvv zA>(Y+Wa%d4ja9wLX90ADTICP&i&h*%ep}v(wy1Z;dWsi^-UGl@x7?k`-}A*Fl_x8; zg}3uDnoIf^`eoLUeTvaCJg4Ze}13 zy@-eSgksuZ#`kLUK=zrSOg$!X^Dek*^_+9Vzm80nIrzwSS5RCEW9PkSl~!KU2M{h- z8gNfv9S{}Rr_iFRTgyIfebBRd3q@zD2_yF_XntYkHN{Kl!FQHI5`EFquqT7ANTLs| zSOP+Sy9kmPtRCF?PL}Qv*U|9um8S8&>;OZ{=)+Mv^mEOgZmX6so;kFqjQfzHG?aUh z*_l<(7nw!(BhB8yq4UtkrdwzfXY#yC-u5~;>35J#Sy!}!$&<*T!)Pb(LV0=a&jbj~ zwi+sAZ8%hBg_Tx4d5UL)fN$7TfC`ooQrffG2B3 zJkwm6clD~{&_!0uApYi;p>+;jib~~z9gFiucb+1&c7NN%+Y5$7`Vwk}hYB0@J*^jp zbg1EknCx9I!zuC>#I5I}--E@~6XrnI{WfsAneeXwHrR-=Uz;q`rqKLeWZ!V#nlGN# z^0jsqmnPtxdoKc=6#=aAW%YS)r;x+aJHK6zPOdn|^cdw0Xwb5=s}G^ln0qZf#di{` z{IssSrGX3?NgzeB$Vjs{^337+WqtMF2}PWno6S2*7tgq5UU zy*IqOoAu-Yz{v?j5j|CEtUa;lq07E6h8ji&lp4C>y(v7vq4NiH$h+xa*8}U&G`ii- zwb3*w#J?9sv4gg1LS}pw(ARLMAT`#HuJn10ZG8Aqvy|t z+`ylZop5LqnqHi#v#&#K{@!CVJ%^46cDlP2xzeNS(6i9$a^;wuYv)@tje2`}Mx&^w zQh(AG4^={J^2!B|WcB|NoM zs^@3j2E5oL>lwQT?M>n24Ty5*HO9^arGD=YrLwG8*~^~E&1SCGmB-ZqTED$f2{G0y zK?ZSS&>xZrRep6shMLa&|9;RAb5y zoD{O)HL|0_5QnY}XYL*;FO3H=aCmt;+R68}drFfIjjaRqRjzXLGtd}Kd zt-lNPd5(9MrN$5YH7*y?IP^uo(j)WqHNgvZ}2sE!5U1!41#6)nR$Q zlYiEntrN|8%|W=BjwUYDioV175Qo3cR3UxfC+T$s+uN`um`xg&H<)5p%L+BP)ZAKI zh&BMNN^HR27)Y15$FE4L?t>GxmcIb}RXq+$DDn6ZU@{`)m2b@ZD6$8UzS)jVG5 z;@7V#8JyXea8}19;H9y<)?;2dl2Kr z$6^FM=7>+^8XEOkeQwttcc`h8ws7R>h^QrCbn|h#7O^6Fo|XAn?T+w?tT22w66IB0 zF95IQzL_0p@;D{&g1<&_j5YlOezol9zmBCy21astd{~cn5}ePVytvYCR_popd>xdZiu+S!+SUbPk08`WyPh_?~* zuj*nb?PM)A)4g)IJ)|~|re@%P*%r)mYYa|>$ z_m#xbePh8C-h%%7EsG%}hi*g`ULh-Z@)X(`cpIt+$60Kx>(?wx&ps;6_E@9AZnKD| z#xY9{^6w6~08gMy`bKee=&DfJ#m~9`?-+Q-^g{HzM{#uUME%$vuPI4Ht$=u#w{Bjg3!IvcG$Wyl|~>J_QfU>}DC~dfQBJSEDfN zCb7Q{cPf2wVRousO)CBw6o*j@yZ=uV80hO>Cbs!vZ~n=7zmL4$oWlMtIpaE8I?d<}dpvqeuJ=*Mq>gQp^IV8LM=Pxv zA9*Rm0k4(e?C6g}HzU}8brtw#=kn=<_rATR0m(i6C**0)xy8Ji`t*fhJY`_M zhn&0-Plo-0eN6Zz>|+z>o<@KY#zetj`%K&gwT5?bHJ;giYRPrL3rf;d{D}vgJGuBq z{tj?tO4FMC9KyM8GS)_rMc9QLWU5MQF5Xpb){93ls|uwO^yvpBvK8T^#_s|gHK>V| znLdfF3Lcfh$tlzxe0~c01z7_Elvp?zr&AtFq!e6qCj^=A(-{cJO3`kW$9*LVm2?K! zmp15XI}^Pav7-&t153$5gU&qQZ9;HPvjH)1NnPVU@7plcR)-K1QlbTfyvOQYdNHEB z7Sr1hP(lyA7eOPg(9MXbm6^V5((`;GLjQrN2nrIr!$C$Dngy4g`B^DWIizjZ-QI;T z^hOuq2TMu`*>DGD+GuFh_9v)B42Zoz=cU<;E@?M~s>-NJ29=H=Gy|cNZbAUqg%puU z4i24l$Yf$Qelm@2^71jI(34cO&JRmV!cip11^{4MaDRzB&q9*gER7$h=Y_u~5%CS2 zvEFd$y$C>#pby}e)pG{%$>y$odo6wCJ@EV5vE=TXBetFJPz8$kRA#(&Z6>_(_^>YG zJMn+~G!6}e_)D0K=N5Ro10P(t zXw#@dGG_)N^9P@Ws8#J~_dvPoqPL@cj6`nh`w$iuzB&V;?dId5Y8Cg{;j|dS_!K)= z=drVGc=ZhYBoJr(uhC}^(Jt8Nmm0ewB$dmRiHUlXS3x*IZmPw{q1#`I5olu5ST<-+ zTX7=F9Wa20b_GGyJ1DiDOQlU8C4oA$%g)G$Zj<$cYys=gU^{MkbN@0TNPje{}_UDVp6H)jNCrsh?-)H=k&jvD#rU<+Hs29%v3n*#u#ch_|L%M6=U71rkhS1XscQ1tIi-a$7u zdrg-){~JV^g=CtHv7ME{iD!(c?!K3I4S&!USUmQvJ0XXYrK;M0OicKp?KAD#5xC6k zl#k7Pb>6QduUe^Nv8rdB;I*jM8@<;7Qorw&737<(%po}%pDa1letZ{LPa8nGMne)} zc{L*Sav9nq5jNhAXa-&^@aGDx88)11&1`FzwN;$OUkz{my9h`rZE0uJE@ccy%}{Sd z&X^tg$9M?w1WI3s&mCy3L;n`ZrH4l!iSQ#5d>#UJtLJ6?z&>gM_56oIVVwWhlaGE@1V%;;l+9nkqCJ71m~KQ-OmmXc~m^rm@ghRmM`2(bt3)13^k`0e_>Y(XP)Z9C{?06`WZ*N1Qw>?ZcuW*Cm#x zeOn{#i)CUdU3X}21V*PmF7FuJ%?*#iRJ~qx=*&nuY(HsdBvtpu+X<+VF}ynMgchYhCvh8Rl^@ueMlS){l$NK9_| z^;>M++-Vm0#RgZM$ANo@8SehVLbYDNn&-@f+n}qnByCG-U6g$>y!A(F2{*L?Q)k^$ zKBTDQKn9-gj<6Jdv{9JD?gCqocqqN&&G&ec;%oW&dbQB1RQU`Cnn0au$S01QsNHeb zYNmaxT}-ofUjlbbZl+PAh5X4l^i1?LqaNf$@9Mpdgy}wQ?!^m~Ya%cL96{+D=$uF{ zJ;UOF(nL~jYd)q}={s~m5&*?g*@P>Wr^Z`EIdmujPa#U}77y2&g|fRHJ4Z7+G6_L2 zBMYt6f;rVhTPEoWYApiQuud_D_Pf5MdXjA1@IW2vw>KxMngXtHR3O`JmEXgBixrQ2 zMVe}3Rqv}~DN-YCxn(I(5 z0xpIJ;Oz>vp(7`f-K$*#bmMa*4VhOw(0EqQ%YLF=J|IEG7`T%tz&{7^QxipwLyh<< z!?}0k5Z9qM#b;LS!+k-u&pF`o4L)3K+{1A-w4r$*tR<%TIH-hRpiXypBYcU3<2nFQ zLiNC*cg43V*ahTQefXD1?oiv%YQI7svx{gNoirPs57OtQ;>#aKqmXmx?(tOxk$~(9 z2^*2y=4qjAnvD?|s#u;CV8b|2R#=M?YZu%;Nn^ll?-}tujMk?p&gMK9r>Y|y`cr_m zPPIbVSk8XZ+tNp7S=;j72*y{O4(Q{NHZ3Dc=<`_!C0Rs2!NqI1)6GPkw_ybQmmvUo zdjXzqJ%s3lht^U#D|VhZszjckMk{t+#U{!E60bo6l0&{SL%~xRRRn5_%K|+pJAE%FCJv3yS$m9!q6%A(Re4&p*Wj3umM+ zNAhVVV{O+g^~pe7H+1O7Xti3@W4lkkiS#OYc+~b|VnS~wa22&~fUncfj<5z0%Dy3d z5Rx-|IHV3c&nuXa;SyxXIKnK?rVen)t4x#6m7&(f58xv8UsrpzrIN=Yp+7%@7d2d= z(|vt2Kh3Hq`H1NTgPvqcP&2KLi}ran+0>?J2%94RieTjI$(98ZHU|2bRcRcsH}2t{ zKzBH$>3pFUcVoB*gV}aVaK~)M?j_PpoS2->a`8WSRJb~bZQLSoYxCZXJH1TA?@aqo zfY}G}Gm*)zmpT7X6EkpPVtXC-z%CnD2p`1p_v#FePK|-!KGxv#C5~Dfx-N4iR1>M0 z!arS|!Y2S9?lg*bo9ifiH$bb2U~mEt2q|hAVF?{TJkm5m9ng+?5LJ9D;xWP&)2grP zLP%P{MhWe*h}HU9oJG?IWmOU#9PP~lwR;5`&6v(~TG^_Fs}>^S2`;}f%M8sq#Tz`0 zHdrdGJ+N+QnZf!XKp}0_tMgGXyz;g^e~I_h1d#ICN?NfORi|( zu=q-^<$}7E+F3dD=D3FRm>WCv9@HYPsq5uDKmXk*9PNQ;G~8DJT$!1gVZ`amSHOtz z7wO$iS7AAHb~D&3MIF9rhEXSKOTQ$ml<^K=6xhI6YcyuCPf51$_!6qcEs-kxo@kvw z=mb#BeWj@ynDfy4v^36RIg`eV!dRaVXX#;RN-6?Vi2XKUV+U7@77FxH&=xa5DZO6- zd+Lj=md28foKY1!=dl?3(UG=~bu<4%r!nUvi?l!C`(^l^ z-hqy1Fs*1SdV1>eDhqxr{aW(LQg)uJ#}?vbBcmCXMU}w6-bke#Tim!hj3>nDQ=+<3 zA3uFA(>Qj}THcxoh~lR!qwBlfJa4~iZSc(n*;>=7NZF%Pc3`hfcSC}|He^?~twXs~ z>8VEyEg(00Ye+!t`v<8?+X(!Jg^=!)Hx6wF47F*X3lZEWcc5txf{^gG81MOu^p?@b zOVFOdW!yegiRQOa?=%Lf{>8&&6qu_u;vXXe%Cy}$U(8kSgh$l4#wNCNodf2x<}#3U zyT+Hdw#Yr&l)cSuntb?{RoA5B(6o=fKV-~VZjdreCo}ynx)__B)+$d;@!+$AABWSj zc&v82uU8LG6rQ@WSc+WGe7esR)~y^@Sb3y$%}+D%j=o7RE03;4Gf`OWzHpU`rf|_c z?ba#}?cghJC23rQHsvf` z%WAP1Z+A4H`U&U3VKn?^>P5!1MX3$sl!>|q+H-{%9|YU zSb(eG65J~g+JLx(yw zLsd0`s&M~1rsF$SpyTmw)pExjdMtN5;NrCNKsfXSzf>60+ZI}Gb6?|Q^2r*`Y(_S|gTv_HF*E^AfbsmWm?^ykQ9XCsBf}28*6)crfEy^w z2>L6HKs`y8!31Lcn!vFv296KF#7_qMQC2GUe5K5fG_b94zTIR`6NY!=x{4n$R|Dwp zeJl$lXg_=nw_JhOq)+HhV%`Cg{cZgkeL)Xzu0_Af!*bd{;onnWu(`NA+m--AnUnuW zL$DgbH&noyYmlH-(Wn|i;Kmh^#wC?<=#Ixi>xJsJSEEDsj?b}QBkgqc*}AE! zh({I|nnqgi_X{9B>{hzftq($<=k& zQ?%S;R8cGnN9bK$uvYHev+mlzh>_~p-#)j%p_>MqH03dvCN_96r1@2Dx)Q$Fjo)_> zRp(KBpSR?e3vhj|tvFj1mZEpG8}Ry9uQ~KPCg zcPF}D}e^JiBRCh_@js4MoHoVNBhD zoT`2vVg~CEaNLGRRccfrhs1q*C-~;MRZ}V~$KbvVI;eT4B4K{bYhq$&6FV_?hdb4t zcIat(lv(QMe=4IZSqu)j4>c@HejhXg-;x^wp}ZhmO<0-~lHY@gsesFyDJsu)GzhY< zSwTGg*HJuGW@_g>hv;DRbt1e2tD0wRBF%z=w?=e-xT~f&k#0j?#DdbhYU$mK0!tf& zrkPUF6qdy3kQ0tMh+8^tV*{6Jn*?4~=(ygDPPTyEi=_ppM zl>?q52gg4LoqUxcLc<%`um9?J4eEH^1LL(iyY&5&0q}m4ZbVKGTAf~c{b#naVi!-W z>+c-~?99OYN;U4MvC!bA=iVNGymA)*v_I7B6>Q2CF*sSu+5^GQdyht~XFT$M=obO# zNwFiois;U6#I;at@ei=GMCT=RJrE5UT#=r)S=~NUsg@3kS0RT!th2<*;0}FVf94$p zo}7HLe#19aQ&gC*Oyg-KYz^Qnh%Jb+YK@G7r4N?)*g8JcYrHH0>Y%|KSnb3|yhyp0 z--d9gju`J#e9f5JO?G$#R^TS7IG(&Xn5yFJDi3t@?Mta?(A;4-^wV&6L_wQrKo)_# z3!V}hda13`8+-@5D`maNmya!(sduU5_Qu7-Rh17QA)rh0;CprgkQ?@UkB5d-?{_=Q zW+{8=)m_(_IxKGY@CJ1_?(o!JqQ>aY#1jGDw3x>Fae#jg;jMV_Q0>rZ-Pbsn$jj2% zvFpXuFBsTL z*0GH1wgq0#ap+p)46f~hgOn0q3YX}T|NPptP0EEa?$D`E3$-XA-(+k)polKU7oRh7 z%B@e=DPmW4yK6!TWGm3h1kr)Txm&oIqME$HQc zN0$6v?oVXN9U!GIqJ%IYy-Y-i+TutLcxD)}naDb2iO@!64y|1rXjOj~@}gJaWlO1W z(4+;gSDy>_D*NOe)U`uR9QxtndzMOnhJx5M%UXxM8FlO8>ouSQ@0O=DCc|=e*0Vx0 zu-oxn%v9O5)Jg|$x|pF!8ugdNb~$}tNA^ z_>N_&sOp$n0@T4<`L(+`LHkbSPCOj2)afo(+8*=%k+cbu+5l#lhd$dm3b zF|ib|^cR6laq^kEQ{m9tI_BKffSoLSO$IVrVlS@9;8PjWkguloBw}eKXEq1u$~XX5 z5n6S5$S`!~?1K=G-sZ{k4*4ykHdM&f9aJhhXmma|kd1>=GPqKMkZW=%e08TRp;fAeGkGK?cTl?btlta9h)sKwT#c&1cr z8klAH=|O;CNRr?9Vaddrg_&S%*R4>8Du#~+==Z=umcAAP9d`q{iNb$#o5zpS#iq8! zH1*3UT%4T~71-X_TpTRkqVuSJcCjU+U+9uu+Xg!{`h2Tl z!Q;UF_NORoa_9=3A<16Zq1V|UEaA>OhTVCr(%N3RLtW@Xcq*|}N#f0f&SNOBqe zKU6>B;$p?dKT%B&1*4f(JxktRn0&JUb zD|_NgU{&nUR-Gx9t`%Awss=Kt+bjNEn&$-T@rk49vg446iG6b{hRD5}cLgAYrja65 zP3O4Bh{61p4LeHaY@1L2rSl|Fx@6k@;vh0002Z1M2bAgna~TwjoA{-zjcLGqlFqFuGS2g$SgHH6ek|(EiWwTl6ln<~diu*$OBKP@ zcvFH)xQdVLt=E{99A@gB)%ldY!&N$_%^&{w9edxysJWf|%w@+u_HcKI_o4?e7+i(l78qttI25$LUVjd9k76^i;&A z+AwBu8%=s9B681wR~33LVz4=HR9vihU`+;@0r5iyfLST-m|FQ0uZ%4E63R+Y!W*m} zt@SlaF$mz7lK;leEhB18s%^oUi5m^NL!LK=jwKSf^9QYJ1%?`WZ$Su1on9*F=_adS z5@!k&=CO9@YbYi}g6%hbGXspp4Y{{^F6-R?U-X9st$?r?cTwYRe`eSjP;wR`qNk!4 zzrsAD!2s}|;|DZP_hAmfqK1VNl zjocQ3oJzMKs8XQ?YRnc|Ew@Ck`wNvQvMl`+F~4KNEQ|U1dIdu5*4G+_unD`dU5IhU zB#KzvXhM+DaD_yR8l{x}|OHG9Ju9Hl_Fw1ZtW`Cs8kBg?}BI|I0uw z4`v56bF~5d;^GZIwf&RV_W&GpFB;rk-q0<$FfU+U6F=Rt2l1fuFlFd^H^BFG3*4(e z4zI@o&=SV-FaJM#X96Z?Q8fMvmz<)Yf`}SUxyf!0!V(5^LV!Tb!6Cx9$82`UUd-%f zvtR&0L=-;+6hx3iz=K0X0YyQ znXZ1TyQ{D2>gww16jGGmsJb$4`|qq&ZguA0AIC03sARBhe@z%2jOs@E&zhtTh5M~k zhUvKwH(=q~BzYNqcG@SCNDcJaXvW|rpBiQ6QTYU7-svaf`kz5}IUpPJ6WFNi0$`_L zwtbLEic%CaGQE3>;3Z-QQLpqFumI#ptzf>{L#Y>)PD0k(Tz)&j`qG+IeiT)?r zjuxuu&Nx~%LAQeZ>D{c3jZ-}uikmViE+xAr=>TEX2zR$8oTS{`j6TR(3Nvh7Rr8@2 zgHA8psdb{l2xq7^M8g$R+ii0i;X5K(Y?C=uV}T#EcM_}nux3X1=&)1d!Kvng#KNh} z+5KCgeq4^8SUuM`msamvYI>|N2;g9~X2K;7Guy#h!%GjJQ(`(Ze{gjh0tZbI<%6~?#cadv)*00(i9Q~a41D5ex?m|4OK5Q{9 ztRD~lCz|}vrxp+Rlq+g90XjV72ppMP?KW?qlk>LADGafC+mun6PDUD8YHe!U2X$ zPyL=u9bkk6tYOwL2|+iVr!8%UQX_p%-suUe$|X`T&UcRK{A8Kf`k&hK8 zJyyB3$&E1guSzsSkO@=Tlvob+(Q3&ZZEO4>Nz9f$oFJ>%H)F6f`=c96YE;3QYUW~{ zlh4*|m}m;dj5aoxVL!#1Zfb(WHku@U3mAB6=;zw3@eT;^1Ao62@^v8F7_uEKcIW}N z>zn!_op08LCAWHr_={OxG(;U;zx>Cm%Fh@!QSa1Xkd^Wxr;=6KR?2n_WwYK5l|7WX zSYqVj6rNhI zOl9JF-})(ebaP`Cl2$7xcj#wAYFQ^=2heB(?gg;t1G{Ldu*R~`$4AYxdza$%36|sEF$`tp!`rld5EsHA*Ss#dFp~YqnJR8-)&(FyU9fpRG*2 zl^SH}?x}8PZE>@##KN+rrQMlYj#-1(8q&@ud9pIqRL%8cSbLw5S%yv#9c zfMk)4Glp2sv&(d9x>M@w&UbdJrgx@;<^cF1F#?hfrcH^^kdaAUn3dZm~|r*BjUHD5^2k z!`P`Y{==tL99FfaMsS{4WusAt!Ynf8MhuZUta*-T4HsBJO1D)}xr{oO?XtvPj0EH7 zGNqw0QL9l$>aVz=)&aTU(28ohj(2_B@M@5*al^@Satx(&%_c)`Fv)mc?D#c#PeL2f zaeLh&BrNn3yN-C9PAF*6-R?S4B(KE%Ayy^ZD`G?f`6m}6$Fx=SVSC!ADv+H-`OiU*{`AlYPDnr!wf?{wH}AahM4HT zr<@~mDn{|Bc=&&Q1BDu<#zjsR(P|xigKa!Vh<}bh8D}JipGaktgl)x3jKxUt?dJOJ!O_l0cR_? z5GdkdR}zakVxgyhV0f(@)ZYXFVG77CN;0>6^{AvEUjs5HTW;J}YyC_HsA)66xyA#e zMue6}_~kiPdCGDds=Ws0TYCH%qNZEs56Oz2XyY7Tu<7XOm4-WoAU8BjA(6_EHYP|F3J4x+J9gmnf z#xD-aOgB8tU7j2QkX&xvrRVfuh;@fIG1|SfPz;=8xYYvgqvAYxKQxE#Y8xug@*(V^iUNXRQHj z?^x=i**&~inK91IUfg}Fu=>^y}2`ld^0sH&RcJ|az{*@UO& zY)0k1vNUPhzOv7U%8#_82FnHcbDEg7*I>BB`kcDGEwr0kMem;Q|5`NDLGQ}@ZYxq4h!PEH|*j)K|kvjYqp(zG4FydNaJK_cf7n5ltD zw=vEb^nRVGVB|izyWdpld@XTZDijyF0m^p$k#WU<<>ClPDHZy=Td7^mWo3<0a~#xg z3ws@)WYAOMyq~@Li{^fO+HPKu(^v-in}`mLSMh02K50!VqVqnZqT}4%i41(yuutg0 z9lsP8;b=LE7+l`EJxua)6$4b=+~^fKX-_0GsWS_)A4H|IF4CzWxr?FhHmO`s1VJ0j zpChcAh&J=ZlYTsfTvgm%Xda35vZ;Kh8oTDO3-qXZwns1cW!_;UG?%ZE)e?Gt#wPO7fFFDjy(N%1R*!IYf>0Q^oj+@#z4&ks+`Zs#lBKw z&>z=~Dyx;~fSXsMfOW6Me-vt=jxu-s$|{Uu+viRs2lF}Lmf>srDt$IcP$iVD1Cwct3w!JWc0i-dxpj zHn;j_#149Kv%n4xai{BRNjhjwL~r%4Jy03%bYbpr+4&eYwS^a+yo1lw=bW5gnTgR> zaX@X^WVsiFn3`#DKUA4_Ru-23ZZ+9VR+7YFW$Im}Onhy$tdBJ2M@L6%R!$kLJqtZI z0#(;kQMK|qs`QYoQV-DvUrCi_!>rEEEV(NyPHe8R2V}b!?EyWD!4m~u(DEt{@zQ0X zbFsk-0V)5%boojm?PG&$Omt6AlD|FfCBGoFK%e=F9_Eu@6BQkCdg<)X8fV@R^xgtH zd{W4UcOtq|HQAH^wx&JBcG)rtqDpD)2-4m5L{B%2#kLLqJ#c4XpuG#Vq#Sft08~A4 zcm%1c=U5=kNID7NE4WmU0Ya`coH-C-8~k?@=?a*^)<}M?*yvT{bzhH=jUMwaraWUO zKDY$)@j^No$YrMAW++5zIu;j60G3pNHUM>9so@_H_H?+as$=D+iFDcGXIcIN6mAR@ zmeY+iTYjj}x>Pp&MwGZF!ZdR-zE_OpieN?CKaTU&cU!rIaeQAXw0ln+>5!xPpPcxj zRgFHJUGYIz(GSOQbWzCssyLRe3bD6pY#C>N1Nlxga)pj*x^3KRyxTnfn6G}pz-Psq zzKMS7q~vMXeC~^CsV5sXNEUlQrJ;!P8PT%dZA{o@$Onpz9Q;?@y+^n{y~M!;>4aJX0Q>r$+wh&;OwS2Ff6+m;NNYr z&-)Q$=NT{=9iIA+RC9>t5;`0E0Xd8?7Bn)SU&omC<58UfAYJdm<28P>n|Ncx@f9EM ze?~amZOy@`+n#ge^)XG9WOd;AHNjmlZpyO&+^OXY=`82=t`Ta7#tz~=7#b;EZ z-%WY=jOeQ@^e1G)eS6-7S(RLVOD@h3VpVea2f4s0W!$&PO&vSQMucXvU69QP=s}8| zs=NUJ|2Hz8-(tVHzmZ)C&+T6}Wjg+EWDkJ8_JP7cS#ktp&p1a-k`vMqQ>32=cc|3a zCo2H@`xr(aB%l;rtP%P$ncvfz-yL5lS5NzwP0|u`a?MD1Mp;g7u7#K3$0sLW16zf~ zvOGYD)0kq1Jq=QpM}YlXX`CM6v*&%u@88{_e6ILC6gQw?6j+s~0jEBoLlJkxu}q z%NO|+fi?~bmZIuiZX(#N#JKY<`7*)TcGNW&Qp{tl+)13BQ#MV=$qxaN_7WQRG;t=6 z%d;V5PRis3!1>{TNB#r^0afoSiF}7%$D>ledt^yorSL$9yjFjQ%d#E6>YhfX5Qsbs zNV?I80i3VH1hh>!vI!9k(!j`x#%0x-|+XCt?uO%xtVZlX^A|* zFV1jvC6!+hrZr(+hkc*!a4rz#O2S$R`3`~bh>|=60DEKmC9{5@&B7_3+CVBy$P5+BNa6 z=@CGMljKBxv?mJ7d3>ZS9|c6+zf|reQ072H{zRa?l|{FR!bz=5cl@FDZvU{%C*bmH z=J2}&#EJLi{Gc0eAL@`h2;$dBzRoY*=FV~DL5Dy~$?G121of2}dT}2jNZeoSkQVo? zw@(%ma_{!3Mx!jJ0=r^)R^o!Q`5#p;j{4oy zP3kYmJ|$mB49;8Pv_?zFz`cjY1CrL(88`Y|TKprs6U_w$eJ`f9cVM2vo;T{LsqN17 z#KMW@t9qz|x~8JqRix8-YORAi^lEjQBVsMnu5F+b)BVurRZUDScTi3JMUTJS)h%^K z>AzD~tMyp#AYLcJD(W4lgudSUe@D^RRk^rtZLX7Ds z?0qAepHt6KX921|v?y<|&^Ws3XFzV2np%+ef7r^EZ69tHiYne%zR=h&UGq%>O7BG08);FzZIwu;EgVr(Cidb9HzjiflduW#vK{~|NE$9eq9dr3FOi4W3E2X(d5nyXv|sC$9z{0kSNI5wM+(&RFRJ()!C;1kh@i z3(nR~&R6_4rYg(5+^-+|UEF)kNo19OmQ(eEy zX9>ABW_MGftCq+Yh(cSp6gmD&1P6QdgZz*nDr{_IQkR#1MW&a!H22^=R+u?vsbfXPReh667BBDAUS<;2HzkVMaG6D;k> z#f#=IUX-6Xeg2}w3ug0_h(1bQLww{t^yj?U4QkC-5>8Z9wPSvo#m|fmVJ3*auzj#p zLO{;@AyMRQidl>2%{#VUQQMQf?tXZ!*bRprh+qWBuATJLY&1K$8v(bj!s)+}GPZoL@FY?g3V-QFTktvE3g5Q3MtG2jt-ABeudO zwh%*TDK7XEsZcS*`i`=E?9Z@|j()j<-^CsMPT?lk04e=>+ulD6bRv2xcy2dCNS~r! zHc9@kM(h;X>qVuS)#OY9&dIx6O7O_CDg&=1)KO&j+d3>a5;lE=!_q3>M-&8B+JB$< z*F;s~5lynl0qrT!_QAX&qHwU7Qj1rcE9RT!!Y1x&4n%K)3 z1XQ1=DyHiR&-CH#$Bm<1^_^j9C+JrW@;d{_ID?!^$T)$VPssBfxq@&N%a9w0HJfaC zm{7Mq)cR)veh)4OtT)cd0!T;@j_s#lFRx@x6}t&!1uokY?oOyb{#7ujE=ly+5e6_`DB~K_%|=S&gC&4Ln~uMEZV^HY&-iN18RFy z8IFSH6(m$GvYbKSNDZ7#Akrf@pkI;;s}rm}ZIOI2NsUtmxk@;iw60aE<5-%n(my5B zzO3~|bJOS}JV9fh*lsb-v$fvx&DGa&Nd{j_BKq%C+Q~z!uf<=UDyueCGPU`pZk5OB zIn;9OKKr{1`t{ijh=NtE%V|=TQd!oSRFFxl2S}lt&Uu43tJr_u+hF=YqY1EJ#)7y zr^anxIUd$!+U5Pw9W%4!ykBc%|2GVm$1DQ@Xw%h0SbBbCvfG_s@$xX`ctKkW z-BKqvKY&K>%A|%4t?pJsPSSSI6nEACWzedm%g)cjW$cupVQu zRIkfpM|CRlqnF#=cJym}J%2j8;a87*HwL45^$?a=Y%=!KHd6mggZ1>6+aXOFOWwG76nQl8fZ1DvX)b0XxX z3H0RifEdi@`@4qmRoB{`FZJ~e$Vn=li({UR*98eznEm$)TJdDniAIt%$%N z(}QKmtx2qHxv}5VisXPfX-6EX6dkg&n#dJSFURwnS8H53 zQDeMWE_>YS>5-EmMON$Rc>LX;^HK5e+jmAPBW+V0knn#_rtvA2UPoR=VRON?!QS55 z-`cMJEspZ3qoV4hz8qXXmRSp~2GZ8x_Q~&Oh7XhY@Y`98Jz6*4+R6WccPYW~0QH>J z)gzA1$=}n7ozbr5*3uIDdtW`TGUntpvtiNhMzi%s>p;E(J~)Z!>ez#c^{s)8_9r4} zDnsY)7@|S`Ukrh{!JLq8e}>hrF$51kEP|RQD7!c$pf)wZrT0&OBt0euo8kET&js0^ z`RxP^$1cz%wS6fUkg;1k0jSX1%7bdSCnt>UuU=&z(xAI~D32^+#_7fAe297MC>D`o z*`?a@Xg-&?tyY#_5wtTme=kv9A|iGoCL10Dn;RVH=VFt#qcPQkj%B#0#~k_iJ9K(z zFpt|S+3|S5d}$C{eDzXL?$T>;$^wk=FnqY=?pDjT!V>KFZ9&W9`>LZ`heoKkzddTg z&XMFBZkFItTZVvb9r+-EkRUoPcbF|Li|m$OwD6l1Nwurqv>AF;`M8Lr440L9^Omc8 z*{(KYT-IG=o+e0cYD3T~^px7WO7ayK*5J1Z_IsBH-zCh%>!AtN6~OlZb*EX9XBEG7 zxDBS?I^?+bi$uX!NSBiT;g`kDd^pH& z09>`@cLdcx6t{R_^Ka{?SM-v?Q3Q@&I8a*5iCtN)*J#|)%jYzjfb!R`6E-&#cHhtZ zjU-+Jc;X~~HY-y~E{z;Oz}A*BH;ww1=zyO~l)o?-M-~St&Abcf%IutfbjT?uQ!R5% z=dKp2=P|j6$Y^ll4N5LeM#w#yX1J%V&m1y*2WX)|N9ZljCjeOxodcPzPJy;QR*T65 z!aRB#VV6LT((jt;3<6;mnRour5`jl0956hipUm-P-WBR@lfFo_<4i1qXT2)`@Sg2f zBzOX@t7NZKgwAe_Z6el9P<;*Hz$C;SFnn&{ly7bntHi1HR*s6INalnp=p5|nm1|C= z)v<_|2ML%nPWe6|Mck|N0()F!{yw8!}4-+W0b1V6km=~&;+j13CHFY+5aFyZjdP2AtyhN zQZ+!7rFcF{QJ*M7eyJKcquVwI1q3($yzlXlw203|`#+bY4Zg+TGuMDYIIS-{s!R+#XPG(G{foN;oBf zvYdXE&GByAoZRvWo!?yjX7aaO?Gtc02kx`O4IT{LC_lT|$FLWHd8tT$*zG>b9v+na z?};(=I@@O+G-?>Ea>^gzR_4ZDE+z<#w2U0`m(WL1DPQ?#h@y?;T3OGt%j6i8_pcwK zbt+%7(Rz};K`L+Bcs%)wHbJ>MNf;R;^6=23!LzAAO)DF9wbA!r-q=KR+ehE1Gxb;?!EPbG9Pr{LSzaIcg4q7LfsX-JbdW+%Wt=E$<)#NeNg%te zZDa9zAn115i2DKJo#XpnvmQ_MGK_!mTEj85MM?e)6s6DTC3`gCm9Gm;$s*y|YI>T| z4Td>qn}Dg~Z6xfEZX2-OD62=q&ES^ZmdS2EkY}ab_u=wjj>f}Y$Ha=jMp-X`Mq zMq_YY##6UdyQ4Udc)W&ZHm1KhQJL&|908gqD?2xN2Us)0;~vrjp_m^pnM(B&E0zAEKK0*kD|S>C(XY%EUDi^D^5(=WAV%g9z)5ART(_%sr#^`H z2%&P{AlePt>@CbP^Uu`8)?@b=Ld9|zkl)s#BxMLwi?|&Z5aWk7@ficVrtDtqMJ_#t z%ry%+k$~l%WL;V5WGG-qv}B^bC!kiarOX5ukRVmxhA6s%R8C}3=Ig}HxRomNbKghZ zS~t`nEm>4%oo>%eC|~1K6@$&pXtUiSiOC&Yl%QfYzJyd77)xpncWzre_q>an; z^R{Y)bo#31(dQ8K+-Y{`SGAnn0u>%pZYOM$UyFWp!`1T0=DX{B=g`cyP}>1z52n>e#aoODQ?|NQsX~yf zS+ehyx+7C2k@KKx7IFm2>gVTJ4Gb_q^$f6AP6o8mN*Qv>9?{ClvBqUF#Nk=To*vOO z6=N~3-@b1sZ6bQi(}0}T-#nGbdw?yJN6BmsXU-=^ch9ZeL#@L+va0^{d_F5e}3 zZ8Mu@hYm;Y^XlzRV$lgxO$3FqqNr;W1x^PDhmhgSfzx{VD)HP(kZ)+pKBT7L$yM)8 zb@L*JYPS>K{3^y=(+c;-&_gSiyqVegE+Wxi6%i*u2;HHQF}#1y593 znO=lcAUJc9SL{bisVgkQ`SSh=uFlcm18-3iRgP4u${ZPd1V^_%lg&xsy-l-IJzeB&8Sqj z+-CtWyX5Lr0(tsK`ri&Oy5F{5I0x&HQvpy$;TuveC5V9x?)cwUv%2^gE*C7uGjZvmim5umPu0&u*}6y7*RtAcUG;pYQ-GnQ zC&OO5TBE&dcCuHpIupFr{ebZOwR-#IHf1x@(sERx-QGR%9pZn&GbNcWFy*m-x3L-> zKREHK@~EQGfeZJ~$uErpQ7iA*HsoM6zd9eRw&@`EA~Y(yEr0 z)l$+xR`G@r`~^;g58Be zznl|7`JS@8^(eLh&d0ONBg{eTQu$vWh};c7TM?lt-*60v-OIbs+^hShgMplf@52dc zE|9R|ST+;OFv(KuME2$-1QE=Tco*qDzPPod8IAsfKv+d`PW=p_hy%%s5tf<}zxM4> z8Z;ZH0ofV+tpsXp=VfZ1Ok4G-QTODkTbml&n}*H*tX0S(p#hj*navvA>UuT6J1U8Y zbpc&`!n_S*7T;EKCNU`;&G(6jEL9f{40jjgM~cH%QCCQr_)fQXj_vNshIA+Ky1rJ% zKTkYX0_tMe-d*}5us#PM|0Li>##F3pXSPPe)9m9<2j*@GCVf7D<-J_h#<`T!ojrU z$bQ!n7Xv%XUps620$?5<(JN08nisNsZ8sAoQQk~om#RZfB8)PjkXI`{`6ZB&yohI- z%JK}5(yb1>d90PE$9k+6<69oP5s`cmYj0rHE~+m!^M=x}+y-C; zn_l6lUQGydDf2Lblz@D-Xmk{S-EtaHc^4{)iOJvni(2gt507kVI=`RdU69&w({L0xG8ey`>qn9b6Ayc^LW7ZNJ=c44kL zAU6@#w>jm00zGJ%xR{}jOYA<#ndpyuQ^~oLIK0=&X-|{$xDP5oR z5i)04AZL=EqXMa7OHL!e3uabH9Tjp}gf|%#)E|Imau=&Z{z7P}YN?us5Qn)~F&Oyp-r(0=r8M-0)sXGYLezI_77X^d|r zG}k|?@dDxS+(vjgL+`?HihSv*+EQ)unbTh7MV(?}`Rh77C(SWlS(Dbs?f{zyTl5v{y1AYj<28`$2f#KoeeDL8)T8oI zM;67`fUOw$kR%K7W)Ss(gFbG5)undN^OPm@pweSeC>7K^v4h9%GFogl*oxHLB|gIO6(1<^M}bG;6k51!s#8KK$U0h*h+b?3q$XnuUT2XPyi?Prk2 z4c?I^@TFje${TK0y(H=D|Rot?S}+CC&J(}OCov+$1A!f6$~ zgskdT;ERgIxV0s!E;IcmnC#I?UFFQf*woC*`5BNGI!-AsSwiI`j=iJ6$eekbUd=uzh$cq^xDvC95&n+hAG~p+ z4dqlqyYkN|T%Cx!C$PVA>GiM>!84q4FdrPsq8P=QG8iI}B8RT8dH<5Uw|j+%<`oth znE>D>4w)SWpx4OrZF-|`$RK@j2~aNZ->^srf!;`n4ss(OXR6pGpC{B=K-@+Q;ryAN z6JCzC%Z9>LS!uT}k~V_8ORsjG7ZP-#n+WMp)Sb}%iog?ec{iWsN5DF-9p<*{C7?XF zde|CSX2^ZIS~4S1l7%v?k61EhV?qwUyk8?Hl%vRNaYgzP2o zGYG(;mdOe^qH1smFTIhtQ5CChSx ze$&Bz8^Gp^e1?$TCh3>E30YI z*tb3l;KmYXq1;*r)a>)ET)CBh0qG0vyc@m&GlbsgLxHhL6wEIv^$ktqsd)YS$8?=d z|F^}4a@A#SrW&0(t=t3ahY&Jn1;-MwdBFbD*%w*a1)_CB?@UxJ>Z)qY_O4d$0p7z0 zmA~{>t6}nVy4iATC7vYg`$>1iJRuf=sH?^?WuhlAE$x=X*yt+HRy%*04D7DSBSdJ1 zT&`372I0NNheIJYPrS&v1Ut(G`s44-<>W(}SZ$`9cMnT{w@X}4uI%$ldsjgX!tK*mOsqhJKX7|9QR-5_z8~kmy9Pq1;<0%pRncrOqm{Wf z0gYUpFM&!s_vqae3)Ra^B45$dwzaefiMTf3oy>QTnAOyI&v5!eG5oE}I?=Q@++ zUHoc4OgnDZ!Knv~Z$3T{W1Y%9AoG=w=ohW!UgLEe+|G8I``$S6XlYqCfny6Zf>#Sk zUEi5}>gajZ@j2m@qihqlfWR71~y&fRJXb zwoFd8tx>0Vx{c6cipY>}yeeZqIdih}I$eYMQxMfI)a%2sdb}*tE2`od;{XiK4U-we zh@&|<61@2#(K~$(fsIyS_h_!}A{qxc0Jg4Y<$Wy(<^DoDCwI%;nP+f1@Idm5F8A{P z(lJve<>Zg)D4iWSX+gxcLN(E%2vGdi2y&?J_OP9{hLX=C(n}E>!+aP>&tix4E@>o% z$yE_jGe_!1Dizls$166+UUxnD6@a`TZhBrPVjua&iUPgvB$n8{)-g^5*DSxXT2Pg!>@LeNoPB!-&Z5M2`+30vdcFD3eSyjxBj6HPakgjGAsjW-Z zB4K-%IFrWsUTB#H7`g;ypNEZK@c*D(JaN%#xAqA|{b8wzdA zQAq0}l`rRzA^xeWRXCs?aH?Qa8dxZyrM>Ht+c{F0#h z2IWXKZx$oYiB+XIvk-;F;l&;rxMNPw!1NBB79&iXzbhx1*_LaLc|+w3H;H76%8d0Y z&GuEXE;)ySEiL#AQKj{KJqnrIJ75--IhjflHA?ovT%XxewzN2->bfM%CZ(AOk3Q*@ z=|U@n+sf9_@nKYRP?q`4RRjWg$C(>DmL$NW)T@QwyN#|aFpFx?UInVhkdC%$9w^-$$sba`v zaALDN`SC|QPW|o&oXsFqKZ=x-OgJ+Hgn1?Jw!UTAti#YBV~vn2d2|(KI}C(A~vkkwde92Q2?&sPv$E5Vjog>h;vk7ev z2mDoeyZmzUJu=k$8CWNI>*B;UUDut_D!@t>+MrVY2&V{?W6J)?)JEfKlxx#HvEz2f z3OV^{R97XY&|NP01*NeWT#FkxTC`=Wb(Pw;&ru{2lWMYbmHt~q!8G^|&(&m7nRi>JH~9Gx9HxZ(lkoU@0fR8^}U2vj#^(*z`d z-;ssNquj=-SJFQn8WK)jv`t^7+Y0Qey9&LonzTgiy1K@lq8)8Mj7_YnAW|E7n^cyX zn=*G>M@C)(IAJ5Xp8~x3fyC8Bgtpm8lhKu8e4ugGn3J5(e${7~k(-mlQuTL2yq~U> zV|IisxVC12+}t2^^;2=LL|hmGm08a6)-ZPEFej&j>N-wugkBg!+-Le4P?<|x>`a1< z*!@IBMq_$s=Sd=>Q?I0|%aMb+l9|;_Vx7^Aq zF~~azW}L%wJA=I)tr(SE%$H;dTIw~#g%T9L891g(^SjG1xVv}{0d5j@^Vn+~Ug6OR!d!Q-sY~#5^s`S4YdW}!H07GH zLTJr8$mh8Za5Pj>pWMY{3MuhAve$UMXFn1L=AE00cGrEwv(Uj1gzkDoWPbDO*k4>O zI+`+3Vdt6Od^Q`rmO)@%+E*!?SCfs&lUd?p*daF5wz?arMR?`frWb)L8d#6d-vluU z@l5AZPWB|SupA?X0kg_-%T!{sAyd-`mE~8@gq+MFi68bD6qJC>T!6V>>@efXkp+_4 z6^#d4PR^~$wvsd*yK~jdX{5|X`i^_lxJKO4yaK3=ZA5$5G&kIP3R>$NsPLJQxw0GtRQiAp#F09aUpEEZwe`Y9Ej5 z`n@n@pe3Vu1hlv4+y#Ul^|w$c8{5vwm3)Lo_qxyx0A~K{cLMhUtKc53dXf4i%l!EJ zq%hi@9QB%QXmd5`kpl=N?ULR1Ln>k&!HbF2P+8guE#o2tH}uT|K^L%@?bw27FBf@| zY91pYi;%#Udv`HRX_1eHIPTZm+G#Hd$+bl5mP5Wzz`42n>b7c`t%Pj)`sBHFtpVUV zrH+xFY(pNZPOnTIy0y-^+0GeBb+Xh+)=aX6YR-)gj!Or437kcY_9#M#@8bo;cvgfx zeg}}V46>n92IOryO)Sd^FB_$Y&W^+(0RrWAA=ess z3koN~$ENpoSOO$XkZsIBrb;$Eu*kzML^>)b;#cG>ARERAgK}Z~i3)raNGl+ZZ|{eS zAh?YQQ;RrPPq`Oa>1Ky9{6`1`#R-HB3y~!e@VaUGnHkJpV^5nN%q{lpPa0L zvqr&48T^L10ek484&vD-g=8yBJga>uuVkH8v%rM|rBF~# z{z3v*qh|W;A0fFTcV(O4Rc{WNs^j@x$7|nkRa&kMp)58PX_unw5*zN|6K5rfFei_M zxu`F~J!d3bwSAAU{|UBhBi7yZcC-m9N4eja^~xQ@6i$+d_;LPv9gF-GuuDCa{ng(i zXfo~nFCe4>Q#|axlMAyj4k51cc$Ga>vEzFVwCSZK_@>ck zZGR8MT_K&kbFYnH=$tXnhzSn5-zjg_&Iqs ziGgHimx-TA(hSIh*sa4djgavK(|WlY*fFH3k<)jk_8O0s?qQk}xBcex>n~hK93gdR zU?P9bCdtWrsuEYI6)XEDxlhad=7dVFQIWgT7|6v0XY81S zt|k;9yjMpig(bZ9MbvkRN`TFi0(#Q~IS9Zm#K>7wSv4@2=Y0XWfUrGo+EM7|!R#vl z_37Q7w&IdOGl#f=81;RHM=6dBZ&!2<%^mi=KwX99`CebU-vYaV2m{+@|3pgz@0^5L zEOSYi)%OEQ7?$_ZB+R_r;;poYJ4=+U2$z=@-OX9kb;IcD46Rrtj-Xe=mRvqWhL(@t z=Y2fDcJF|OS`9~wIoV*QFEuJ9dpO2bFhQYWVohNmyL9%-R}d-{sc<#$vp)z~k%%#}l1= z`r=$2%-q{YTCEl&Vx||jObwloD&6MKV<~7IkQ4b`J9@3sK?cYC>^zC?B@ zgjn<9S2!_%o*6aNKAJ!KH+?8tT?mGUfookHE=2`IO*Zxh0w_(QVzOwH*?pm^9mBnx z9&lY%p6U;APV#?gCQvETb`keP2PsCn5F(!(^|Vx%r&v7QdV=j{EgNH z`@3#=@m+q^GdWIP0t|1pZL&g_t#Yy5Ie}!!h*xqP2fS5bcdZTRa-ireqR!EST%Sag z&m}WOTFI7QTL9FL0?N{d3A){fu{j%mEXV^&@lgJ^0u-bhiOZQk8R7Wy?>G+xfKD}FN=?o@+^)sau}l2OD4A+uTE zz5$ai^`4{Ja4aF#$kON8Etfi341lb=iIMy8-D%7bTUwpQI6q0*6;OvVG_|uU&1$z7 zL1Oz>rxLH)kRc6|&&CNGvaDTpPToi!I*aO;vQFhI+f-`^|MVS;}KIXI}9|6~0iOufDPXrvBubFw~%GrrKaa4P4#JDUcvVbiC(zyrqIT?&Uq4Yf2f07Trg3Osz%0@3B%(KVEcJ&zP3i-bK7h} zi#X@3>dmuG#yi=8*JR(avJMWu_I}-a?@R-;{mM zpHgCzY@|os577$fO+MBBLVWx^I`BB zY;9SRMfOGg{i>th6M+iL*_dKE%Lc=|{i>;K@cerwVK+UQg5Lm`!|Y_b9nFHrtpq2p z&cLQm9e*9nulJfTWHm4iUs>+NSSuATyJFdtP)NyS;F$~2+jCaeLfF<{CV1j#VzSM#7CK*VT&$3{5+7$~YYEYb(&m8>5mDp&o_dB& zQz#dTvpt?uVOG+L!up9dSx@dG1TlR>m~zU8-w>KsJ=9+Uwre#Ji*L!dnvL8`)kE`~TF-JC-?6Vv2%g!CecKMSydS0w=N9G&6m z!Qk#d*5pCN%SlIs&;-KIcCcYM&1Yr>1s(B}sj4KV!|*3>Qx|sLZWzaTFMfY0Amnz`hypBj}ScQ628gEucI>OqfS9b-&~smPLSOt>GBmg@C?%Iw%4t@39DAE<6E{ zbk6>_=p#e+{{T$7l5wbCEo96=Hfjl(t2dR+fSi)<^-+8i@o%zt=5;vumk&qZCo>v; z5#RWG~@gCK;Wwad+C7@K9%bSDkH?? zyWk7*{pj0Niu*$Z?N82s0n*LzRyk7WPD!>Q)P-7HP9zZ6N}Vdo56&CU&@oK<2h+orEd#ifvD=z72mES17f;ju_E7_YkYNyUCi+BxBX^CU? z6yD_2a;nNCmL^ha&{*Lu0iKlz$iF;}{jO{dq&r-~fe7QB(_Se^3D z0lE>O&nz@Aj38#-en8k@hbJ8FJ(|&PMg?+z6l6&1gD{g&4VT(wfBRwSz=!#;zQYQ> zs(1zqK0@|;J5y)4w_TJp*ozA(-wlK#^_6@c^-HMjKG$wi)jMJ2n^jK9HJ=U?B1{A9VWT-)g31 z4p9)iJM@`T+jxj-@ZtqHG&A)?C=3!nPWFnh5`9sLv^YZIOIA+(`Cu(_2_Zim)v@d4 zfOg`pjd&e^-LF=|#>lMP^?}n@$Na+7*~)x0LB+Y3s%TSLq^!rOOOSf>aJjm5s&Wf@ z8An6#D~aW!Uek4znWXX)4@*_0&0s_o+IU-Q0>hh&(%YRlhJr^=a*jW_Eo$7RDLMHj zkY+94CQ!q7@6R+Ex53yGm}#T-$a9v%kS!&D4Pnh}gLhWvq4BRGUf1l%sqgkgRCom5 zov1JbkQ(;^)FI%Vxl!u01OoE&bU>%@%E>zkJ72cmfo*pbA!ibF-gR?wQ55#$2(=DT z+Jjb^uSS4U{QwZVZFz)Wclw~vdacTeanL@9)hA1tDnV3?;NCW05+0XN1cZ%R#+MUz zm;3wjT;kIGFwg9$GiUpJBcG$&>z@Y*x7Y6`%mo=kdW5j$r?maXeTc5LZ`Q_)R=>Qs zW%NNsdkf+8&2`T^y(&oUbyN>T!i-fvCzG=BXoO`>&q`d$FpkJVY-mIB!>ZK2PySH# z!7&b-JAOA)ZqH~WU-XQ=<@GjPoa$v|(AinUhl0wg_}p4(d^9J20-I%7yH2Ke_`$TS zubU&DZas*|$q~fX>@~OUtN*ScTh+M?<1+{>wo#G?E7DbV$9Y*KSf`sFw57!a@_Iw( zvPN=olYT!qrPf(`f*3^z}$*$pXiV=5;PfyR4g z%P?@MXf;Pk)~5Ga(&=Gzz8Iv{i~=?+#E7HWRqseTwHA8|zn&Aa7M=|h-4Za@@82dS zXw={!7WXJ|;YOX_pL+^8y85RP|ENf$7yUNrj1wum6L6GB@8wM)f)hG-5E)COGl@pF zbkVWYI^SX2HdA--@y(3mlljC6PE6(#XTKuKr)dh86cKfosDkiZjaDnwUe0yPvh@`I=9(^}Y`1XZG9B6+FBk7-x$mKImRAe7Yn zX!En7qE&8>5TivZp>D1grF@D0C%p15Q>*B%-!880d@j>frQ0~wqoKHIMc_J>6wh9R z6xVKNKd4k_wUdzQ#;zkLEJ%>=tCn6>qE-sgDfLzKHMwZcO)Fw+;&@gG(WZzAnTKt^ zzfzi$JoMGQ**6S=zYpj=Z1`$aj&zePxO(A^IX-_$Sv)0FSEMsg=%(@A;vBEGpBm0=zvxp!IeeS+R)$&UyouLtMk zX<~fG2dR)4Q;8vCsF*yiX!{4*h~HqNK1yP?CaL+07-hQg)kTI8ywD4bdsk##`Mrhj z&dQDZ?!B0c9Yn-DHG5m^;90=7ueY^l5fF1sj^)>6Q#pZ$v21z`)~Oc0BeOj!mn-Ft-ZrU8T0LIO=ZBp%SK$Dbd6=I3i$;<;8=Q- z;AKrkPJU0D=yM`3>1aYO$WQ`@;pOx&VJxzQVf5`3(?K1hiXGJ{WcsyJsWswb4E&H# z{oy1Pv}BN_$gW;89gnZ1ZbZ#Cnwm{cWcMG{Lbe7pt=P)txXx5ecBdlA!M;v4yG&kl z)Y%YoBV#5*uS}oMOm}i6#%k)s%3>hoZ4lztNI9;8rfP@bETS-DT}u1FH65r75OT5) zYET&lLKC{y6rXaIBS7A-WKl6TmIdXswI|c+*Tl*t5Tbo=S7$BYnr9jR-Jv{*L^ z9eV1W^lqw5F)?DD1Da$ThV?g8E&0Hba`6$EZ!)WOm6un~mdLZ(2p(A-r{g#%Ctsy; z|Ls?`8Z9B;@fDMY2$)Vven2QS=WLz*H|=V9n%bn?13ybdE%(4L5N}o^D>Z?VMW7X} zc0bHJh5sQF$}yC9x;G#k1*xy`3HK7cVGZ_QCr56))Yn|LBJ}S$5m#b}$S%|t4kdf= zoAh|e&ia5lJ&l;*_A|6qZGf8OraJ1-XJ^bbE^FnOGb%8yO3FMLO7Rj!r7l34XiixwVS0Q z{n0!D3V)9*9mf@_*KE6yeCmtq*<;sQqTQv^W55ZZ*qL&C4Cs!O59CAoByiW-tETgV z+R)2BJmOlFYmrmO!K&C!y@-2$RdiA1{2QyH9bw6X)%&t=^jP$$R`oqH7XxlIbRfnj z><5mE&(YP9>ly30gKs7BJPjw_y*G{4@cIrRK|zU4elUc|$(KP$oXr2+<9lu3ts6#P zT@IKMw6r8OYI;R7Qm1K=c=aZcp2jzxV%A13g`V(U5yD!(+dZ(GlMdCbYEJI;k;iG| z0pllPWcw&l;aEq;zk*?iuX=O)WZn#|%EByLi zHh$`*)uHUlg;cNewtUP;DJQ46ug6(y9x#3ql)leJ`S$&YgLc!igTblP?Gyg9R{ka* zrcv&2!NyzkKA(UV!qy5Pm`yxG*vuxhggrKP?VdsYetZrl7H{*YF{#V_*T#uD%cY1c zGcNFXYCrNuGZ2mE`)#1LjF06Z+zji?#W%xpI`0-xf_=c|n9k^oeZTCVoKgPI* zXIj>;_qf*UPi;yQGNw9J%a4vr?MWEo?IyP$zS={-M6G!-oKfnZLqi8+F4Lf z@q5^$#4lpPVN8-{j7N@!cLTrBXN>UoF^-A zDm+}fPI3+7oVd6liYigdACMRMS-f!W+h^zJO>;M-ZDh%AFVR(^dHp$-A$OMn<+wHM2J6Zjq=J*v;Q4R-p$WQ`iE2!rNQJ+3HTm0FVL zHpv3ZTz%4Fuq>jtO%!V7rOQHIM+O%#J7f#u{qeMH=fc>2;zdMnVBf;+5=HtR_d58E zTfyDkls9Y})i<<{|8n;08Ef6GOUiP!hKjt@aVG(H)Vp)er%X6@8X$hZ@cHkW0A5pv;6cyxcvP+bSjT!fu(db&{b6Kr7c(743#PXbD2W{8Amv1eIXkT?aEFQDv})>mUXi74L~UcnKmE_1AS!6I3ed zpX#7SWaWtAS0sez?^B5{qoA5HdJpdk0i zb^u8+3Y)qi*_B8W1s6Ke>Wg|W!`4WZg1ODth1uvpk?Z)+^Tj1sq017#M3g1g{i=vw zod~`%oxoX7EDvhRYSqHXY1w7=CQ4JeHp;Hz7=~R~0&`>^p6^Ryr!ub6W0?TYu7nif zrtPDIofwM*AhX`7Zg@JTyZ6rII6##+}}B{u+?a3#B8lWiZId&SMMhc<8_ zg3w0-Fi&#;(6%0y+X$iDLjD~X7?y7WEiDYojUA@f8!SLs=ur6!!48w7o&2Hwzd>h+ zQ;!51^Xe!Dfy-jvMhqNk+HoUy3_IKtJhu5NJ2?POX>*YWT}Bmq6jL6Yxx|&_Fe+7> zw0NY&%_u5TJ<`G);cGLrjSDJN7}1+ zjkM@$toVK>I{NiWn0htSA?Mn%r?tdZnn&_*D=^U4Gplu=)qio1+Lw#$;uaSBnp_l)Z@MvRld8y1GSY?kNU6PBh0^glR2kHZ)Yp!&N=x>pF`=?%n#~M;+p|+ zq*X!r5^FE+Ng3~W1FP&XtPN%*%s-89^4nJY-QnEUv!YrM*yf!U?MS1sVS;&crq zDX(n0QJo$fxICGa(c_P0xP_Z~#ekCrk6Y9&&R{BG)sd0YtA8VfR7vQ{4b!*-uO4=^ z`%{$UNDR8nqZaAabR2hjRM+g*RU9ofcXq=x=XCeAx~ErNckOv{c9SfOo%XxKj)POk zl{G{a#u7#m_FKLD+M^T6=(**iyU4_R?nY)P)+=+%NAwNM?&%*GX6U}*lq8Anz@U4e znJVc!7s_HNbe09UI6cQ>$4u1^Q*YP4(0@P8F9}ncT88(!#djT}f)I+Gtg! zA1=78NET32La4PmvZ}0P_E7ilj`-(1 zoyI-Ix@?(5hN0UZJ~dg-f_XL%qTpNxnu*}*x16Ji(~_w5HZ?ivN=-F6vpBf7TU`;;~jcu3cbG-(WIq?i&EyCl#5_K#F=pl zv9Z~oSS3$=Pm-+O0&~ptO>n5`9UUb{%xwXQR=@{!fb8rjbPFRqSezz1#de$Y<)_a| zmJ<>kncOCX$dPwc$l338+0{Bfqp-8xSLd4W));a}rjNXDL|Q5*L^g-ek&z{{MT=oh zzIKi))6V(le_)Lfz`G;Kz2Jf8CQGg*RV7{PR@e^YCLOJdY2Mv<0W5k?*J%1eF5&^^U^e%)!Jr>nsX1NA&1Cr_fcQ~Pv?&v|8DnR;|O;PC%d${^olN{Eg z9t*yL#FKVRv(pU4DmjLGU>hmKaH)DIqrQN(fNs^p_ zsvS)l3ssrWaQ7v8R!iTrb+w{kcJIOD2l3*-Q~~;`L@b&lH_Ztfs|pbyBLTbp%)F2e zDvM1tdbzKCDF-30;TIa9je69S1PwODG7u@aq1Th^b+jBJ<518E35R*T*IrE-O}p;lvYEOTq5a%-+$4BG*!r0$i=a%!lY z%@D@?)X4XNKi2fh0;jIky(U}0kVw0GH+?-Uk<9I6>fID`*Un1$LTfv3FzNiPnttdD z!)D$2MNvawKv!_5IVO|m;h*0*JC-iEso!D$5B_Nsd5N*y)8*wjR`4D^kvF7dIP zt4I@^II}9(XH_M^vj3gx^QEl%xT(I*RmGeso0~y@{WKnB_xyWRg+~W6N74m5pwf_nnd(sqkfav^@~VSe6-76xkL+7wP|bIKk^rIYw+RrFoj(9#Sta9c^Ve>;SVFtX zL%?k~{P+RCu4WUPkbmCr#TX>B`GDoFZprh@7E+4*VoXu&RTCH#0Q-K4_QEu4VzX{J z72{-LaEhOZx#M=j;iKa4LH7Hy;Ur>CAqEA3T)?ls-D3OlZXT{Eb`HzlUvY(CF{Xup zHb9IP633iJjNQu`?3bSrhREL5Uio{7?!dpT6z;%0zS!ZO6S@rm(#g)qBG;Y2>d1;? znu%%mWbi^9&*&aR3`AJ?aKfGFI~{Z^P-~kSniQ9*QFae7n_oTkk&+9mQbaB%Jj*Fa z0Wj*P+W08T|NExSclTr`9i{JS{eh@3n&pza>EXVi zrU|?YgSDEzDJRzwX9HR%mJRVQ5W~w=MJ}A(O_0&iKR8fejQ4eL&mfQCOsQ|VJgn(> zhDQxH2Z}sx@6`J8>qHXMOF5n0(tE6EZYB;93VC`2ReZJF>qnm)7D8tGuUx?mbvZiv z5GveGjLwl{m&m&#w76mA!W3rH{=UVoh;V%w_k1Tz0{ES>6Q}-qq&iyFRR`Z6=AoQO z@Ccid(npY9iQ3p@aSE{}riP|>(Pvj7YsME=BWv_kMANa#UtH=Ni70pD)BE!TTr04W zE#Z+722{D+>af06`=fl5_%Ptqw*|}@f0vb!TJRIKb8vn83?JKy>Xtp<*>CJx)x$2g zw?3GlSaUj@h+4?{?deCX;cR>0dEUJ5C8AUsDD`#ArO8Nq$@}AMxz)wj@F@8W{bIM4 z9wHPxU%HrC-zNrFjKk_u5pF9dBqP+(<(Wj#p^mP>;HO?bL^SJyi>4F2H};PwvE%6L zlGt%3hyFnMq_ak|(%<;QG=aRYJBz5K2T!HxZ3#4m&jK#>4X_IFt{2P63&0&koN<_{ z{!c)2`epKCj91k)bmM_orY9l#O?LVbbK32#WjDf(hm>R?VeZ!G>nIq&mUxdveYHzp zgyP1*DG69d(se(^9@DuE$3x|#F@%eMwrJYiotzTz?J2&Yn1T2u!}2QtJjO0T@A4c$ zDo4REEt&JUR%sbmse5=WfR@LwdI53nG8N0HJ0y^SKRUc-m+W*vk7AEH$$=Y>d*6mgMa@%GhOC*^0Z$8f1g4+X7G`+o9F}TGz9b+z=&Z0fOhh`iJ z#=XACE+j|Vmb<#0WcWsnTB3DkEr1M9InGN@`IiFu$)|$LAVO& zs?=Jegnz~n6Gn)(>}qbpD%}f?)N2v3TAQN=5#LO93#TxyDOM{LwRLRRnm~$MhIP&G zw8;O~Byg<^_h&0QENZURN==PU`%4xftF_;15OU}%$FX=XK~|C@3C<`knb^F1(gc~m zBMi?AgSLn*4H2GSOUF*|F&ITziiAiwb@@c;C1|o|Ssz7{a{{P4hS%&IMu*(E%Q(F| zFE{UMzj=p!^KP(ew>C7(S-U&HeLCMmaPi6V;vVjkm-upfYrbv~aoGFrGfr1`yVG+3 zVT54iU`r5=4+c~(7(~fJ!s_HY&u^&Jo)cZ(&VBQ(li~1TBg+k?{inhkPm)vlG5vy^ zvp-q14h*u;1zF>2qPjWlRahw~OH<3Z)MBqS?-cHO?JZ{K!)2SSeM38-0L2m*wI~=`wt9MygkcxVdMIX@~w7cIw0!7>Zm;81Y z$}C1Ke)-Ard*F6Ly?q1G`+UKz_0MLEi)9#XqrWF3R65yVCb{+oxl2(N6O(8QjrtBz zNij#`9wRQ9?61IX$nZ{NNiTl}BHlQs27zYE@O8daq_Oz6Lu;gy0Cb6Q!ku*Qd?*`NHAPZ;LN;ziZD8o~+3)JjXHyB}Mfg6K=%Q3Kyj zwob^KDA87s3kcbxqV5Rq3P5WgKHU(9{kwv<6BBoxcILgQ7#*MeZ8ZutBi=*WtEto$ zZe3C%g)_eTmeJ^3wrz7r@;37(uV@!==C67lF-FP~rVwclg>oh11JveKCj*@7?8?CcW2p zA+XD&)VI#cy~;%Z2um{ zp}rYxT0C`7WW?{DjJB95$r%5{i<@)zB)N+w@P=UGvB?hIQWRLNYnjHtYJ&7GMcvXXLpNE{Y6%-G10FoyWBO&pO zL`w_LK;WpLcS$&~OGR2u_^wW*4X zRE4=zK|Pm3eh*$qu&~UmhIK`vKODvNPJfM(wb2^MZi^@OShhH`J{lfteqi!EBoo(I zY3-_xX3}!0B%N7phNbgc+DE{g#`pm3>=Dq61FC)Bg=xg9bHvDl-4$uXm7Oidt*dB+I(dR|+HJZ-!a$;B-iGC)w-V=3wGIC(#7E+&7gVXn{=zg`8*K1&Khxbt+ts(4PpAauZLQ92EWuP;O}T;9 z*u;0}FN-~F`PS&(#x3@-K=QKKqr2|Poxp#P*mEuO(bnXA*saKQM1?`8mLawskJsNd z&y@l{99cScbr``ETo2A1V_WyCqE%emTOV78yx8U1X|-_y?TVMRJ*LlaOTXM!Ir-Qh z{s+yyXg~e()N83BR=vFZx+kD)vmNbrSM&0llOHhY5{k~69Rs7{KYAq;z*fAmKIk^)82=cLj<>T+Hn!$#f=rN=^rD#uXp5aUm3 zxufE#2vk>9Z`!Jo%?Q#H!!$+VXv5yYqfEU1M57mHbFfrPrH<$(6IJ|ASwsaO_WuD^4T^>rGSdIJ0&qq>78k zjo0eYT+SPbIvo$8wblY*VUQ}B?jUb&6lzH1j+Xt=G)lT#{mh^tYTv$$W_lw<2$J zLQ4?M*kH?++=X~xY>FKS#1xx=BTmxEJ}jLS-AS_K0+=3COz)=Ydod-H4=}x( zW)Fe! zS;Q`eu^CeHvzY2~8YDY`-ZcMfHu@yAm>B>mIpS{hYLmu7jC7Uu)}%x?aA`j`Ny&!Z zR6zOY1G{}`9!R3w0l9{${Krst<`qVLF6#0cM1v3iq}iquxf(Kmg=TNfqDaq0TweMtaJtqaImOvibl{XKYl)LR?nHLwIvSg}3cjMd7^evw^4t4_ea^$GdQpkD=I@vy@e zVU7U7i=b7tYpVe!x_nrji?qDtFJP*Q6+R|MSAzNQq$geMyY!s&$>D2F%H6Lfwdawp z0m@z$lR6*iR_TvDC3~9Dy9RaMuV!|ZiRKyZ+@wEf!fbT=k>Pb6==K3ml&YQ++3a$Mp~vIj-PVpdNv5HsUpa?{w(r z;*@pHGzHFF4$adA({mo87jQF|Rk{acSXYAFy#`K+?Eylbuo6j^vCBY8{mCo>x0^g>sj?SewneHg3c6W}=c{OWROnz#uUBn~%VlWNM zH0hl1M}kEYND^`{)8>OfrAs_o*4Y-$k=8?7IuwgtDe9DEZ5k)ypIZq2%iI6@9&Z1f zc7|2e_F&s-b>B|H_z7o8)B1|IQFc zuuWR z$KQrb{s!(swpt~>7@I3UHnzI3(L-|kN&(Qd7MWL`<^f`zUd-7_E(7>l(Mo~Pwf3}leI z1z{f})l+f1`Z#4BS~O0p6gfF~#6H)pRocvky!dbkmB!m3I!ES0m*Iu(Fw74tAGIUj za4Db-vBjXDggJq6SeX4&-{Da8c>_0kQZ@r#rIx$_8)w|P0yfxjDgcWUrSpyAb`w@1 zPbysqm|6e_?vc9;DTgDocma}LiC?4vr8CZtB3J3}+&;5oi6q^HCvVMT#E4=>ct0WQ;CwoZ zUe+R-Im5{GZ~S$}PgzJ?S`)ZXzTYXhTezjYt|^YgUK@}x5E+w2#x9(mqMf8ezd=5$ zKRHmB*a59Z6AU!XHbUh#6mI-AzWT-J|5j6u_LB|!U(%{7 z)j6~_H6cT9J>!lzX(g}u@g|qlvEu)ATJ=9Wt)eccu=f0QBy_YV&R_e-uQ#8?8?>Rp zHMr8e2wj@2fsfTZA>%(f)gh&8!a+(G_8d~rwQ;(p$B=q2_0oM#q%A#oo9vo%Rne1c zvR=}A(4!tW(I4nl)Jj_8^cFwzISy@cde2c=;Sm4z(o+4>Qu@NlAHLSZ7-798-9P6{ zU`1AT%mbV;3E57#a*hN)!=)(j{EB;8RO*jv#Tq(d$@;iCceN~%O~N|c zlw?DqKAuu(Qxs07bw`g^si7z(*Ys_EA^X`J^8SR0srp1hxB2Y_vIm6f-}qaa8*5P1 zq>t9#yG;X+8!&s2A8PfQ<--kQHOdbHl_q7f!_|1nwmcvN9{&3k1a4iUqTm!NWV^)HDbbI4BTv76AqmGIC63(NAd{P^$s;L!Z)=BEbdaF0*^~^A7Y%O zu~$luSI&8Rw}-goWAgqYr7B+oZE2=ld9dym$&UOw+0~iMu&B66avy?sU-B_8vnm!3 zKIbE%vaFzysk5l)UoS>%jR&BOvKcp4KMRcTSW}aW@r+i7O~4UvhoUq{+Ykg z^;Sd7ZIdz!PF;|+S*=CPCE>viMBIM zZJWr?8Rtt26}eHPxg+rR~;aJO8?HwC1+}QMIFM z_v{d{Hm>3Py2@BRiT8Kw0W7W&8&*GzP5Y{}J0z&SrKu@ipQdSej?cv@0u8l*NUcc5 z>g(H^sT)uKJwZ+?9WCoai}9O#ApE5TajA43*NPCEE1s@xPu9lq5UHx8a$)RTM*Hux(xG-l@{qqQ_N1%v*ZBrfS$}tepD*G%qAa?nYiw%i6cA|O<$Bdj%Iqb!M~Or--BK%t zUeku5>9!a2vYwQj5~b;^D~to>##b(&TaavPZAm54iIybH1ifP<+hI>MHl?c?;`M0u zmUeKdJ#*u-N)G@4)={}hZQs@O!1;F4Nl%-s}s;6XU zmXxsY?Twbk8Itzb*;O}PsX>;oTx7VfM~S_gV)gOaElp@yl{Q47Mm!4!2@6NBtJD8$ z1Qc-bjH=d%Aa4yoRyaSyE(d#+bO)rE>7XLw)XvfD&c=)@;X`9; z?PISPHX~Qrw3r{e_;>mzVn(?wQr;*qUXMqCDWG7__B8E>=hn7(Ei^x$$0wEYQJmS5 z;*qvqj=5qQdZnYRU;9g?oAG5b-kFEhd_TTm8tIKpS|r}=V}WvYMio4|cz-Tw2bLX)2f zI285ni)z{dLVZk0O=Ne+^w|*7R4c|sn3C79f2_5u zwh?n~3(;ed&!Q}CSGF+sb}8wnxemd1sn#ZR`o=_CN;+pcTwnr7D?_>F*wxzKVV?@gJ%Y#wSAp#Uf9$VqfiBxke zT|Zlzw1>KYq$80ztG{1cC5^AzvrVv~jgoq&qBc^}OW_DTSe^Jvj#?rxM-q zVdbM$dK>u;t;%B%zgOu~`O=EH>^gVMkdz(pip5)Yv*}t&3Oio^#dwXxV(VM~;&c{1 zt4ky?jMk>&G1w5i(bQsHYj%b?lsOC6&WUG^z!HK547`N(Ee#m=wTIefdX%rFk(39N$jOb>t`HD*}(_;Fw# zz1{=Rt1tl@Rmspl>H+AZ(Dvi1#sT^_Jpp~fu<|Ownf0z;YsKGaK9$N{s0>W{4Lr1) z3!1e=7Z}o}(!MTK2F45n56yEyvz9QUa#*=gipRQ;7#Jrc5<1-l$6CS$Lr17|u?v-f zal*hukGh~)TbQA%G%QlMP#GLEbUgG9&^YWI5eOy?ozLW3$sNu3`N4&-8jBZJH&Z=~ z1)L5J*JTQxL(Hw=kAx31&b|Shte$Ge{3)L7z{sr9Z*FkW>4l?dZ*6r&vlYu-tq}#)yzt53N5Y6(d^z~&#SXVb-D0^K&8WO z$7ENy#cIV=1Sk9-Z)PQ9SofqmjSO0L2OMniR(Pdg`KIIaAkuseJudE$9%PyQG_o}( z8|{A=TInzCF}R`GvWM|qXXa?ZkSd)e^0W@XQ`1Ye4DFj6kxaE|?J5`l9N~lL5k3l_$8jwxBks(x;YJ#DY^892JOvHP2ZWhfMTSHY=p$fBf;MzRg zlc}~($Bo6O=h{9kqTAU(b5FU#205GLS(pnMy4m-4Mo&jQ?zevhg(mBgttHXvp0a=D zUsWmhY3-Sd<(A4p494NJMmP*<20y^j=!fIX&AR(d$0R&Drz0t@Z}9~HA6%T*2aNI1 z2e^h9>658MeTq&-QaHPkElFODZHl$F;^Y?}_*Gi!@vZP&CLb)J&NhtvVpL;Kn@aPL z=Z!44&Q<9h4+sqX>4)H>OH=E^JZ9D$*gk&duyX#tO4lQ6mVRrLSa;RePj*hs8dWuS z^hjNg%@wXN>DOya4jHVu z_~h@<^5Lom*AdG(2Os089vZ&9gm?`(5o_Y)VMsRVB53d8MNsgbtJU#JBsoKTq(vjDL$%?pvO@%S7qI@4*d(m)Ls zWCpr%FpE3(1o{Aq#nA>Ypql}x!7T~PwB?iTL<)GbVDTm$P%%-;w6kd#P++Mt)zWNq zONI*{ZLFaIEi$FGWAsEksWd^BgnG(V@?Z;0u`tza`BY?dBcnap*@pA#S~OSpG1iYb z^6fP1N1SmHGPt?4uI);utpzQW;3^C&hxlas*djxMxsLC#VgL&Ga*d{x7YigF3zAGJ z5)EX4&Jd(Kve$BK1_lGvl-69e6d&iT<#Mj&9Bvp(Juxah_zJ)Z-R zlq_45d4YO67pP3Wc!B!V4OFTHG1_TO=Jyc^uFd{Nl!L9eIV<{oJ|K=y-J* zUYTl61~J}+6j?IlF$1Pb+XM-agRDkd0kRFE(nKSxhJ{O|KOjT&N{eyAZybl7 zX;rd^O=(WWhB(eebE(fFfR4{?#r7jj&8HL1Sgf7gjvygeZrICW5F^HD>Epc;nYuj( zf^RX(h-t+GNZPt62lAm~$f(Rev?Tw8@XY-d~A ziw5%+&Y=w2hIfM5@|IjY7#CkrKNa zJhA=(C75d32M^8h^z4>~6wSml%$~*DEKJ2`$D6UDDz+g*s7}TUs|mqx zXsZ{HnPin)+n#P5PrpZ+qwz$djbF-@Os&V#S;zu(xv+T|66~9;g?6TUxUdNcW>+VD zi9EUDo2G>?OUmVW_WD<6A{U-2;HUHOI9WXImu{>aE6fJE2$}84)>xtq8*Z^e+}1J+ zq387aD14~n7cS1 zq<*FZKA3w}UO0nc?qzx542Ze+WFWPe^qwlq2M6B(V9g#gm!mxasbJjwNkkTWuCdnCt#oDA>*Nfv<_>zLpPsh=58l%LjhiPo)-oF)f~I$0}bMkH#8> zTa~T1);K(D(jelkn~gX`A~m}fItg~h>{xp$jTHxPZSI z;9IbR#=YJ5ZR^?vXfM$4~vE_!n+dg(El9}be0(fP=mn8MEKI9-fKXk@wzzjf_tDAhE5gJ(-GaOnoN;wwjy=Jc}4fquE zwB}YCj$e$BG#kGnK$RnW=4%O_d}|?>yh?mrW;PtvS0YywJP^uv`*My*(M)0IGP355 zxeFgmL&PVx_0rCtiwR%{PbGI*&CKnhz3`jvLeOqPKLD&XhAAM24d4fxSR45q0%J7? zxUoGt)`YvVlki@&*JC4Yb@d-w_KtNmwZs}!D*J+G%GyB}+aS@<(wVG}VLxnJyiv;@ z_@#z388cSvXJZzMO;rh;oUl)#wQBS<-XV>v0XNH8wsMqSc9^ZKWjUy^F;QK;e{7FL zDm|sSwMnHvqNJG2i`W91^KX5|Pp!tI7PrjYruoQ~(`%mkPDv&)|2-Uea32dWHHe%# zL8ieKPMwXEn9hpuSgdy;;1zqptlx0()LqEneXsodXyzx#eO`XTV7bs+;scxj!HJKx zgxt^ytl#Qy@f`VDuM{72C43#CE}J4>UpD3KU<_!8BM+bNi7e@iL*g$+f=eHP6ncpG z@??G!Z)&1zzCmVVf^NhwZ+vc}f8dD?0bY1ZO~)3}KeRVV_r{%gBP1z-D1>Bt6TN^8 zbZ>sH1%nYg1Q~6hKYa_g!#)7jga^S*u@@ipN#pDi{&4s2Y%h4Ds>mPmABb3sj1;3W zGQl+M@jcuc={END;JmtdNLj$@Uz?jK=`fTKqF&2gfNuT?0^QcqO6OAu?UtsC@vDUt z&`)^Q!%XOekVuGLNT(o?iqB#_lA;TcXsJ(QvnVaYBiu^u$rRSF5{(H|`8H&M@C3qD zYB55zB5UhNh}jK4P@T|ev&yZU1poW8qKh$1{@L%&4CrhI8D~_t|hiC08PHv>V;;`7Q%~zZphop?sV-yT$ zk}ZeJ>}AVgG7hxmFp30nWaI-S@hDc++UQU`iXZ?S0MMM^Ybk6yK5dZ*rqU8$K=0OB zH$%9E5s5>CR65fQi^bN>60qdNqV4R^06$ZfNxp~r7EW@Ta@XTP9Q6{C5<`rKi~aSQ z3qH$iv5Om#+t1YxW&^Mn~%2E!J4J0QqMEQj7InMEyUiz zOqoJFRts9vhbDupopgL4K^CHw12RdlPDZnE*=TteY4g{`4Ki@r6URKx!kJI4d}Inn zOJg$^%x{%G)5$cD+NR7|sPv12zSmJ$X-6KsWILHnu~Ho~bCT{okvt|{bH zuH$xRsz4|Q$%xVB?#28UG|=7QYnGt442DTKnaA@2fpa^X<@=_TwE!wDwA zVKD|y0r(&tus-7OrnK35rlpyDYJpa4UUT76T8GH*=`cN|Bjst?@p`7cA?f?|HG4%K zmf|j}9J!ZeMB{~iAvSVS;X+_^10PtjgriEe%f7wrcn0~xlS{p`=P5g$a^P{=a~9TF zc#LUbu4q=rm}2?3wqvvlGl%KO?ImfvXXPygebd8!+U!i2oHxE~nr1>yd^7XKmrZ1I z%WR9zX4#GCD5UkVlINf3vMQbI%)~U|7H1xJ`UiAqA{^jbJ!Onp^rQ2uKy66s{Tn;= z7HPGFmgnq(yoW&uzTXj%HgF*Jsp)*dXJ_G-fNyLJp<|J9hyZ`3zA|sWA*Qpb+v?BX4J)1t&pWuU( z1!&Mv4W2y9j}KGA@#r+n$i~4=+8*xO))wLHz&Ua7f#F{g=c@nFC|Dm$vg<>G+hpWx z(|XNkHrL2!H^z}jNwkq}jMcm}C#JDp4HNThX;+?yL=3a8c+FNNQb zD)8JKPo-kB;xq-%O*-fXB)}n^J*N$WxO64!>1;g6ai5mraiZ`C?A+4QME^A2;FyIN zpG1mLd$?X&<|UAKHuB_WQ^wP$Mq}3MT8Q2#wfBMifl8& z0fp7qXk=j;O(X4yM2mMJQzF_AMV@jL z5n(DSy=oMi!s0-0AaBhm`4W=!TBMxoA zp@-V}?5v+v8i^Nt(gYumD06yEKxY;HUwmTBGS-}r$Kf4HUgVB{Hl7`&-Ml-9LK{t}qs zd4FSm%(&B1dyZV($6yAIgQa0e{sNfceT`gx%&4~19-{F00j$u)8M*X4o<*k@Lk9f^ zN#0rnpL1d^&O@YU{}iHqJ6op5y7m#r^FedGh%9X8O*CT#NfxA^kcFGVuu~}xhqvuj z-vdJ=9R9}PyEF<}`=r|pfG5t>8)pof>QW2(eU*ze>`_e|pg!y-in7{SG91nVb0eKdwu=E@tgFxmD1wDrxyS-O)CyyQ zzC?CIiw097x*`!Gth6U^av~prMAsnAp|-WmFu;}YZbPn+C$Ux~j3#{~a61lLrDt?7 z;@ndS6V$8lR=e}(L}b{XJXYm!3!4q=v<)szvwgOMxf6Rp{qXh_ed(a4hr4p9dl zZO13kGUUk9Z{*OG(bC%Xb;NY%DruYpf%6A)mF3kn19I6MjRyJ+o-kIhXySGr`;qt) z@eUP6f5ZCIu1JVsUc^1$V@>f6IU3(&d2d-2+XeY?-r`Q5W3#pG>@Oehm6udqy*b(IGz$o`8=%6QYM9ygculN;At+NQnAK3pYcpbA;EG%C${Uo z5&_54J5Yq>qE=8M&rfZ0$>fE;bKUac;)!?Z5TQMeGZK|h2-lb?sE!+v;^ii~$IQlH z@Sv70xb+q%_$n;~L5L^0Y0G=ViD-A`P}R3^yH2Up;56A`m+4hvsWL=>w+D6@|MGdV&s#mS@%-k zBT#S6Uyc196gd*AT83@y3Ii~`PrN=QmugdZBaMyGsPElIY815OaYvz>$fadE70+@C zbjUG65t@kE8hym-R;0$=F6kmyD03w&X`SZRI1IJ7fA=`-sK#-YFX-ui;S&~^?{^jJ$3 z`3wEU`gkGt2xy17)8=Ll4&CNa7V4LVBRAI6Iy+VuPbcc>-s9}dHEW3%tlDcKMJ;V& z4?yi=ds(A?bMS)8Hqej9+lz>^6{+_LcwbL3{8$^(sBJS|IJRO?=p>Bhi8P<2FOTc3 zsjLEbc+sT_(Gg>C?L6iu4m9NBnCWb!Qi8?Z-Pk^pt7ndGB??zbcX>P<7ro3pO^n*n(oK&3A?lK^#!nH&#L z*ISYR)qRCgcmhC8zEV$CjRdH5t}>GVHOx%1wEx?Z1gLwjHVR|%N`GBuBzbet6_zAG zwOwPp9Su+?Uuz}->iX-9B)by2uQ!ro0c!FMW)h&*xzR|D1E?1*Nr1Ze@5bBl0M&Gp zk(>ZfV{bN-09A4e_xMyZyfYCzvVRjbcEw zJrd}>#DDWjh(dJ7Q&AchCK`+!20+{40fq#Px>kvn0t}Hmaqo6 zImInPDS84qR)gXTq>aP!Yg4nEh=7_8vEjX4BBP%zqrHwcwr0Q@p>2`D*NP*c6W5vG ztO-mGQZxd&a0Jq5{EC<+82#PY!p5dZ8zMd@ARq22xKZ0+h9tV>Y$7!~(U_)Pw0Ct~ zwOmC1W4}>gS@=h$qQ@ zXZ5%(xO&_c?f96g@lada-rUlVPK?5{4ra#lQNpl8zr(*wE^Uci1~UY|0?cqcxPdtX zVDhI1gxRV2z94EWU@na?Z>m>BY3sh(c*8-x%o`Td6ivjFIGnAqrL8lDbHt`OGWhZX z-ACSutHDzAXJ-lf>qDHcg?E6C(6f0zqrh~UGba<(g&9TcxRzzSm&hJMKHD%dwZfXJ zm6dqgmM6=7DxfuEMM68ij=tv{j>F?VCvWSa-jH?hu)Y;80EjFen=yN%ze8N{46O85 zs0J>9VB&w^v5p^}#RK2~1`!%c0>Dur*anNKbvybRFFarZA$;V*AKn+`YHORCI+|;9 z6tAtM{rv!C7kQn3s8w{HAE@jPzrsJ%(e$<-sO&=j#6Q&WG^Cf&7}@zc8U;UiozVPQhd#{-)X zhvQe85NwxTgOoYwV~oGunvsmpqDPUz3qVie7w({1em=Z6k-Y0hKauf7T{-|dhKokwHjFIol<`lr|D^C_!o{+o<{Au4$%N(VxJdt=ot z2Wjp|(*YAZSWeP(_`85}(8?&Ch^O49gM`Dj!$daXs_?+z5KzHq{qBflE&M+c{$5B4 zS=bj3EDHzVSF#v3BM-YaQD{a6e3;aRU(DI5(<}|w*nF7__aFaVgMT4f1+q`VlO!8< zD;qhCXb64{yOk?#H$8Vlj){798!>^_B5l-woXmDiAeT9cLC>s63JD9eCOQ-uO)axH zR2+t_Bv?vG*SmhDL?2rLYCQgh=rP})LeRtrj?ZXk@$Dw>MXA%5n6Ot*3JIQC(uvUw zgjiZbbjtftItWj>g@mE7i16tFhAWs&4t_BKFKYQofZr9V{q{tHevc>4)kFy?x(xq9 z^a=1@j;Gvs4cQXN<#F_)I`RciTNsP(oMwu6S}_B8vII|#XCejfJ71FpYFQ|S40AKG zXdTC|^=S*2;6K^Ar+?tLb=m%b5ygLOu!iV8e0p2{Eu{D2mjsXtRz>MPJo#l5uQ@ZP z_=GV;5TeS0S!PmjV0V0+Ze_G&6-gFlMW-gwGgIYzKu)*f8Nd6sx8lVLB$#)} z^rRU47W8AIlb5^+53`vzntm^Y+ZuO|HHw>%r?VkNUm`UP?vO4)_1iBy%A?0z^@<}8 zs_7-<>GX&Xzea{etVnP0Dn_aCv<-f6LUx=daWv*NO#iVJu4Y>pOX6;gn~<|#k{7b< z`A_R5weYLGUbmIga_1mde8(NMy4tbZbTC{{iP}^$)|#4)@G&e1bR^=Pl{oNPXEg${ zSJ?p<4k+>lv$4^e94~70#laRniPY?`DG;|OU|P5%iGw=EmB6vCI-Jau#9;~uZLw_c ztvN7HJlmH;+sp*A79iUTfp?+?UO;d`Ap6ZgDVM-;n%MiA5;_A}mR_mSBSnL=c50Q% z-*n-Hqs5D+TBVwvLSw6qN;7~*a2j4Wm0qx86?tD6CD^R5c*|CO5luH0dEW9i*qWd}dC_4`KzK}Q6i*zcrkh=1>Z8gzyYwWqMxV@S;OAk804Q#F+)IJ{fV2_+ImU+?v z0EO^)y42eY;wv{A9FptZSQbF*zEc=2x}IiYmHVFg z@5G~%#TH*Zv8<{VEzZOi;DziQ~I>ohX!fh{oU4>hH|F) ze!iWqD;;{tPjRz1)7Vu8X+H>hN^Fz%jTW#ieHoitEHoAXg;Pou5lc~}&v$Pl@ zFZoyQul+YReOx3oduz`$!FjRNNgM2R95>0fRTF{?IRQ0<2?K{f;ZC>w0XAY9k?KmN z*<=*+MXA=z`JPI@`^2cVh@78qrbUZn=*4|-$buftrqWB6;-deJ#X^qO_oarZhrth< z+oFY3I@K&B4k7VkkgYRJHs-Q8^ehl4~ zY{6Ldcc8Xe+^oRIjGji4S?BXJ-g;5%(VlvxZ+8Onf|F;hS2*EXtNn%ROIhy$ ztGN{{^%hY{)zuwwod2_byj~oRpyg>lyEV1c#hM@{JAaK?_UsrA$7x0%j@4-I>sscr zb+L2HT+i{`Sv#*u*06F9)cf=dYO8+p#N7}W?yREhiN8HC{Blm;=#vcpd@)S^UJ|(wu z#@H%{N4mi*s*SNSmY&^1jcCXOj@Fg~teb1jsrp=cf@no{aAQsMTZ60|xV)%6!Gz%1 zNp^)1mDMDm1Aj2+@Py*g1F{2t)dIMH?v)+*^dAkXy}GTB<}j@?_H75%vd;uUTgEa( zP~g zdnlV?x~atAVIC~>+cRu5Nw=0zRPfw}47`4UxoADN*>_NFaHUCMUIT`+U2>AG21W6f ziosL=^GDe#sq8&%sRgp%=CZZD-AK+RkTXh+N(k3UcEX-DOZ%nEtv!snU{Fo*hp<@- zKE^FujUP43_CObOsjkIVm=rPT)YX@lRdBai)-SJF2AnouHdajNWsswpF2YTsd3y8e zh8~s$77+D~%vKkS?xcnF6g5Z~;!0`&-V&^en@BJe4Z$^vZy19QYkKPnt8fHGt_$^MS#opnzmL_bP z?9}!uJ3Muo_xyr3m6!&_DaG z07#Sbo?jE9w}QiF6)X?OHhoeQI=5D}Ok6dtX+PS68~q0;p#mthH7-NpWA4iEP&k7< z=zCgYoJ#oivo#L^#;5jZPU16hhKmrXMjC(_PVV$+E$pk!3pDoUl+yjr+xeFcQ$k>mLb>{3xH#o8; zaa0Dqi(K)PXrON#C3bD#Xlil81N9k#+I1jKn|9QnM6IXkDQn?YWKL}8z=1t<1RnRn zDI_?E=I?kEJ}!NLx|cKL2z3NP{5?k~cE`u*!E8mWG3Xa#zxrUSDb-G6|;T3_*56 zuj<)62U=(rjj90IzSm~7uSA6W_)6_dTgCo^+#GahJ)fdg0N_QeUTA$TWUd8@1ECPN zEzU?ZCi!kAn+8CoEf|92E4Ch1SMynCxLF3vo4&m`BN&8iI$>I^Hqv@~{$%7p1>Qd@ zCl7SBMo*!vClicPuX3qExS&J8ogNILAU2pVmf_fkA!7AJ%KT$U^YSev#_$71uMU3j zYE!5A=%SM~1u|i5P7d0n*);2L<{7@t)C5|b_CEa5x42uu9?V~Q)r_@0HD@c~Np83J zDuMF`ur~oG^i@~qZHBw>(WG3ZW3tiZqfJa$bUlMI<4{2jG72vdvgs6U_ut39Kd^M`@0=A8#*^5j({KAM1UO~GHsQ2*^Jrs+ zl2`Ze3mQio19txX+CTiRf;nJqN;*1N7Fc29mcih8U`Oz7K1^^Kk7_x73Pu~I1jgpu z;Wc@PmJ3W%faMP*F^(a#t;-PY}09 zIUmIi*$Kr=13yDG$~k5yN)66kZ1Ths${PPm-6$bl6Lbt7aqeOE@(-d=-m4Jw(au?U zq|cVWK{0O@>80+N1Yo{&r9Syt&RdCBvN?#bDeHu8KK!|onHCUmD|B2S=r)P=OTb#V{(XeumGlTFAOaou4=KgI0*wLkiMaPZ&;QS%2|C$Ly@nEDt9 z3h7T4Q1p3EF~n}VZ1jiVIbz2!*uYQ-ORTV{4^G1@M()k?N2>QJ4w89x$!Yq_qt~=b1Lb=Ku^(O#w z9dxXe(J5Ta^j*1ok~7G#f>7xKz{oawSxeJ0Uv$Y8ncGajJo-M&pB{*(ne?#^#m&j> z90@&E{pgzmnMJ{k2v(h?Quv@?p<4zCl?F2KY=iIK+9stGZHA(Tu(+|yEIQ06S~OGa z9SBEMFu`(+&$8Z-L(tC8RcrIeqrc457$k9K%C+!*F62^KsS?GawJ=)5{DTcrOhbm! zUa=fpl`C~~>x`};(fD+*+H5CtmW{1-M**Ux!xjzi6ow~hla6aRoxLY~UW(n5UX{kw z8wiRfc67pkC5iQ>)O)>NU%BCvQ)V*2Z2d?tEEe~6Iz(%9*S7S7k#=qlpa#?RBOz3p z!|<|IKr1WgADt|Weghwk#esAJ9nViE=?O2XXl%go=QxcofdxjM!k9-C@FJx+%4{ZJ z2<^l!szW$oPJ`T(mF!l8zhyX*E+kIK`vm8=-Hnufssg;!O?sb8!jg?0qXZTTR+7idabBFW~$9G z%scmtwR+z7HbK*3yEfPfG6acW2ZRV@nmEPxe$kG&MU#` zr!qL_VhH}UczPoA6+Mh+xQm9;b9jLFaks6EV@bR^q|@YdVYPu)rRxCDde}%2P_=VW z`MPaZwY43I7@w{W&nGXLi~8WK@4)e~q7%_j?g)Pf93kKDjhi}fAE7(Ot+o!BrML?S z7$F=f_9g0^{C(hP_$G0_+P9XER<&Si3mj7wF!B9;jePQ}1=HDqV;ZGl;;=XiqI&~J zG@6;mH)~-iw;*~ya729JEFJBHx`(D%@aKUEQ7(nAj||*KB&w z=*F;yYSxZwua!3=8s^Kwz_D@VY}oA8yDV^otf%aQ3g*~2kdfJpoGjNpd)_fv(JYMGfQNg3~vga=f9+ihd ze^>CBJS_T`g2&`#(ti~^Dt*|tD2{cv4Z0uW>ex)9et7U`vRd_1g2(4#*2e?K;=`^# zJb0uohW+`$V{y0aZwnq#7SsOu;IX;e_MZoj$lbW_w_VU379U45c+~)l* z!6Wsu?_QCC9UINR zSRLcPZ3psF!+;wRSvr8kwSPhHP@4@bdBe0VjM$c`_?p7vz}Xk2ZYczw$!U+X>-7b} z{}ck{rFgcZ;3=F@mg)J=cMEyq3ptf?~6ZdBh+PRK2E2oW7sT;7BC2W?6 zO7j4<@EsX$2rRuu1FZe%M~58?lto7OXT^(Mdjf;cZ7Nw|(OpIH$7X=#wu*v<=w*Da}y>0y~<=1w@t+-1uB)om*G1I(2kl@Pp{C z^rIz5b|qTDo(g>?{}WsV#wbf4Vq$4}97JGi8nYNPOE@9!wq;3I#|q?SxH?vGL7PBQ z6mx})L6`<3*IrOcE_LCBzKw`NFqf_BfX+vTEGVi#A0REC2Ee+r=quVo49_wOcNj)C z<9;rB1S#z>mpAZeR+Yv=ok-{@sx_VkQ(i#Qw)6f|WK5TvC+IimR<=vjaRK_KzcDXB zr)ng2n02y#`_pGY(1K$X+7<_ZUEx5@=IQ&6yyEz8-&E*H$Txu@ z^*O?MQc|{QP+hOS3Fm%c*N_-9YFpaVt?dYq(+3eLkDg>~+(Tp}k~S)Yka!ZYU0_6b z?C15wT=83s9pIg(%h6Cg2U|<#P&lE@G^j$+tXG~fns{H6t>GJ1E(}iNr_*C9k4oala6s<>@BHMKpEB{4*#g@PHu(L$v`|@)bMJ zJ1}XoUTUinhs+1LY8K?e6i1(Hw0Tad8VpA%T)t-Sk-W?>aiExzEh?pl8i0k0mHfd> zx4Jss*4BdU{QI_b@!c!%B?w)n(x;YB_{u;ZpB%ESi6z%9gYR0(R*v-r{$NB1Y1}Dz zz_aK<++b}2%zC;&K`h@Nu|*bY`A)r0kyX4a-ZIwgF+6X8*%u40${(Q1AYpeYsnn~& zAXC`ZaWm~#o!G{DTO&SDBrxmLAGZmPFi7=FntdjhaG64>bZD_)-6x1Dy=DUT)EHSU zF?;o^M;g`lb^6JfW_h7`Rr(KdESC%RuLMAxNG;BF@yk)~#@?=IaQ6D{4tV<|Q?W)# zU{S-dC)Fx7^b{IfZB#l8cm$`R4YG z4K2^uu2xnR5GHhoOjIJ%z%?=`To@oTafwU=*YtvM;hq}D%5Acx)3U8(VStd^aPe7F zdpgk~ZeP%jlDMou1U6}xhgNWewqvLJ6Tv~Rb>SJL)&aqE8_m#f4Xuya~Yxe`0{}dGCS2EqSs>3} z&kDt)>oWZ}i%#o5Mn?Q^f?v!g^SijzZE9wC4^+Cax&WBAo?D{8?iK(qh+iqVh zVYV4!OQGQG%abadQ3xQnMzF$`J&RLCJwJTwpNyIU~IVxy~l+DJ8$y~9h$7euHP*5!quL z8T-*b&Yb;dz9UPXn0-BR#S`u@eZWz|dM)V+yo2_{4Xq#IX;(x!rTOC4ACbVkpTan@ zkq>0;i(kuutQqcN8`&G7un?8(#RhXRKS!Z2GLgd#NGI`k{BWKCfTx-C4IT^E0G?x$ zSMLw+DEEQ(#V-O`*TYXh*u_ZZg|-}cgs{jC0aF(Hr+88(_E8n=+qNy{4hN1NI)JrW zC%?EDR$FUnBmZs&Xphi|tiDVEg!U~8hJ}d~>j56xO{SzlYj9Dnb`0|j425vi3X6_q zb_Cz%*9)+PP$%2_M|>YpueF$sUVXREPQfz4f)WOh0A2_yEMVv$K*@fM*=m%~BI|#` zW6sF>X_Ja&vE7vRV(uNl6QqP$#aE?w1oT3tw4VW*xdPC2^?qGcj;WY1x75qFhN4hEke30G-pFvx5+jYTJ`bagNY?6q<0 zH7ea23@WaRU2P*8Js8j)eGtY!{&qpATZsPJH$=N&YYmo@^?f2U@hHu+6kTsTi;W@M zV7rYO3quQS$rL@QAZ)uW&L_IkzszTGhsI{SEyoaZ0qsC!3EM&(D*pnu>R6hRRv~R0 z5X!K7$K2R55-HmrmEDoS6EZpm5BfCxGCWUdZf$8xPi(@PmN-#k=l15-iEZ&@j6TI% zOeCMe?wMSBP;44Pt0OJ~!@ih2BTc+T_n$=qvocGi1h(mDqL0J`QF#l9vQ}49zM%&@-s5BH@YqxxjE|9d6c=o0aB1BjYedjaNLj+2L`2X*_B`p5YK~*cy*buZ z7q4wkCXxwwr>ubw{%(mjwZ!)2l~v>Udaf>moXW8(ePc%r2c=4b*4GG@gtUmG5OA5V zJQ5*aC9Kk^fM=<4Kv1vKsnmSFDm`w;W8}ZDm(=3plnre3Xt|pqH_O#$Uc-ku2&lBZ z9k6>v{Q#N?K$)Re2)Y1x z75&yM>d76Rv}I>SdNYG${|%^3VY5U23Xm;f)Dz0>k%t8iz!Y=9@oGS)?#pVUs&5Zd~*<+fb z((Zs(xcA+QlOEF_+7H+)Yqt*j)UQN(VO6Ql4!=I$)Kp!a%YZE!tx7F!cw4Y@1GaZ? z`#0tX*H%_B^=ho+ib9uFioH;t0hAnZaXx-Uc+aIp(cmHVUf6E{G9jH_5@AzTx-<1| z5{&;|794R^Ke3=tUip>-@&6*3RL~*8Qx4q|&=~1U=aQYW`#$8$^~v$UhbHMQl7STRvEB%_%uTauCrS}V@=M4E&F*8-OYyKS;2#z zY}z;T;d1t7{n*J4;gJ$f!YUj9fB?B8@FV;hbOxTdl|_`{)ktu3;f?t9Y;l*anxgWd zS-!|BBUY_O!x>C)LSluD&6_6h;H1Qk;wo%J_s2Nx$h_C^K>+&A&ua221C>wRksBy| zt-~y;&2l5c`Ip#oA2_30Ji_ePHINm=DtEB-I~{6(%yLJi(snv7FH6eSizge)=ClVs z%+onfDMki&Xi7v)ABL2Sj6a5911@~{?4g!vyT@?a=m1o za;z75HD+G;5D{b|Y>g!oxELCt6T-t%U2XVUmU5v~x{cnlluly{cd{i}n{4OlbYU?S zp8%c^FxP&Vr|{#T1d}|Ahy?;$rA8cz;VGonxRVqLib^5eBjM(Hh)Ur=Fjq^k{-hbxFKSpKpt^@<<41v2pjpnT{K?$ zLZ#2w$007tqEH+@C=s|q`1^O51F4?cKSXVK`VVsQ_A~k!Vz)rBRgr+bhNI~r_)Tr+ zD!*sR*-H$=^d(82(8my5m&CFOA8@K}glljY5SSwC*v$cEVX`pU5*D`TS@8%K>A(Uhob zi?wx)VDml@03&dAW6@NMz<%@MfmBqCz<)UEE7n#&dxXYBu4t{u0K1r_e5XROTpNLD zX7ND8{CfmXzl(>(P)4NNVu^GrAYl4Q(==i~T=M>P+TybknAvu* z1dYH=5b?PclHC=Fmf>R?E5|idRn^tSD#wf*S=l%O3p~Tw-kKFp4j)-jIjUl0Fp?+u zSA1=?IJf`+VTrtWZq+5yjZLvxso_->qbf!P!zm$SguY+VmSPRV^L&295YV1TrfZvH z^=&OF&cX23+|s~L7>~3k=qT+eLS&g3YrxEpF%SV7M$%NGUO)qUxSMLxyETZq>qAS% z>g(H^`8kR&A;Gb9izta?bF7tLlo82UB_{x`O>9lq5?Y0NGg_8G6zOBoiZO>*Q8=?7 z>2=3gqE!V2#UN}UuD)5IWGu1dEb%2ab!6}d3Xg$`F)bVd!$^6HO2X0J(VfE^DW9*q zIy`7rxGb_PJSegQepf1&HP?iH7g3%pX)Fze2P%IHm6w);2PiKus0sHwAfnu`a5d*g zlrI(e;`IeH!hMxH51kPXN0x*)sR@T`N|o@&5#`z5vcSLFmxc$wAb_0*V0fo|+^Ysa z*HgZ3ZwwDOJfd8=u%@&W*p;_?PmL%`+h^eIx)J5&k{OZE9s^gejFv~2M+erFhJi!5 zf8p|o(olgS_~4a+dXa&lEe9H9?rXM``H*Cp@*S&&8rY9y1w8$^`O@^D}9 z^t**M%F*DrV8N?p%p35eV@X8$YT=4-zld^-L4lPKrysf;4JvRhhtw-~l$0>K-pZ|^ zD8uNhJi1^B16AJWRiQjwB8hmrBOOuhTsVW_K2$PQWAGv?_g*k+hB9{>xTi)djLN^R z73sxb9w;e~D0eMfWVE5Ezy}>Qp}vy5i_q7U55W>m>^>Z@!Y+2ph1m5+g-aU4p(jvd zR2U^+XcTh)`a+h@!4c(%(8`GN!-6H@33!}ZTE_H#H?R>eH&KphZY=GM-t&DJ%sy-` zcLeb1$WXUXr%gv+As5#_@LGe8ZP@diXjxoBZJykSK7xP&WEp$t!# z_6={UoV)P$i1K^EEB#%WGJHii)EQCU36k)SutiL{ND}@Jcfudn+U)y_f-geK5w%c5}R%^TG!!u;tSv8YrDbaNDosfj1)o<%U+n65%ZXXENs>36hW3Vv~h(C-_*_J328O{XC-F1C~Jco((OEDAz#a zZxm5p8i+n&9U_)<(|-iP=of7l68g$QFzWS%jmpI(%kaAb9NsjdJRVvU-ZnBLyy=Ya z`ZdbU3o^tSC|+O40tEH>LI~|~Wsr6I4K5;6UPIl&z0owGZA&7`w5S+;BFg3c(9vFM zYsACU(*9iG*B2}TA)702byh@JP0JDNtv;N)iE>nDBj--#(We5cZrUQI`SZ|nUFBcT z$i9-uZuN<56Xgd+_TzjTvh|gV7}<~W9mq~l3}jQVH9|RADS@VsuEH38Uw=mfMJrgl zJknZI+6%gWZge0jG4Nnia{dg?K~GATpwKT@-z!ja6G%d30e- zB$`&HRiM-+5#_4>P+}`ux#!^H93$=k9=I>)4=%mcnl>#39)&)MpplohYfXN+f-*17 z2eAO^t;&btFxa<}$8y+A;S%MfE|fV5l`RRAD1~Q+ zTC3fH;T0qeR33x9rrhMwZtlWb-V?$q`12{Z?sdLf_tvdZ;pb(AkLVw53=fKKZjsaF z+=M@%!Xaf-XrmIP0b1}1sDNG(<*ZO+=|D90;yHp{y4A zE4Kmw1m%Q7IeR?_aOn!s4>U{b>3O=5{97mvrJT!NJby{}x15k_;fX%cWvmx&XWbD| z-YsF&tUP8!mZih^>;|D`Hc=k$1JUGiLVtL7bw7fom4S|VQ-QT{;rvFSl%vaGf4t2a zys7ffg)0u-^FZ{SdEoB_rD)x^=FPxE4Sw=^3y`FMLE0#Oj#_Ma+aMb?w#Wt1yxku z?}q{Ol4ikRTirxko!yNVKPt#t9aDi?{U~eoazF0!cUXFSbRcv1Z=zaXEEIkI1g_Ul z-TpiM-?(0A>>spmchOD?A|NH%>4cZP#iC{McFoLyMGtr20TNq#;=@tU@f8j+C;shGup>Ei}_wuWIyO*$5 zyeqsUTsA$taa4uD(w*k%<}=({*L8=6LZjN@yddB-_=K|}Tpk`68u}Z-`^$CSzZ8P1 zxXhjROV~mL|COcvxr>x3_jI74F6mwk(~He#NasJx@HqxHSCbdI|DR>j{c_O)P`R`n z;}6@L>1_5UBnm@Y7;rD_hJrLj6izUkfeH_mZe*Q_pc`c+TA@$x=rjy|-ODh{eH?BK z_nC@BMd@!?1D)Foe0~?s1u+PJ8lD>N125mH-7p{`%4%+e6T4@~`Cd7U7WM@i#`Qqa zjxZ9w2~UlO2X+c39;-9)8y4WB-I+K;n%Qi@EQ7OvhrH#&q1acs71K+KD939>Pfb1pI!*dG@|?+-<2xYm2t1$24mKY@Mug~wwa+U>b5wXgboCYO&z#Y(}9~P zuXij#dks)77BDys9eE%lKO71bD&a5yUab%Fn@x+=n?oDqpG2@fhq zY6d(D%DE9a6MCc+C6=}?H`H@PIevbcMftvdLbepM|8eiSf?M>(u9d#pCu^(g9dO@? z;K9}40nbhQW=!e0`#r1G{;PSS_5+p0u**Zr!&&M+K>3L4{*0*mbzJuWXpZBU$nK(zeRdh zSX!jVgNMUlv4Msyo5RDDt|j3uw*f!RYZZW~Jl9bJHZKpaz?d*KylGll zgla*59N7zO`F`#Up3ENG3*UV+SB&+?_kyUlW8|0tS7;^XoO59>FX=TE4>jTSBg)CW zq-J|(J`Y->m8D7=OKRF=@@bx>3S)qWp0gS3`*ZUhUa|_^g$(n}xw(YS{|E#+kH;+3 zWjtBZrH>~lbAo%Ble!E`W$K=g?~8h28qr%hzAFkZ;|w-swV4Ps*-hQt0fn0tD(l?w^qJGSitizw_i+P286qn5nZ3!0@oYyRWi@?tznCA9^9@qjk2@k0W zZ@~uU0b<Jqh3F=NfdaaaMgDOhJy4VpZc7SZ6oDBbqDDf%WTVi?bhe1olo70kT z;BzjT6Z$m@zw*nSOXb&x@fM;0R)$Ur?ib-3g(e2F3LcD5bAE`FkT@;NF-dCQ>T_S>bBtUeb7lCik5`8=p8)*20`Z%*2<4!*?1?|@trlSx}S0+UaVz#rI zQJvViOpZ_$LN8cmC<6Xxy)aLOs~vDb&==9P$o*9KJNqh6c0hZWa}~@A7ed}xptx#- zlvA;oqAc!Q%^&GvwwZD|R!}#JLQj?m5}x-w-JZJ}H%_U|7BlHgBOg@`DR(c#v{|{Uj2AQ>;CbYm9m4ThoZneD z^-uc~$h=gNc~hB-vkxc6rs4rUWy}i8ptqjF7!`q$R<@`oDPRuwq zLp~J4@{S7S*0S62JA-2w?u0zCwf0tcHH2=Fu+}tayjnIuxd`5K2J(hjS=tN>!~lYZ zz?ZA>t2sih;`KhKo6hO6Fk^BygA!rd9|aNU6FFK&^qce8{>xnM;%-537M1bH`mYX1 z8k8k8$pdAq#mkffvVHY{`069=E6DzX+E+_O*Y2mh!`kTm-=$4qp2qZBxfU!$E(R<6@+7*x%bIM@EpvUf5WKsxBbUvncY{L? zMulII75*XWUg0A;Wrgq5EBqi=_+q`nZi~&R$eiCog1&-C^@m^WgpQ>= z^nFtXyvIVy;XC`jjOVwnMIDo|mF)QZ8(774|DsDS2b~as!uY8j3WJ5&$HL%xuyQJZ z5stBlDth$UqDKpNKiD}``Jj6x!jsxDb|2k)DjviH=NN?OarZwX4DW)Rt+5pZUAtI& zb4pl<1kdB3inuLYhY+)GLzFM*jdp&k9UVMJ&xV45Ld0?cugiVjji&y*9Y)JZAn={D8JKSpD~Nx?Be3PC>LTWV}w4ZdXmu3<(vw}(^~ZUV6|M_ zyF9d>9C=pFLTmr6w-|YD^pNG}FkTIkcK;x0_kUc zce1vd-SM08NgfMJDPwq)`aU>xNTG*>fdz15W`y!CaEn?8&7oH7%3qB0}Rufr~ z4#P@3x(@{7i8O~gC^z?+5#BPi#OMAZ-GW_{K-m@vXW5xb_SZ$5|K;R;6Ye9@-OgF$f@_s?rVN}khwNcpaZi18MKI~ z1@9_|0qoH}#uChpooKj!%7$Ak8tw~g!-;6XBjC}r3n>E3SQxoQxGS>Jg#q`~KFh!jzgx$v)R!Us+UwmO3vha?!(9Y7Ng7Um`3J_?h_Ga5J%63c}4z9)-_9 zY(lWDr0EuqRrhClWkGdFIfnyxk4)#%IsW~zuq<<|2#Rp?q81i)4OqGm!gY9Gp%q?; zcxb>3;X1_>uFS~Np0kdwVNQRZ@~iRwd>HC>s;t{X9(8*tqi)}a?ArZEgbTBX|0g80 zdntTG%iE+rysh61t@^AewZPh*tNw#r{g-`L|IJ0H{#CO2*Lqa{m5l1Yhq!KiaLWi9 zUeaTcDKBx|9`ao`^(fTsURk%ZJnFV8qi!!`t6R^t+Xw&8-kAVaRo(eNdFS27OGqGL zR}=$o)M}_Yt!<4<+v&e;96K|P(~0d&Ek%MTYx2ULph3Z%D6W73MO+}bAd1F)!{EMP zKv7T$xPc;Q#SQYD0_wtfpSnN3e|I8wJ_nv#s@BGg1{LXJbn%mv&p4-*anA>*d z=4HoUkC`utD6$DxH|3%=zFJmfZpy{4@@iQDe@NXy!a9S)<)gCdupLkH%s*A!;Nw?v0=;MU5yy z0BtLirfU?`Cp+vC1?W9fCU3!kNZq+5-T|>vv%IW`c(tXu)!4uL;m9eg##n3a%dKPI zY%Q}v^5*j#g*OzMo((+QTvp)qHCN^;)boA*KEhm@iyC{tL44)fw-)Jt*(3$LX4ueL z#x+mmHhF!|i1x-Mv(X{a)O9Sd5xA==fm0EbJ{qR2_L-tim>KSaY+ zmrFQWx8GVWFm;?2bTHpa6vE;7ZpzEE-AgM4Y43b#T{o65*duqDVFlZkT##1Y_Zlom z*{Lu6la{lwt-h__=FJ?aWNvwhc{4|*bPm5uu}jEPa9fqc19=MQ0}C5Y9@?m}O&3{_ zL!1RK6VZ+Y=&;n)xUu|&FIF}aQK>aHRpf?=eC4t}pvn~t82MM?S<>S98bZpV(YJ-@ zS^D;6k z5R){Yj<&H4K0@1p&sy&ngzgZnKxJlQz9CWx&NZ5H4sWv6T$ z9XZ|#;~#diuG)APKa~5{(ZN0i2Xi~QJb)DyaZ75|vPrjLV3H&1K3TAyz{c!Hq1Ui8 zdYLuyh%CdP$>?N*b*lGzKS1je^ZMu_4^PDWPFuX6DTQS9XnDTP^Zuyw_u!~6Bu8E3 zMqSaVm{Chj9X}cLsZLIE3lZ^Bh={(h+cYd~2wxIVaAT(e@3?EdWBPhWkrDga=t6Od zn>sP+SDDZW#1OGUQW~DAP%Lb&c_k`b9BS5ixKdV(ZqWGer;V^U9D(6iroDW^f9boz z!Kz&0fr#8{ETIgHA9rFEr;m;d$V?^;BKw&y;?T)?qg&)$NsP`iuZjVm%S<9z85Q?( z_Gl-ZUKl`?wjnPq3rL6!c|jYEE(;qa+M>3uLFM2i4uHzZj-ebvv1KD?@tu~87a%s^ytwu4nn`!*kERX8sm@-;i)On@R zK&<0A*E|*F>55SaQ`fn;6@6p#sK80b5`2qkz$%DK<&#-Hs(s=6$;FV@X6M5YgY}w8 zEf;fNixpTqDqN$(uBF9euEnI}8oiKg@vvIFq8at~`VsLa0Xi?A!{rSc(bt^(YM5-Pd5f-@ z%C-5})z{H4udd3+qpf%Exp!CS-3PqmkUKxW$vfZ#-qxGHji~ivFtz*wn~&}F&c@$* ziL%t2x*!Km@p_)%8q zr{H5)wQLp_bal~|tH#z^Qwx+WQHvfQk4LJQ;%mb!F@Di{%Ki1pfabfoKgitN)z4;s zdK9*(EVD`;!zCzIQMYFzW{GkY-bX~~tl?KiwOToF)`Zt{0P9ra74cVrms_d?C@@mS z@@1K8lxljLwQT^};;t~z=Z3L}ec?x4U67N1aDFr_*m6HZ;cou!gJB^>zuXsSmjuv0 zv~$p|YYW=1N4Em)gM#)^AKH7HL$odx+6S7yTbqRT&)lGA9txmc0<;!u&vv$6PIKod zDDR?45;q{$C%ZaV@*+8Zz%BIz@U2!^d)&i{%a&-TXdf3Hf&J*2t~ON0TshWRY~IFI z-QAqu1){%mm<`tmINniaGmdHXP-FMmq5O8%9)62}w4Csz2Q!0!`PS+W*d|Ye;n8iB zF@R;h(zU>g#qW#sbWDFR1u@LZ01dMPG_3d0Fsm6F*7|6;qTOg{^3kw;Oez|#6B=fv zqv1RXJ_rrlY=p_7=DaM227d2(G;B&i!w71JL^Dq3zb%V8?RL$fJzg#-S>b0li%8iT zMnUzVohe@RJ*_OX`=x+fX(Ec)1a);Ny5m>0fjGjlHx!RaEqlXHzoZREiT@X6NSfEw zp$3m%!iEwc8K=>4G~>_ww7HL_M}6r~hA3QGlnZ6A^R)vU-+ zT1_MtBjca>|7Zp^+jbAn!K$)e8IQ4k(Ts(=+vRsvo+|}ZpA@0o4CI_|_#bnaM2W0y zvozDjLb)Vm#U2-v5KwGRDl&yN?wCTM6+C9E6> z;2)6DpdYx8TkmJYb!|@3A(H==+J5+NX#qCucn#)0OA$VP{W?ZFn0V=~FDN16yFm`_ z>sArC18`N{qcxmoT;Cj5D(2$0OH*ls{idYaVyoJruFft&NiC*PQy6cwTdA6d`o$P* zta|sWAaYz6b5bMqQ~Vv~$9REf8mW-Z!{UH$gb)`j!i z=tv9)ek1Wu9oM*mDy^aXgSNT=0|hW9`(O45f0t7M5mlkiqF%2km z#sZbJo8`4dG%e^XCfhfbmmSW##aAJz#UYtisdERPv<2ISwz1(hU2y@UfrcHP1OItb z>o~2A#n}$5NV|G@qm5olV&Ueppa4)k>ypBi9ETEZ*0q}>waO0f;81Mq82_%$=ADr2 zT0h43r?6o(<3R+U-4h%CpB3QuNI}{?uCaYb1zvYk_#d!`3bB6o^?Pk$d0Vu0%-}(x ziiI$qlyFZ++fsQ?wnkd9(xfscoh+qVDH>UNDbY~FleXq6nIi4`>V}G)HY=0LSn5y1 z+RCS?N@IF4Rtlo}-B4yR!wTVnOx{Gz#n>s<2#*UTOEyW%-rvc{j6~Sz|6?9TyiOtT z?*qI_a>}3+KK$Ctr1EGt>I-4exsG}VF&Rbg+y{5kvx5qFg~fM$rt$zt+OUqKLi71V z0%wVe4r(fTa-*x>BHx;2dpqMJ32!;!C|B=eeL$vZTn*1L_jbT~`NkmZpCl6R<5Yxb zPJrcJnHnzJRClPMb|V?J;|n7l1^BnOh~SI~x|tKnw5K+CYAh~sYni2PMgO-E_-F^7 za>3-3n-MOuEF!bb0cfbXc<}zKI@*ae#0@51&+iN~lMqXZlKW$ym9|pAQ`~oduC}Ub zRQ>$%7WyHmf+DNBHwKB#hIH*SAeBmACk1YLv=%)quqvYWQ7X zKj+g|k_B>W7wp2fdqbRz`>$9ac4=HM7830n{wAfnZR&27KMgN-2B9jG8|9jLJ**jQ zXL5XK?Vnrcf6U*}aA-UjG~PY3-aC>FoaaZo`a5{}$dvV4 znOADl@o}%SbviGmhr=>u7^=2B-#zwKG(C1l!OlIVAR9r+9n33LCH5s)+1sJpicl@>m}tw= zU(p(UHMY*__QD%y1$tv(DfBns1ADN$bg|B!Q&c`k(g5)P z{Mm2&mHBEX)awDivP6;{Rkjuhyf zFc9qSJa*spBj?QS_p&FI?LBrS$ez0=X7>^F-K*Dw{7Z%Goj`$_+DyCl^=uU0w0lH& zl61kb-vWmne+IXBpmis2|KNF2A4kddFXceVPSx5OJLUcn{c`FwT6QyyU2g`C|LfpW zD@F_*G1Th+GzmS0&2(Ro$e-wKA$IPLnq%dtUCl{JStIf$p-u~uLG@4TV z*$?G~;EUhaFd}Nv`b^b?ImWzLRf9&|g=*UlzWPZ;bl{&qr3_~Si;B^ebIiFEmCG_& zXzjBm+u%La_M_3NeqBpD;)|}QrXn%F^xF-MTeXD$v070@KSQK4zbSE2YGDGk-c}n! zSgs)tO0gcON5}bkoF+T=ZYKLkhCkako6YvRiQx5t$u=N$S;iKk%(j^N$s}fFRP!%U zVf;nNZK?giq@U5P5lgt7^LW14QYa3K@YI z*~v8l(%A`-bu-Y6ndVAW?Y?DlTk}+o0Z)xCK=%Hr3gWgvwP*LFM^an)0bgV<$OpvM*KQIV?fQkSZ-9 zv+bYwN}x!HMv(-fM zPZmu!eAx9w>?ir_bX3B>k$=qeyR2n)&ALoN5~X}b+;uZ$XZrqW(07xaknR5h3gkGD zQ~Q5@jKUgCt^(11@Acn?f>2F@T(6k_sXs5~l@Qp#;71@7~G8$9GLtjXER)#`FG#L{cgwYr^ldKZTfWw!}}axnL|R z9T>&3MeFmap`y31s>n=jg^#2cGq>1WgGEu24*}EMAadbe3OA?OStX<|vhB_GF&H!A zU2WwV?f#H@w!#Dnep7!IKA^pZYBB+QzZ87-KA!i9Ni$bs$pZ>U7oZU!d3rfn5Ul~J zU^({rhne+Bu2yy*)Oj}7Mxd>$=HV7W1CPywVO%t+bjM)OaB8GBsxDQkCC7Zo9TxCM zvr++hq^*dvhT;1(08mQlVMsKqg7E#QcOYTnk$Ue3i&(1??{Lx<^2fzbEGI;@(pIq8 z^_gBCf#5e*HmEkug_MX5Vw%sif!q0F2A5X(cFeRzu+w?BQhZf)@Yx%!PUm%hI$<_~ z#qi9CkKxuj{m}1pWt*M0f+Ln~ZqTWiiWS#&{Y)=RK=$~6uvsiy!W7Cn-s>JelsZg% zQwalUK1u-OTNOkf_H!%W8eH%CYZpvb7{Hd2sbI>^Fm6{4Xhmfq%oiie0!k7yS#x1I zTj=S^0x{$}RAcOUdyfe;Nv%7ZtQ$2ij%7>rzQoJw=f(bLTL*mzX4^-SBBwt9MJ~mt zDo`L6)c4>OqS?V8&G=7k8QptvuG1^iGP z_Ohyaq44DZg+7tJ@(@^rt=Zn+t*mdhqkorSH@Znpvh>mo|? z+G2Rc-_`u9I`sBwsr>=YKT!KC6d(MNiiuvz&0{{Pg04m~tD}~+iAbk&$q=w^jX1lJ zU2eOl&f?yTtn5p@*pOyBW!%HW9~Qla5b{w)#=S15Dq z1MY@kW>cxmnH4Lwub4y)(yiG%iAh|pMjI)5l{yK<=>qsw)Ua0WND}a?E#Py~0k@M1 zu%FI)g0*$nPgeZ0*k7ZX+Sh~qAK}9R`-dTP&r3t8FFDRJJ{tWck3G^1TkcF~ov$qO zv9*RPUs&=R$a;w#OPv0s0tPhmz)cLhHa`O_*dfhVTg&WV|SwmbYEoCcTTq+E+ugTK^tXP;d-S*(%$v>v~J-A}1* zVCqWit$A@myvDvwap26!bY4~lze}`t9RhxC_SL}&JNURvuv4Gg8g@|W?Ty0WOu1Wl z*s#Ha5<^FhC?D|GMA_iMa<4bLb=cnboBpt6D_Kv{Tlv8TEgqK+PlRo`0@ynF%g5VG zl!xnD;EECD6{ALtEK3YNtwp;LgTL+Dq2pS7R9ZT;#k2D9BL)o^K5F=&@J)!7@JVPS zNikRjv+)5B+onw9RPKKsK5|6(D(rZ`7(yA+I?#mqzrPL~bS5DqgX~Su$zNgX5EMlp z1o8VpSK&*ARJV9&?<^0V24D^y*|MR9GkhGh6r#e1;YcG#mA8D@tZDFl;`Fk?16wX+ z8w);Q*vLU=Cc93et_7tIAXuX%2trTmPX~lK6ag;6$qXzj8#un@SAl6UXrBZ|1T|n+ z?pHo-*l^nmmn$Dp_z(8R;Gp*qnpA2HA36(K2xEZU)`+Kk{P4ey9H#s0gRXbbx<#8* zJfA+W{PY$LhK?NY*NW28!DX%NPTmbJD;t?yfnem6kMy-DB4wR|R-y^FcLq4BITdOc zI4lGq#6~I?2p__p!sa_VLzh=ju<*fRz`cpFlWGsfn$aa;hJ}G zet!B^MGk}!BTow+CM}|vN1GWeX$Nx*zD+Y-VjB%jml#d`uK8==i1GS_&irRGoDR0; zP7J4sK^8U)pCijpW!`Fvl{5K+fTK}mBL@vGw|6`9#e~6SBh?Dar*D6y!@rIkH`rbv zO+HxCM9b0f*NUOTSRnhc1|B)$)DacoJ=CKHCQesho$O2#gU4C0=vn(;FX%4hXMV$G zzlmrp8#wk7ZB2fQpmcwpOAFN>m$B(SA!}btl*r(mi)jb)+zm^*)p{Su2 zx5<7qQt~owD4<0US^22JgH8o=gGbl}VCF-Ij~ZqHqnk8yHQiaF6j(w_#Rz+3>nC?_ zjv6_%eB=oI04}cO9zN8fm5Va%M`!vn3#*kn0e{AOr#vO`wAmL7rH#sdRp)?JK6qf+ zAiMNz1OEzcXx0CV=7Wiqvvj+UR@lFo8xX_4_f?yU;krKD?wmd$>bV#a438WWY$%^f z3z+UudtJDO3~0SCjnim{6$+TEpzTKsyK+oB@JfK5;7{!#doG!!axW$Ecxp5kNx-=l*mwaKd=8u`|^Q2zj zU=QM{V><^6QDgKCz@$bnLec}vhJ+hq*id(GIy+!s`Jkag^#x1fb`GBgdll|bHrVzD z%1;|v@z-I4Plfi}wCIyX9$OYfHuk4U*+4fPQKld8NWa5|ju`CPm7hM;GBw)5-Ugj+ zc@RhhSC#@G7kd;4ApR~JJgN+r%_zhiH|7uQ{?%JRcl!r~YJF0%6`mDp$WZ*|0~13BxuZmnei)*jzbX<#hv^|8Ca1wfhmJaR;Ay7?ah@r^ z4h3#jb8sT{ecBV+_{)44Bb*lS>OsRsjMJ-HizWUPM@>CZ&zPt}A!ONR|iz~=NTIa`?T;POEO z-IN%kw4&U0NsBSy;51eYl|Q$1){2T67R(JBS{|H9;TZtxh7TOUIu09u>S<-J ze@+#j*^C-k7O-O)h9fYs#Q0Hz?R*(IBSmLy?1*9U7K-}GG4NVPc@*=^G*#`MQ$;!i z#?B^Lz-AMIYGnAta?&)0%KH38Q@&X!uC-N4X78igIRzLYx%Tat$yAa2Er=DiYc0*-50%&VGG;w9)@MWlr|ZyB=P{ zsyaDI__v0Ci|n}fPLlC%Z!^z_i-SQ{pch zJ{9d4*a)U6;yZhlt-IX5r%$!o)_TbevTu7! z?Vi}zy|c{|BM9W>6LTN6Jah#w2I?m$#E}(?9NfkAd|!T(-*alW0?roQdTeCEJLqUN zH4o;+>)UFon^GPbk)Zz~d=A}+FwZRVdav@jKY*jSO4n*UqV4gJ{qrIH`3QyB(x;Y; zJ$tfiCL>;6wZ&mGZPpsXybWZ%?`H%H+%u7gA};8zVu>bmY)h#mY@nW<#_)PK39I<7iq_mB7_lOaT`*e4{D4)ROM? z5$;6j$(~tN)i`+~MfO|K#=F z*CMgLQ+!LSGlX=Ht!qZh?iS;^~aTweh#l&J2ga9@F1BI703>jJszZRxaA}5p=G zC_iiE1+UZf;ZFnwuhR`q^!V@kHWcQr2jCxO#}`EprXKF!I-*5vphzv$H#=8Kh9t*Y zl~R10r^s24+8fi0x$I>&r=0$s!{Z_^x7a*X2DRRsi}3YiS%ca>K-pT?=34!09xtoa zY+0yGfb7|T@W zNHn9~TekyO==iS#i z9KB}Nghq>yi_2=$5b_|jOKu)93GoyD8(%FZOv)t}K2up^mPCrpGnJ)U%B2L?#3KC& zx@f4Z*Mmh7s`Ezn-`lBtKS@cGd5(O&EHUELhx5_wT0HzbGm|Srtrqx`fC_nrOu1jS z`9&OTK0!R6FLyctliGrs1*28NaVNqluG>s?mCRh013Cp->HC=B-|`(+pAcuiL*McKUcfeuQV?d}rAN z*gW%;QK|1NbGN;4F2{UnV7u>?`KFvNqPAG()QJgLKAXd>X9U`!uR7=p~=7(^gDkW5sNc$9wKs_g+2 zoZv9eaZ|ho1PsRLYA#bs!ROYxXMuFf_Y!8004~?6)*|5yKZGl7ceP6L?qSaqNoE^y ziK737JxaJ8F~`)7hmGW#{UM-P!;^fW)!xKWU?`&UOl*0Urdg~by43w*<{B^Q8lz(ly#aT`F{1k|0BKWhF$3)|6B4Db_N!-0kaBdv>$u0bM@pFT5E|J!kH}Do!J- z@B8~FG}#tf0#BWm@K#6a|H?Q!H&J5sjW@aRD_>WKe`lIagRj}F?dUX{>k@%xld?w3 z08kWOum`2~IxDr`UgoDNq%OUN6aBr(-B(Uqkd18*X$$G&2Bf8>Q6&$52^U@ExkjnNKB!J%LlL-m$ z59WMK`^VA2Ysdjn??>iF?#hsq3ZB-G3!a7Yr{ha_r=&m zCmPyGV>9sExwF4jWg=6fT+Ho>S*S=zW;cy1mVM-#tU67u5?PBUQkBokNkk7ZuiRDfN%|uxsP}C2Rr2fcw>;=j0oraEEu*kCTCc4$Pvoou46j-Tn71ve#$XpcF zT=hbj>0`bcM^O;-Rg5IQ0Z}tNR!d?Qt8xAWrn8#6-=i`{%*ra|ac}cCu6C99dSS;R z)S@EO#Jw9mNM<3@;NzpKFF;H&_xNkabNDpVR;40hA&P_;{BD`2x2wByVOdO zK**u6qWtwsNPWTM3dHLB;;1{-hgf#wIrw7O=Z z)o1P@(w|lNAXllPSCrNK9mYo{AEyLYtLgv*z{x4y2o|37YQ4ha?K;knT6eNpJy9k8 z8>KSc#a;A}hky#z2OvocoUY2>5OOG`5=Q66{BL84! zvo(GtM2#jIg7aj<5{7 zuTzNKz7}D0G1b}B%DrYxDQ&*O5K`~(v_e+Vx-&FQ(D-ZzXSzC)9?d!AcBrjxILb0? z4BGsIS!e2^zcAC-JO2pyGj-YQjEU6v-4vA$0p@Q5XF{>%HWtNd_>(#-5^jRb^mB#^ ztj(C%$Y;g+-V&b}NU3dhtlNy!(SO}Kxp<28(K^e`zackJFg*u^JNKTPZa@?FNnQOq ze=g|kW;=?oc-0jIcQnT}Ok;<*c8rCdbtxz~06-F6)z?+Zb4?<#i|O6KrR6nX^DRpR zb7EjIm6?&f%h;qfd6t~vXP`@~!Je5)1qFChqzq2UJv6=+2 zF6Pw<3Wf2Q`}-an?76W@t`zP_-jw%gUS;GbQu;QL{Sf~>2?M`8L*_FB~x+Q$1vm4TQE~CLdT0EI!$I*sTsO)NrWt2!7z&xV# zyJrtZK0J9um za?PW}ka-Y+1Rl%R#ZH4Bzs}LN?P5L~0rfZuE0A`KnUiq5fceHO0>BKp>5O8{n+*}W zxy@|swZamaRu(NsSqaB9A-@VsZ)1fL)znrxmg%D{p>QzuWvQ+S`8pM)62Yper;m1~ zBSL`B*3sms&WbRwC`Xp>al^GF_J1TCsa}NjpceFsM2-2NV*&q`=<9Q$K*7n7M5JJ< zD^m(}%CX@l?+%L1Do+NZFNEWl=noswC+he+bA10W65o6s85&D)0xC+~Gn(~N3YEJ% z0R_{Za-LCk*Nllp{87NaI_>Ohku-tXpq4CIafoga9NVH zw>#3lBbBr_horr&+>-YBIhM3zM|geDhPLfuUxJZU#J6fflXtk819@moHcc#PjoLo< zsqF)5m!?sh`gqD}2s3>RVV7y{&Vc4bGcS(CKIU&0M|f_tbPV@OK#tmecf~=yG>xrX z%Olh|O~YaRAv+^V)-@5V`Z}uYadJ)vC$(WT^nPttd+xA#h!h*AaI|^Y zz@be;xwAyAnjozy)d1bfA##BEsJsbLydX9NNjdW4F5UsLbg`7bL5}QqE4Yc-)=?(CL>_{M3>|T8&bv6k&C+Pi@1d*)vYyuE%DGxH`jdIy*{jKX}t z&(L>S}0=uyEy8OYWO*onwn z1A?!@;JcrUU=PS*`q+5kZ$W2H|He^G`h$Oq_{=uNkY(d=kq3V!5WY|-}?HyH!-6p5T`=PlyvyngFt>R2Phf>)r`p2q{NM?*2 zWS3(JSA636x^=lTj)Z;n^s{nYpk`oUIpqQI7(oQv*z<@r)!q;B=NN?jsW`RzVFJJw zZ>I4#YknIw!BjXq8Uj5l0Qy0+8z1P#BfdXCXXAAZfleWobf58tq|Z3oCs>ijo|)cJ z*|>1*)UwQ?;Y1afxAI*A7|CMokE+K(P2_acPZA@!BP82fu_zuA^JC+^U}!x(P`QOl z>}hP7Q0N_kWyg>8+@+6*ISWDfh$~zaE%6Fx!cT$ogDjsmPfQ6^+YUsz_hD>mWP1(p z@+#nq9qYYbEt~d4UeC=`NJoNK zeJLS3p-v{%^H5J>=10m@)UfP?t38~tSY7#ZUy%9qghqvu&cs^=$Yul9bGGvheAbh$ z_Kp3@!`sU>(v!CAGO*Q}|E&zW*GgbZP<4uHt0}hU!3tggOx|AW6)lUO>+LngHh9Z5 zxXvqH2=Kkw#e$t?H>ug-JX8K7&&)kuK`J_P<(%X7s!I1hP{>NaPnPMs#mpGr#L2hG z;ZbJ7-*WHzaj=AO7S;1bUaQA$VbwYmRE#O7t0yZHE`sR9fDk|Fpr~u}YrO2s##x4P ze+R^w$B{N*R+#j&Y8bAc*+A(?@<#0;T4El?S-l61ZLA8V?J+1+$Bd`qgQWhTJ z>6G@O`LDdb6<)zyFi~y37|R>DuC-*JSPxO04W!5@=O}jnD>Nir%+unW)aTGkiTP}7 ziCuLVa6wtvLmxz26!v|mc->E7R=0YwUl6u7mIZ;=#S7?lD?P!@YU54*WK#;aJ|Abk zV_3nl^szU{C1@zGua|$Wmv;gO$yggn@iLSPq3kyYxvNJGT0H!;u1cCvv0$W0;fNZZ2)S%iE|2_JytFQ zvz2f20Q({a2R(N&-2=?S8DPd7uOvCd0@X~e#;rHT68%|O1sqS>qWP!r-B)80vgJ=Ha?ugL2v<`(3Xy9lTYcRWsMakIKtAaGo_bhpJj& z-!rMy<6;Li7AOxHUQJe}x7Qr68|ya*Y}Y%EHU^HC(}JVD zN{L_4b#s>GXh$;S4PbdsaI|ZD$J0}&8{%kpc_|$2oiUc9U7ID2cAPkxhGmAgvA6=6 zKlfw*E*@h!+U;2lmZQBe#&Wa=_^cU6`)urPa59}K$UxDZ zS*dL8X-8%c>!FxfZQ`DlbzY;kC0d+ z;`MzzcySVx{KME5??8yT$SfOgy=Dk+UgwkHhU04l?nWRKsj}v0M+<3A)`A#eCho0{J@ZY_H`yh6F2=T7o{_!7q`z`ePn+GQ<5bI)u z(tPs?!B$!4dfgUySx>KL`WH@OlLy z)J)AT(3H%CKVti{2+Ea)KSlJ4`FhM?^@B51+$tI@uz&N&n6_yP_5U}$tBbH{WuyMEPWoLI$Z6uOiY3l z+;4y-KE|88aWQi)%0DA)M>xulSw9hW4`lQc;q7NnsNs;YoOC-%9K>#Z$0|xzx|3rO zU~b_U0y#)X0C-O(XA(vFsn87UU!p-nx)+cMCE2W7jAMUmCD^CD^Ysy?Wv+|X+fbGz zzN_v0$wd}3Pk@;NbzPf4y3IS_T>un$U+U$@2jX+2*a$253anM4(*5RsM5-L(k4n8B z#3;_0L-5ll8F0y4$2BNI1)UD(Q{P{w!(~jf`#JW}##W}u zrb8rTwrmqSQ&Im+yxe_>b}-jY-U5Mf8<@A(FB$l5!p(Ge*Ab7#7_v@lkRImWh5BbQ zns!zs5{1{Og6(Utgj}S#8^>D<(w^y=UHWQ=qJ^ARPfmc1zU8vl^oa9joSrahFZ0+$ zmiKkC86o`hR1{?!Fdc+#tOM)^)E-go?ITv&*DE;1qIe@=3J%3?NiUvE2V2LLs7T3- z4mwvGX+DGneTJBn3B3GpT%DBW*&TG>0PC6H?nj%5I=2I?-LCV;~MZ!D|PT+Yj zk^jd}&8~L>a#&j>F|s-~>I`#QiP@*r{8sL$S29bz?q_=ko{1@=)XbpHH>9;C!lVu+ zE!S$<7n4dO(Rph`OlAXC3b+l6f3B&CqUE<4|_o6q*T z{m9E(!0Hh3cQD@)5QO{>q6fKWM{-cuKqyaJT#RAk7zs$s;4(VsAO9mq_7*68fY#B1 z>clfz;fYhL=WVMV(wDIih)*Bnb)N%1AD+nW367-x=BB6|ge^`lCGoIOWD9y(Cw}`$ z#s!aw`y%^yU%2o#JR}^nZ0k9((kU#x7|*TXO>&MQv|z6>l4f&PYSf7hp#M5;#>4j@ z)$OlXT11nI3i$2=L}??#*7Ij);cGOJSdO@7QI3iAG9Qsy4(F4fP>6Gn_cEJ#-0KTV zne&}u`4)<0SJpZ|_Dkkd%_%T|4p$Id!Yp=87q;r<2Q2SCm~O6w_aXnQ>c=;WG$`EIB@pFE3m@xbf8$R! z`?)UteQMivqT%XEoIN|FeKta!C41T-ym8c;PusZ#B+MmbjJuv<<>F^+_#AA_Gl&?? zmky*iP9jwYMHXw8Epx$!4)vLOPbTf;mh5()m-VNG8<@b3#Yrz#k*4n7kCg|f%F0P- zp=N<1`5v7p`P^Kd32kjeHbBHC-6=#0Axh%ORz`1KqJu#`f)tyBpz;vWKIRRCoz_Go z5b*^5k1X>%Xy|J0Fr_DWIYYeelpu=tWQUg!A+^%iz*` z8^n`+9`<^l;^qCx%YSGNh?@=j;%HbyL9YA?HqG^9CxGSm`7O&(FS{piK^X68R#8Mg zj}x_T>{u`VKJTE}UjEoA987!xbf4-Ab1}QgY){z8KXOs6av2y)rYNH?n}oeQB)kS& zDCD`37;LF%ZWiYe+osYX&vDIY4+dKkjc<`$N#&4E$e3^mX|NSu&&UD!S_N}yN9u*}%Ga${bBzA2x=3Y?EI(bYLG_&-O=#U{{#Ij9IISzxb5n_^su|xJ_1v>d?~tz zN97zYBi>l$91wm|$~kbyllgRfP4r)Rw_;*~{10y|RY{J>|!|D-{sO;Y-2a9p2 z&ECy6O}$u)lUa*7Ly!q#Se#C%cj&lbFIOk*{Gr64oD8H>tCWb@)pmo96!i3yOl~<& zxNm|~ceFUZKH0-`JjBm34oBvqPfosTLZ6@`cck6n)&x(J*sa}UWtN&(-H-2j=m3~&)6 zfD&Tt#2p*vTus1nPti{Z(nqfAm2GwXrQh|umR)aA*Owr_x6$=X45C0?w+mg*(-wMz z(DpXEZixHHZW<4=k7m->QhvtY8(<_Pu&;n2c1p15$?LZ-$x6p@9km}|V%dfOqn%-5 zL@)0dCU!KNb+x3C$Huh9Rw8k&9osgXpNas80=`uI?J;hit-W7B9Z#hZd^3S_k1J-_ zJfs+4zb7=U#QP}`RUFul<1hva=!J+Qdvvtkm8w?SuGE^dv&gZwkfv_N0vs}!=T(2f zfvDPmMUdEMJwJULRB>Gj;e9J4uT>roIu?~@w% zUJehNmw?_A>7sQF;eHypdn$uJYq`xLJsCjUO?P$j8*;+zu(o7xMmvmnGC$)#?Dl2G zupH{u3_>7#o4Uyndz&Q}99pwHWKk3S69?`U#3`yw>_)H7{=R&ItBZ6;#NFL=G3WiC z$Z~xQn|+32E=u^(5ZS_kM_sDh(SfsYYMeK*5Ru4yt^o6C6C*{Le8VCC5^?^$LFD<9 zBfoUc!%Y?(_VDGCsT~4@W@APZZS+8uh4fq3s=FtOh`WIs`t*W82ise&xkGb7LL(;> z+T;&>e!Y>M9#Wm$IaR=E-jW*cf7Zw?l~1B>-r9s?{YsSK2-Gjr8If(C?jdho%@DX6@)C58HEdaC1H_n!7MX2i2!R?N&B+Q zrsS*u)|aC;hXsPzf`9+1F%O)9W9wY}LkRjqft2HO?cOOjhMuXU|OWR=@$8oC7yvfM?jd$a zz;8G11fFJ%L^Xzu#R;qyOB7Z24547~UJeJ2AIE&_+hD%c&6#hhWxnWDj`_;;iD@QA z6c}8$IOMwYYToi9|A)yxJC@VXGD)dSaD9Pd9Ts3{n@d#K+%f|RK@(Q$=j)5 zZ2KI4RChD39z8Ux+T!9Wi;M2&P2pnQq+%62hAzBPzuK|B&Ntf#4ePG1H;`=Nw?QmLNX;a(LW;^9TM;2c*&nRbAmQ1gdQ2<3X}gi#lt-><$1ppp43PIJX^&)9HkC< z;#4u;AD1vpjCf3clwgQE=?XdU*eLz5nW+`iyaTF?*!N7~r(K<37k2(G@A9+%|G`mHa>Eq6WZE>3|@)MX|&3&a%)FMjX|Cx%%F1DuXmdBlQGPw8(~2Kp-KzZI z7q0?3F@D+RzPQfOKeOadj*XW_MoRh%TTOvjY^zJ-z)Guq&Bt6?8u^1-^#fr6di$m? z$boSRKI$WSE)k(Z^xGyK(Vx%+ zp(h&=5X`YERCotwXQBu@x*4taFKV?3LyRD}BIcVU!X~%H1VQ>zKg?6nPiyq?e#>`x zUO|YPOMy(4pw5aa9OgrqD{912-K@DB_Tz7RmX`{OxW@C%_9Rm$}qNgnm>d5xxL32iH>Q@VXfPg-*|DN}pJR=Hh>XN3fMo%w3b+3*ui)YF|75 zBHEJ^J1CnEM`V?*vw;fFPSUBlnH1)I?Zv}Vsh*ei`~d7ATU+Hj!qWnar)MmlmZan9 z##ZsP0JHO6*uE9Dk@|^`j%PB3r`>x2p3aAg-Sq;gcv@%i^x6*a)H#LFUI%ZY!YPz+ zx5PFmU^ehn$Cak$mP7~9!@YHrk`p-gAX$s6g1?JI;;LuM6=F4m!nAC?Cb@Xe^rarue zhen$@b-?3V0phVhI!SFfv$e&k4IYN@Uf0Ppci8t zcwt{3@Q_l&CrJJ>^M;{PjKaQzPFx@1q5~q(PE+XXbKIgl7*>``NqCY$RQZTNAM*$P zz+KeH#V7T8A2a=`k+6E1%L>rGy5I&zclsMwWA`(EiCm30D%i#;rf>hE0K2ec~`jRv|*V1IpIF+>KCIJ5=>nM z**YN?bkqt^W+J2}3{;$ZN0|*>5@W1-1q6YK-P{aqE8@=nL`SFMN?z+=6a@tP0*d9 zF->&^iqZmVMKTLp3tL)V0Uh(<%lHGV5wE3qK=KpCCx@^M>&g_oQR3y4n3L70R}vL@Pibwb1quY$??vxMbe^)K0+6>7Z_N%`FP0J63AB!e6-hyaWl* zFhWoixAF*}bGfpC=S#{O{l}7o4mIx)w;~JP3mHPYn%8<+@uLwl59;m! zIwRNukKpk<`C_>4rdzp#V^+MFT%T zVvF{d2+>D0W9!(>lpRDSh%>akHz=BWCT>Pum%j^mSDvt7h;VI0>P4*oK+qOIe_ctT7niSLkVW ztIrak>t(PxL;U7kjG{IrXjp*ktr?<;;~m`&Phqvo^}@edEA{!EC@!9vGYM<3GMlai z`@?y#juDkF){mu8y4Y|H_i}K-cWMV`!y`h$dU%Q)^R%eS{JO>*E%k4R14)*~0M=^4T$e zBq$TT<6wQ#nF!>(UBi#(gRs* zkhknAuS}92DFk6wu}{(}K34<9kulR>1Mi0`DM4Usk$GdBIvSyhzCX~LLi?s5a!@y~ zkQIJ?92Mi-hll93XEtSU2hhp>B~AGEs|cV5@eAZ8Y@~v@71STdEOB0};Qt*|NLU)pA2msOdX|+^ zPjC1=&C@7%20cCBqNf*vo?c1ssnPFgh2K-1dRh?lv?}Q7*noh3;Ka993s}R`_wVUW zjAK)F?<1L+=90-ZQ2Uk)AzXoW=54qyLD4WPPU2TGslJHKdaC#ppJD@6-LlsexXJ0i ziH)rTdWNe=Xm7$e*4#V1jtWJCC^Tw%)FP#w;d9D&;0N?U#yJOA%=GaO!@^(&YvFI5 zve~dIyE1>W|N2;-1ufo&QT0ZAw6I-?mdQ)=KHFJ9TniB5%$LHt;RNPFH2hIPLv2ZR5 z;N%Di;jHF9C><6}qiZPRn`5SD!h95ue3ARw79R-NtT#EeH9|6Q(lXF!{ z1t|;wR08gIATYF)e#xc)!0wAc3y6e;J7aKv zBe=Z3mP0#OZ;@hI7KJGr`DpCF?P?29n^c7lA z3A8k~n*KXd=Z%BUi93jyt$iL^N4iDjSECC^YpST z{UzZiZgY>{ET&4B3ri{W zLrIXk6ib4haZV;G?mGzAmQ!qyST?hg$RSB@?9<2*%?7AOliMfT{1vG{ii8^iexEu< zbufm~l5$W&KA2Rk^H<>kIuQ=#^j2^f;s^(&esjMu4UQt=r`pN}50122Ga;HmsDebV z-WE*B0{<3>20D=>8r0BP77nKCE4QE>air+txfiL3kKctR2urt*VBFis;*x%ePjvxm>l*oRjLq3~6P)Tgrzf?`SQ9FeXl?=qCc)v|UJMwUj> z%boc#BDF%h?Ha7l2-cU9+b<2)#SYfR&0$UBUct!CD8AhL zvDVr9CszavyB=A>ff=v4&sr4q2lE1ffTGn^NbhK5=FH?hkkZ-e#dc)L-oa&%keYcC zTJB?3U=fz&y{4Re-V5+{gz8_Gsh^AzIEn63R6w*?CB{nWk?NP!yUNUxVReu!+$rH` z_q9qe_6N)K@c$-5`*w;%UKZM)ZWHZyIkXe%nR;mK962xbNo4CJOm@3NB8`Hzp-out zaj@3y4y^S)tebb2oL?2JPo%^8^OTA~Qwhuv?>(1;)G_16HkmQuWdBo`v6Ds4Qe6Gr zRPy>3R%}n+sX;hRI(meb#gpQt4lnQe=9=3kqv+mMg*oK~j;hdbrL$`jjMl4I zJK5~v5`uaFyCE=0$K3Utd+Em+o2(*c{sH z_->D>Ozox(hq1M3B72c?_I8Zs>ndYe(pH9X(3;J7=v;y6>)IU^eU)xix{hSXUa}z~ zZOo{mEOurSww8Er!bJ8_c0!{yliY)dpqqI&apRB7CNst%0M4kQLVISR|1UwZu?zjL zoHgej+1qAdU9b|*y#xS@n$D{7H`%%JPCVI6;@M-H>`39CvJuwibEzl%Oa66m%_SUG zs`!PIZ4nlnVOs)0sL{7svW%?>Lb7LFL@9{eqix4Ec#)4pwfGn>ZZ?HF=jOWKZ*ozz zuyiFQ5D}dy^2Hv2q|R$aa&m-oo;K^P?cA)Fw7pq>Op(Bn|EJDbt5;nZgjI$@-s=ee zqG{quts~NW#r;y^<*#vB6!M0778h76@`hgi0n<=}rHFL-LN;}K(b0U0F(7DI#p~}c zXhpDs;rB7yI$%~>P$3-<4Q(aTxul|RIw+EEfr1O>lR~4} zo?F=nDr7~(h^i?IKR07)LN7oRbIRgNwkE++g5`3Fr$aDma)MEcoD~X2vW0)0)2f6e z;mX{GHzTEscF9(_fM2jv?rfeXCtq$5;>N9%xR8A-=Cc*M=6-CqxA7iGD!hXL`JK8R zybRd>h6P%9n$M+i`n|f`UTJNMb|~TR-K>p^vvGHF3aE3Z+4wa1Xp8yF zB6L*_+`znsOe7?IQI_tQ+6vc%__NJ)%BZqH&Xxqhng;Ipb3JI`TC*ty{wBBgE+a;sMaDBm41v)?$yR71x3Yg6iA97ar1O>~S|!0nPWGfRj> z*vmXi304`!uOneVYyL3x8QZbsj|)Zjw}~Q|kV$W`$2iq5B7K|L;~!6=<=<__Cq&&E zT9nG^o0fNTk2gaLDpv|xa2uMZsnj7h{2n#rq(NMy^u09-iby)L1IKmXPoygS8N|I_ zgKjQta>bd&X2N3et#aEzO^5-4cE=Jnc!tvZ7AY3vWt0+sO9hCh2uu^yUQQ8T=)%^9XG_>0LY{r2xRrJd!kD>S9L z_D*R7Z%33QZJqw9A&T(~KRhUg* z?Z>8L?c0Ue^ahy#6q~LD3&o~O=YJyuxZi;eF??JXEk*gB*udaNP!k|h%W(OoAqUBW zz~QCbRE=*O*4$0e@7>Ic!-3;#8w6;(Rn&b-x7M(*jMp+EH_v$3+tiP6wgZwKWMZ)y z4+6kB%)g@cH)GbCb)y(l!SxDUTu`CFC{%(uoeKyZ?5HbP8b@Im4Qp`$F9PjymF-%p zyJS(w*ZL8i%>l?Y*N;?&!_`=|Wy0{muo3aXkP-`W%;E^0r{g9JYdqZ4;vQC}27TFH zma6ipCKDc&&1Ess;rSEOova@Ol(8sD8Hzf#v3bpenqHFRbQs$}JH-P!!NrdUtZ7F) zU|sr_*`4q}8*um{m#Rv>xugu|cJ0H|h$+%gbS5E{a`2*!rR7gBU`{Mq)IvK-@+dpZ<7H9_vV} zOUetyr1FI{{Sgkmcc`du=04l~!{#&91n3Li*A+zO%hlbgOAt}N^-K#+B)pfZdC z8*k2r9NHVlD643W4UWR3aW&>~?ShX8UiTvxk+dmL&!|r*abzb#7^Sx7m|YEF6j@R9T z_FDoGAeq%pEKwK~_-ZUO&4BQ6EX9EEMgHHxfbf}erOzMVP6NW1z}J=mp_)u@_pXHj z;oP=gU6g#4Za|oxe3fpIxUB70S0rDhtF^O(SD{+_MSg4gTYKc@-PJ0r=HO~m-AF}e zg-+Q}&b!8IV`Fg6BBUTxY<-0SO`Q7Jz3j!B=Ik<#mD&p5o;*jUpSMyf+BLUj>{y|g zlSItFJ9X>(gc!4p3YvbnHkIRdCrWmgPlyJi<(z| z79nQkE+XcZBw|kZp3>YdBc@J>S+R?VsY@c}x4Vm&_F0lcQLd#xrqIriKgG=Pg;v?B zqi}HZ^DpF7>z(Oi2UK&Lkn`d$BImXwa(tzF*SAyqkb@e02d*(G)n`$i>c3a1UJN8c z_2%*IQmScA+C`hFPP4(>OLvPrK(Eb%$hBny``ZaXnW|# zf}vm8<3l%T==!#YUKR}fQoDzavWME_9GdPs8gpseV?G<~`cyeO9?H?H0ZC4Z%k$;+ zjGK)khzz=clr5hNsVZG(^T;r?<*{rYrH@I(x=$9crZKd|hAUAj!5;CKZ1Zs*JERaZM$JeBLG^w;$#Sl9l9cA)o%fC8#pIdRs`|q0tO6N33ZvLQ zh&nSk{YrR{;w!Locpd5PXDC0{oY5>M7WM-lqJE9c{hPRBO#EmD*Uxo6#!sy(=7meG zlJy>?CndGY>rP3%FJ|HWU%)tU(yO@KuJMr5Nd&P3BfV2kC&pjujg8%rFlw7C|U7MDoa?iz3YrB30M=5Rl_ata>tV`=zxW^Hu5A|L*R&3&h> zae^%%3~US`{s5@bG+6?pLY8tjxjlV=1;ZKJnc$lKY=U)T{XDt;0YcuS@;3I9Y;L53 zA>^1vU7aIt=dMXr-}A=!*QADh&(F1`lq;|X#<|imc6hlfAOGYS5@UDKGT&c*yah7) zH&W1rqx;renHjkkde*5(guw!9_{B5rKABx z`$HyFjmW{g(Kw2`M6r2yi=E;{t|PHzR5Fv%MQcq=sR`EGudOwSy%+4oC7m*(6U|1( znPe^}iNpRKR+g{yeiXLsmKm*rtj>WKReC3yuQ<9z)^}h7)$^AL!m4CTeqHHr_e!r{ z_-$|Z?Hl&ner6uu>Kpev*Ua~SbC_?X`O3~c`F9nGNqXK0->foU`#oOm z_xOQ&{71jX6g=8g<;c(dJ0-%g9Uafola#I}xv$729ft*s7yJe)(&Phrdx3pP@?f$@VwBNuA69TUBveeVzts z7+C9|`Y-NHGzW-R{3mQJ{3~V-O8-E`S-WH}qUE4^DkGJeym%J}?Enh3r}h37jk_Th zL?_e!ygV&kC$o)wN%y;+-+AWCkrETKxP`Kb-(Ah;Q~@}I-*0ivlr6Bs)1Kzu$+}My z3CspQe(g~}pc4PmlnLxW`IqRC)4WT8?ed$E2$5e_hVi7B_#1(hZo8^X58Op%dMu|q zFQ*{2m=B-t!*z=#@IkJr#{67qr_K9=F0p(Eh04RFt>GvX z5&%%g0M4&lLe<8sEv_U^ z3WEMk`0-&~7og|b2^>$jE7nyivy~fbjvn3DKANxvM*CBPAk5Gb#l|NVP$)68dTVW zL${a)3UkPJRPeA9d+M=?LBYdZUE)QA22VuPvAkl)-VsY9JM@kNhf+j_xJ|90@y#+!SgMok~W?BCh6~2)EKT?lt zpTdZ|LnW5za)P*j+eX;(b6V!>Mz8)c#2TUyl<19@8>Ofo2j^*e_8bhT7kB=?*NyR~ zpIN9|z6e<+Yo`ZSkG`$KkVrWw7mh*}1(>OnVn@S_vQpDj{3YqPf%{8D+1Tb?? zqt`&oo+RPZ?Yk2Sx!>h#PpM&6lDcg|v3b!0?q0FuqykM=^1_D`O3h_nJ^zxoLtZ5p zO;Y%zD5%7eEYz+5T~zR5 z(&i2hZvl6yVpZPZW)YebI6|yJFP&1KYy`n~H3_>zR z>-mVh=_e`6k1M#8OI1oFoHtNSZy(BK_Kz(>@FyaHge#goYaf@Q(Ud4U;2D1Erp&{s zg;zxVT`rfSl7Lt0#imfxXM!K-{xQMdc~S#IY~KwRIh%#aHZN0L*BUMwa;f=5*{)j& zL+B;_@nWTxZ>@?@n<^VQj7mX#;bClu97|6gwXg}b$>W?Z;qTX|Tax;Bj(G>Q8GFbx zin;i5yw&pPh1*MoB=d3vQd-SQb(ddwRiwfC*KZ`I-=Ut5biV;h1Yh@%%&(hJD=@Ya zO(dW2*N~moZ6OJKL6TN4hT{qc4QK22YdEc(9nJQ;sFDS{m0X=2kBLzfap5&1W|}RjWo_N4_EN^L*8D-+YfpBeWGbc$1ioRPX)Eq(Xk4z?I}XW&Q8fFk~TgX zFa6#kvpB#dT<41n-T9ykb6A}x*tm8B-a-w#LtsM4DN=RL;kbtDn6IGM&NrC^EBYlj z8T-KjP}=lKO_~SZ2ru$$82W8&T9AL4uDk9P)14Q#cho3)rlsv$S0CBFRk^Z81K1H+ zxv#2_+CH4X2yJsAN4%!N_G?URuEI9$U%%!WxGENOVQKF0APeZ{{;qF2go5ufvF|2dk!`P3d}`y>3iQ(-PFU4_QhQL0OP zsYZ8AZkfc$??vjo?(4i>r!buiE@gH{#^ap!>Svl1m>MEUdPz+FS~dBna49Y`S&Kw# znOPKY7L!&FByc21a_$6G@uLBlf!Xm#G5<2&SzJ1u9RmSb$ks6y=Nkgxn@6@N#>FYe zA%|aNBQ$i%n;snU2N~Is32kfbod3V-*ZlK0*Kmn{?9y*kDTmxU)NrH?X}l+DRmR?`KjX}&ij4O7n)5O3jZwW z_haeJ3{vl3Yg~1U2r(%xg=eolMR!TG_;^J#Sy?h0`O)aIfqj}$^cX7HMwefz{ExAe6eWQXxK@_}8X6{cAK*$$6d(CiY<;qNHqN zCrD-w{lBOk=b2>U*hk2?s=5*;juXwvFiMy2R5;^k6xHXAxa=GeV}Ft^Xtt~! zw5S0?LPTz;v(Y9sctv&4(#Q#&ZD((w6tkBo;h5FnPV01*k3dVbiX>}tzkhs8vG~}< z?c62!_BaAt;rg*d*r{pikZ&TScQ}6iR~bLJQ0?fjPC~I(!&?wYAG2-@$QLl+NjQRr zVgGStg>YmQsOtxA6f_Sp>x3h#*pr9aRr7Cux9T$X@w>qBR?yRD=%L*(^i&QR`p45V zYs3eM^6b%(T?W)!vh4c!SG^PTu{GDP&tJOFC62k$qri4~f!NJuZd2DoWO|wq?6Kk0wzzFBA(<)Llx;RR;+Sdf*Xw3yMX{Mfif3L!uVPzYTB;bM*TPa9 zeyn#AS{1pfzKQQrp?4Cxv0Cr&SVlF;2M7~dS!dNi&0Z5s9A#ktWvC3!g#Jv!RN@6TVR)AvldgLgP?nhPJBNVfY(3?H8U+qg3}e z#Ic4zYK7|Kdg#7L^k?`zQ(&fGh^yQFiE-T0dL!6c3;kN3;6|icWahyXrUE>M+=jNO z`UPpQljYdoOhnA?(a1mLvm%7_A7*Q-IxBr!AxfUBawFeCS{co(Hyh5>`-xrq$TUX@ zEdNuz!D~5iDmB~30Q6~Oq&rjZ(0hv*`O!0R+wxnKW}FI~){@()&lY5kdYXCoPNY|)BWY`VOidZmGMK>jzx_&3U2EIY@g{5Z?5!6KOXOGcNtV;Ir~wo zF?FRA&9u?1XFFLJ{839&S4=aPj%Iha#iv)Fy5fl_+XSKg=y9QXTu+ZaKx8rSPOKJ) z5X&T1&%bpEe+w_!#d)0@-5&l7)giBIwq)IzFhYfr0Np}5EGq#)uo&_)OVLQk!}t6c zct>hIxj^7)1b0~oH~4hBIxBv-cr=)eRYRdo$stZnYU(y6GTNe5ioEv_Hln_QN4_6Z zc(U6#2npdU%8+vs>OYt5ZBu=xJQCL^iP9S*Y?NYz9O*S-qy;3V2dWP&1lMjI=R2Q= zm*aEUz8H2YDgQz-Y#~^C(J-L24>naS^}Ail!1i~?OB9v$fhe}Q8BHgqwq{RE$Ei05 zG*5wOYRwJ9iuId+?Q8aBEJ?H>Pmh+}fM|O!D;mKl*USAAUE}P>w2>DC>4w93Pj2te zd&}qppSM|B6|mN?5$&90a156d?ak`%uHf=}xTrFa ztL=_3acy?za9>9l`Uk4!CP~%S23tN?Rsey-6Z3mA?u z>vJF%&!d$LcSqWv?a(zLQv(5Kw9r)}mB-BmYzfFnu31L#1xJ)vS(`)&aLcAZL`iQ( zPUM#M3NbdMiFtSNQ$qoYkko#~v~!X!l`3osb0D;d_W!*KuI9@}`e_Z8ic?I^-WHOA zH?g1Ss36$);cRIEb3cLwhaaW-Vs@RY$A9Dq@h;5$vD_wSuE1a6j9==Q?#s**3cm~r zzrnScJI6G#zEws~wb{dkh1e_XZGoHf($Q0xS4ODCSEWg)RUJvj5iFS`*CdeST8Ppq zyi|ud4e+aZMUjJ&4&Sx;b`JBt!W;tX%0s$Yh_3*R7XGzb&czS`>AcEv3O=nZbP z_lNJ#is_*~!u_#-kb%=Z7lpZi!h5izpdup7ab9sABp-?Vk9>)I5t6h`RgwRO`HFHO zsVd^0t;n}Knj0cuR0)5OCYL{WvXsEQaPqIn(v|l;vvYK#*9p#~u`2Q>?!_pTio~L9 zMTTXEzB4oO6MZPry(bCiU74k@HIY6-QdALFWk*gxPIAvsw z>#PNg5N>7zKC-SQz$o9rNMLa=qM`mMZ5u|8IpR#dlds2KzIp3B%d`W?4j}vGLm2?J zMY?z(`R~34G(7rKNT$Zgxa*sQfyT_Z=OD@qXR3%R`t zyU34x0PwgNhfu*|V*rmk1&>dLSgVaT;jzfU>)NqodecyC&8O6(~ zj#?~$k=34=h2z*ymsLXygD=YxYd}IYy|j5gN@GAR_e2I7j|m$0gwP0I-S*|%LT0ed z0p|Gw1&r8X9^O7!N<&O2*GW(jU{lf&iN?nB2Fjc359Sv1*K=)46>zb7}br#tq z4o!vCa3aW;{9)dZW+#7WjTfJF*82bh#3e)Znp6f{pS@sfxPqD0rgG5APm3!{%l%1< ztEP?Cb^h}h?+*8F{3aN2aNtH8TY(sVmP0PJ5}MBu-#Av=e-|>(qs*Em__X=cZid$%IB?Fzg zP(~qkjmubL3&B~NK<9!B6f(;r(8m2^bBMThSdSKFEsMILr3-Rsv#7A&rTP$Lj}9-_ z)!lr)dfPcRhC<|6pMPG^E#RMniM2QL@SXR~h7xD^8oBJTd`nN_N#9Xnkd^$x^k6dYVovDWoS)@q_L`!S;Co=O6>mWz z(V#_;7CruPX6qPs@sFGK_VE_dnom{F=EkuIri^(U{?U(3r++iB&@_v%(l`>y|I_4Y zy^!^orzX_7*GWseH2d|j^uRDJJ_#jCQ)RQ6qyx6rtpulYz)I}oW@J6~^TSoGJNYY} zM-kTd&85dK3o>ZFz)Z{3cQM^96IKjAgixMdFqKZa+)3u~6+7@I_ zjt~5rpK&=M5M%sfeNM{Zx7gwk)(JT9W=<;{c$aLK7Jcp?WzlE7(8q1#p7uVu$OGoV zA-p;;GTdk37;pbvhjf?3J-&=)EYsDSSx&TJ0mQ7&^+gj&;JJWDy)^_(9J)Rj zC9yEHnWTN33U4KYT_22WeH%maIESn1<@X$))ZKYLTs|EET>2n?c`WH*#aHxFp8vYJ zC~=+hgfTwhyC@`aH&{ISgA-W9i$QFX%#G%)8qGF!S@n8wJ~Nt&9c@%rojbPi+V|K_ z{$vH`g!SXWa$lAeqpx>OR%8{qa~5y1);2jc=n1uIu%8?GB8)sL+SiMI1mDOkxXd?Y zp_TqHs2@~*p2{7u7iM~k+*mJRBFSIZGY`088Isr&esQ>Boi!UpF%nSdixa{0ES^!( z%>Q%)#an$z&Oc;fnVC&>T*0A)wLMOd@2y^s{)6ugQd);@yna8k0 zvRdPdiSQ$_+9nLWnNqG%0f4L^qVrk12K_hYzS@S#wFcdA%y6-Eml4=3k4Z8wM*sHG^fR1hh$M+}V+-B!J#Z z?da(ap3}lzSOleRu?;6Bp#Q_zJ&H?To-TW$>k;WWUrhvuNxqtL0!7rB<1)6^13f=M zZfTGdw>qOci~n$f>=F>&(km~?AnvMi_wr7{Lf_e;=LdLIz?=i>8WtV|;TGofK=j%f zb53Pu@(z05D_DgPZi1eE_C2@S{#(KNna*+AYV1OB|8HMoM!~VC7Uz<5f zGyR`tCt!$!_q?E!YlBo+jmlm9pRkk9p=T&K74gz9IjGoWo~Oa@4O|4it%f}`;_Vu- zy2Xem22-68XQhH;H$6m#%UFjc`8`<1jCAu#9P8qh?yyk7!=%BUlC`K^e|}jw`l{;f0PShw^={#wjQEdogbM8zP8i?v_W%eoXhXV0Z4CxR>p@ zg4ol5HQRjZ!3xF>gP8KRVA2ZHq5Pc~=;Y9%~-w0t@Gpn=BumliD>{ADC}9V?VIt_C(;m5&+jflzFDc0k@}l zKdsfFJfJDNGubv4a25mVUZUjz#n^p9`J1LAPh+PnI&wQ3YU#++ zB2}xfbKVcoKf(fL$k)rP9M8M@#F4IxM-1M69g>g0yHuseY;*qvcZQo&k=SYOQa;_H zPqoLH@}W}tE#RKpNalZh)Ep|A>z^>5u`3|>T}CFd+~#rh`vZns2>))^Hfe8bTk6*4 zi0+H-+;lP!0Suj>LJm{z!f}KpA8eK)mT8L=IJ)Ji6u{Iu{OV-t?u=%a?mT|#mnY8f znT*ue!U{LTo+OX;DL~3Q?tpHEl^NU$Ysc;1t?)2VxAeXtG{ z{HSn9Wbby!saa?i_jgE_u-4vA_wh#T3HAGw_42B!bHw^0tVLXDErAnym})HQ$S02a z(vNfVw~TCkKp|{=Pi6E*+BOXH8y zfb^)LIMckF24D3luM`Wt+wleHXp899Iw!$WS>gD_Q;`~(ag9J;x+M_uo{@RZDg57QfK)Z z7?~vPk0uM*D@mBom5uk!6N}CBX*HgsO<)%S1I7J47XKE$j&S00f(lnMUBBh+95*o4h)DZ0>-68+$n-vLY9v@(otu|lJf zo^aZY`zQJ;qE$+e_t1nI;u!RI;=nkB9zynGLG)UhtP2~Fq3oZM$|~F*MF0NPL6n0U zDy_)tb%%Fo6#vXz8|7UlV7Tctw7oc4K_Y%zhF4@d&MLb(iy1r*8i2u1^jsZ>Vc5TN z%Wp+vp5Yy97GYa@8o7-4i283rt<|~zoa^Bw)SN$&Y~-c%I`*zn2Gua89#E#(JVdDC zQ_UH5UY{wg43vKYX?kol;Jki91G6_L0q37%V)Ltiao zl2_a25Z`>g-exXgoc&d^_xa`$Q>KZVskjg3nEH%bTe=!R{=z#9Cyf3a1;lpUBEQae z3w)3b&M^-v%=#i+_Sofy2*wwBmAvJFE;4VhmV{ys4&aAfC{eZa4((l3{qY$E4EKu}=EqRjR#>J=5wrAc-%9*90h@D3x&o(Vn`aD0YKjykv1vj; zc@Ih0{0LotSzbqQILy~3bx<6YEVFo|3^ksBMiA!pBGUUEWwyk${g80tDqP;43A}^R zt_=cPjfmDt-Dh-g2-r-b0C7e$I>3h35Z=L;MwMlp1fBdB?x5Q+Qu>kT)eGHKSYW;w zW}P8(%`L($X7EZC^FrY4dY;w2hzaHpkWkU(`2|{(5Yq$M?$E9{T6B)jP&O~4SSj-pyiv7$ZPu> zzCAN8)|ZoTFTrgz%mxkf+juNb1=T~wkE$tZ4)Mb!UXDC2+~6N#q-f5L0jlnRyTlrg zC|`D22Gw#2`p8WGP11hzW50Pz$B5ZNuh&WTC{vP$)B0!Fg8GRu$4Ac&xt9--33r!V z?g*Hph3%WM*eJK!qj|Xu-6YeLT6s8ZrxYxCFjp4QC0t7L{D0?DjOwI>v>PD8a=Gb0 zQr=)Ms$9$}Y~5@1uUT7OYbjeov1>|i*ZRFA{4^^F@`ZhjTqeH37+Z}F6x&GLXU}jP z6qmUZoFymRCZ${ejlRHnQYLTQ#SrJML{T?9T zhFq=z-$RgU`9+`Pg7Yo3a&YT`S*o_E)ozd!e8pHB)J=L-mWeO}f8hYS7Kx zj9fxJ{vha)=CVEGBjj=ydb=ZFkV?GcFp!CXWJPjdyrarFVC|M2`)K%)b8K(9=2~%G z+s0Kpj`%(}V*1HN-GP~)80tCrX89#-@Jr()6}kZ$FQdO-VZA;|Zky1?z-G`TdGMDh zS9y2{1j1}1wSb*|%K1EKP#rE-SNCUOvO_z)EOSG8=_J@9BKQd3iQM9N=lHf=&bD>U z&b-Xt{1+MoX3Vy$*)txfyfrRzxNjW1Oo1^P#>U{wxaa1;q$;i53K--o_)T;^ZiXV~ zvh*--hJR*tTPoqwE=L<+>C|>E^?wF1Gr-0x)4f9xjnP5vLlQ^Sw6dWs240x2_3$*0+>R^p!C0 zw^Q7dBJ1CCgfM@a!Sor=GnV;cVXrSC2Of@S4a!4$xr(mT$VEm3V7B^c^IgqgFeS%wA#LHlM%>I}iL@Qq=(c zqNnqbGUu7jw0MUWcAFqw^1rEtDX`O>sV?3huiOoVy5H^YbvEQ!;W^K`uCwY8e*@>F zn_Nyu980V(P)jTUvG$22{h3CIokh#3*M`$%V!BAdCa&D=ETxEeWTqBpNiZ6v!j&1t z1XGaUglFp9j52315I+gGB3HS;-w^RR%G{SuT&Vk@;p2)tw7JVO z*rG?q;qbvT3`%6}PU7%aT8><~rbBaMrg;pzMdSjoZA|2UI3Y6#jcnP@A0>n++YT>x zjo7po2m2-+iC-smw_h{Oy1}q&k=vaH|C;djehhsqQr3UMRk#lPKRM%j=5{pB*QA32 z5U08-*|A4(CknLB@unZ6QJja=Alp<=;GX`8W`Wu!0+g#^kN5=L-p$j&mQRlOW_*;# z1#}o8xX;b${^xlAQ_*&~{^w5+b7uY@7o_P+_s_yUs#E-B3?O=&jJ>~-Tj2(x7iP^h z=hU0C>gA#V;VFdHn4U_qaHd|sHifd;O#5F6Y3@c*5Vkd)p}j#dpXy6oio9*I~|riXT-?F%q`ht;f2vV8`Fd5O-wrCZwxU*d{N;KE5yiBLF*hri!%lR6l+VqmW_Cs9wQ>FVU88?R zCznyZt0^n9mcT!cv4rlXe}C^_Y!^&7dWzOFruiSTC=an!R^ZF^E55B)e&-e5@uw3c z6>!wzuYNl}X;F<3XS8j2Wb|1PCDW7<)6(A_T|-mo;S$C?Vlkg6+(@tj3eBAvwfwHp z_SPda%rVFYbI*W^-cup!CTCkSt+IiO<0B2iLY}Jt&a=~N*uPyk$8i=CBx+*-?Jt#&|EQu zlkg5=m0zhAnXtXw6<#mc*E`O+jT!#|0<(@R=fHk7-*P5-T~DWYA;Q2c;0+~ykqh5K za5b3f_pIJ>&BMd09sd7@RfESMbP@md=OdG=Zck)Zvx0!z_6YsH)e(`p-W`$cn2h9- zynFJ*MtkV+7My4ocp+o|iYNFRX)^F>^nTvoJE7V(f@V$xP?VRRyc5q2gC(&-G|Q12s&b0q(6$f%WA@e%jhGLM8& z*15kwVU>Q>VyY_pPo4f{WJ1BSdKoYEL!4!$u%BTYAcW)owhyqWcn>Eu%0NVH8WiyT zv{Lu5lcAQIVw0VrtuaS)Jk7o#;aCfytn<%~%ZV{lo>^H3n{uSM;HxJ#Vtv$!IK@_P zx){GuUzors5=QhBU7RIh!Y;&YNpG~&txg59YbP+BjRy>}20+GKns5vb!8Jvu zDsZDI!DSm*K+LH4dZ1!s-W^rPrL!{)pC&VBVvYUHxm<^_RBBkf11$cFa6+bt=Se@F zL<4Prcb5MnZn#3R_A}3JY!TYgZRYku=!e2N_7iRW6uh$PcCXpXKb^7yG{CWp_H_Ag z4ff9yOWj}f{MFH%$l01QA%-h&6aNzU0@9*r=4$W@XM1o zNv(8dr|Ag9&un!#h^R`NXSP3!w{!r&mj^kmQNHQ}lM&j9^}ZB=o)kjX8{?+5--$aiv(40mjgB)`+9mbgx z%c%<$e%gh}?UmC3m1xU-h#@}Y(Eh{a0qG}xd0v2XAZI8ntl^EIv;Fws%x2_J#7+;h zV)Wwzd=J481*Rt5<;Z(C>hca*Z}q`#jgU}`__6r4fH0WEFV?bu2s-!!^&T6B6Jof1m60!_T+>`%#` z@k?AB4i(?EhA4UcpvLc|kv&6XV`i1R;F=?L61nEdOdD|Ti*mbb;?#5p;EuKkRn8W~ ziZ0np9e?*XvuS;ld6?uRp-r}BbT{ZGQZ)1~!u8Eurv2bCci`w6=_R0t5LoRdJNzq8 zR>C4pRskF}SNcbI%#+#npNLdahV=6eGi%03-9w}fy$tqey6;CCokJ6ShxmipkzW{K z)Ke^>r!x*X*sPwwBPLoV>5zS2!mmeR*ey`z7($Lnx>SNXdyXmPmq_>#JXm?!pnmmE zuJ(S_;Qbb1ShcxL!oQm`O3kqZw4J>EbT4;;(-(xWn};ci&Z+sZv(ImHLSgSYq2?uG z_}Wu?MR+P*W~<9cqtN11W?YwU9(TEe%{mkLUOER@d^x7?<6*bYwQtw1PCK#zbBTUl zd-L2_!ssIh?uC@IKOF$q567ZD;5s+cz5eWbmZ{Aa0mwDmQ8gw1U2D(I?Yt})r<-|r zJly8L`0PFg8N@d2r`Tk>6xWDQyo_WvdnHbs9xi_?20C7L=IO9^9VAHfH!E@LugOXW zceUVbGg%?pt-^&lh1*GTY%kll{pp9EBG}Xqfh}yRxpi!vBU6V3Uq0~_dEP+`jpfi0 znIC#tKgMwX(5_B!d`3`nBZ$60(hRc(*M>7##F`*eLRe>WSm%Df&e~RWw#m05aAFHv zo)0rnV2wXaKG%F;@^MB2Io(c`z_96$!K~KN8|0w_Z917e{trrCGXW(pPcDgcF6Oaf zZ?Xmi^?zjhmP|y@DN^yIQZM->MSh9Q%lx7eugeavkjFMJr0cDOaT*NWA7N3TwYK_3 zQbOtPJA)oKrg83FNuzDU!wI>)Yg6L4K|kj=f~LTq=c`=LzcR{m&97yC)#Zcak*D}0 z@AgMt?~i<6F!K7e2zIFI_da-4t!{mqn=HP%ZYopwpbERw+)UPEI^(yHHOmDPn#8$G zv7Af2*Rj~_u2O_CGnJAbMk9al=eZ_Lt%}X+iOqJLHEB)$-;Ms?N}}Luh*XmT0!byx zPrCU*yqmu29Cq4!CZqzuX*!If8~Jr^&; z^qV0PGa?8Ps~GcIT*wRVs@$^uT!8F;${H5j+Ukg4ZfW@|>$A5ps$(0(ED{|>>5O!0L);RxK>*2-6{ zVOqP%2M}f$>wW>x2K96^Eeg;Oc8QL%b%~;&!OML}br9hAlNQfa@wlT!9rr3@ugLgg zl$dOp3#Nx=V@aHv-5P-XUZ%)m-LkEVQ3(El}VN~d_)#XnDzni8OXh=-*(L^j-oXW*x76kEaMlDpY=p78mh=-Z`#eqQJNfSWLiC0qX(bL# z=V-Ho-@stB^O>tnXOcZKVXoolWqdBo&OF7-D^Hkf_<0qd(a@dZbt^}t8Z0IJygq1M zRPKGJ_2(z~41`bdjxJAtaM&6Wow%kS`fC~*O#L&!AFSES{DYU>ODpiVF{~wbI%=Kj zWshjR*+UcL^^2+4GrpUr1jEd?9S}mghE2eB1n>q^sZ3~2?5CaqbQ8-zw%z(*5A$yA z>0k{T+1$zJAw%y6S?d_{4*$9RyHOI3i}kk|$-$*YBXL5_EL(D}E2$@T(O*0GXwV^; z>&p%#KIVmJ5Pp9v0b~hia-${_^ieDqp%AHmn}F|1Rb(M-`S&pX09jCggAn!u`~Zcp zb5KrqGh>)3C3ZFQZOO0_(#PaA@@+U|k#Dui5_XgQRu5k&?z1JQsr`{^ z|NEf*j}WEUZ@+Q1>*2AdLq6>BDD;ZMWqrc2IzGOxaP|w_$@v+2bM&qv2L~N2^_-7K zVZ9Hj*DX6Hi=oU~KPo7yh2`yuB-e*bJ;Xv`i$*ED)InxfHo--S?0Tw%ELX#Z5tG>5 zpty0<#^Vc0*wV5RMJVOIVzwOY572zj(Dv8#75fVs5(soZ=5eBVJPkpZ;)41ER_|B4 zg!$V&Q$YNUG9_X~K~FVbv8SNj{?2@dX71vTT2OuEnOkhp%$NH!*G@P-Gijqww&*-< zyt2ytm{%O?gOiP-q)r=8y!MaK1@NPP>mRB-8%@p0W&r3&oqF$Qs^z0&aKu(}wOE?e zZG=cpK&`_mZ0d-Yj0j`W1rm2w|Jb!}dCcP#{@UIi$y2<;%Q?&eU5 z@V#2Ce^Gen_qO1>0(#6FC4nAy4*<;afNx9qgr8l=r5sDqW4v-458!1Ut{&x;A34sy zY;Fq2{M3=o)`Rx;2kojM=Xlva_q@pA1<6cBP{%Ma?#q+Cq}w+9%DUXm|7SFHeTvMV z!Lg)&n3^e$i5URB{%m=HK0b2AJtfda>0R97&i?NJHerN`%vlaC!!Jd8Go2m=W=Ap@ z?kTHx*73Z}!a{OK7NK6aDiTB~N%3*v-ag(Oek=-Rw+bVuBAylv$RME3Wj5G~Z$~G27RJK|G4Y!bL$6uEfF> zL1D`|@;+S^0-}!(h#p=f@Q@FR3<#(xd0jBeIt^J3;@e}m39HS2aZ+;4F}3J*GjI1gWp3~aGf&4n zsaeqyK32v#b@{92`8LHN9iOTD9as%cizz)if~S?Cf>B&@+9 zCXL}rU$ZOyrm}}JCIUeW8(RV76_~Fms3i!>iy{EY*9+|0(Y!GPTNuSTm`l>&);8D9 zi6g|E*X?SNZd}5v4=|XI&XXl=s@U2JUai>LAj-bN*xFS;6|Op1+WT5^_8HFJ^{k*2 zYnwtHj@$E*$zdpLn#Q9nJPZ0X=RATe*$v7IDj()ky1=t1&--2ox$mYsXyzq2lpP&L zqKPw<$NKfAXf{E|M+6mvg5;Bzmw4{-5)l4It;rAL5zg{C3SAVBfK=ZcUPoLciK(aK zAC7G6!!iB`Kkde8!3+t`6_T2;u(t~T5NR*8!tgF!Unj|z{7WB3HZ12x4PQSzR>N`} zr8)-n`y`Y@YQplo1g>HS=R4#oLO@&#Ana58@R14Z$|WH%@_p(ySA;P+u1dU8SHIE~ zex;pp;`!@@o#@GfmqU&;6PX~wTPc`HZxc~gHK0PUo7Nm8@TGK0A{&CR3Z>!app zC}I$_WGjn(%<3{d^N`Fb%&X*$lSRG4BzMDAt4s=co68%!KO!j_^I22^U~2%+kjPBr z@Nf%8gUNaacNSNr)4@ZySU}XBLB_8Um@SIa^i&gV*ylu%?GQ-|jo$~@A!nM88Ng1A zSgHG-*jJefZ@f##qnNi)-kx2W3@?8gdJeshMWA#~QaPQ6D(r>vvQ@e$9p2=)jAC=G zsY6~}YA(i<7l}MRB)DcCO^up!pzP;6J(W}`vSdMkc{IRZAU^(c-dnc8wnCOW|Li6{ z^?^M|w}CXw8||dS$wDT}CY(>&J}c7y5EEnypU%MeBwnktYxpu!?RCdfp@y+?&9;%;o3ia@{LjG-Kw)+$Aca0YFuIA=y>mzZGBkZ}+oS*yf}ck${{r7)}#ngnNZq$)qE zw)O~Hd2J<{EJ$DC>>~DRvJlHSU7amJRi-UiLo#Rd;kBds>*OaK!z4Jg4asliM52-j zh=lY^a*|1&T=H(VIfoXUr`Y0cGONd~D#5JE8XC4XtNMQeM@OFp=8urZcl9sAThqNG z!on=SFz!h8CZs*ZqYMkW_;qmsgg(3%63u1bcgD0?X4ha;p0{V5W>!_j+{1l8tMyB8 z`c<%_4!ltFOT7-*gZeMjGXmm1o!2Qs&y&4^51=UHt?=zKQ-k*H4RAer){QNRdqZr*q(M7gRdCJnmR{to2RDglWLiiYc##MzzP6LvsaT3SZh3H(1j zJ$+9Hnc$?S>o5KrGWaj$1IjD=jupgaK#$;DjIb`{55yJnqB+f9d!A z6OKK0;E5+5d)9y-4Lt6IV~-o~gR-*YkMA2yY~b+nL7GwDVWWnA{Z2;2%D;Xm#l?O3 zZ)EJO0p$bF={vA|Ky1*+zMAKmwm_4u7%+0^@!wBNJ8Q_$0YioiALxT}=fjB)QVixm?OE*tdP$#*{V^qn?KABF`+;Or&^C$S0nSGfTnVQt=M+reQ z6WF}nDt0eVuXljI<_k)TFhP~?}k264=7^iyq;SuNZ*1D0A0;x%4#*OoISwTDwtgyjXtGSPhK<@ zr{6*s!D!}65;a+w0Y@oZHStzmSuh~4x&kmI3WgjimNAX+2G*3nTZ4WNu7SboR!2IY z!Pr6I@#?>lyr6xNp!Aa#o$~Yxwj?90$*Z+>;W4QSk4sgETdfQ=?CjeGqi?swVv;N| z^kGW5D8JV(73KfhRDW=6PkdZ z0M)eZveMFq4Ig&quu(&Xr~+(aoP*5PA0t%Uo*9oCHZbTvrxmlQ$v8%o4uj?J(=W_r zlu?%Xpfb+C31b<$BO(rm6Kn!@;g{ZS(XAK&oIsj+jP&*qfZ_sFeUVj-ic*t3t zBmGI|4sG-YZ3hk?HO#JCGZ{2=;5h-5{f^@B?!dGLojqV+z!Pf;17gE%{f-IHWaU0C zXb6DrPn%x@hmROM$nxSqYs8>I=MMPG5W55XdDiez{Bhm~+JqR9>;2*~OITEL|QXBi`CVb6%{ob-1>&Y9S za5&3IVBqnt-8vHUjvhb33`~z&_=>f}DQkzw>UqV0SxSmkymOw$V33byVYDn-Tf}D! zC0?#9%gBVSAY`A!LW;gX>rW8h9#CuMf|nzn{@qOnj4W2kwr*_%anQ;t{#+NqS$c)a z9*!VMt5?}0NP)4oz`z?7&r(_GJ%N=Tb4qk4l99LbEAn8W%oC9syjf#jPa+sCtwNb3 zFZJGa`dc7GQkcWTcIkOCs0Ds?9m{<9S*DzP({(=Z#7p%suZ$FU{@#FNy_>ZBJE|J_ z5fdQKBFeStSpqQ0Ev#S=H!H7~9N{AXLHVuzf3rrrym=8&m5C0ps zP}|yH;T4|M7T<=QYlgYq`(!Nu3z!MCtM8Zs|GBMz6!x*QCCU-qLF6whd;Nl_ zYq>~>!+C@gODxa}G}`@p{Nb%ZA42@8wlX+HW8wht%n!Ahdo6V(29=ITzE!!9I}Qx_4MH3*$mdQDO(vF&Z?wVix@ zZ;NidQ=+xr?|h%*&I!-UM|iLO&di?R>*qQLB%Y}-F;oi$2;1%-fs_E(*<+#vRoYRd zXc_2PUPf}*HM5I%P&q_73t(Qw;+Psf(xjNQ#&j)53bI{vommjC=2)?r(H>)KMA$O>R)y805q%e;5xNVLXF`%Fia~Gc?uhl*ce#fv z5vIP^wfHV7Igjp+HRbjGU@j}|omA~)axsh^?B)Gf-(&uF4W-EtM5wQNBkd%kfgpH= znipckkOU!W+n3tv_lI-m=4!@7iFx1Hz8IH94{K~C&Qc5;t*4ZHlFN@wZUE=rj|>sU1ewZZ}4k5$7)yhTtOXsI8n z#$vJ`mWGe-@R7OB)Hv@Gw;*ampE$dN@QA$ZpG10ng-9+UXWNH1Wb}lkYBaG~mdCn2 zg53fX&%BEI)e$_=1KfJ@%Q)WGO=$4XV{p7>Wo^v_zGqGs_l4s2A1>Ngfqb49+nXoL zeAW)?xfu-`@LC*U8=is<>tR1zHn5Jovjr^p8I;jt9P8SNbm{NdY_IDtEih(JWapOS z3Id!7FVX@ekNY4o=aJdNbi)3l6$yJ7%LZm;UPm93P3NDrqr-4gB@BY?iw0SS0Zcf3 zH=Vsr@9f0sS^J;{re{4aNj4f1y4x|~L`j2JC0S)b+$FM3d$OVo@w2&`BapYk>o(at z=n*m{<(OJD(B1!ANs}&xGs{+v>l|~Nyxcz+Uy{L9r9c*WUg!S?Tv=vow9Ho6ARDC* zTyoDPa)*0zJRC0P85>$+&K$`t(nTH|f6DBO$#OlH-?88E&u}ZsNxD?E>lisz@!QYi zVn6b?=)OwLTcnQniKP20pdj;&yt`@yx5<8&8*N}`$Kgb^2UXIdd zmFXh~9@5LaD3uRNQsBVO1yy;ev=Xu?HD$U<%;im-riklETzKYD@D)Ar0}0yjh<2SC_95SfZv3g_mMV=uo1at7m;op zKd5)zadmBSrulp4O!JBHnle-x+@cN#E4mxQ{~m|I)37p_$NM-FVjkB63TQCIL-EDJ zkc&_}KjfmKzZ5CzBHggG)tN=lj`}^zDT=xEwdk5ED>6$*QsFRvy@x}SgdyheAbDV- zBIP=g8TR51*j)+J@=wZ-M2MuQ`40tJqzb-8J{-TvY$kG%`4N-<*D@hZKO)Kef?28% z4E$Him-mCl{i5EM0h@%fT3g1~Z=ejS@(Uj1md;&o8c~qs^8`Sy(ItAeclZZdi@6r`10h4&15KN2f^&w)1S@X%zoLHtD#1UjT<@P2Vqoy zY@$1psh361BBhQ`$}Fkt$%h=tr*yG4r?^80y*TtQ!XK(1$RG}q5cciFgGsvgv$at!w_L5u zEeGXgneYNFW=lt%&2u)!sa8So)%bM!=)(L2A6%V>Gl&c->+miBcy1gJWtz!e03p7W zTNk0op@8XvoF>c2emRm}5}xlequ29Ydzwo?tYR;7{kJMaI8@+xAs+^_X-Izw7A3-~ zXO0DCV<(8st3$9L>|DZ%`LcB=l8-6mECHx{(x8|ZA{Ov**je}Ow2oTiWk^mCZ(b&* zH`{e(Rg-x$QpCR!C@xX*51|7WKs+juwcC5YGjwn!6H&+k^Az66jBCDEYd7b05_`B! zshCle;FJiDY&K^gV}=}HCDjZ7(-ip0RwRn8{PUEC>@aaE4`Y?9V^a(9ay!G$ zuC54017f%f#`0t*@B}338G7&jwr2J_@kTnTS>`n)=zaL}ZLA#4h6zpPZh~0xZ?Icp zuo9Veol3s}x0ou@pWLBI0AjKoSMRg^#UMr6$?(Tr43d8pVaX{U5 ziWoLdLBAzlw~sU*)#=RP3nHp3E1^yzclaB{eCaQe8Vl#ct(eXh77uE6# zQ3Uf=SZX8Q2ShYPQrqVgvi4|T5o1vKO{sDqzB+ufeDajOk3aH zP&1@`lC&Ff3+wya)4t>zst-=`W`4T6p}xoqZ>VZ+s%n;Tr1&YvIW!trTq)3|>-n{Z zNBDR2=6F1vcTgYiyQUNo!VjV)TzV{Q6=^h8xNdB0M<;1{50LHCa&h136PivL{}e}P)nc^e)7wnv4_$X-nR>~fE5!;l{KM( zXhM<+-b=<2cRyQznA>xe;&9xv4BNPW*Nqe6{xKl5)H|Dq96Jq5I_@p|x7FH=>o z*C?+uv-+z7B_jgHM+6%>8ePIUvqa&;jOG*o&o!5itn<2FP9qID8NPw}F_Smx!RtJO z*yUd5->bAluOK4stAFK*;)%=YAq=S9M|YrwAe&%-^424}R<2c_F>^s&62-v6v~vK! z$Ns{1OEg1h9xEpQQs?r52~g+r6=>#s6*HykNa^#eP|=A+XR03wh8?5Z4=nYp*==!xvzt%EgYOicvd!6d6P@RYMtDfF%f4&+q z#D=@krDSEJue{dlyjUd8Eab-3O>>FThRh|=3s=KZ!$G=);)BiN_M!%P=Bb#f>2GOM z^*8(Q$oN{qbjwY6CPZYsz4FOt#1)rkieX*tQ+b4#TPM^0XNK4kynpw`lY-Zl<8~c5 zR?A-Pi?sdfq6LfPo^T;gi*pxxE@JY5qh>3tzP!C|ki3If%|wGHUSE^`b(h~xB=|PI zdkCgRz|=e2{5xVVN%7rXu-x8Kf|R`+%*W-$79`Vhc{7?>n8E1a+)-Wxu8@nsKJu*( zAT6AlFy5lUwot;ccniR2Zblj>`uRG{igx8FPWmIGt)0yZ+^WpF(WQF5yiQ^s59!M5 zF&MWy<(v3~c%-FD*z}}+Eg{VI;r!$!z#Ae{RH|M{h91Un+|v{63B3}R5r&Da>+7bmWk@%=nMd1$#*HIX*o74vqU)LeWIE4} zx8I5O)RBo$K|lP89G+KsTw8Hd2<)8>*u)T%>U!VMu1x`L2Rkd=Gj~sL#z$bZ#qc=P zQ|*)AQu9V(qGuwrzFH42v63&sGYRdd<$?+9ajG42S8wu;3FDAZZ*Ju461(-(Mw3i7%tr*CY}I5$-h}lFES8z9f>GtYHl5IKIHQa^tZf zqIIEsVP6?nrX416915+a4jM;li{8exBF9{ofr3ZuY>je%HA54R6u0?KdJ|oogb4{U z07|eU(Or;Z&W5gL{+6FvBM@P}mj++5tV*PwgZPY|sCDph@F;N+Xp-dBhqzv@Ddnnc zBI;7U+AfquQPNU9fRf&+)zlJ;-wBJV4B9-)A|ao3TBONxyQ@_%1{tE6ciB~oa9l&6 z39^;?+n@A^O_0opTWopTTtHAvoBm}k8H}A@ImvYPjH_W+vrq(sspfnlI7dez${kzp z_WBZ{vh+@3LZ*8*tj=sO7O9v5G%T7}XHli?Lz{{sf`5|#+)M~0cZmh3t0g&=Sxst^ znCcSK`8Z&bSZ5F9eqT`R=r3^XnWUp6Q6nLqR9RPXmic64GeRREAXdOD6V)Y+DX(RpVslwP2e&4!ZJ7~y$Wq#7BCOB^ zYQ9Ceco$h+g@&voGPYots|wM;LOX;$T3t5OD^~lfS*qo}&L zMOD3P3e2^VmrNzcD9p$na+3;EXG_YjN6$M*CUO^hdB=HK3wVaWSM@i4tt^v3mE98l zg!9(GhnUMW@MWOoyIu|dVg*U((Uy$D{~;h^4$%B>@$7DafKZ-sqFmvj_f=)?&`X}+ zKL80xK3ozukswiQNg*I+mr2|$Y_f*135e%j$@dAH-odT~wh>BM1oR`})HG5zB_Z=a)LF1|zZN00n>*BdSEV&Jzk!fY z*wnNnq1FH@L70&0U2|YCE)HO<3qddj@;eC~XklEE8pd4Rld*jK+9#O}3@wW1k|Wds z1B~89?(o#8CCSWJ1V-6cKsXVatD`*3UnlXck9+}OeB?{0;eb@y5=dV35@+I{dVRZVwm5{Ts6W^N zb5D-up$*`Qer0qqOE2Z$dhcj>O`y;_a$;u|Jw-x$SjTYJ#LDXV53m+yDIP0cCKfDy zL%0I&g(*G+*-`U&25*ZrRIkV&{k>NQN1Jt0y1qQRKjT&NFIhr`!0s5fg}~N7Fqkj0X)Jyt%k{IttsDZPT9rI#;8QL9p zldwB27LiO?=0>eA(Aj49crwIzIRr7wG8ZDPD>hAW3LqYlpg-afn<`7qJa`FEXIdK^ zzePDmBm(Q`gr`Y@PSDzko7=2*MI4OqJj*N-vTduxxg4=-t%kzzBl(zXKAp{jn$LD_ z@qE0uY`wd%B#0lGd~?+(YFtVUc;q(~miNladU-D{h{g!mkE-@$UR`2?Tv^QcMf_VMOR4Ma#4mIUEO8|<*XM=%?z5+PSbe@kpLE2(HCk%3mO7)d zF*wBhWnZ;EISlnB30vXbfwx%|wYEanRld1&6rE3pfdnugON~XcUJJ}68sSN$21abH z*_zKLwBDi~D0SI@r=Y}~8VR&@vv(nR9d*~sN6FFWU_vd$!F%DkzTUIdI=<|*kYAaE zG6iO)P-YG&!$!`NtrQ3!%rkhy{$1`7X_q9`A_qp=-c+evjZV$_qC7RtV=4Bfz?`pD zF0AC1+p3+sq0-8BHcd8Cso|&u`*Hyx(Z4*@Hb6Pkw+u8eqlNn|$TDVPWgSMsfHTJ;{?haQL0(G&TX($U0PJd@#(!LC-cYTT zynYz|G3p(x1Q*s|oBP<`ojF#%^onk>7HD~}c{|qJ7w}@#=jEP`T73bQUEPmGa!D3P zcI_rTOj|VSZg#0rE;e~&(&=t)OmBkaNk+=<=6y}_~ zE+l_9TFO;1E4hw_c~>3(>S{ezT*K z$?<9V-tggeVLOs&DfeM-GjF_=khd1rrnrVBcnmnAY;&nj{B+{2e1N$YRQJk^8t&sU zHDZvaw$tr5;z0F0pEFc=#(UT};8JqE})*#P3qqU3#GXNIlJHT*=0$baph3yX%l=^km}0#%M^kH#mhmjN-2cIBX0x74qY-Qc?GA#L_$Ua0E83e?*Bv}y?9KcCcQ_$FC0@Z z_4ws1z*6(sKF$a$d8?*kvU{2P#IwEw%F&E}?e#dPUFizeI4cESbT{>a#9Qn=Q>fRl z569;x5Eht+RpTW<&%_p~#ug??w2z66EHMjkh~p`VTWs1)1za#rl(j{xkF@xlyI&kcylp8_F+#4jz20K zz8CtT7n*Uc;#PSr4Zqr+g}szu-%%Yt09@e|VUWg@nlG8>9x9%g%7o@kBMeCz_ zk?kN@TRx9ml1~(QT_5rC{@vckYh**LJP+1_=_U_YICR$=vA}#f3b|7q2nVC`EFPWt zZ~{}RBB#MH-G~!IAunEr?>Gy5QdXd-86ur)DKoQb(gT{?NH1@+*ZIfTbiI#Vr54cO z`3vwT2`o2{tq#bH_^9q?x3=I`X3BB6$zxwzkoWFpkJfSv0A&%ZS;ks7j+3zxTX0i5 zsGx7MZ953SAixxuFSHknKp|+v)^^oUn@3Yp)C)u%ZeWPuMJ(}*)!G3+r;GS|il>24 zYcUuL4D~%$!0@tgbwMIJ>S}mrq$2j*hZ@M20F|-lN$gIWH-zOC1?46Sx`$GLuE1O* z(9P3jv_s=x17YicTnC;jS*CSqrccIJD)DSqR1P=a1{ZDJGFz*N0wx6v^3C3w<5q8i zK%-@5fOLYQE|qNDtBKm0{k?sGejA(nDDsUQ4PIkCxTBBZ|o6k@spvoe<#$EX%pv++7rx zOzyvu%iU!nBW-F`#RZbGT8#TUl?S5ni?Sn`Wi2k~1q1;i(ZndriS3SB)51bC1c2JrOGu=tAkAyjJ^b;91(iEc4&2Z#XmYBqHui^(BCRR-%t}3H{PzXY@mC z*1C#P!qD)r;N{>Jl47~cbt#@A@Pw_D0C&Vnd32WO(YZ*(;2~}PlOhsJDk3MtTdY#& zL|Ak96Kt1AW|rBe8PI}CrTkke+4B;sFZ^U2J+#2!eDjPnYfs_`!v(a-_S@J(uc&?t z%tz|?j*3to{1xQZ_GP)t_I-Mtd3n6$K5XG+B8WC$uAtm%$_Yjk71Y}aYc+c!x1m?;8DEg)e={97aZeO;(~b%o=d_4F6lh=8!7 z8B?(u?xi+~=WNZRM(E$HK4w(dP>7%6r>Jw&M6^@qJ!7%5H8;XA33nz4zQ=;|S8>d8 zn9~5}Y?2auYDGhEnjB|4-_CJz+jA^1*J+NEAvRq|%mwu+{EpXMbo`bSo7SEEqINaM z$QJ@QP~2>X*)w`Cptwa1_lyPu4dQZ0Y`_|qsVG^ zbH6IQHX6v1Ifq@nBxN^iRO?lBQ;YpWHbM>aC82@hY(jUgII289xGmdwa^AsCA)>IJ^mLi^<;e@T{_)Mwf2@?;Ls zZfUKvR-oJ@?UgU;uui{-I+#w}88*e8Cl6RIGv@&-4r!+KBYL-rpfBWbcD}D|_){@; ztjF$m$$Sve$s?;XR?@z2=!ev+LF?nWLvm-Y?&oL zc+V6f)`m#0amQ#qQ6W2#Q};gp%$8^x@Hq*1jXTzFc8DAy`?Wkm_(8Sq!KD>u=E*G3 zf5~V+1_h2$3Ou1O?Rvkr^pe`d#&xu5+svz#a)%xKcl@q$m6s{o%qe%?a<9srRRz~p#t2MB{0nl@b*4}utIWL4)i!h$%nHI7QLx)u zqPev;V^F)f&$PM!pi@u<$hWw~JDN|l|F?7Yxy7HcU2RiWk6ES`wl1}wL3Kt4xUN^alY1|X0^$wg(vx=(Kd z8N`AuDZCAsO_q5dWlOhXSxW^eTYY~7;depc2~n)&aJ8q257ctt{WlWu$*&70;y)4k zDL}U-O8Umm#PQN{;Ll}c);gL}5ClAVfg}rsim|YXblUWN4{=%;i{IU%$8wO#u{{q8 zg*o?5C=Q2e4xum);ST~Or}2l+1l`G9+>r*J_5mssNyyJRUlfpEsY~Me`0^_ z;&vjs$z`&c)qHcIW7$)&WpF_@N*QMuUkb_VW{|-&2Ouk0g`z#&JeFt=>%Y}tEXlER z3Pg9BNVllyZp-uGs$Fz9`Gfx6LSor4s8=1vN!)KQ5=%%@)-ar|jnxG^jyI`K=aZrj z5H2T-n5P|oQ~W2vhmua0IA+wyOu26lB_q`hrJ zkissW7+x!qb#N&BI!(4YbrReA6C+vbomthjc)%%Y(z zns6|3?^TqOVn65~F?zmTw6L=aGY9k$53pY6;=YOf`O&C<9XMz9@5Vn`?pfDnfK-={v!Rg$bhkw>l0(^@Nn+#v4d+ZaUxXLT*>{_%_uXa`kqdH+ z*K~U`guDJ;cEs-50@;mYM+Z^nfZjpIR7(`oPrBfXV zt61-+&_ur=cDq7})%k&9YTW4{98PdL6s~E(&{|8VUe0I8SBLmAzO^J_$clWYTSm57 z&GGWgTIm(crVhMrUmc;lifi!cG%Us;1?FPnfqKM4!v~v~Y`S1U1nCfOo!Bg~=-M=R z*T|u*djo{FH_RUC3;DssYA#6L50^+H@o`0FGrx-L4`9J+;*nPTxX*HkKd|uQ>W(`@ zAgvRPL)MW7`@r>OzF%u^k}HWy)t+dum*R@j)nubRHUnauz_A=Sa|9$Q2oakqw+QDv zhzqNDTPY(r19;AH7#6g>_T{^}M@wy#c|s^DvfP(dW%|Lt^jRZQh4-pR(5`^LmlMcE zx6CDegtj08Qjne`jBjddeUi^=UmeoS8ri++>4aDIB9T+NMU>w*Bjga?CM24eS6GjH zu9teMXPT?3h%JdJK+S|me}#)T&2rM2L8z$+k6FS5*f=SK#t)r9KBb%Js7OXq-&YZQ z$TG%AllLd@M}b)HT4EU4hfz4i<*u7wGLbs74&gLNwvzBf1?0%z6IB7sovUwTK+ z_r8<)A70N3#XFhvnpjMM>Bv6YKkM9|dNpQ&vB38Mc|jD2ZCPt=R@5j#(M1}NCdb*N~#j<<%AvWvw2Zzt*kjvh3yb!k`< zrYcUzKNyS&13GrH&leVu_VagRGW(#c9!hQ@>Ew=is)R3(TZSuLw-Q&*`$?zz(F!nnicqa4JZ*uzm zW%!suHkBNM4k|Bqnd-7Za zr=~2cMKWn6(+iXD4H-~5e3Z?rM~1+po#A0Qc z+lR(7(#^I!J*!-Po^~+&Hb0LpXPciVi+XzNs>VXxtGJ#0{5&w3_TFqYcxjNcEBOmg zzHel$aUP&W8Zi0~ud!8JR5lrz*Wo&>z9-nYkpR={aDDhEQ1m)1v^QJ;rUT9F)jm11 z7tkg12Le#aVXh=G=wK!*8{@QzWh&$;O+;Cn#kob({V)6)gTS)q+5n}R-<>el9S}-y zQ{0Ee2>F>T+JrPX!Pc|w7(nV1;@>J0wPnCMdMAaDzc1ZSY!+61$yR;AqA_b9w#C$p+cDVPSAbgoO^5saET-BChwB|DPiUy;nidZ2<;oOsVX?qmGr_!Q*m zW$fklr9zf@DVImW=fly*^C06?<%9PNu>BFo_IVD^HFM3_Iy;pm<@IiFykIid5KolO zv(5eOtU*Ihv!t@|`x#yJoNmT~yqg5^s}0LTNXW9zbZ;SqC6C@AEE2 zbcqma6#KPdR1;Ou`1`xWd0Ca-Ka#C+xyRz;cF{aKn8%>Fy4SW7M?!zsc8WRrL}6I@ zCD+(IonM;KiOR2`MO5XTX+eb8y;OeJul!a}ne~J{Pt8fU>uLry-$-Xw_g0nY=x$Ju z;=7q!2gwtaVi4JUr_36+cK|Hx;g)oeypb4a2L!kFW?Ds~gRGl@1~fCt^kK&aY@xT8FjO0%qnZBKuWC1OK)pl=#P=KKoq)sl!ZtJTu4Fx46AYxQOIQH^O45B*^$QPBC3h_m2O-?&GuK zNxteq<I zXd+h)g~se8T)1v=G?+HRXcm5PL^||&1iPgAy)Mae2-peO@V}g^Rq1sW9Yw0_sp=^i z%nOLt>_yx&*wk0troONEl-%-cDsCacrf&B)wPV|x`l>ed+VRrcv%`poY$wv92{G8| zCWEOyJ3ZfmYwh1*r+4~0y~N+?C;gqi@$bIVvW`5kodyX#^Gpm5Vm77{0V}Vgr(C9q zjI-VMx3x>NIhK~@CgO&>#z-;~64`F)E_-IL07Z7X7zZGI4SXvox+@B|I*V{vKSZu9 z_vGn#vcqe96h+wT7=}ZF#@)rApW+H5LE$9JYmX5dBMGBesf%Go`STMPQ4ndCuy@x4 zD>u9hxvNd*nHw};?q9s-(|oC3;KPPWqmX3|Rk--5`ICR&<|f>V&oE>(bC#P(*wd1L z4ZWouDhdSTS=`=$O70r|fmY9ZVHzxp{$S_QjNbnrd*=aPRh8}km(XjG)|1qGKRO47Na|an+pdI- z2maUU0DM(CU6ALFh@XKj1k~LDpsx8hpi%&JUkgCJ2#c~$B7Ou%j&f+m;-@&JcL>Q9 zK$7z$VJ_kvcbh;X@&ll!Y+C-LHXl1#V z+mPk1_hq?F!eE`G$?OJ=uQg#`KTkM%gmiWlV1t9ZgE=;9) zH4S5UW^L|E)T+chStfTE_Gez~2*jz5W^x2y6RfBRN#JBJXdQBw_2Ic6K`aLYqPgrD z$zG(d*L~!pgblIddkxXV9<`}d=u`SukDn*#nipm&UB(V~REay;aOBhRWEUy>oYsAs ziRgi#lm@unm&piu9^K0@Xw>%#l7trdMw-LlbTRqc$Pr(K>XRZL;xqB2=C=w#gB6M*op68*6;K&_STi7mcOT4kN0H1Ci1=sOyse|wmSKrujhx0oZC8w5xl3$K& z8zsZFeiEm|J-mYx=2Iey0c>+2Tut3N~sVm zR0A(MZ1rM&oYJOmQ2v@#eeIDj4dbDRF>Vn!!4WLy!?L2J+aQ*8W_g{mDX_KUJqhdF zONpms(A3@Bs~kM+r41R%$JO1;RJO;N)uh zwTLW32vjf2mUkiM0BQQ^bt>UOR;ircH>GnzrpVEXJiQIx)hWDuIl4I7*KA6Yb*y;} zA)>pf)k)ax2z#U7+5$OkM_=tFIXuVWiyemS8363MfM>iTgHyVjcMN{p3idCHAIQ-| z_+%GQj9jq*4?F>fkV_PFH`gj;3f^*NYlPjur(}zpFryfF494;z9DvB1sg;tPeQ4@pNZiuVZ#)arP%L_UaU1pr*ov)*6j4#Sd4ReN z-F#28@^q;i9wy9ZPxIh#^juFlNQAv_usk2hzL!{giaIid1!P>1ZMj5tXyH*&9PJ6$ zW;R7RET)b14P?LWTtqQ`cf;_D%bf{ucEPr15Edsa$cN=DHqsWc9|XrTNg@v(xw}I)k8-8$ttIZqP3d=>BW)k8 zTuQcGV2+yp^N19eQ^ybDSCYTQ(S5alW%yM%j^CMnjxH&)NNVd0Wo@i=g$~+Rd10_g zHLJ;)GaxjSl_`@9MP-|)+funOE7c2T)k^hZ-@e54#NOC>O_Y?o5H*=!T4774p|bJJ z;t4g#vQH|(#yqSE{TiU;-eBruL=Nt-@G5O&$Pu$Oa%86!?z)w@C!Y4RRpQ*V@C06 zJ=sGJQiz=@0nj{94*dQs`1yv$11Jm)=YV)i=xG|tCWOhMHLkX^m34J03>RSH3Bvp% za%g{FFbR$298B2DtpVlx0?JjLpsfPR*~5y=7(nta36*_)Wm}hzj;&zQtGF51N1Dxc z)bweh_-fHakZKz=G1NwuFgEagBI@2eTxinFRvQ740`eVh<#rJ2Um@kx7MLJFE>lj7 zZT+pvM7o(>I2VtzhfU)ROmu+e9%ff&)_!(cy30iiMt3o?dek(d!?lQCVqnah9N{`C zLvDJflHpGSGJK~a!w>po_(D`KnIsDk8E!0dWcUJ1w?)D~O%oaZ*RInZGOSsrIZ|x5 z+?))z#m-0V{T-9!o+6VMD^9~A$Oqf)C7joDz|Q>G8i*p9yEz(O0)-e~wGsjF0Jc`6 ze(^E1K19%-EY^eAWWxP$u^T8@o7@UH*(&4(E`p8hAsqZ~1^=2kPTmC|>&i^|AmFV% zULyV3#60jhIx3}bbnTM**r5zY*#Ys{-LabyXK2s^mDAc}t<~5}B%`h~Lr602KIVd< z^}NLg4d_e+I-N-6WR;Pf8R-U?bE}N>#xsoB7;uCjfi`qD#7)$$h@0JB+de8<1_$R768; zKq7lech%LrS5|^?RSvfwdcv(94tZe-*^H-?sdaTGzkd5v?^Q1;FSfwp678sBm39Uo7Id!pt%iB zq4~LD5WWyrOc~3}k=Cc7iLqwgAvRQ5wH3STeAHH2=_rFGZP=3U zR_7^fx4-amLCrU}SY_LqQAMy=@+soh_?ZlWq&uk_>Z1dJ@dG2PVOOk|(1Eq8V(#ov z#hYC7@>#q&x>mE6*TI3X>0RXZ1|?dq+mtow6 zpnYSQWCVsF<%(ZJZ-C0wEFBB9(3m;^Hlaao%h~DNB%s%gvC3()Fi>UjDinapQUbC) zLk^2vJalAy)Z#Z=@vaGjobVmO{(eMsFePDb#Elm=p|^P#8YGmNhPKzCjO?C%%EByb z)Nt#S%zqI1HjM)ZE+RXuZ@eTaNxOgN882~T>{6_5jMSFOhN&J9f=Le{G4_y}IGoKp z!EDZUv)RMULh#gVUWZ+3oJ})*yqR)_y?i{amxnI8Rt7f+av zOuPa2@ZrL*qd4+1izx4CKGgYFKb)ngl6?EtaGRg_ksSFG%UtA2|L-C^VP2zSSZHpp)`L-XcGj-(>wOAGSghiMTn4RIrkTh$m2`^b@67+z-0QD>m6^- zwV~+p%^aBGI1-jhPcTc7N^}x`NSeYMCy2)PHt&t7)fkZN^$b6OVUo4yY;KsOmlZa& z7zr#(g$!ttvi*zF)ZJg(0c}}uQJVVVZN2cdo#8Hdm%^Tj6MzC7ccA-D{pw?VdjTsU;~4Xhb>IHWDOr)w#f`V+dl$%ODU&K=~G&#is*y#LWH%|5y% z_$Y+oTV2x$--FU~`4IHPlAhV7A^_k0A^xQ=aiuR7OuK)RvGFX+9i8H@X@qjj@kn` zbkXT`w)xfFwDrCyX?u@ldj(;?2c&y_eNVXP_q;?<-WAQH^N)*$hB=2?zq%iK1!wU| zq;J04P2ub3FrhC`5l_u<Wl5`^m?yUad+QX~av<{NYNfO_Z$@0%fd z%Z9hobYbBD{w+=Zb@1?$P91QPmZfxnfOVoRC>`F);J5$HfRTes&p7aamcwwL4jVc= zIruN9pS*ABkTd?;q*Gg>AwOUll)zPa+b!%wc{zyo~0LEj~hDxqg4 zKAk21aghHWd>nFy^Hjv8a`@mgPq99XcvFU+fcR-Par&g+pZzM z3Fwl}X_aRj6;E+9!RzraLr!7xK9I)@8RkQvxfdm#pW4T@M~UBzdYn zp&CTz%u*I$@Lz_UJ|sC>r8uV!KAkz9aq^iK!mJ6HFy`dpL;Y_2*@Jjz3~uU-%BTLk z@>0Bh=`z*RSl_wH;~qNrOxveMB~o;vh@HB@JJc5FH!n{vJ!$YTyNW#c{nN!sC!cOT zaVhjkpXxJTx19ci-&?8!F0QCy^MJb1b5{>;a8xN7a=O19tc>qMt~Rx_!%iIh*T34K zb`ds}4#VmA#J`l4l(_Yy&>~(?qjcy=r{OuA@{QfJr}@6nOyKmPCk;*xaah*X-_s`! zIkUtCx7=ePJ^-#&w>0&L(AN%Qr^sOn3B*HS#HbD z6}fS5v$*bv5(w0l+}oo@`t!>)lODAx`uA^r5At z7A5%2CJZ_lhCjHap6YOyw6u{vnd-q8p|^L>aPjyBmi)!71>3#!bm!I0&oc%OKh2dh z5K9S9Ox-sipz}#)@TG2Z_Y&BK4RJ2bDu$427y#KnyiWY<;N)O`WPfpf+1i2*k# zXV~4|Tiu^De5jo`4=UgPfP?kr_jnpPWXu@nab1vx6Lh0YCAX&t3YMo)jhjW~MUe=c zSyO*lD`I}fMbS`ZxkYwn2{Rw3lx*|9g2R}P6hR6d4Fcjrgzrb}dNzv2^Y*a?3KscR z6nor7T>L0(3`e9>4UW|)R3cZ~%+6!Wu& zzc#+#7wT@x*aFn(@qA}hkH{KG1g08JH`~n9UFsd=vR>v@^VeRHJ@3_cz4~B=LvnWA zn0Z9$spb_oWy@uUdE*$26kb+b-G!7gikXU@w}A+EOmZb!W^2LUvac7^*F^f->Q(XA z_BDwB*XrvltZwP+T<&ymEyeYK&d!U`*=M8aXNnvTzM!;OXBUta%I~bvoc3;$j+~D& z@}elp(8cKRAJ0hg*Y;PNfdcg2QAjn4sHY?nHc<87$qSQX)mpnT?@=~*&N5lT{V9BW zQjaF9+7%$QEG7KD`{w9o>vJ_$Wncrr`=kPYpZtiuQO(lZizDS{WEOGXXi)=2=5B=b zTZFjxur9_|5mPwLEZ~wPr+^3D3#z&`PU>R5a@LE>6&crmAzeln^M!k{k{9y8y){Ty z5+c(UH=s|(DzbYkI8z~IjqKUCD$ zW@C9-UphBKf)R$;w$NhRtTuMTD^Vf}eZpJ`X&ULD4>Ajtl7$Yg83EqEX!pczEvp{X ztl}ECK}KOMGPYit(`dam$fazM_t*^lush^q?U3ngNT&E+w88eD#!K7#$I&8(TP>%t zP>6gZh`iiu;IBojS3Pbcg~58l6?f6l3Wlw{2!>+icLbnW1g-q1!g8y><*-vv2;MQEhH@`{uHE!Rm@b``X z_=4LvAf5`?H!o)>Vyj^6@0)Oa=QuR29E+7(wwaY)$^O`d6eP>-%0Lkw)h2lxBupbo z0X-M+pj&5ulVq?LHoCp=T9Zwp7Y**koBk%bG1w$w?_aszH;g4%YO9D-E4&GIiJGi) zyX0$sm%JC1V&Bq^S-QEbU^lZJr#0@DO{u#@Exg#cTjBwh_Ym=zBqL<2B@N48Mj?}( zm;vTZs3E#oC4Vh4;Npp`0`Q8mIy1*sp!(w;?Ts`j)w~IH{HW(|H6S;yV{ejM=5;NT zeU1%gX$w(`&hWZU3JTR22owc(Qd&dLI}f*B`vJlK4^M4{>T3u<(w&ULQn=418sOSA zMJ+!C_t^;*-ce>xAD>pB@FM&8G*mLp2v`V+r;wcKWhBOx8LQKz~N-sug zypAV$`SIO}K9y}|%h9=#8|t_Ljw*F^M^iHvzoz_=p0^tprP*YbsnGWR zBR&{3&+SWu1K`^67ILdGspTDxB|55CM{4+4q_1LT4{H5U9%i7H0?u{dI+j=@ff0*s z$bNh+_Iw>xYyWCG=wzyi(q-F}wZ!U31x?ml|CM=cd>pb90^!Go8B8Bn%NL!Y`ZDre zz{Nc~+3xmh#@EV{aI=g7&z*oH0-t=DR^xR#j=M1uO3R6EhS!H2j$m7-*r8tTWNW;; z1?yxs*d#d`d`;{J+WT6r?vo}cps|@Kr`E0ILEA=lU0)CY0&F>7pKRoJFL~!x1#S0= zE%b7avu%Ik+P+8?8_H?)0=4!j=}H*slyrF)b*y>JCPilY8(@AYe_k`VWkNAOioE`~ zBUSNajmut0OL`qkS=%Sm{Ogbq&#!=$!_xncAkzTw7_%zfV$avn@j4^y!p|bF08*lf z^!9QIll?|{QWLzI7hOuJ4H$~_lCZ4|(0ab7Y($z5dASRIk3d*Uqn5daPuituTAOCGpq|-&2!}#(t3)rTf`-2?rV0_jZ$D; zU{lSVF6gwnoMhIWsCB1q^C>dVD38alwPo2l52q0~T=&A6pEAh_Nz5ebsKqQ#Wx~I$ zR1<|P5FvIB z**LmDccx%7#Rt~cJPsrG?&*qAm~Za#08oM}rnQ(gi7=6OHRz^@ZYmuq*epl5b0GzG z{&r$Ex5mConFW}eOg@C4y;W}ty)+x8mt^0Ra?-x;608`1$bD`I!F9FDF$` zC$gI7#+1Enck`B@@e!UEIk?Uj@T(T%6lm1UEPC2N3Jm{bbh%8f$BiGTQk^Q7;td~( zcXAd=y97tMe4jfe{>Vy*-(2K2RQUFMYc9|=L4Hg{9qnnBk5UdeECXZxyxqtlIW53!6*Vhk-BI&5$^;kL~i> zK8#>AOmO_+&`YsLFcEl?cp|cA_n0}65Zf`cJ1pRz>{6Z$cI25Z#a?2Oh4>d4_0b+= z@8F;}DRDI5yOgsf$NbIhtm)W)VI65^jgkQk=M_l07hCang=ViJ!qW;7 zeu(UJf(ER{K|l`s9wfj)5;Q+0OJ;Ac>k(cYp6G!IFh8%Pv7z%!BCS9PAAJ?aq7-fK&DT8*Xs3I5N53lklhf`+kPhOWY3*!9P3NI7%By_HBGe6;u%UTPy z4GeI#-N3MNRXx{U?Scke$hUw7r+z9h=CuF@RC2q(n73_UoD2HpB}@lc_O8pdw(z{B zD`%4Vo8_vq;l^@IQeFnVkcjG`Kii!-P`^RMYK1a8Bl2IG?kD%^72u;{tz{+5Tjc}? zkC{J*BwNW9S|!=NSX$E+jDa`sMD>4<@4Ipyf)}50<=qRLo~bsijYn3ND)6nBM9^tA zM7?J=#VaU+ti$(UeG`!NUPM{0f&mmc%C^)xnXZxDY9egkRrinRi zE7jZcv6H!KBuMmIMI+JCk|xv1DHDKcR?HOCi=q6p9t>6q_HbI=S%$j*+?hgk3t`7f z{mI&+KRoCC$yT>A*=|f$&TSRuw^h7mlb3n^%JPq8s5wrSE3R6p9EVlRPq>Yf(%lkgrMC2`TBi<_< z4lIyecowMXnBjd_rn#fx*NP-;hbYtlb)JX)&Nex)cV>S^_c7#*ZZDM|;CoOb7Ojer z>MSycCHcfNM={=as0RLCl}@mSMJWBO^Dh|p7N>eIn!2BO3>^Xtw6$l@OtQ#{wv6*=fab)vG7>{1`^NLuipI9n+aFN$_69&;xzobxRG|)J9kQqp% z>0`yNaN<`Osk^p}E9RHJr`8?v3p!R4W`eu(_D}Ln1;yu(zql9v303%>3d?Q;P$@k& z`M@sV!EF9nt@K}Qj;%HWbtKcnne_H2pX>S9utE}m?B@&9A>J>G<%S`lR)UvLGk+j_ zt@vHR0tjPtBVL&ejA1P(6Cr+v!YqP8Fv%RhMEF1t9Njgb5|7xUu}lzL!e{K~+H@3b zFzz&{2lS#gm|*w?JT7pd&5p4Ieb_K1eCkvT*W@dZKT^R^-zcj$lrQLOcht2oF*rWO zpe=c3#Gp01dif7|T}SeO`FB2%=Ko~ilk@lRb{~acK)}w}bT9vVUZ*mwq2b&Ly!~Qx z?Tc7!cQ>xyUYD=~oZYh*d0l#Y+3%b?EZ&v>_VE8ZAijqe`z7d!UMV)!|1ucYQ)msk zDye#2T;?T$)_(krmzdjOyq`@g;;%5n`gh%l>zu%ZU5CJQ>x6oVRnPH+hpcs}4P(9R zC;Poq9l*oF|4`vPS6JYWU>D4@e&KcfPm4*D33ycCWtc4^#LB=qRddAlvFiJ1pJ2$l ziP?yECX#(`*1rV&?F2JlXPL~e6+_}R!t4P~a7I$nLZ0A1CH_eZ_F6gq8~iM!%5E{U zceU+U$%vI@fZea$#k)=SODl%-N=_C{YIVe6> zg5CbG3N#e6x7$ojM`D{;hUv8SnYeN_bvem}^}G(_er3FPaul@W7BHC6zo04KjIi=T zdPNMnxCm6XkYH~tgweNE0K?4$@+V9U;nyo^qqk&ZACM@;UqyKmfQy)?g-=q{M7fwonNuoV1_^X$9GrKX@EP^5KI>9bc%MA)_IH5kZtbBrttsgF0gOG&0 zZB;<*J7!;mBFG+y=xh;*KuJ_DmvNjCP$f2l`fF|dOGLoeqlFPha(Z$NlE>!*Z4Ioy~Xt1aV}W zWVtvE8VS#+pXb@1pX=vT`|}I^gm0t5X8lBYr(K7{dz}tEA-C<}BJ5|SJ7~bD)s3&t zKEFfg)!n><7_XyRt1|`#TW|qUsu~As&Vw<9G>Gk>;kQs4vGM1o7sbn@4YMTSYR<&o zxPw(*wD)@Dtczn~te10I5-nz`75C-Pklj zJJTLku+Z*2t7&?k*`x6I3j3vwuMms=2{6%E&3+Jqn~6di9G%UM_0*+l3k()wjmJ88 zcZ<{a2AoXF`K=?q8Ax=*0}u$OB~6!=<0P-c{oV8iQBoBuY$funO4p{A&Iw9ar8fiw zfqP`1A|O`1GcIzZ!me1FP-TICwfOP|w1ZFtXn2Q0O9GzDtFxrxp1}n^X{ZQDgZ*m7 zUy`vBpDNJUYw^er(k&&wb+o1ANho*)l)QnzMGO@5MvN;Vz+k0!kWb9-BWZm=%xisO z{;*HXAApz-h=r01$Eth~21daiTC5?VzFwOC{x7+qv3?<1D-4&*t>Ns-dB ze@@i;AL6@`eDUT&|=N*_{bcNbuFrfBz@}D;viD?*%GI zjRWljF!Ux|a(sOKH*n2P!B`92%LH77k7*BZeKw(_4KAT-+oa%M4|A)(IXSSvog?60 zE$y^)6uZYzu#2SZiNu{gC?Lc>%X@{fbU5V9+_iH^g}))_t)who`v9@om9EdW*la9; zESpWR(2zQR_k6bFh3j+}!25nTys(@1Yk_#tf(vd+ptl3-kQr`q;&A}aB=&G0B$pRP zK$_=p(dUcWt*|o9l@zHwM5|0&`wQD*@9fYX#o-&C-Q1jss0qvdCOJ6tJl8&V;F+Oc zz$HFGN>ChFacwqHv-Tti5n>tabhzW5hOl5m*<{uJG0mq zFVwHZ3-=!Jq6I`P55Xy`BhOb)a?-9DRUceGDpjt%eiX9;Z~3nBrXA*WUli@nrQRX} zzv%soxa{>u=Xxu$j;6YqOtRK)X60y3Z)L*mFGb26$wO<(v9gfOfuew9n`e}Efz*!} z#T2<(caNiFHA~w^^)~D1=QficMX?cF9ZlBNq+g0aWq05ss`P*oEL&ze6gs}MmsTKT z9B&5vd)Or>swGG0!gO!mWITd`@#MSG5t@_H5x!)UU5a&>gRj-8+pNZYmTs zQ*zm*{68TSI50>kM><0KXdw)wfTF3C{l7;(Vv{v0@U{gCt2#n93RoDnFS=35^uCbE zK0uBIh|Lvp=Mcj=ClQ|_b=*F!s^cbQNFBFj6ymO_u)nvCD)#o@U)!3iiKedPHf5?N z4QiCdHP?79uP{{c`MGNq{2|mXTqJW7@~KqY&>Nh)JVhbCqLA1C>m4kBiC6N&p2w*F zBPFEEev7f}rhe^j?t3l|nVE%{|SM_}Jz=lE$)gOl+CyG#jAxJmTFd5XPJEARh7o*=+TPj#e+tf%!nu_o{MNewE z8TO#KnLcb*CF)s@2|;j*Y5+~ixpbE3NcOhs>t^b<_OpYn)@+MM)F7mZwk!m@t0fB& z3|C`oyxB@+U)!kyYeM1!O<;9XO`uhKvAwxUzl|N%F@6wN<0W3lq}@*vn~wN(_iEn&7L%Ui3??A=mPBO7+o-@sWMfnMrTX2q^G{6ZGf{! z;rxg-l{24khc1%2U@UPC1+7A8HaK2~`2h|kVrtXCc6;R}E~-_HyRTKNZ9}V89f;Dc zE8Hz2p*u~{1fdmau2!r32dLHjs|+W;JutfVAEQunyU~YX<@R7`SL^*h2UoO(k{!rW z9IRro9rJ61B-W~4jokx>2_cqY8}1zM3vd_dn!sIlSlG8)m+`N?2Jk+Y%0Tvdj^p+y zi2N04OII9XwS{yGUGe`Npk5)MUh{9DHlr5bO5et9C_tSHql8qx2IjOsfxj`pcZmBC zN)K)Cz=ovB)#N|nl!eCRaBUzZ5gsVf1b_XTNd1uXB4Hc`X{E&M?@Uj?vDQpC5nfgU zEe;sC%$<75rwVe-PI}Hw&peO`H@<#6S|g@16l+j8A;|=GEdK-n z*l|og6AQ=GwjImP;*pwN4LasERRsPf%&X%?+PLJm=0qPvki0G)Um`<^55>LDz;WsO zSVW?9+XJ(dp4KLY>%xlz(snI6BpFI=f@jjH`!=@u+J==9WE&NB6TR*y_zF9>OdBi9wBu;}=BIV+>R(!9u4{=ow*UEv_*;PoNOBbMrN-Q=(1x0HG^(s_s9xiU?)&X_C; zH?Ta<@t@bAsML2CV`XMOaCI-i-3iA{S@2*r1T6jM4Xgo=v(x2dSRh-U0!?}z9z@n= zFdWtbhD8LgJ=o;L>}^%qQjdaVFLTu>**?8(e^-qHbT7hS1LB)8DZ=&%cP#sO3xky@ z)IOL(<(0vDIuBbPb3m0jHtFT}^UXf_3E6I8 z_W5KBvrqMo@iC}GTjqM=zwX5-9%s6}2XObULD9vnsHJJU;AZNK#*(z3*9ou4y}iPx zSypF0n*RfD_uCMZG;G#nCD9Dk;#JDynZL&oUe{Y_2(%ql+r$ucVT%!|T68b#aK=b* z6^WZ0bd~iF!Y8g#Zq#004jwAk2|vlC!B1--{IdO7t!6d9*i}lO?07!2CI3LNTNNjyZZc%H`(;Dke%Itaz&D)7IycZPhq4X-#9aofd zfN&0`aq<1R;KN-LXzdbP%h{=|H_7DD?Q5vd7|laa$u$1xi3dpONW|2B-d=y;OPu-& zVl&LBWT}d>M+1E46uLl$a$rRb9y)tfp#Bs>kOgyYG__u*!CsdoUZ>yD^SkAuN2p*>MLi@c_7GGIb1o=g-Z0+x7E%2RqB&|D z>rB5kE9R+|-$$t?lX{pC(4qx*$VzS5IO_v@m$6>EZ8cruH=W#W({<{DE|Ma3 z1aEM`V?$E+IPng$67i#$D!Q#|osZ;rpW7Fz(b*TtbI5< z=?yIM&=OOmoS>EeNK&&(Yq9_huYk?ZYm~Sml`=q%$nhum^P)MK;Q2GqDq^Vn=^5m>`Jlw*jn($sq;-Op{lSBg{rJTD#7=R&g!JNoW14Q8oV!e1WV z5LVAq&OL_ksfQEA;V9e2g!XB?eMjyt{{p-uXXZL4(3#89%f=+lyZr7FJA4t*4#rqA zb+u+^UeqcvK@qOoZONm4Nys9)>(!QgrI%CYUa|LLsMo!CvGceHiO*)wddFpQ=0ism zVUzXQJQ}tP`ZHO_|Cgg3{h3N65F7Qnf51A*3^iC$W!xnKN0@}j;3+pb%5tS|apk2 zF?MBE@Why6e5B(eyn|VttGF%)k-2RwEsgIMKg`?ZP%rZcFZ*KeAjLGO<~2C5M7+gg zmT9?PKOeO}AJET7#Bng)FVf>BE$2H;ca~4t`F`s1mt6>7A;$QV@gkl)#N)@yH<`Fl z=*A;OrDb;T@23?r*i18vDB~LZWUt0Pe>tY06bEf6(mFU3COn%a4w6?wF_)5du-m!H z5tQeNlX$~LH($V|;eLoM${XJ?_BLNx$O+f4~!8?;Wf$+#osf6W2_hH<8op4 zPoWuPBZkUVdtN=-{z7w4q@Do|iJ2!X_wum%e2@zyL8~?rAV+{1A8?d*Oe}`97I;|% zN5Xe(5H0ljKr-?6_HNIRKN6;|X`L{MLg!w!}W_TD1w2l8;d-QP0e_ni?4Ilng;e)lN1 z@mEB2pTNxrn4xa~PegBJY2F2oQtjPbkXZ?*3 z`MC&bU`Tswpo5%i7i2}x<}#wAbOt#eR&tq1r&Ur203TBTlO+@C9a#)zY{M@nL+_mu zJpLtQ=q^uL?ZPw2WqWJWGiM=QH+ftSVu>BV8TP3aO#n{Zff-HLb{ha^i!3MXj?@{~ zH%5oih>;OXTr``#1JrtrQIWOgaImlv`*h|tfYFB3o?MZ&knC56Ru1Q9YN+;xjS)`{IlekrP zN3oy?4=*GwfaNPI1Mu#qT6O>`wL4%=22Ck<3-;x(Jz2Gg#CuSoHd$!y%_`#WAX1gF zaLXju-9gfmPFk8ZSq+T-Vvt)2>Ru=NCBRg|=%=0>TlxnZob71xb$ zrgSf3L8lKMP2ep_Gu6D!H7gX}>oz`sNqsTmVy!HQkte9Y4dHciO1W;R=Xxn zh4HwoMCyhWyU&*?NK!b1r_q^srkZ;&e+CHTOeX*e$^7;;_l_N;%%&CzFUPA%HJ@Xn zYY*-awFA;7zqQqi{u&3~{9>01K*;6kMrn zi7O5_IB~S9(EjsA+NG7f4PCdow$v$d3sk3LPm2J2g<^y!@Ryl`5@J0NYOh(aSy6Up7JErXAdopJ_+l0g#pjJ908+!$B9#cBI{P9Nm{BE4BS9z*!>k>q&DGkl&q4-euNC zRF4+DG()NO5P6#+u2nSqru>1zB?bIJ3mUY29w3zlDLM`0x-A-194q7s!KXrO(3p9O zKq)!q9+IRA;P0^81d^9U7b$-{VKEZ{o!9L@SW~D^L7V*vfgY9JV;eky=#U-a|5Q5U zL#RaTfb@}WCjOD#9`>&7BO7^mCmh)YF@PWLVHW#oyV!TJ*r~f$oJ?Db@J$#qe@|J2 z+WDt=dlNYK?z@zTxBGiSMr%BVSa@ zUFoodN3$?%WZ)ewR$FgjL%km-?P9h6_OL>86@d^fQ~G$a!s}-iWQYM?g=?y-C396$ zy7RYqm@@uIO+cCNnoNfXV z0%S+Us%|GRVbG+YyenDdkjszQ*6KO1f4kX@pEY4OcH%jJv5&=$E!e0NFfvYhrPg>- z&V$PEI2fd3evaiZzOupf-bHft%w_&>JOSJh5lD>?Jj`Kycj_&u^VAVBN^MU&wlFCN z25d)oKH2ez?Fhz$#P5hL!pJs`4INrS>c;&9cX5_5+z=4g%6bwf0Z}9Gv3x`^;cJVD zUK=o+5+<`HVv47wf%pM@kYhH-BYic;n|AO}40v0yB3~xlAn4TRZh>w;v@J!!Hjg7g-RiDjZL&nGc7_Hhz@|_g;d*J6 zuXD$INmF4@=TjHWKOjJLqfynM7yU6fC=P6XjI46wORBZtT5n97# z$gJ~b6k;H|G=h*sDPK~hflwo1)ni!0*^LqK7Xi`LB(BEmK%B#u+2N6>k+PI)xLx+l zyp*NX=DM}C$tj@NF;?slW%;Jkf(BquWuVano7RjK(xwhUFl>GvcWzVsZ`@^K?%Jt* zlPUW4ly4!^$DKpS^l=^4rtI&pkpEdL#c>zpL_*ywH@XLh%*En1jf z34wixOD+$a8hE#wkzo|LT8muYT8|rV@JYH=1HCz}Nrymwu2qcvD{K9v(6!VVFz-zD z(b4Va=h~qnYQB}(r)w4Zk7Oy9Gi#}1gr93@g?(CM<-W5sTNCmb6hL)3JTrvD9ZdJW5+f4$yi|{s|IDCFAHGvrp1jdJ6|WzWRX%edjaeM zCe5wXx4ppGaSdNP__Ovaj+;ty-|3AX_;GzECwh)~AQIVIOl`^`Vov~F{l%-o#kPW- zQytH@s^bSD2tfk>x=`Q86|wF-CMy+)+Wm=ZcgMuIfG_0KDy|8;Z`2;A^zIZ;ZEOFY z&iZzefKLhjxe@>zP3sqhRw6hcxMO~V+xu>bWnLG|cu3^Y{Q@s`uGf927aQ%u)`k_A z*=zn&z1S4@;=rJVvvn=5^yYrnj02&MPou*<2y3|A$tn+LcX4`U^gs&hY~fc}ZF^*l zxFSJ9Av1SGiG5dP%P!5rsw-kQm+cK;oI*>>z%jCqr zL2kWAorA$DkvUTp({|70S25-jF9gtHC*R@u-skOqdTPwUM z!*BCouhGt7YSgzmI5+_D`!U}#VHVfW`Td=zT1=nZFE-RA+C^l8o?4+OTJgmPGtOvO`Sa9F$}b+0K-(?n2Cq!VaNKIpGRDkMQv8^_5;N4= zsC1`;Qzf%vdp2L<_3I-msD1#ZZ_t}l2T5e^6*-(x<=;Dn{1IgZ(H}w_>*Nq~1XquD z!VGoApe_+JBaqgIR!0xlzIh|9iq{Eq8{s2WLZtEv9HX4Q5h>_H!z86n`(aErWC-Jr z$i8A7hV(YRkxd_m8qBTb6=R)^)mr|FE^kGHdN@5@RfZ7xR=JF-AYrp*3cePTD#SqJ z2b2i`adm*MueE`$w5PcCKDwrwVVzA{(q>nit<;ynr>nO4 z>BGUNM+M7P#U|;Pup#o_fcs!%3tWi&Rrq}AAqbHlesP0B<^7&NYiW!B- zKZ@_p3qs_lj!_fP%i5v-1b&o4Xg|iFEGDG;Q7|-2%+zQCHybwPkIci05v^l!UKWhE zJr{X+GgCIM#ZlVA$kaa$8ynfe%7O1#xhHe}`Z0#jTbFm>ErFq?ehto$_$-43qY%pnt zoP1EqXB0oCd(2#ksqqnDH4&#Pyk3`kc|A`9>x=LQn~wRU{Cax*ty#gYLz)%zKDAi^ z`>RPCsDi6x@65?97V~jf%_DF(SWI{lo!n2F3Tu4WnB}U5f$nYQpN=a+2YmeE4eTgv ze*eYB>o)RcxeSqf%kaY{;Tj+;x;${o`Eh_RN=YXR&VS%?*qfWymV*G}_;f*qHVc20 zIn2f~I-7-)_3YQ#ERdF`&fA-;60ul(v9o*&C$pMOb_CNQjbE`vx=Pp&3JB_6$FrPo zeBvH{@)q;YOq`1Q0O2b|C43qS%7!#{osQf1jGat;HJ&R*Kz!HO>|$*Y-_&v3fxUQa zjT=Td0U42JCWd&OKlUbpYWX{R%0J$w#WgF~!lP2^Vr^$;$8>oLK_frvlsg zfX!0oC-OvL4l#?)awpr19V+dFZaK@Z)#k|-0^=NOOiywU%v%?ZBSwy-`Z_u6m3e#M zvj`7(BR+1s;SWY(UwM7SD7zLnKFWOmsXFbjDJ1f;%v#v?6ibmwBU((9uQ9c_#qguX z>nz{geoW@72{p|CdXXDVy+(84xCrS{`o_%XI+>@sL42j(=Zv!*&cHXob(rE=ARoOn zDEGK(>G_|Oo8f)@h8Wf&EX6n#Zo@l~$EBvii(TU$!N6tAZVzUcL#5ae&4%@&9oF1$ z3!(ZJ5L#m)bYiREX^w0k2ZPuyU@D>kU;W?0xC;9HEMClJdjfj%Iskt z8SYTXJ?EK6hc^hv%>6lqyw5X_4X?G&OLE}&YtDp+`?1#MLcf{&Y%{x=C;evJbDpX7 zo4MCEgS+l~?us zgIYs|=pCDo;83py;20%*uTdglu?=opww%_>!`t8hwX@G3?lVwFr!Y`x8JwJabg+^W zMUfM~cb4^G>3Nj;9N$LA@y&1?pFF!o`~!|J{9<0f(O%G8CZvBxQ|8Nr;Rn|TA52e2 zm31@+4V>Fg%ugDkM|%gGXAMV{#HrUKmC>JoH!ornFTU<3Y;&EuL!UTx$A<~W-r1fm zE~{@g#ruMuo=m{OAFb`YwUh{9jLLDQOwj>)Vs;%PsVPIV|AV@(oDNJRVa`XOIvOR*W++#|f1y??=BV`bLt*Wu z)c&c$GQ43um;Q4Q=!vh;Q#nN{Hs_aG*YN5I#C$X_;h1P#+{dh2m#_(bL77z4xjCClo{ld;NL6A11mO*wgOZ|*s z8{15ExO}=zI`j_yHew(@MT)d9ut>y32G*7^3k?24!YpK&;Yv4yCqtGw9@lJ$ z%+KoVuxn!_=9nr6=M@nN*JWg(#e1q5@@@@axDZY|X1+ZP@wz>MQB>Md)PGyx`Opu| zwZ3bhnPb>qN~JSN;>OqG_}^3%B|2X{V zdl4ET@c#eOwev`zuC9Y+gi=iD@iE~kD<|@GT%c4 z_dnxh%1(bnHUslW4a#;|qtJ762t~Oc_X*Izu4s?>}a*TE`o=Qe}ak`6xdY$(S}OR!>n z1*~@o6k;Aat0}NHb#TDC!*-ivmStNU&NO$FR%P)Pc%&D!+0!eFc;Oo_^I2@LDFa#!E|*0FOrn#PniW9FLS zNwYeqN`FOmR&)UJH=Ly{3__7oRsvdcggUn)8+r4v8X*q3&9eDqYbgZJ-=zFvW;FH) zVn%_PLb?E9*axLaiu24&w{9KHv*V>E()Eukc9%lWTBq(}$CwmJQhcRDvDa(5S8$@Y z>%Cq9qSpMgYEs5p>FU(}$lLX$rmrC}H=O0aj_0?0Z>QS6&s%BTeqG`^FQM_qv2`Y3 zMhDD5yBvjpb{51SA$>*|T+4>u_`HLI%6U?$QDQ!iK#2zokUVTQC95q5xsW(07y^-E z9a3s5WpUh{dsdZeF}!NByKrhp-<7^7phxRFq&<|O(jy==TQQI^F!CsvSN$Fdt%0>)q0lL zsk+IkCwVE~l>}+nNyr>M4r0@QvRv74F9Hz$v$yAe*`2)zrFuIZR-Dxp-^a{BK=wH9 zq`0%)B$IASNt&YDooYEJ% z&zmx#w&@tF1CX_2jO|8+*5=SUHhjZ5NC`C2-r^z_cZa7Y#c(%bV1W6zPGHj>k5LC` z$SNFXbxJ?*y$p^^Nz#i+iZ%tishCmhW@eH$Oa*u3^4Zj(5U1P43p`71&*PK>Xla^7 zVzY>&T1FACkLEjFFVdaAK(HMSW&Fjc2^PaPT$5q9pK#hX=d}3SXij325HM^_Lfh@6 zBGSTNGM>$ovhbQj50kR+HEyA6G9VDoa)sCKUTHT(`?qkfcfA4CozNR&ZwfMH9H2M1 zp#0uio@8Z<1fl;oh|3EE&}?&}U|i_t!{*w~dWBQn?s|zDH36^>!hbK9kKx~7xd@rV za>Cg>o+hCoWkUrRSmU28ZEhnUCjz{02r&EK%d(wi(V3;4q;MHq;cT26PN5?=#dbGs zV|h56bXXzBZI>x%xpXa0D|nQYy%mzD)J3cc4xiec( z*k(z->t!m_r6Zc_*Nu8<*3r&4h$YBmyj9}|l# zuDqfkXwRYz@JpLBDyg$?dSFPfdWo}Sm&M2!oy^}c+|xmS8{^84kF?Us(saPE8YP%B zFmaj&|B|-IzoeCPu)Dcja*Gb&+eTGVP+*>eOKp7Kwb^rzX3yQ4J$G*QoY(BRL+Z15 zW;+U0w7E|1|0j*2UK=%F@EcL%`t-GRDZRF}NUHmk-GsDao>aC5yeOH7l}23fNo>t(RE z_v;WCZU91gMLI0;QW!(<<{s=a6bRwTs0(Br2z`73hTcdR+;N6^#qRNt`%Ry+~nRTP;yn-22 zDj=F}(%gdhV&7kup{=)zd3RKW*N6LnzXM`g3c~Ip&j#^)^JV?DB)!VnL5A!7wIddH z5Yg6xdZG+cb^z4y_ppLqSMzMTK;6;YoTtl{V)Ojz>}Xj3PDKo`iZY*OD8%MRb`uKiX)YhtZl2si+dGMh6u!afEIQ`ej)YAlZ01lTvK8mYso>t zCq|&|w+p-~QqgRI-wYS{+q7HXqTNs2Xv-iy6+Rx{o2OB9HMM5~<@2DojCKENyI2$B z6iGej?@U!pRkH2K&UBPXhe?5viN=wYQg?i=+o!2yqX%W!6BLV}rb3HKK#Ptu%~vC& z3FvOl$wZ~$umgXbJ6_u^Y5OhBcJkTO9^i=}LB z0(OX!C++S|SpliufO$0+$kx+`@55`j+W}Evx`#G6EZ4>HalmUG(goM0QM$i8j>?{v z@X_;4b*K=2uuiZh+-EHIcecwY2p?^SUA{hmc@d8f z5#>9$eBItx_VV?fl<&gJ*W&|i|FXb_e^p#uuDy6Yp7U=ETm2Tyk%D{I-aw(51pCM<%N{vuj?|#6>tS-UL0R-9hl6JD!-&kx-(Bqs4M-eI8{4QCGrI{LouE#W@ImFG>7< z+x+$w_9I-aH(7|_dL#tc+5ljW1ONlS1hLMvcS$P52>-5liyv{zxa+YNP!C(cbu|x0 zbX81DTlt0_&&H#G$4kn6z@0ZikW;a{nqArmIqq8!7><|y;b(+l$KX&cfflyuU2!tU zV@hq4yP=+XDpA|BnzpTC*Y;E6ION=_sO>`k0#iN>DHoU)`d?{j&LOHi{Y|EG;)I|C z%KN?T?wD=V)zIFEFZa=b{oD5PIf0Ea@ z`2B+2@(34Z9cA(TbMwMk1UQIA2IM>2vtOj(%>%Nqi!XBei(draK1QirqOfuJI1Rz- z7f7M@D!!w6At9Se3labk_%8fHXnISTZ%^{elnxZoI9BE;M{4CZ{39PgeGbDUsT-$!bghFDhv-an3 z0~-k)q=}vna{U}HuT5qCIU7Q5D;;!5M2_Id-%Q+k0)kADIQfN5W;0bkKbI>F%8v8& z@EP_L*hpRwA*2nbu0rQSTrZa6&IjWor_&Zj$`~JZi$wAw`)sSshX<(VMc>wmZ9+nWWpuGzEqF!c0!U7p^$Tl1(r-zaS`eJNb~{ zW9$-Q3E#3jEX0!R*T{C}*=U3qX263>?%&YEVU)3wMp_HaOf`(G+P-lqRwm7i zOIsLydV9wAu!_l#F^BqTGrLb-cC{}*YVwjs1EbHtVijTIm`Vv4)?$^Vk;y7t+%dK0 z;DX>4g3iwxhs4VorpfZ%DNh4fs?G@XG6K1otMT7LUOpsO+iy@5zoVOf3=;K{7&Vc4 z2c2S|mTPWP&WGEGoPLOm<6`E-8m;|qC{zBs4w;IvPVWru+MVd-*5LI5jB(WXJqo~g z^Mne0*SBC13@7Y`zNGlS;m=}bFW>AuT&K;@U>tqtDq@aVh+mbp@q48VBO~Q%bL8M$ z94QZBT$_h8gh^brgXuCADx$QvnObJE6n$1M>^0{>Gwtio*$MlZD-Aj~Lhy(QbsyxJ zX=M^`H=+zrX(tcU?07XA&QHn_BRXTHk_OqVXxdp9=(x3K>uj!9I;fS1`iCe!dIj1Z zZNIs)xtIrIooOaxeds}OD#oL4F@&b*d^CSYk=khtf5-4FAGXm+^F{>1dI*}sNoDo6 zk*^bl_IYv{R7|aYnb1YFHCP0)GYIW=nyk;eB^}iYfq4sC9AK7NU~Xb4T?f!mu9-H{ zF;>qx14wJEF$t3)8Ask)>e$d{!*>+-#j?-Nh=BSTk`w&tm=kJw+r`{n=A0Oo`WBUx zf-vd2qsUD!*r95v1u%e z*Ltx(=_7mag$84&P2i`jN!5@_k2eZ z99v5CsTADkZ5|}LgjV9=O!Pt)tLQGzTw4kfJTTrN%snETPmQ++PJnD(%snG~g!v$r ziZF{Y=U0R8AbIT|!q}d#MA)?rJeHY?8+Szt3@X{!am_FThbr8HP(^7G>LZ~4mE*1H z?E7Rf(<02o^~qlZHq0wTF9tbK?kg4-d9nCW$zOX0ysLR$Mxqn68Sg|KS9?`fu|6*#qokJrwPCYiRAm8Sgdh|+O?9a{CZZm7wNFeN@rD=eUKv*U@ z)0~@CNfQtVE#4%C$4_55@CM#B9{4M?s zSM2Rz#lA*Dvb(vSF+&}viFw#0PJ%r^-fVNGHg~6_=qY$=!Z>nHPMTGMZHq1>!!R9PYKP zl(Jqk>?XU8Kt_jfBeM#bJ?Cw)MO#MOg`4UGH1nmu3nz~PZ$9T8t8#J7@oXQG2Svo@ z;xSsX4WsRnofk{On_&23x2G)Rg*q=AOVhTHwaLAhn5`FG%z5_PO*9OkFI2V-;4;hF zh3CPrxeKQ`ByaSf3}1pQA*r*Jo1h<#a-Zd84)r?yh{s04O$T`d^WaiQjW&1?Yn4nN zBkkiyqgmriY{Qx6eH$a!UkSFrY=sb5D_#f0RO%bEYjdjkU@QfU@7Mu%AqcK6o4Ch_ z9bx-?(1+f`y60HpCb=|5$9Ma<2I0*VAdWHDj(2l?%iHc;nM})5%1-S%%PZbD+HvVI zqE|TZUlO(8e;@_?I$ZM1lNJ{DlCy+aFN?ud+`(^V{XAmlFrj&V^NC*~8+&_(q3El0 zCm7lSHf-;G!KtohhQAMANyq$>=j*xh)B^A|#>M>D*x2{SX!JKFh*%wySRmae5A0&ROs_YyggH!SA&#Kx~3i%u8?)C3!B@}V?l zbtEgk3`4)t$ez4G7u;Wnyc%UdmRUJIaxmO*tX@}g*C`qn@lVDVD2dZPIvL4dr*kU` zO3WRLSw2Knzpqd)VuIF3;rTA%`V|cRAX*&9(_rRU+&XaE`UsQgY>e)*tjEgqbcKu| z52+Z%$z0I&htE5E0*W_E%-N*lbOjauv(miCn|(h70%bVsz*jEanJ#qu>(XqphoSf+ z#JO(ly0^zDA};ef-(y4@$COA-c!|fxT|Xucv@Y^WG`LTA(2TZ9nJ{sz;{Z2Csc`;S z5a)O5XMY7~i+th^snnH-Y9+3S<1U{G1hf$Er_tG?ECg7yi1~IRlP-hN(ophtG*Xn# zvg~4B!}l@DS67pX&3|UGbk8JF4dpTeaLZK1GWFe&W!n4S%Y+aYF4KSb8|I6QoxNe+ zhc(DD$C8~W*e?U^b~(1d{2)@uDkwUbMek=3Z#aCEE_FYyoyRG@Ld*o&LL0!|eCR!u z`Yl!tEukAI`H`g8%JH_Tjrx85c-Tp>V{?SN_;Znp*<)WvingN98?T#J>-zGQJa8=9 zK9fd|EzlNtShPL+AB(oz1lGR)Q-Sq1N*`q-lx0bk;AXCi{zG^BOiPp(l*=REC(5hP z7D1F3loy!S(ot?f(8fYyW{7}&C<10lt^7*^Qu_qk-8pi}cSANq1cf(hc(8$2>jr0=ehmx;BzG5d6P@1ZT?o zh%$%ik!&`uEQVp?Ll@1bW!gg}kw*v}Q!p_;X`+`s89(13@nNx_4U)u%a`CuK5O`Ov z@KGIh;=orDbAttEuSsm!XgyIc(9ci#=@KC#4IW9VH#7<@6Cf&4xBsG921JqY703{F zXKt43Ld&h0f^Bj_;+!Y9tVOq-cgk-Up>)ds8=+G3X#VRW)K~55D}-rMx;?d?z&E(P2cV8aZM-E|iKWs2QI?Pfkk=#5hJN1>h$XTW zd~6&y8%op7?+3@}7<>Y1wC{W`=WA|@VZ__o%(_F%pz;~#p$YJl4#4uyIze7xoKf*xsFVkK$C=4POY9e0kSYhF1Ndre374uR3byBeF^kAiB{D=N zrd^Ip{yGVrsVaYo?AA3_lv4SUwkvOLQTfugD}O;EJ;m_TFkCpr%g_?FF^td0A}2Sg ze0kfIKO+c!P`So}L;?CzS{?|n&L7Gp>Y4_Wb2>Pv}ZLOfVPsj3teH14v3AhRVO#8 zijwa%mU^Hh&^b{o=(3*@=Vg)LYErA)F%m<`jQwZeb`dSpV0maOVepl7ws=Nc1cwG;%t$c)X z)bA~50@S@-qVThz8Q{DJJk_k9vfm%TbuKG;sQnl`drm3*ZBmm_jIrG zB(HaTqLwK~_TA+MiVeWt{}q?y9jV+7}-DAUp)8d}&+LSOFv(2GoRN((Ol8z%IGjo{8@ z0At;h)qwhD_#jCPSLR3>7!HZ5lEd*^l+ybnIa+vK6kqB8ol7wgEHV%3cI&#E;Hl^5oN^4j7t)%=ki-+5|7Ya;?jxpZJUCe|dmpulWwz<4I z)_;|v-F*U)|5&1lzC!Bv9}qIq-V-jvLg!fY>~d@F6_YDE2)zs?yZ~9r4ehZk|Fx%~ z4f}7|K*f+=S_|Fz9k=ZT5$#Y5hKTa-D*X0aeeE+`VdwX_08fj#PDAj2Di%3NGES{|Y^05a z@*rAg#n>g@2g|vUm_en~`$N-u z?^AEz_>V0|d;_+8%+7qsMQ1pDOxq2kp2iWVk;(mNaFD3Tro0&+dRU=SUU>XAV)rp%}c(pk=J;8<7 z6XX}mpC~~7`mAa*sY9jIwrdsK=F$;`(f^X3qbD|6gh<7Fs)JbF*VB19zq~~D_Z!k- zmu8mN@uObz#DaVOhu8A(+U!El$Yh@QY*UataMd`Eh*U!44A#qycGHq#}An>mV+ z%mlkOq!$AEyZn}G8e8s;2`3`QOnc4Bbk}F1JicT^QatXLnZmP5Ga1JyFl}pQ5rP1> z*4uz4*FeOP8Xo^TG|V~De}KT)SF2}AipJ+{_eB+Cdax`R00{aAoJ}z3!abqTPKYs+m4!HH1e6-FRQ6vfLbNS;b+PhF|Q>V0ROR3GIgO<@VUzne&j2Z%4Og@lU+e*I>?TB zwCsNg*#WIrB?`TPcd&PJtL@gc#ASP1w=mzS#(!Lx zg^36J2V-f7?yViWxU4$*C&u~^I6#4UsJy7zb8@@S9^NHO6NI@d1%IYtGm(qI8`!a) zgpp8-%d=4KtxLwy#8hQfEWF8DBR^Q)z=hoiYs|zZy-SYLPbUEbEC@+xbY8tig3i5l z1a{Mn=pZu$r4H|0wvw3X2jG5RA*+#HQ0L6RGrKF`ZGridjS|(9&3y78173bu; zJ;?$-N9N6*fAzYL!X<|0dHI4?_vU1szI%%p(Ou#S&~~EY{q^C{yNV__^IqmnpG7QZ zNAs|3CWpXhu~>EuZ78i>I7={{XxAFrrL}0F0E3MFT8ORYGz22rKw1w!A_ZGWx52&^ zPRvYqa}gSPRk9gnAZHvfas)UxUVR@1!Q_0h_=i=bt%P}Gk*!P}8q2Ep`u-Qc2H{p@ z5om$U0zC$_wLHNiS%tLKs}=zK73e;YtO{6QH$I5ILuZ-D3@!BvO~R+#Fb7Q&1X62hpeMW$jQ|4Etc6g zVM3i+H`AQc0a9dr0j?(IrOwZt67W|W^^G9rV>pU6ZWMD`jN%eT5tj{pnj%Iv?9^d2 zv>3)`ZWsjdYzB-Q?J$Xo_^RXzO5~8~4qCDir;Sc2Pojj1a zEe5i{4P;e|fvofg;*X?uCy%72#Yi4xB;0xY2w#t+M@mYwc$_TGedOL9hVo8Q0f_3D z#W|2VyDXmrO??)H^KW%I5qD9Cc6%t4$32UOky)Ho%6(r(@ zTR^K;Au3uI2qG@1Q3R!GaKnvg-Npa+-22{}C6f>!gxJ#0?&9Dz&i}3%N`Cn%iuw~CJ;HqW| zxYjHHKR81@T3o=TU08shqZMnvQ{;rpejaOL{Iql}C>?^-MNzJwEY zzPZ(}K1wJ(jvYkqHA8 zOu}(dyAO8f&Pu!R49u#lY^mZE5w1uK>JLaC|+p|E=m9isLD9U?LHLBz8i*2Wm+-N5}+leihzRH6_A2cGm))5&0UE@gs8(fil4Y6;{)D+p##_=rhAE1?kYP12Dd zS9Wid{?)druo*@_NndCvM4tW_w-VF8C`U;<-VGNS`JOF%Z<017a|34}Kf1mOys>>1 zYB<|D;;z7_qAlnS4Bwd)aU>@vm%5gmM$0g)%fsofA+hzJM55gy%7QDUAg`nM!UG!J zy}Ns<7e{yC4k_L7iO7huw{d%Dw%{qze0?%A7jJ$Yy%nHnPDITQV13;@3B+ERIU3^z zZXj?23uUfvPHHgoxQm=MJrg-1eKhR~U@rfEt2s9dNjyQ0O*o70WudY=8}fdjtq;0fN0XcF9$D zvG;e!m{C88+gTK&A@veYM569}gBoF?{;kn9!{l%JSw(T{gHSnkmr9*M_1bg*;^GWD zw|o6t7J$s+Dzk`*ii=FFb4#5#x5&(x<>QmYMO+^f0R!HiAj698iLBK#Y%@9hfB6!t z+{3lKaVcWHO_YHWceAARye;1=L<&x_Gx2OyiQ1*JvvlIu6OfMkD)c?s3d__UUzm^| zw~~at$X1G$vx5Weisip>Zn2g4?NaP3q^dF+6Z0`}KQxeBCrzCW+wwn}4fzo$dAvSz zaV5V*;V=jtxxn{J0zZENfGEgi9rP!y@7zinpkFjg&F~xj?&G+3>{DW91`eB@nE^fA z@kl?CnL+NZ|EUuj;uqBF)=5^}C4KEIi83=aR-a#zL;({-w>;}O_4Jf{91qW?z~nFB zvHmqyf<4kn$iU&k2a*dM8vHgMR>Fy0r3j!CR;(KD>1_1}6s$}5>}Qx0s`T@hNlh=G zpHI$R$<}(AM5q2jgF?rFoT^KAEg%m`_EhVjr}S#?cUFs<7?VjrZNN5xhW0x8$S$=G zGBCL>z7?ZnsecRYehWd^o+RpEbpV%E)66Ql2j20KRO}^&KSVu_-B;%Qpq^ir8eyil z*-Q_REp_tJ9Oq!c`y_@)4UO0Pw*=2$|8W4|c{b1~r+S=~<#JWCCC9)w00D~$2E7!n z!r4=S)p1DT>Kw_5oQ2E#Hx=4Se=*KFdV6AfSR_4cs*r@jx(6;5dI-}4_xAN(N%pX* zLerJol6{^y0Z9AoskqTI7o3*)i9y}&ii>Mg1@ubKtd8!njaEpeY&|a2Y&JPij}r>^ zkUNqCluwZFPZbvLQZMztvE@^bnap&UhOph8rZNEj1C%N6NmPz{K9sK+gH_Yn)3RpT~M3eNk)JnSQ73^Az>B8%GGP-61QFi zTd6W(B9j&?7lz<4^?5nVI3pL+0M*K!3F4c;47sz~IzxM5%&i`V3zmpwP;^k3oqPRc zz(dE9o@3U!TyhaCAq9>$&p2#W9sC598`PQ^Qu+MA5_q0U06!FSJZBE`B0NV~9X^gI z!<|y9%4oHeL?_*FhoBDiPcR;B@74PBu>DqUg*PW^He7$@Jm(y|InmZ=t<0>pTkEG9jPUYlHTvmA+S7ox ztXs}()V40W@uql>e9c7x>_D(A1I%{bgHL1+zJfq#MBFAS%PMkWIt-@f{SgB4MFx<6 zjTyxy2}_&v3QaxEGPY5~7MCZ?x(598%Qks>3c-A1pUO@TcHzI;rS%zAyLP zBl>!fm%#%QUcJn#E}C#MG6;2zx@kJD3*4En3w6D2I{(>hi2-i`xdgb~-m~niYwi#qxF6T6Y69jB#d!s% zoDg#1f|Y@KFjAAcp4aYO>(HQEatq(UUj!Gb4*$`h<*5A7#&L%&>ud$5*n>+^*r_yYHL zD9Zvb{%lryaJ&FgtzfD7)&c74atZa79B9KepYk}jFcGopaU5GLbqz$muX3uWLd+Bnom!eSU#m-)Vij7^q)JH-HWW5_IdG;(*>5bi2xUQ!w zszmU=@mMzzrNh$|O{R^wIs`|9#PC5(W|?$QUr{Y3V(R29uVk>k zTwdblwW@+!;sHse@kB*fe(u|#y zeueo}XPspK(!KzzWQ64vRf-?{3x$4C7|#1hM~}Sbm1OjfN^1Hs0`g5Bu*UM_D?{GJbkHBY!*qtgMqOReC?CEHd)te{cs1~XF~5LJ7-N9p@2aJ@ z8!OF`p*N#!+q>hPX2<^~;jZk_zXeg*@k_ky_$N4Q?c9#fk-o?Zr%5Dznf*T5p%ZZA zTFSgJqdqE;=%HR0o!#~1=j_dOFLf^FqL{SRgB{_v zY4{%7ZF98kwi)aLjKoni(QlIp7YnO%J!b)d;~lSPfu*657hj+?q**Kpg7XQUa#kX6IHwUy#c)^o})^77)Y&|>>w)zOm2QA$Q zV|lW=xm-L+|A=ehsaE&(beb8{soCj^EVojL%w8Rxo6t-|^2uiG`Id2`728NFZQ;zQ zPp)T`&!qB`Oe#Z-&k=54_O}Pr&-M_eS5Cqf53JIa&^~xxK|5$)XYd#noGNMo^JIo~ z?(EI&%F5i^)lLh@p2z|r(sI{!wgrlm{#*+Sl!>bal?`TTr#ocjW4KRo>ErUQtV6zO zqBsQ1B=;$ni_^J>9;Ctq54acMe9Z&NQq@)6oF@60b&hWHSUmmZu|zkT61Lp<1lY@4 z?nzPGc2(E8U-5^XBUu+yK3&+OuTe#5_Q;*zSwuqwLVqwUuW-4}#Lje&Oglm?;{k6U7^iRjRr)$z*A%%t4iae(jSr? zsGf}!C;XJ{C>%uLvctA1;VRqaDf}bxLB8K#1?B5m~b5B&O$Oj5bC22w>NCeMF0fZzHLo9fQ;?gI| zHmvd3+FKWTWV4rELh3Q1Gc=40-+UrHZSaW%l|6D*U-9_q{OxhJOic*ut4gHk-t z_~nSoO`!Qc2{H}9>Poj)I(|pQ4-K(Z_~yq$?3^@vD&LU2Hkq)izoU$`p&Ng4j?>f5 zae7UJ&OdQzZj1_@CpoR&3)sESv*H$d5(~YYqh}2^Xk!+9#k6+Bkdp+FKXwGblVZYS zE+&vEV?6ku?fWSr)2nE1Y(I8r!Aa+SrDL5O zU}aLaj_bWw;Bbg#NwwUvE7LirbtUz3BR-TKLGma;e-8ig4=EGAri2CW%jrv(NRLQh z5FeD(A_}N`Pz;J5{5BX6GXZYQwIvdCB;TU`4%Eu%{H|lr)mE?FHfF@ypZVbbJt#n6 zhjx#B8^iZWa)RF?naT)co{$baRSi>XtSlo*o(*L*8I@~knyx-ht+EbPL&V9M@2)O& zxdd3$>q&eJztG4JUFaKWm8d5tfaoM^h`J=z{QU{(id+9%CMNB*CRJ@F<&@Cpm>?mv z*)Y6@mmKXjmPTKcAvwyOPnvBw%}`k8$p)dFej^>o_j`cnY+jC9$hP;xc9>3KzyL;u zJW%0Ug9@8*+(^WQdFIvI>A`At_$q@9?+Z3uQG(vH8(CgKfUatSPJU2Rg7DClAsI2y z@{lqhGoY=r{cRt{Y(h;*E=wJVVw61lA{oprM_jqyNZ=o6!F(=)4BT2HVA=gUlPkb) zWn(a*oFtO-eAXOLslGApQRU$R(rYL&$6#`lpKt4*?o+#ZXt(G_Ku&|>YwpX zeci?4J~oE07zV##dojm8ehfazeeRIAwGI*dq8qxXvFbvxHdsSQ^BKTzJ%c3AngK?f zfG&u$d?$2i87Az+Kgq};E-k1VfR?zlj1|uP6%Q0q98aDSWk#oRX%TKxyRR ztU<%{61I9F*y08OmDwS$7HyK>j#mqV^;1_BVJ^F|Qm6rudB(5heo~&d#fSiw=pLYh z^dL?OV0Z@oxn2sqY3A9&5=FrT4quPJWy|-S!n1|tWUAMRO%am%2n8+2B7q*uHA!_9 z*`U{vBBaT66>!w%0R;}!v%=)a^JgNc0k44_wN(-($}QG~Z!D&!J1ezNqW;}YxYxSE zdcF%(a<6A_7`Z81r3bP!Fs5Jy{ zkk)xD+U$kXQJ!8edPZUXAxS7ZVcBF6_lml6g*bc(UoUP!qL%)b)x=xsxJ}DJf7+8K z4{{T+k*h>qxf~O7i_HlF;c`OH=yE2_yWB?|Oq*NLXby(85E1(y72wWV(U9JQqOrf2 zz_@ho6@A&$GUVN8Ncq9P)Q6O}d~>g9`HK8rj7Ibo-Y@1EeXf_D$X1MnU4Gq6N_-~& z8XL;I``b%wh*{zYT8ZL@R&P)OR2Z7+&b(vWjilW|)9x*q*Zc|wf6nwPS*#53V!s&7 z7fa0-FUl8pFc z{eGeS{!KLCfuk`F&eAcdw@IphsGqHa8|%>fiyX_)X9P*b@a-U%R4?yt{Xl)-5kGl( z>5-I?+Ecq_`@xQgJR0RGVPY6~90OgvZSZ)_J@z|iqMMwHX{~VQzk@r!H_Dy6ts1%0 zs5vs<w}JV4)}R;T94HRg`F@eCI%}!GW{9ONare1&WZnq;HNZ8c!KWxrtUgwRMrU5Sz2 zFf~`S#EVmMw3p$hR?~LwZw=D3G5ZX{Hs4c%!CCmW3g1HQ5dna1Ny$k#!QZBcHTe{M z1zk%N4A95dGwM#{9^!dfrY5%fTOmBCQA-i0zIvCmQqFY@@euv{=Tqxi^qAI=*_vV? zBURUbCs)t4SwhEqOVKbOwYHoz!RYe|AJGe%Cs{OPMcZ&?3HV0rYs#|5(zGX7miWTG zh!m`w-jN<%{5XfsRi}7GTON`$1bO~(I2gPzy}{}?%<9Ja7Z9bXRq2-@PZD&hUY-t$ zUxQ!35JAeS6nF{kk33GU!+Ni_E2~uqqvH^dmJ2Ca#-$F|qE%%)%~lI5;qcAXEF8#O z_HD385blhwV&5_)znU0cKcgs(nG}iZ)qP4x&l-g2ZcCER4gzwGuIbPovt!cNkUu04 zEH%J&XSm3L*@q6ys!7Pmp?Mu|Y))NQl4x&#XU0DiLRPfIdSz3a)(lPwPh=LVX~IoY&r>4Ab=bngBro4bJ&yb8{y%Qpbaoi2*2MvZ zdJ+z8Ta>DGr{wUg16z8kmq_#oI&CV`Zp1fAROhQ@P2%r)b8495Rt7RHO^t9mxEM2Z zdD@_;7|TT4sQ!*dF5_d4Wts%A%R?^Qn<$AMP(7U|G`lsGoFKveJnexGlMa4%Pvs@( zP5XpYx^JY{%JK~nk+i%H*EDGRet|zQNK@ck@VvZHd@k+^N{x+Y$qjWdQUP0=#l^X) zT&l3C8?kX`5)m=i%6d#Xp$$#yt*n?9Qo=2A z{%Uz1Qzkh}Rp8E}tgOk=DaUsv%Hg`iCh@(If0QP_aytRyiz!rpFvWUe!GpGlK|x3$ z#V_E?uN;1fZ5+t5gU?-=kiPb&Ewx-EhuMv>Q2A!M_hzRyl-=#WFJOKAd*yJc0|R|hnld*eDCu~>E&+2CAaTV{}DLq z-aJ*iys7t6xVhyv94c#l%oEHF-UX~B2~_Kdy^qQD<)%NjV}6!n){3 zh_8dld(P(M2;*^(S|-r`mLy2MaVbd+=6r4)c`8guAH;BuJXxT2E|m;@_f~Vny=0%^ zs7^?o0)rsAm)oSyo8T3++NP8-lwn#8 zt+UlF0aM;@J??-p54x&4DH&@l%BG#MDAy^87}wkalxrr;_6?w}W+LwQg>?_N2jEo2 zynMgg1%JFQMWme%SIdXjf&V?w9Lot>P%bhc7F=HD5!@w$*r4x9}IJ_bH9uyVOcUVlShNWI#=csIFCN zimqvjut~oEtS2>>kNpU+1Kk4I9+Jd#Kgyq`=A_ih1NHG#P6Re2TS$aDChGfbm8j#~ zBJ_-?Up|I>WkbTxbbX$}5V3yhDXK&kaHrlq1*917x=cCdeZ81mT7VJzO2|S#wYJM> z`CHvH#e@f)ouX$fFWGM7Hxyg zAYT~l3dbn7ZWU#%Q-(Y2Fh?%{J9Nb>fo(j0I9HW;AYtR;S zcPf{WP;+0YCN4+$V}j75_I#PmG9P-uzS`};OzK0aS0Q?p_E8J!S$n_i0FAAlr?k3& zjp$A@Lw~e#V3EqKE}IiTNF^W2O1>=-X}y9&xoN?3=)}98TJiLy#v6p`eVBnRz5}xC zPswKQ%)1HotwgNdB6YqJZ>B*)@jrE9_FRa5&WQWq-=DQeG@yA}|B1eKu`3 zx8WP7$@KzdhgT#Y6S~0q%$RS}I}v%pm^95qczBn;vrFU#!P}zuDRh1WPA1jNy~66E!2sHxqrqTWxf?vhh3aC+v&{He7$;z-{yr7Y z_sgw8bM(`vQe?&1>K{{yMYz-&^vk_Z_rjr*;zLaoQ?HF;YG->&m^o*55SCFnvo8`j z4BbY0;Yf@B85i+0IQl>z?}dHQQEP*&{oK=92Mx?6qo>foCt9F^`PjRwVu@XC5@L6k z5WA76o{q5T-E#P1hu+oO^zNTFy;}jj8yRS@ju6*kFxRFk}s zY6ax+2t+?kOr>X=?$x8Ui1usKJ&4+)VgT3iWfCkTz(lR@iQ625>J8F4S;_}_xkHeKq0s?#h|v~5no`Y$s%i4Wh)aVm z)6;u2rK)Iujd>44BisB?fBPWRRV*iSuw95z^L(TZne1%h+cT&IBv+KS^O7Z1rlJlp zw?q6)bQf!}^9r;+!ZS_b?aV8RLm>+2LE__aGvy?@ z^7LYOL>OE335kw`XZ+mH+1)%<#2aw!4j<$9Q`<1}4^n4S?7pA+ZdN{wYy zuk&qBlV(;i#TXM!#9p?&PbLxBm*RP~d1{k`Rx!0NwU6S z7I8Zo0z$ra4FITr`;ksR3W3^~)vC3#ns^ONIEK&8!nUVJHBd397Y&+GVgX$gYiCyE{`b37#07>+ort~j_F6;QsajmJ(KZ0zf@w&n`Yv6rjPoQKD2rFQ6}AN$E6BY5^rTZNbWNfb047Iz?EW< zs$r|;H))L^C~6_ass^an@z_uLPEUN4IRUB{HH>0~7*g%i{{VHPxNe?c6PQcI->``+ zGax4Zi`38+Ip^yNGb%Mp?NNdIEUfRMpVs5|yTqn^n$fB(HOU%x-EMCz0DR{us?llL!V z8%y2Gr$+)|mMd@R_BCFM+V!q!9D=4<5nJWZ#J_q6*{=T(1w&u8L~=1y&(fvSwn{eQ z%Qy`%VxMv}a?y(Hlcz2wAGyAx=acwMH0zsY(e8Ym42N6Yr3?D-Z4?4>lN`R}nr~cs zr`OYqF$2iP*C({p-9*(Lj(q+NKJSF~g&@;%rF0=`*v>5+dqOV82zF3FQbBn@8e5G% zU(4?>Vm8uf!XS5k_jbY>rUO9auz$%Y&cYoff7G6`2WK}&X7^F6v%3=5W#U@gCE%31 za*aCkdDTz6C~_XK`rTm-UV}oOzOdurunKR+o>7fP%2lMQ+r)R?Jb*73XNWI@It-MkCa?^B~>!DgwDdEH}g-htGr_^ae>p~tO8Q~UE+we47t*5e? z{e%o=x@Z0TLg{oGPhK3 z1VeFjx{#iaNt@k1

RcE}p3-odSK7Xe}EedW?7gJM+SYuhB*B<@v*ixbXCrlKp2tGBR% z8f&3;n}@#SX=1@?TaF|d9Z1zcf|6MaC5uR`k+7_7M#2YtaxrD9m8@JwsUsIT=N^w> zrrUsi0`3vJhJJUy&zN4GwATaqv}{0q+@`j1{U+E;a9uR^5{)jc*h}j5W%oo2 zDB;*kWbbR^_kIO?KT?t(9ARh7yNSEo+5T7U?T@#TfGja>qZlBq1!Onw5(ccWG2l^+ z0b)GK136;`w6y`R+Gt=#v(W&unqWL(+uLS5F;p#y@q{xZ_5${DE$3Ml_+>zFBwJm; zRORnme8$MJ7^ee6-JEb(K}~ELy7V2NMI7sj^W_&vqj!?BRAkoZ*M^Eo9+ftIje`VC ztF2r?yb_y=J`v9eUA>bt7;h079k?#uA_9!IV-fj#a*K#uPw^HJT%3k-vu8_nODJH} zBBE2ktL+&?TGv}+RT2G9OD2z+b!DX( zHd|I!BH-h)^aI$5BgMJpWQ|^%Q>2{g5h_tF$qa+PvAVE(+to`VjeUy$On*^~Ngdex zqJ*Nx=*Pfgd~8%OUp?m+ZcDJ+V7p-VAd$cR2Bl39`xEfH#!;6!_$}YciMTMzQ^ezR zvM!raY93we6=|3~TgBR4!`GWUR_j!%!>0u(-mEh;CO)D=(tU7Ud%1 zBFe@8WO~6OQ836NHDO6qhP(R0h?TQi^o32r0T|b29dbtutlw0Q#T+bLV%Whe6VrN= zsB(5rog|LUXp~?LF$)MU*i-=xMB#p@*BQeI7dOqooGW8EdN`~9QC8nmth|Y$14L9o z;fRhA_7R;}o~puLExI>RIOY(UO$zE!y8q8TC@xGtMnxx|*F`_B7E^b^2aK7gE|jco zFU|_nRLkAlX4S+r#rrnjXy2Iri@dr6J*DU-`$EytQ1yfEJUdH__$cc{S0^PwQLGuQ z_uC%muxO^5X)N(lM3F)!@HBNRhgBdXCV5f9B|xlxXW%s`u$7*^L$4+v%iBqiab?CS zc-siR#Lx8VK9igQG5do|Xz$Oifz@EyBj5)EF3p0$*ou~wRsz#K6qJ=bmj7yaX`>vkF#U2yTEhKt?dUa-k0`r_* z{?uq8kxkG&;;v8fl|;sZYw=0+lFj^3q9PjM2C~!(#9>kDU7<<3Sn3%BBC%qmk;)t~ zGPfl$(ny)^YkCrCQ&=O2&n91fxs^F;3Co@yxgK5N9I2IqxFHvh%pt-QzJCIuzKJgN zv*p5G>8qIp({fCkX-!4WC-^KZ&`4C53R9@*ZiA7T9T8kDCvs6#q;pAdA*|=UQ}cLM zs}*6_;4Ev@qxr6SRIc#)0!M)YagM=66T{&2^g*P$jlIOJQmD&929D0g*@T}L+V82LzK>?TX3$3X}@`C8_VdXMGrr~vd!Oh-$EIf>Wl>Lfu% zr;EVXnUuOv%2VK&@A^O;9p$cgTzOFL+A0uNxvLpf(H9C@UqWc}AY#=%ouM;` zsf+nrh{7kvRAdJTNzIPf!_c`=xTQn6W5>zB_vWdbfiGv~ptTO>wMlEe7wlS`iPFNI z0sEZ-_KyJj907YWb^I__%`EEp{Cr*ErfBsP%;xE>MKPlj7Ub9>Ns_Lp?0c?4_9}TRlp7 zl|wo%=?_-!3-neKfX-5>8t{j(8WN%WmHDrP`i`p6YKG@fuS~FxRdp0*_%X^i&33GW zmzzM*ow{ED5x4^-xn9=)4;`-5h^Eb*HGd zs(_K1g%u1wK$R85v-6Oqa`UVcYOUNHKPhy?k-DC4a#0NG2Rb*Jfca4oz`nxh$q05< za8C25;(K;69RupWNk|QGNB+NxF6aQVJ_UaoP`|Gs*_ryiPWp8y+LPbrNu`7lO!x#{ zp?YAD9!?Y4XJC~&ji@^vgP2a?ytk>nHVr78ppzzyWCg#BNDkIf+|)nUiQayqvnm`T zRWS(NCSR926>clOvnPnulHS(PTQR*ImnW*5r?8u+jki*dwz6-v(wA7NBWCk{dW{ua zY*|&DOqDkdNkX8Dh#W*Zvn5lGpZO(cUVpS7E-tCF97pT;`*WeW>(UBj@2!Q zq)JR0mNLrm1^DA?f---NSuNi>ntcrOx9){{P*(c>lFU7qEn$N;dcew?m=rMHM9N@R zsisOe^=*}P3G37>^%Z_Nz?caFy^ddS=}s<~P$&=Qx2CdMmX3%I`bs1po47U|*NNjxa@u(}dNa|z-Kn;>2pM-W#)orFx@9ZwMdZa==k ziyGtmKoB8UHbIok5gkYogXE5FD@lA58y?4qlkXQz}37jEa(-uvJ8h&3rRW$F4Xm3rX zPTyft%&Hfut#<&0-|i@r4SxYUzq{eiW3%ChI3OnD%McBuGQ^w^dth?ad}{A~yR4q6 z?8NHx{f7u(yD}lw)H$XDd@>DuK5owmwFh=2LuoMP5Xpb%lK~zE0+m&)baU zS{vITSbnI`wNx9+ojI$Y#?aUm_N+}c8Bkp9E*h)n@`$5NU?i8uN}iNM$szh&L}!&! zccw|sO4{?pPK|PebI7_$5%b_rNd7e!@2YI|0d6YYHygU`Hd>~$9|S|{9ZAx+DN-eo z5KGed{d@$8-_|@x98hmnE3(tNh}NFs)0@Hx+pJ@h;qsTJADsFv*s$b|V-}r(b7`CYxFxwXnF}>T-qE=VGhNpG=mSWB>&|I|fjg_!xjfja`7& z#sCx@wNCJ%f%RC(fH0C2gg`i4C$Qv)y>0iQ?G~8bK~TjIvPjD3kB~|{0}odwydc7` zYtrg9xN74%{kLp?47loA16M$N;CunKIuzCrd!`gvuS74!PUHRNW2oC_)$s}i6vB-! zRYX7b%f<9XX?W0Xiqy0VJ|Yvl_?Q%Y$uSV91*>iF)e1UZJ}V5MK175Ls*^Nc)g;BM zct9Bq*RmPaF?i*q@5%vCL*&M}O4!m>WjdS510(@HLay>B%Cu+S3aQrkC^$J>G(Wd@ z%`tBqChI&h?pu-=Q*nTLu=?ATWzJi3`6k0qv2tyq9z}bc`D8E_1Ft@!lDSdz4h=-s zw0zuF}d3_h3D@~Ot)DwDZ*4*i zYZbsWXb$1)HH26A$Y}_O1=?9Ko5?7qjoE;b8v+McF{IV|Yiv>=4vzwB^Y<2FWW_do zHKxntutxZ5JFJNpX&KmLdo8uP+-3EdZ*>`L^_gsSxxpk4iQN%tq%VgzGq~FfAt!^z zRI5(~|228;655k1Z8*0pA9S}r(D|oVqHov7cDY=e(POLeB?dq0`_Zw&kR~tWI`&;_pCA*{e5$5dZ2QTgD2cO6XX>zmma)y4M z6=w)n7V;6>p}k~!#Q@}m7=Sc;ZZBg;pC|HZG8b;lYh~c7tJ{Un=N+uj>7LKJa%*Zvdphu;< zNFQs`q~b#@l~-cr2Zv8>WdW^$Rj|QkUbm!~5g~iPERJ=Rln{DO+#dia-##ME(H9FD z+&aLAoqH{!*}1JDc#MQih%xfUh*~ZpFoPJxW&>QrPR4c#gjLIuL2jeX0gN{C+U2ZP90LKU;+o)X^1oox)jv|bcBnS~Ugb#sq$PU}wYaE5|V6Y}Li zn>3wh0d04InT-W5{7q6(p%kAj zlCqU59@=`4xU@6jv=`5C<~q@tD|`rsj=6fOpV%tUs1gpRp6+dT>e-PhW)o$yR1?;7 zJ<6HQOMX2aV|Q6hcDZJd6MZ^FYx{PWu+`I~V%`AF70vvnk}AE*>q4AQl<$qU!GP+V zgdgC+<5ZFE=FFxFD^Pz&ullWR1=_y;yyNt$-9)cC+p!lV?sy&tVVSMVtk=3s9A|i9 zBlFSDGOLZT%b@Fr9cJu0S}8-Fh7v#)&yk8$P#^d*nEnasPL z5QfJH;>>ek=+67)*m*DRtn*&qY~D8!twMzin^>iq&F@T9M#KANr{JUu?^|?~4H2hl z!QPs%KHuiKx52)ONV-!N#$&|fd8g0V^wy#4l^bOH&}_qu+SjIsB~Qck)@E?s7K;yO zw;84#ck56fnhUhqycgjw?c(t!ZCP&%Ig{rbb zKPJZa4^{{_*2ib!&di!0RuL<7y!*2b-;WF`SlrQ?9o;t?i$a4&JR>9G>i0=XTm^ywDAYcyWhamB(896Q$%>josNu z(w7{KI~SPDGGF0`%~q)M+tZt%-El&%=8I;lna>TnpL6p!cETG}&wGJ$gC6hT#FtP^ zc-=#>I|%GI*yph$#F*oSE_~(C!qc1?-LGd9ywb`fI3f5)E3+Rwi*H1CBkt^xW~VxH z%g`d$F&b3wch~_sRhYIeHm|vNF2+|4(X-RSB~h9jZ5^r}#^@*~?4KdAY>cKZ=)H;s<$6 z2|n=ZRZp%pWR=x-pq2UafO?e@U)rMbDgmn_DF?iECUMLk5S)h-i~mUZd>!daq}LA# z(3jLzx1vE1=d9N#{w2@9B56_xkI-wxBe9xn6eH!UCXb2RzfH3E@I<{NxpyzE)XqkX z8yzlJeHc63bL~1@mH+?5Xm(yV;x!VC2jp>GwT&UY}`z?A-}f{anY-rm#Dj; zYO$h%D7kiiFS(+c2$_`Rsy{J09(AEtzr4)FeF8W0*N3=S_OS5$K zeo2j$y2#30X{G)OV|5lY{YQl^QJzVtsJh*ouP5@2x6w>Qu9R~s@C<1Q-A{v2E7L*8m0bP1cuHXk}uosa)!y1GEJPTxW@)J#H3nM>f8eD;Nhj+QbH zcJ@_|bo6geD?MGRd-@d}ZLE-vZj#avfiw6TazIjSI=jVmcB`J%h*tW#QulRSOMU&A zz81yy^}`nXY7=l}+rIHa!py#D=)x!&=+^SD?5O&$hwey+ChqIC28HqrQjN3@a}P`( zn;egfshZi>>kEi~)kqj!=X)Y>4iDH48L`i~{*pc)5cfP_e<`^gM z2n@YV-K5&CPjtkyZq%P*7?Okpy;Ma-}v^_VVT?~8I>e9!?{)CUx^hcDiYyQ!DTtw5ILzD1XIw}H6y~2S0goMR9Z)$mxK0No( z$25lkCG?S@`*=t9aWxkzZss_fH=Bp&Uiz4t*vCTFj4Jn+npwJ0)k5}$spn_n+74SK zDcN{nxGLeMwvaMp0YU%5VckG_WO?^;nbf)!&WdmhI4ik%wo1_sco!OIF3S`RkL9wM zOKz2MFLaMY(z(3g%;ot#J(vB|i!}5BiPW)uvwdP}rj zQ_@ZcD{-e9QKiJpC-&Cr5cs@=0_ks+_WSGkm)zod3I_Oyn zk)SJ*JhQM~0rj!yipXguKVtsPv;WpPv|8fHB!P1u^)^YgL;?0Oj{7aMW-*|9-vOQA zcQVi=Tl@R?2?)5O-^i%KL$(!)o`AY>X1?AQ5)@L>CfZ>fFr9uoGca}1)z?YO7f@$W zTAG}0FOYm$*rdHhRIm^ zfyc1&>)57d5TblinSs#xEufp$nhJuU+Nwr}YBThv{KRb}vPp(KQU@if#Wc#xL@xiO z)>fYniHKRfkchUgzK)N>>T;yBYwzt zF{*IM7+99BgwcoU`$lYtjX<^V-AS+a6*Gxw{57}@V z$-xq9$Q@SZ0b&-bOTNOL=J>c=c8nB656Mn*b!{1Q=YhIi8oNJ9Y^ZBPk#26d1c>gX zt~*CvTZ3s7WA>8O9pMFb9j3cZ+jior+Vw$q{_Jm;ptcRB|K-%Q0SiH|kjf&<3-L$P z%(T;hi^7*;$`eVq*Z*>nK-3b8cvar2H!^YpHM}N>plM=*epgFPO#7Ao?vsf%c*SY7fa=FXwMFAN{pk9!FYbtMlxyzS3W1OT{AU7Ld6c z+s2iM5>h>5izQ0zQEDzJuQNtjq1m>a6O+ww0shc2+`HA~I>&SxwX9*m(wC3bWw!G& znhw$Fz+qB%z6YBZ+sO`WmLq14tu4T@PuWH6>QB zljTLN{T!Q<_5`{e>`@KHfQz1&0jcgvB|O8E=izh7cz+@JD0GpS zvp8Wg^cVK07uX2;^>hqw=kf(<2c+cdG@|xa| zb+E)b_zo-kn3y@XaRCpv6$0~HfPmA%_93vn9<~dCRy)`(1meDKMhG}(Pt6i60>A#j zN$V9n*~%WzKWAIni>zK}$?Iy!L6tNcV&}R|P7kVu9y|NaloMfN(w4?&N3T3@ZG@Nc$>}WUF#C8+wT1W;|c#&%&`LHf;r%@`UFMlKt z@DQKkh?7mivW|CY+=fiAH7byA{kF>7;;p`OmLMM;FVPf3to_yV#X6_5T9*Rdjf+As z#pYL1$$Y1ydc%C`Y4<$N)^G8h%ycquG+Wgq?%gK}&Fue`EXl_1shqQ&Sq))UuTZ)J z3{Y#Rr`#;p#_mWu5I?8Z@TM6Q<8cFRNgQr;+K8Kk6-V<8ugdaTzg1UMG}#9wcEO`K z3~bAW$uNsoWfB&36r0sJrBQFzxw9I0SfidKTmEm=<5tj)E3{&J(8sBeuO2HjTl|L3 zP;RMcSmbU>v7E5rIMP5qk6x;-$joR9zHz@*8!X9eep8|LRwgdaev||#vLt|VGm=Xb zS5M=~uVH!hu|5TwmEKO-_~Vz+474X&J=N#fjO6qzRp#_`qWJ0f*|&Din!T&Dep}N5 z^r7pxvE4i!2}O2b`BdNjUY&mQotb(I$RtaQe5yLln8hCV1x*p^H%aPcXDQ{wRQ0L2 z#l6Qq4wu~eRXiK4KALWV>9z!TC&}^Sm(Xkjj)Bkk&c>w0q0YVm(PK~OfOWjO9GOG{ z2wo`yUUmQhxb$0fQ#Y)joCe;K=zWKy2y`FUM*BccCzL=xy{?<%Yo7>9c4WikTL0l{ zO+^?-T((k@_Nx61c3;l-@~T0eQfW-?v94-ksK_Q(-#hUhU&N+LwI!-#xOE}Pg@Wrqj?fmuHumyZU`p~1+0Mkr6J`umJVQWL-E zN4~ywl5C(_-+i=|K8lk*No#sGc85K`iC3iQ-h|9AX18sVMX|7J5lB1YR|A4kH6pXB zgfsFb`Bb|~XhJjGBB{#0>Oq?-yxZBSLhSx@mdkDDIFI-;3Lx1AD_<8=_^i-`j8jZu zkgz)&ELWb0V+?j)X5h51AcBPjN zizDC8WmW`o*V&BPmd?Pa?eu;`{JDVqtRiH$n=0%4P>dz$H@d1VsU~Soy+0RUh6pU* zjg|a*&4cI84V7}Iv?@b2yEOj5lVXSOySK8#7(W0L@rQ*HUdh!xNR5$P?wOJrevm4X zG?TqaGdW0|Ay>q2)kT@nu--U)r(9D=y=D`tRc&B|cjWeJ2CV<#$uAsW{iVZTMR_Aj ztthO8=Wo5(lZMqZEx}4~v9U#_bhN(^P`*@HM>VP6@54_iBQ=kIr}OV;7O~aVTuTR9 zW1Hx2S;z7UCo|#OpH8dQB*PJjGSo*>*-QF+Z?f+YQM+ZRd6a}OPar1=4}@ct7FAA* z9eJQ7mis3+w7bNT{Az556e2mjK>12QfJS6p#co53)=<|P6{k5mo`TDxw2-lSN*?Fu z{%8bj-0{JpaDWIJIU+$Wuf(om3y?Q<7XgwdEl4oUps=Uth<_Ak<850hv?7^OX!m4Z zjVH6MZA~I~@}I{OC*`?13L$m~^e2HVwG^GnRMT`)<7`POCFQO&A#cI`t;{}9BDgC| zjIBvsN#%B(b6ed&ZPXu$S+_xnl4UnY@U1Pl?eF~Kpw1WB1bl&S$2Ca)6M$vCTuM3# zhotJzuzM(a{Ul)i-W$eASLF~7bHg;-G}Mu<)<3H75UYX_2qY=ghABoMASu)i2m}c` zB8CD><(pf4EsCS4K2YxU4pD3-nNqCn0tWZ{sGp8qRh-Izd{;T@ekxX57@{6l|6zIq z%@!DDP%Aaz>PBH}gAN)m88n&lHUq~<^wgAv*XGSOK2<-Z4#;pdhq72k(Wx`NsJ1FP zx68VSRLG=FV1G!PU_$zKq8};sVDw2M8778c#i@-`L)siMTrI8; zYZf+fFM25qP@^4gMi<4`n)E7q|tRPITt_jY%qhw4UsDcH(nKDV(YVcK#Eg_LqynL1_1f895KY%cC}} zo&p2XUM?pLf(Q4vPGWXDK>Tp{%YSw^*tu8;1CsIhML z>Riu2@UfZPw0poJ2e7-q1Ui|W-AO+ei~;siT|BCD)v?gPUKg}c+@1HA%zGb)Y@gd% z=lxZ)dEby4bKPvDa!ZHka?DY?F*Om2cgD`hz_01nr4%EKFy0pvTI0fQxLP%K%-hZIhVU;T~~DJ_3j^7 zta9WJNhFBRW<`-`F}s?|2t7+_UgmWc*$-t7XR!j|b{e}y>_O^ekbH_(Fvv#|voU8@HHu*-@ZZ4A$HeyH&Bn%W*nt(KFlqQ1$^Nm7*P6iX$ zn8)l=)z`C7vEK)Tk^n{K;sQm(@Y<|K8x#^w(~hvPS1juaV(hs|XjQAVzet2C8+_ za{T!m`sHA8kl>?Jv{^xllZRv8_f*Fc_N2x{ILXtc*7^bH8-DFJC1HECFH7BANm!B^ zlEW8&;EMoh$OGyizBsP6FZ!!o`Qk+L1=`PH%nL^+jx_gAcXOuwzmp}->rt&~-wjj3 z{$mK~geI61jd59%wYD5+ImuuK5yUY^xoP_dE)%#mtHGgaqucW&vta?X%@WY}RyWPa z*GT)O7wX7amP5_I)$W-_L1{0$DsI_qttMpk3FO=mvbL|gH4;X`BtyXn$ZbZ=!#2$( z@YfK*I!(-IWII?MsgCC` zI;;>*WjzXrT=nk?*poklwpV!p*8+k7Y$DMJsAD(`X)VpD&@7)*qgj7kV}A?sE~p5z z9dx|RCs**rslFr44ScEJcf42c)Ey=b7s6 zsZyrhLRTO}AyYk2uERmq(}er=U@N{&H$&ZZW>d67c@t32_K;VWy6sGqYkjY_C&C0# z1%2#+<#?ll)1Y~gThm#P{||5n_fWB&M`~>v2St4 zEoGq4q-tf~K!Z7|a-ajG40KL(b>}$Ha*U~HB6mlsx+qPOM7~@iX%MvpRbwAk(4NC; z{jEPT7C9DE3dcDD_?i+^J>oNNshw$78Jrmh=v3d6~SDwR@ZtX){tLV zX|GsA`s$}O!nxfoPsIX}u0jp+i-q!qEj-%gVv!9`5=wciQ&`g-W)pc!GDD<#w^X+8 zFOr|-OnjA-4Zu75b&d!5i=T5D+(okt2l87$g9KRcU zU#}l*$Z!<-mrRaR2>LRpV_>?*dSC5K)0n`S%L#DXg;O{Umch@1|5i3kUSP=>+Ql-3;}WWe(_h)9nMgLl4XWmE=)!$mye% z2fOJAKZ8`!`Pgvjdp4QjuEs{n`cRU{(Op?aN2Z@ardz?P)~7|atF844?^lXDM|K^%0_>t z?ic(LG(sK92RDS=MV=5*C!aVzzG&s;5B_% z?)TOv5Tu7p2bb*Ku=d)p*JZ;VY-z)8CKDAkWw(+HB%mhbS^ET3R)dwgzt#1ffEt&p z`i@2@37#8JV{)ZT_Mp+|9`n_yQfPtSy#qn0)n9*eV(Ddm!+bC-ddK= zGB7G60{@Avvqi-y#> zWN(?megDl2mU$m~2bj)7n}rlBpnbw-Zl z`g_)2M;fIx_3#X|ok6t%89xnoccaaGG$n@*d#XE$;`5MVr;6Y6$i*O?yeu_+r4vrX z8h<`VYaex?S60$ReNOV(4D@}Rj|{s$sCzutJInr5HRxquGLvQBynB}Iuy*~_mxVQY zol9A#=EztZ4BXUQ^;}9YpC57)9FMixZxWB*k70NUq4%q2)c}I7Y5}pt;tO$hX|CKa zXQegr8h&zG1N@|c!bTek^KB@+6$=I3N_GLJ7tOAG`_42wGg67e^Nt`dpW~nUbSLyr zEfF$#m@RaKomrED2r~=vy%vJrZRX>vJswGNpl+FhT3n>;^<8$4$75J>D0WGl-*eg_ zQw>1UZ6(8kq$;w*UB^2s+fT17!(N%=F`VGbIi8g*cUHD)H?3?unpHK}UKt>C1uSvm z9Z#Oa^{x|d;@dOOcrJ3YD@N?K?PCoL1?N};{uk4!Z+|=I+YY`Q7(B%qFu)pko&0xj zAXsJ8L>=180MRH8^p$1lnXn+{)BL}yo#+3n@$XAJRfFyOouTgQf-)gu4IrDGtyNgr zEysS)#3vbQcl@oD6n7WtoDD6fkl8&+CRyCzz=1}Y(R{;pd1sAE^NUVM!_2z1J~O)R zy;!tR=Lzbe-i*K;&&MWh>t{qko2}j=fB?Vz=wt3q$*Q*(i@g3Q7HyBBe*X?dHKg?e zZ|k(RIkj#5iA#%5Zjlz(c04V%iNEkCvBX|8EFJkE{!ZX5UOOvETCv1Cfx~Gm4Yo0^ zJx_DnXrsI5-@_Z$&gQnhG*9XlyyZjjyUTW)-AfzUlf6f?qtEKzqghwfe#~$@G|`nM zC3N4vqv}uhlWM;N>JDlewlhI3m-{w#c->#**Flw|y%|2k7tz z@z}cuu4#3UZHac+Pa755APgs5)ya0&2*Vw^v+)q!1N0y%MB8|p1^7$HAd$1%E5gRA8KQi4JT&*fz1ZwfITzh_c+-6x&UEjk*M7!>m}Ayi zsQ!QXJmSyi-b=58ZD^eZ``U&EdoR7@mz>$f|CCE_$7S&El|ecYiFc>E+-Be(O4;3V z^X`+#JEmt>Bxx79-|fv2aGJ~gjpBr_)|N?f%nWr;YOT&ua2GCSCgNSfK|B(`i8{j_{X70pbq2#40_9%SA!?)ci9*;5&0Y5bFLff}e&qF+S%X8Wh;(hG z9K_7g{Jk%K=9@or{AH@B#$T#3b7CUF%AL>Gc*y%lUF8Vzk0G+X=2>ZLwDSMUFtK3#m`FixafysLsc4-1@_9UkMa7d&D>-9AIAXslWg@3d8Z)-IsKjn!H|Dd` zClu24X%mYI$J?zv4$@?aPo0ACBbK;Uotmo#1$AbYb4kJCBk1y-l>9)IUr9*q-^)i6 z1%9A<+Y`19S#2G7nQm}a5Rubs^(E~TU-la%`sj5P5laGpy@c~WC+W^eD{zmudUXj* z=0_FzR&IcN*0mD)pPmbzA8v+PN>re9M3f~NVy-4b3@Oe&AjP%J;|BfmXX^FxM(f}} zwLA-`>&T7jwGLC8%Nb)JiE|G_X_2EYrZ~BNe_1NC*jg4Gt@tHBs$>9ygC!@zcNNU{ zP%>qb^-xAw6omhgl8N+2Bz8c3idLQU2A2}8J@`q|QdZ-Ys(RF0!(OruHIRG7KrTns+5;|O$qe|S#|(H| zW!!*6)l=nkesiT6kPI3cp2za+)UZyp>J9r20X<{3c3(nk z=fUbgp4r^h9#dTR%&ZRPdW;YV4A1@f)m z#Rdh)}ucftkV;HJZ7Toy<{zVg(QlC zn+u7K_F6+#BcJ{v&;%0b`EBy#mq>P^e6#(zCek$EAV5#A)h#qVpvKzAyb8-ATK~ff6a6<4{VvqK3^lb(cdPCESa4asCuir}3l9f+uvGiwBhi^(7%xyQyp;r*T;wnX(k zHsyyRyA&5XTMF^FiLXmwo2aPcvob>Jm6>`IyQo_gG4MSZc9;hxU&-eQ=?OsFj4@MUr(bQ>R6rU@CEGQgYOB{$xuE8fo>wk&!W=ehQcR3Ii zdrgs6)+CLfZk)c$Rj$e30<0wYLhvylxt{EHDNLxo%#8760MOYm398l8VE^vtYSt5b zlR6jz-ghZ-;U^KrWj1(k5%6xSfK#!X$px6LZXhiZIrCYEB&K_sB7_F8ODk-^zChA! z0ql3PYBgYMVF_6D?UG`?f!_f3danyvwwJ_LF(dR-YZ#$#v30BiZnCMXvIwg=xQ<^B z2za-W2PWp5KI+cstn|X?R@O0zpnB9pMw$O&Ov=}%qcu!YA8|HPVco+3_m)b~Z(Bva zs`8S1W?K|Rn(e(HpQ`rNY1{+t?s>vJz!V7jfDAK1lG4nk7(~n&?yDA0HD~xNt|>V; zo2P+fq|67U)LSr>Y^s_csJGwA(d{oMS3m!n+fTmvd>Yi@LNJMMzVJ5acNf^-d_GOS z$ppW@n5EHfv#_o10Oruf44~h|A0&qpFw`h5q|PFfVP@$ZD;;L;gIW2KC$`#0vfgbf>w;Myernxk;9WQtV_DkB_#5$f(~0#nHd4efav%3~f1`I5Y- zZG0G*V|DFsjUXQjru#{xw%^71S&RrOkI!BfgWe ze8p#yQOh z{Bj4nZP-2CqS;G2-QTulx<~JrybgtgV*Yg{%;YtsEA8@t<}-GxlW7T^{2qbZ@A;%f z&4Hty*ky@Xl+e4}Nzvqz1hLyyT%*ahg=fU*(@);4;J0IrUZw)1x1&!#jGfP zHtRj!)DmPx-7iXwT?b10LDmH(ND);>0omrTi$d5lTQ780(uMBwj?3a4988>s%rdGk z*{S339se_DYWB{bsS6U$)MS08s*?glcHCJ{y8tI+j+wb&N739V2W3HX@z47i|jw9`8~mL*oh+(CKYg#dVj|M`#q|#sN4%^L&XIpMH5RS z6N(DGKIJ{Qd`!uNACH|_H1^DrVdY~cP8_O#|7>{fVY$PH7LOfz*zm&+A39?A&=Ehh zJl>xN>3ed~#ED~0pID&0-ZMPj$zJc|Y2KfCeG>|O9_9C>%Il#MCzM3c5b4KQA?>e* z0tK(7yg7Q%2}Q%CZPKBbn#b#o48tTRh?P0*I&=2t=VVsi?3hQdBr$Y%3s9 z%rgpY;3M;7^tcTuR-w|!*r7$?a7jUAy1#JDq=J%O6AFip8#8ULNU|Zgw z4^0AJzsD*lE(R~X-U&YM6kqnlF(r|qMUxAP#|ZWe4Ud^Hv0$86c>T0uh1sl%#oj_&t4+e{a6b_Iq-Z zzjq;|8x9>)IBsZoVrj`4-t6e?TJGI6?dkUn-cIj!!)Tv?Xh8CBqA=>^F4Z6b^KiF0 z9!h5N(+i4=3QD}a{hpD@yG~fFX&DyO%Lf*oFUrxHE@gYl^59R7F7|-#UHne0~ z;n*y$&oK$ldK4E-DJ>|86pSSIA*2?2v5vjPO74_p%No3I$AePisd~6eBnd6e{1#e3|*~ z%-4;(=s1ZB5<%&YSMg^&Nt&46{+&qpVRpLctySp}_R;D_e~`Tl5szgeNgD+;wuV7$ z^`nC+oK@*D=tgOeQ)x?p^C@bA8IB-Rud)4SGm2~;3?{v>$=BYR*CUD^Zu?${WtT6W zhCfLT*F*e5!s5(Flfl?K!>PE<7tnYxXkzi*iLP{el&05f`iEE;2`!p_5N$%-4@ZML zP`(m;#*!XQp!D!Q=7o^e@AXiM9 zce`E&g}uPKs{rw06^NG_(lfdE5J03-O@PtN<>xI4O$wPSH1RNIh;X4zi@~V8#9nBXMXXsS{WEMQJ(GwA}KZ+y}jFZ5G^aeHH}#_k8!BT{JjBYuG)* zchgp?7+jM6!vdOdJp%~d0Q7{WC$+Tl3I1&~E3B7k&pAWO`}XzfMSzTWh=}qc$XU-( ziBh%GMiG~a==C>>Wio{~OVmQ27CN8nXaMkL!3*b?3fC;IEZXjwE(93gtln3XJ|_@Y z8}QbvOEBe=gzeOa`hwg>5gq31Xse0s}fT7geAe=#_GNyGN1o~b^TNY;byc0_D-?9=2wSAAgToQ3<#Q|cUk8q+j|0C_&vUT zQ%U%{lJwsIK`S~jtGH&GLaI4T=aK7t?0wcb!}dt1u0m=0eM$NsfOLh{M{)?$CG*R0 zRf>IQl|9cb#_7*5lh~}b8{vSH&IqayyS+x1-R7)*BuS(K4OUhXHe4l#94x;blE-;R zyO4tLO}$h`496!ioNCD~C&BCAvVYI<+>T zrbE}g?1dqz`AyQCaoUC(XWRKhz=SS(k$51?gGnDk7P}aV^+llWV@Z;!G>T%p6keEl z1fe3nGDq{%^PH2X>^Bob^6C_NW0x3JlN?_V{gCPgH5%{28~bgAGr(gX8t>t4jZh0lKq$d zXik4zgKf$ov$GNh&epMP&rRX4N*iR*k=60ZT88s1RCbOdqkZ;xRoY~uM*8XoSs^gv zZ{~AXwBIUvb3W_MHhM#&Eo0irovi5($;;Uat#rI>VFRt@ zYZ%^p+C6aV#Zx8nB%-q4{w8Ab{FBo``9?I5Tz8(aF>KyqVK4j;~ zotZMnO$lDyf;CpR1Z(7L9K?fFnawNP7JRRp(oREqE@!a$>)D$*gPnR9FR;!k+uLB> zbLb2X$w6S})3%%X7mDqjZiI_4y5YJBX@h%rvC(J~en$S+-4Zge!z+2%p_tlXlkZ@- z0QM%s%89*{Pu=X2WVgRYv_7V{Zg!@*!)|6_^7$*zG!JypfGYL{57sQ0@bhecbq)T6 z2yQKCtNpOyLtw*$lXNEI5FWtH5rrO{8wdHG1JCbZ7O)s3*gl!rw3|=D#VzOn@VI0X zxG7x{+@(_>E%576%97dTd_nEf%Z17#yc~D?UHAcrfs>azwbZ64w=)hd;w~LgJ916z$P2xo|w#!}u1g4?rp2 zA%pQ#k!rUDH<18zg4id8{5peSs@lM{HA}rui3|lJ6`E47=bJwd#0Mhc7X%AYXr1u~ zI0MPEkrMF5#q_Rv9rP}AZ~-!LoHE#33#M`I-J7gi2%=r`tyL|xsn~!YF149=XPMg$ z5v}k;iJi+>AZx9%8#B@#FICEcE06={1U|`bpPv)dJW^9;-&}exV9{IxAX+EDMU0nq zNffU$sP(KQ?#@UE`0QrBo#}YkxmBi?htbSlO9fZupsuppHjQFdF7aW^$fd;^$O5^v zR1qQ99CS=lr_Ys`JLD91l|< zqGa05dEoX;fLM50luQ@rQIh<@P7Wl9p2AxtfXQ|!E?MRNkSIc-Lsfloz5PYQfm zKs3*23wK?H@Kag@1)mn0R`cmX4sX+}6pmb>T@}l{UK-^AAuVL2(3p@`0f6u>c=pWe zC7yk~Ar(A(<~_La%l!QrLG9m`ARP;yEw(IjfSxULUc6Pwq#g$6JumQq)8o8Y+5+5T zaNg;F<~c9@c5lx6C}ov_55j%K^J!rBULfyH8eQWN%>?OqFj5gP+ZKMAm^vks-Q?Up zef#C~PbKjlo5%AAL4#3?$n_|yMtHUAl?-#5?37{7!BpaYoZTk<`{00vfdRsslOaVU zGGvf%O>q=6zg7aghU_!|L|lC+5lqAgxyvi+-|dbDeR4dp6*f%hHzaRu(I|3{RDu+) zJ^srXMB-s_P%yI@9E6mNmM3s^Ulu@BcHs#c(}zI)3Oft7j@UYK1shTW@#!&*=xIKp zpa)2JQVHV8%q3A_J5K!)8`Sq?9CrKUkhoqz<&P@CK9zy3$P^L$9p^H*@Wv6~G?9h6 z3&40*3Hj+`L54SU4lEM}Ut03cx#eipjtAz3lhq6<=iE$w7 zjliVNPa0n7$4WRiz-S&Sb%x#Mstjy_(hsYt7in)LTWlAJumzTM<{Fg)Sv-X|(SfVw zab!J!;ZXji+=WZ!F3=>S4;55cGTYDH2SS?rg$Nfdg6G-o22u^qjFEs8o#7dX4e}&5 zkZsjZlcUy=S2Tu&)I*j{FS;A`Xy~u3rk~jwEOtt3NY=8njfA%3Dhxv6lFeFbj zGK5kJ;4i|FK?i?%e1*|%7-!Q&O%hQbtv0^)-g|H3XZrK*>}v_q6DbvWoqf~*lS}hH zCZisJY-LXPG+`7Ewvi<>9t4A4@#Mk;emq>NMVVKat-*-n&QepQbLd9gje221$r)=j zx@bf>SJ2rpcZhss-{4b49(J1L$rHKg{R>!(cLp;L+1?==t>&I~9>&E>&HZE-ag-6P zVV>8McN>o%_Ti(Akd#F~Bw_<>jx1>mS+ks+$iqr~fXD|=5QG9xK!)2s+*_Z3|EH`w zOLT!Iy(@G%;VpRnZ1L0|gopHGC!UN+Y8K6 z3!Xi2&_(7TAdC)Kll;Ufda8kY?Y0KKt`axWd>8!Iw&d68JWDI3(r!>r$&ZeDjZ4@1RDc|abgjm$I znZ;Nv@@)4Z?*`uEF4=8P(K%Z}l1<_GEjMYU*)pGJ-OH@|C>nkdPS00Xzyz^fzkr;} zbd!9ER@Alc(#GuuALLJqechsE`(@TaigHSke=i$`eQ)&q*-*e(F6y3Q6Y?!FBfAlJp;eqv&FZd$pz>v~RHPHv0FUBoKe^KNnL6 z0KWqOg$u0=fOyN>m@Sc^J~Uk~U!-{#nU^s6=`^r!u}oiT)Rn z=tK6ufqL)%6omSplJtK;s3HY$5wGXmxSg*cw4(VbEcb=2rW5tOTxsu&$HOIA1TR9D ze0)ym(!;W(q-P6d6aAPcsBe>U1fDqu71|j6)U1-i+;s?Uxe!AZ$^^5_6%9B*8AI{` zT)-c)bMQvJvVu4k=i}?SwzNUc!L!I}4to(hzsg$NVBj<<<}dxV+VYSa>{oUktUmiypZ%)Oeo=x}efH}E;h02y_G^E5@6&#TQ%Im3 zB{z`$&QIaE_1Q06{osEt3Lb1FKesMe${8c5UkCjU={gyJO(zKV_%>B!ddcY+!8bF>$6`V zNPYH;ZW+vujMZnq_{q8Y>{ohC<@CUlkhxNy{i@G?)n~uBFs;virKdpavtOiI)n~t! zow}{he${8c>a$;TAANoH3m5L!XTPZIzz_cHSA(Bq71D4Q)n#Zf_9~7GKIrqG53n#p zT{xgF96%Qi)rAB0Tg5H@>6OfXyb1@bK8RBXa7arlxGH>FFN7Y<)*PTG=^+h#S}h8% z(T}Jr3AMsE)B0s7f^(?f--gK0@Tx}OBak# zoP1x00pC6^9tz%FdemoC7~LBd12y9o#UPrG!%=KbHyc7AovQpN3G zQbVk4N7sg|qQ+TKt_+#N^kkdgJI7dZLBf6ao4Cl5Qi$QPN*L}LmFR-TP0~{GhZpJA zm-HezHn>C=mS0GH8QBXcGQdkdvT%n=bzU8MsB_@;n_Vg|Ko>M2*gHTq!iO5{(b2M6K?JSn5BjJHgkrQ!{-Cl<($xmLRS|K{ z@6YEYQ?dfvjmG9x#&&1l#tR4oOBc=$QMK2*6E(v@kVv0=D!smeibUZgKpi1=9v_1! zNf7Av4_CI(29_{F-+k1FIV-mmvn5}khg3BB4k`kTCJBG8wPfl44R|pe_M3x$$t1u1 zoo}kVHflTRd&8tN7`O8?Mv5{G<0p#pl_I8}X#MCwaS*SkcTvT@pS07!yJB@rFymN> zH9J&QP4_&Pb(Y|;sfUyXpc9?Vl+KEL;PrZK{zZ|evxev0@f4HnJ5d}PT43sWBpaT) zvVUw$Mlq%LL}x}?D#rIn+j=9zPN*AIZRi6%B z)Pp*FmluV(F;V3kUc&#-a>=$ptMxwWS-b-dFc}5Wjjz6ULk~xTA^!)fHi`_#w^dsW zB1MT}&t3cIlxX54hy9>UXUMcQMD_Kv5?njEUK;#jd~#_skna5^aR z$?5P0owvHLZLNAf<_6ryR3q6_+?`)cJEfewQ*ZJ5nfKEx-wtFf8Y2!I-}02uz0fhj;aQsWyw|)=$htU-8=GVb3L@IOgV*VP+H}orGn`xju$(s2A$M>_~<)Y?GCJj zt1gM6ip*spHp^C_uh_C;296q-vir!heW6t%{a6cK%z0z_To$Z`xzjUCH2E!lnQ z<0SxREym?aqGE8B|)$rNE*4KJE~*px-GlUoSN*RRl`pjmME>LmZ`*+WqNw(nM&l| zI5m`Hdhj|2C6tb3z?60z+6jT7#qP7qIK^?66<35y*eu=j4a2gnIEMEF>hH}{!$v14 zO4t+~I&JJkvK|JyY}xLu!6~gCh$3%1FHIvW)O-ztGYn|2hUq>xIVFUOT1?` zNYy;YjNwGEBKP@I8)vn;66shra$wmId8+3{?hB`eko;uxBXlfZlg-exEz^e+OL1Qu zpB7;iVt&=bwDm}_W9Yt`7kaX;xG&v3Evy=9NdxHEYj?b)Q(Ct$LLA$Mk#1Xh9KaRS zJUxaxgLj_LHuk1x1u~oiu^h;b+xjUoL>4(e@5K*Pxyt#Z!dofY$PlS;OqGaW#9AcB z&=Y;^CS8x+mw$tsM5=l$qZC(@!4VdXP)go|io>naR_nd&L8?feOvf_i!1qln^i%`N zgf6@CucsY6o+&@uL4JN`+CQ#(o~(P0Ec>=Ct0ue*q2g<<^7FiVvU4o@Wlng|Fc_j= z!SG#v=l03^1cJp%7)H7u=@DGuu6lImum(bz$vA|INs&o_=AUQ0-MSZ&^z@7nUT;H{ zUG4oNFJHo-M;~{`{GZZt3?c_GgV4kFfHD-j`Ul4XY@oZ{K92_QPi63yrUsU(D84K^ zfv>y9@hOAFT~LO9o~4X~4IL{A_-LTXk?ER8*DZ)LieBuZbO5RUG~ZcOgVHT6vUOi} zWZ$%P@K5XLrZh)sh$v}DoPOnpv+)jSYX<4vegwV^sqfnNgOpa=98$gnXNVhW2BfbH znGYq(SA5rrkGwh-*_u`QQ)C&TA3Bbs8mi)1ru(_0`=%G+QMCLbEHaM}>zEmt3e`Wd zbYJ%(3&xDVEkWH;dD-WNsb5;w)LanMpkykI0BN5uP%`APQwKgm=(=^~+0| zI=3hL!&k}gX5?0Q;K9=t#J+0Ta;U_Sd;4ok04T~E{NVDd+=i!h+G%?P4_#6Gz_tw; zhB3lLu@$-Pjc=S#pC5aSBqw=u9T%vkjt_l?~gXo2U4ws^o71LA1EzMXz0 z(~dBIV_EE+s zgvHzY;N4ay2vtQ34HHpL&4fF{{T6{IEtnkg?`+{q9CFJFBYF4I^efpu++Kd~^6bM= z_fBV=e0ztUQs9%UGPM0+{#yPZkGj2oMSQKWr~U*DYe=l`N4C>XIhgNI7w`-Jj)+d1 zJjUN83J>|-{?Rpjq=p|Xqlc=bUX?63HXhK2{s8oFOa)OtO+`f8G~jG-f9zZakdXZn zSJxD4sk%0OzZ~a%17gxc)K}EhaM(X;wYvBP`rOFtjuAzpZ}eWPRkWb6Zy)z$p^Jv^ z>9G%=o?~LKVuOB`8J)eKTBnI?h9QAr3QI%6EdTq%%RMgv)G=kiQ zHxV?<*tFHr5Q>Tr4G9fL!C%#luh1oS?Q$gL&Mto}&V2{B9N^93Q8CZm4gLd}dLO1A z$=2N4;!kN7>6c!LryQBs-^|{k70^f02{2^N{J{nOP4Kc0HwAaOcbkQnHJ)EMr8V$q8JEmeE;Z~6U$wQTt!MfT2=?{{Wt_;$3BNt&_nl=Q$tfs zCPw20s%awsBZy_$bYk88@uREE%SV%HUf{<_#?W-lmo+U2V6V8Jo*D*XDHucS=sr$T z*l}oix)CexPXtRg%e|~^F%DgLs4(sD8N+0Om^L9)0?+;I=J!hf*5wU4VSd<{;AW$lKY>)og|_?#jQz93NI;U6YGV)SuqDA5{5W=hnl01hvK}jP z#QWTyAZ3YEt-y;+$Mz_RLUl~{&o7!bAVr~ifC}dXc%rJQAq;zv#clO^clTTH z0$T_pW2Ydi#nNTRl8wK>eunfHCskik#bYp}tkPENE&i9X+TNoSGf_jK{Kl#@xA#T} z*Fa17cK-mMrcKdYF`&xuAKMfDD>@41gIF27K!zTMnrgZ~^FX^}$etWKkiG%bDH$18 zKl?zt6UnI(E*r5K#OTgnWIvbs2GfL}bhe=PPI}{33)z79o09ys8}1*_j2Q|9tZZ4f z6OxnPcK^~JfAOK+=K6vZF{xL*5OE`f|G)tQ_ZJ>~pTIjKNL@dIt1y7`$^Aw4JGAc>MOVOTx$#Hb zmov$9W8!4j-DrfJ`TA(Ef1kO*F6B_Z2Ggt9)^TPs5+`o8dR-p|b)QVcDC8-Z{Q*x4 zj)9vLScF#%SvM%36w*C%e~JC~r9(2)=*S=7kfw>&?;*MOXybYvz5+@G7Kf(FHu54P zD6*j++luP`754QdlQpZHmtqNUl_A;}V(L|-G|bZ!UP8&4lPp%6x|^jUk$WUh4kF7)!M;}vN-HPcOXP4>s%;gSiDSh=Hu*>vX z`SCww3i_%j6tT-r@TjA);|~VCcCQQRdKsXBaVZZMO!$Tr^5bKui7>=wU^Bcjjf6UCq?JTt0AKZ=5Fa{bYbo59!eE4Q` z_n+JgAx4IFT7+~?&8GlM9LB!o{!?}qQ1RnG;~&tif6mr2JpY2Nw-Ho8zqK_RH|e&C zOmLeH2Qb^C5xdC$P{v0=>6Hs*>Pc@-&kC-r_i$bH1Sbhu;~g9WlxEHjvNLovFu10) zESwE|>bW2=afnMd?WgjK9c1l!>7|`9VnUdvIP%8GnoU+-+(F=jvUrZg L-8=mzeCz)obzhXh diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/preview1-adapter-release/wasi_snapshot_preview1.wasm b/host-apis/wasi-0.2.0-rc-2023-10-18/preview1-adapter-release/wasi_snapshot_preview1.wasm deleted file mode 100755 index 2ff061d37d95be0013b787b89ac56f6724b5cdc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109319 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�eeIL{RNB? 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 diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/command-extended.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/command-extended.wit deleted file mode 100644 index 06617794..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/command-extended.wit +++ /dev/null @@ -1,37 +0,0 @@ -// All of the same imports and exports available in the wasi:cli/command world -// with addition of HTTP proxy related imports: -world command-extended { - import wasi:clocks/wall-clock@0.2.0-rc-2023-10-18; - import wasi:clocks/monotonic-clock@0.2.0-rc-2023-10-18; - import wasi:clocks/timezone@0.2.0-rc-2023-10-18; - import wasi:filesystem/types@0.2.0-rc-2023-10-18; - import wasi:filesystem/preopens@0.2.0-rc-2023-10-18; - import wasi:sockets/instance-network@0.2.0-rc-2023-10-18; - import wasi:sockets/ip-name-lookup@0.2.0-rc-2023-10-18; - import wasi:sockets/network@0.2.0-rc-2023-10-18; - import wasi:sockets/tcp-create-socket@0.2.0-rc-2023-10-18; - import wasi:sockets/tcp@0.2.0-rc-2023-10-18; - import wasi:sockets/udp-create-socket@0.2.0-rc-2023-10-18; - import wasi:sockets/udp@0.2.0-rc-2023-10-18; - import wasi:random/random@0.2.0-rc-2023-10-18; - import wasi:random/insecure@0.2.0-rc-2023-10-18; - import wasi:random/insecure-seed@0.2.0-rc-2023-10-18; - import wasi:io/poll@0.2.0-rc-2023-10-18; - import wasi:io/streams@0.2.0-rc-2023-10-18; - import wasi:cli/environment@0.2.0-rc-2023-10-18; - import wasi:cli/exit@0.2.0-rc-2023-10-18; - import wasi:cli/stdin@0.2.0-rc-2023-10-18; - import wasi:cli/stdout@0.2.0-rc-2023-10-18; - import wasi:cli/stderr@0.2.0-rc-2023-10-18; - import wasi:cli/terminal-input@0.2.0-rc-2023-10-18; - import wasi:cli/terminal-output@0.2.0-rc-2023-10-18; - import wasi:cli/terminal-stdin@0.2.0-rc-2023-10-18; - import wasi:cli/terminal-stdout@0.2.0-rc-2023-10-18; - import wasi:cli/terminal-stderr@0.2.0-rc-2023-10-18; - - // We should replace all others with `include self.command` - // as soon as the unioning of worlds is available: - // https://github.com/WebAssembly/component-model/issues/169 - import wasi:logging/logging@0.2.0-rc-2023-10-18; - import wasi:http/outgoing-handler@0.2.0-rc-2023-10-18; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/command.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/command.wit deleted file mode 100644 index d7ea2d91..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/command.wit +++ /dev/null @@ -1,7 +0,0 @@ -package wasi:cli@0.2.0-rc-2023-10-18; - -world command { - include reactor; - - export run; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/environment.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/environment.wit deleted file mode 100644 index 70065233..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/environment.wit +++ /dev/null @@ -1,18 +0,0 @@ -interface environment { - /// Get the POSIX-style environment variables. - /// - /// Each environment variable is provided as a pair of string variable names - /// and string value. - /// - /// Morally, these are a value import, but until value imports are available - /// in the component model, this import function should return the same - /// values each time it is called. - get-environment: func() -> list>; - - /// Get the POSIX-style arguments to the program. - get-arguments: func() -> list; - - /// Return a path that programs should use as their initial current working - /// directory, interpreting `.` as shorthand for this. - initial-cwd: func() -> option; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/exit.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/exit.wit deleted file mode 100644 index d0c2b82a..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/exit.wit +++ /dev/null @@ -1,4 +0,0 @@ -interface exit { - /// Exit the current instance and any linked instances. - exit: func(status: result); -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/reactor.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/reactor.wit deleted file mode 100644 index 904b9946..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/reactor.wit +++ /dev/null @@ -1,32 +0,0 @@ -package wasi:cli@0.2.0-rc-2023-10-18; - -world reactor { - import wasi:clocks/wall-clock@0.2.0-rc-2023-10-18; - import wasi:clocks/monotonic-clock@0.2.0-rc-2023-10-18; - import wasi:clocks/timezone@0.2.0-rc-2023-10-18; - import wasi:filesystem/types@0.2.0-rc-2023-10-18; - import wasi:filesystem/preopens@0.2.0-rc-2023-10-18; - import wasi:sockets/instance-network@0.2.0-rc-2023-10-18; - import wasi:sockets/ip-name-lookup@0.2.0-rc-2023-10-18; - import wasi:sockets/network@0.2.0-rc-2023-10-18; - import wasi:sockets/tcp-create-socket@0.2.0-rc-2023-10-18; - import wasi:sockets/tcp@0.2.0-rc-2023-10-18; - import wasi:sockets/udp-create-socket@0.2.0-rc-2023-10-18; - import wasi:sockets/udp@0.2.0-rc-2023-10-18; - import wasi:random/random@0.2.0-rc-2023-10-18; - import wasi:random/insecure@0.2.0-rc-2023-10-18; - import wasi:random/insecure-seed@0.2.0-rc-2023-10-18; - import wasi:io/poll@0.2.0-rc-2023-10-18; - import wasi:io/streams@0.2.0-rc-2023-10-18; - - import environment; - import exit; - import stdin; - import stdout; - import stderr; - import terminal-input; - import terminal-output; - import terminal-stdin; - import terminal-stdout; - import terminal-stderr; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/run.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/run.wit deleted file mode 100644 index a70ee8c0..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/run.wit +++ /dev/null @@ -1,4 +0,0 @@ -interface run { - /// Run the program. - run: func() -> result; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/stdio.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/stdio.wit deleted file mode 100644 index 513ca92d..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/stdio.wit +++ /dev/null @@ -1,17 +0,0 @@ -interface stdin { - use wasi:io/streams@0.2.0-rc-2023-10-18.{input-stream}; - - get-stdin: func() -> input-stream; -} - -interface stdout { - use wasi:io/streams@0.2.0-rc-2023-10-18.{output-stream}; - - get-stdout: func() -> output-stream; -} - -interface stderr { - use wasi:io/streams@0.2.0-rc-2023-10-18.{output-stream}; - - get-stderr: func() -> output-stream; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/terminal.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/terminal.wit deleted file mode 100644 index 47495769..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/cli/terminal.wit +++ /dev/null @@ -1,47 +0,0 @@ -interface terminal-input { - /// The input side of a terminal. - resource terminal-input; - - // In the future, this may include functions for disabling echoing, - // disabling input buffering so that keyboard events are sent through - // immediately, querying supported features, and so on. -} - -interface terminal-output { - /// The output side of a terminal. - resource terminal-output; - - // In the future, this may include functions for querying the terminal - // size, being notified of terminal size changes, querying supported - // features, and so on. -} - -/// An interface providing an optional `terminal-input` for stdin as a -/// link-time authority. -interface terminal-stdin { - use terminal-input.{terminal-input}; - - /// If stdin is connected to a terminal, return a `terminal-input` handle - /// allowing further interaction with it. - get-terminal-stdin: func() -> option; -} - -/// An interface providing an optional `terminal-output` for stdout as a -/// link-time authority. -interface terminal-stdout { - use terminal-output.{terminal-output}; - - /// If stdout is connected to a terminal, return a `terminal-output` handle - /// allowing further interaction with it. - get-terminal-stdout: func() -> option; -} - -/// An interface providing an optional `terminal-output` for stderr as a -/// link-time authority. -interface terminal-stderr { - use terminal-output.{terminal-output}; - - /// If stderr is connected to a terminal, return a `terminal-output` handle - /// allowing further interaction with it. - get-terminal-stderr: func() -> option; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/monotonic-clock.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/monotonic-clock.wit deleted file mode 100644 index c0ecb529..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/monotonic-clock.wit +++ /dev/null @@ -1,32 +0,0 @@ -/// WASI Monotonic Clock is a clock API intended to let users measure elapsed -/// time. -/// -/// It is intended to be portable at least between Unix-family platforms and -/// Windows. -/// -/// A monotonic clock is a clock which has an unspecified initial value, and -/// successive reads of the clock will produce non-decreasing values. -/// -/// It is intended for measuring elapsed time. -interface monotonic-clock { - use wasi:io/poll@0.2.0-rc-2023-10-18.{pollable}; - - /// A timestamp in nanoseconds. - type instant = u64; - - /// Read the current value of the clock. - /// - /// The clock is monotonic, therefore calling this function repeatedly will - /// produce a sequence of non-decreasing values. - now: func() -> instant; - - /// Query the resolution of the clock. - resolution: func() -> instant; - - /// Create a `pollable` which will resolve once the specified time has been - /// reached. - subscribe: func( - when: instant, - absolute: bool - ) -> pollable; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/timezone.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/timezone.wit deleted file mode 100644 index e717e7b8..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/timezone.wit +++ /dev/null @@ -1,48 +0,0 @@ -interface timezone { - use wall-clock.{datetime}; - - /// Return information needed to display the given `datetime`. This includes - /// the UTC offset, the time zone name, and a flag indicating whether - /// daylight saving time is active. - /// - /// If the timezone cannot be determined for the given `datetime`, return a - /// `timezone-display` for `UTC` with a `utc-offset` of 0 and no daylight - /// saving time. - display: func(when: datetime) -> timezone-display; - - /// The same as `display`, but only return the UTC offset. - utc-offset: func(when: datetime) -> s32; - - /// Information useful for displaying the timezone of a specific `datetime`. - /// - /// This information may vary within a single `timezone` to reflect daylight - /// saving time adjustments. - record timezone-display { - /// The number of seconds difference between UTC time and the local - /// time of the timezone. - /// - /// The returned value will always be less than 86400 which is the - /// number of seconds in a day (24*60*60). - /// - /// In implementations that do not expose an actual time zone, this - /// should return 0. - utc-offset: s32, - - /// The abbreviated name of the timezone to display to a user. The name - /// `UTC` indicates Coordinated Universal Time. Otherwise, this should - /// reference local standards for the name of the time zone. - /// - /// In implementations that do not expose an actual time zone, this - /// should be the string `UTC`. - /// - /// In time zones that do not have an applicable name, a formatted - /// representation of the UTC offset may be returned, such as `-04:00`. - name: string, - - /// Whether daylight saving time is active. - /// - /// In implementations that do not expose an actual time zone, this - /// should return false. - in-daylight-saving-time: bool, - } -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/wall-clock.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/wall-clock.wit deleted file mode 100644 index c3956496..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/wall-clock.wit +++ /dev/null @@ -1,41 +0,0 @@ -/// WASI Wall Clock is a clock API intended to let users query the current -/// time. The name "wall" makes an analogy to a "clock on the wall", which -/// is not necessarily monotonic as it may be reset. -/// -/// It is intended to be portable at least between Unix-family platforms and -/// Windows. -/// -/// A wall clock is a clock which measures the date and time according to -/// some external reference. -/// -/// External references may be reset, so this clock is not necessarily -/// monotonic, making it unsuitable for measuring elapsed time. -/// -/// It is intended for reporting the current date and time for humans. -interface wall-clock { - /// A time and date in seconds plus nanoseconds. - record datetime { - seconds: u64, - nanoseconds: u32, - } - - /// Read the current value of the clock. - /// - /// This clock is not monotonic, therefore calling this function repeatedly - /// will not necessarily produce a sequence of non-decreasing values. - /// - /// The returned timestamps represent the number of seconds since - /// 1970-01-01T00:00:00Z, also known as [POSIX's Seconds Since the Epoch], - /// also known as [Unix Time]. - /// - /// The nanoseconds field of the output is always less than 1000000000. - /// - /// [POSIX's Seconds Since the Epoch]: https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap04.html#tag_21_04_16 - /// [Unix Time]: https://en.wikipedia.org/wiki/Unix_time - now: func() -> datetime; - - /// Query the resolution of the clock. - /// - /// The nanoseconds field of the output is always less than 1000000000. - resolution: func() -> datetime; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/world.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/world.wit deleted file mode 100644 index cdfb51d9..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/clocks/world.wit +++ /dev/null @@ -1,7 +0,0 @@ -package wasi:clocks@0.2.0-rc-2023-10-18; - -world imports { - import monotonic-clock; - import wall-clock; - import timezone; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/filesystem/preopens.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/filesystem/preopens.wit deleted file mode 100644 index 3f787ac3..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/filesystem/preopens.wit +++ /dev/null @@ -1,6 +0,0 @@ -interface preopens { - use types.{descriptor}; - - /// Return the set of preopened directories, and their path. - get-directories: func() -> list>; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/filesystem/types.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/filesystem/types.wit deleted file mode 100644 index af361354..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/filesystem/types.wit +++ /dev/null @@ -1,810 +0,0 @@ -/// WASI filesystem is a filesystem API primarily intended to let users run WASI -/// programs that access their files on their existing filesystems, without -/// significant overhead. -/// -/// It is intended to be roughly portable between Unix-family platforms and -/// Windows, though it does not hide many of the major differences. -/// -/// Paths are passed as interface-type `string`s, meaning they must consist of -/// a sequence of Unicode Scalar Values (USVs). Some filesystems may contain -/// paths which are not accessible by this API. -/// -/// The directory separator in WASI is always the forward-slash (`/`). -/// -/// All paths in WASI are relative paths, and are interpreted relative to a -/// `descriptor` referring to a base directory. If a `path` argument to any WASI -/// function starts with `/`, or if any step of resolving a `path`, including -/// `..` and symbolic link steps, reaches a directory outside of the base -/// directory, or reaches a symlink to an absolute or rooted path in the -/// underlying filesystem, the function fails with `error-code::not-permitted`. -/// -/// For more information about WASI path resolution and sandboxing, see -/// [WASI filesystem path resolution]. -/// -/// [WASI filesystem path resolution]: https://github.com/WebAssembly/wasi-filesystem/blob/main/path-resolution.md -interface types { - use wasi:io/streams@0.2.0-rc-2023-10-18.{input-stream, output-stream, error}; - use wasi:clocks/wall-clock@0.2.0-rc-2023-10-18.{datetime}; - - /// File size or length of a region within a file. - type filesize = u64; - - /// The type of a filesystem object referenced by a descriptor. - /// - /// Note: This was called `filetype` in earlier versions of WASI. - enum descriptor-type { - /// The type of the descriptor or file is unknown or is different from - /// any of the other types specified. - unknown, - /// The descriptor refers to a block device inode. - block-device, - /// The descriptor refers to a character device inode. - character-device, - /// The descriptor refers to a directory inode. - directory, - /// The descriptor refers to a named pipe. - fifo, - /// The file refers to a symbolic link inode. - symbolic-link, - /// The descriptor refers to a regular file inode. - regular-file, - /// The descriptor refers to a socket. - socket, - } - - /// Descriptor flags. - /// - /// Note: This was called `fdflags` in earlier versions of WASI. - flags descriptor-flags { - /// Read mode: Data can be read. - read, - /// Write mode: Data can be written to. - write, - /// Request that writes be performed according to synchronized I/O file - /// integrity completion. The data stored in the file and the file's - /// metadata are synchronized. This is similar to `O_SYNC` in POSIX. - /// - /// The precise semantics of this operation have not yet been defined for - /// WASI. At this time, it should be interpreted as a request, and not a - /// requirement. - file-integrity-sync, - /// Request that writes be performed according to synchronized I/O data - /// integrity completion. Only the data stored in the file is - /// synchronized. This is similar to `O_DSYNC` in POSIX. - /// - /// The precise semantics of this operation have not yet been defined for - /// WASI. At this time, it should be interpreted as a request, and not a - /// requirement. - data-integrity-sync, - /// Requests that reads be performed at the same level of integrety - /// requested for writes. This is similar to `O_RSYNC` in POSIX. - /// - /// The precise semantics of this operation have not yet been defined for - /// WASI. At this time, it should be interpreted as a request, and not a - /// requirement. - requested-write-sync, - /// Mutating directories mode: Directory contents may be mutated. - /// - /// When this flag is unset on a descriptor, operations using the - /// descriptor which would create, rename, delete, modify the data or - /// metadata of filesystem objects, or obtain another handle which - /// would permit any of those, shall fail with `error-code::read-only` if - /// they would otherwise succeed. - /// - /// This may only be set on directories. - mutate-directory, - } - - /// File attributes. - /// - /// Note: This was called `filestat` in earlier versions of WASI. - record descriptor-stat { - /// File type. - %type: descriptor-type, - /// Number of hard links to the file. - link-count: link-count, - /// For regular files, the file size in bytes. For symbolic links, the - /// length in bytes of the pathname contained in the symbolic link. - size: filesize, - /// Last data access timestamp. - /// - /// If the `option` is none, the platform doesn't maintain an access - /// timestamp for this file. - data-access-timestamp: option, - /// Last data modification timestamp. - /// - /// If the `option` is none, the platform doesn't maintain a - /// modification timestamp for this file. - data-modification-timestamp: option, - /// Last file status-change timestamp. - /// - /// If the `option` is none, the platform doesn't maintain a - /// status-change timestamp for this file. - status-change-timestamp: option, - } - - /// Flags determining the method of how paths are resolved. - flags path-flags { - /// As long as the resolved path corresponds to a symbolic link, it is - /// expanded. - symlink-follow, - } - - /// Open flags used by `open-at`. - flags open-flags { - /// Create file if it does not exist, similar to `O_CREAT` in POSIX. - create, - /// Fail if not a directory, similar to `O_DIRECTORY` in POSIX. - directory, - /// Fail if file already exists, similar to `O_EXCL` in POSIX. - exclusive, - /// Truncate file to size 0, similar to `O_TRUNC` in POSIX. - truncate, - } - - /// Permissions mode used by `open-at`, `change-file-permissions-at`, and - /// similar. - flags modes { - /// True if the resource is considered readable by the containing - /// filesystem. - readable, - /// True if the resource is considered writable by the containing - /// filesystem. - writable, - /// True if the resource is considered executable by the containing - /// filesystem. This does not apply to directories. - executable, - } - - /// Access type used by `access-at`. - variant access-type { - /// Test for readability, writeability, or executability. - access(modes), - - /// Test whether the path exists. - exists, - } - - /// Number of hard links to an inode. - type link-count = u64; - - /// When setting a timestamp, this gives the value to set it to. - variant new-timestamp { - /// Leave the timestamp set to its previous value. - no-change, - /// Set the timestamp to the current time of the system clock associated - /// with the filesystem. - now, - /// Set the timestamp to the given value. - timestamp(datetime), - } - - /// A directory entry. - record directory-entry { - /// The type of the file referred to by this directory entry. - %type: descriptor-type, - - /// The name of the object. - name: string, - } - - /// Error codes returned by functions, similar to `errno` in POSIX. - /// Not all of these error codes are returned by the functions provided by this - /// API; some are used in higher-level library layers, and others are provided - /// merely for alignment with POSIX. - enum error-code { - /// Permission denied, similar to `EACCES` in POSIX. - access, - /// Resource unavailable, or operation would block, similar to `EAGAIN` and `EWOULDBLOCK` in POSIX. - would-block, - /// Connection already in progress, similar to `EALREADY` in POSIX. - already, - /// Bad descriptor, similar to `EBADF` in POSIX. - bad-descriptor, - /// Device or resource busy, similar to `EBUSY` in POSIX. - busy, - /// Resource deadlock would occur, similar to `EDEADLK` in POSIX. - deadlock, - /// Storage quota exceeded, similar to `EDQUOT` in POSIX. - quota, - /// File exists, similar to `EEXIST` in POSIX. - exist, - /// File too large, similar to `EFBIG` in POSIX. - file-too-large, - /// Illegal byte sequence, similar to `EILSEQ` in POSIX. - illegal-byte-sequence, - /// Operation in progress, similar to `EINPROGRESS` in POSIX. - in-progress, - /// Interrupted function, similar to `EINTR` in POSIX. - interrupted, - /// Invalid argument, similar to `EINVAL` in POSIX. - invalid, - /// I/O error, similar to `EIO` in POSIX. - io, - /// Is a directory, similar to `EISDIR` in POSIX. - is-directory, - /// Too many levels of symbolic links, similar to `ELOOP` in POSIX. - loop, - /// Too many links, similar to `EMLINK` in POSIX. - too-many-links, - /// Message too large, similar to `EMSGSIZE` in POSIX. - message-size, - /// Filename too long, similar to `ENAMETOOLONG` in POSIX. - name-too-long, - /// No such device, similar to `ENODEV` in POSIX. - no-device, - /// No such file or directory, similar to `ENOENT` in POSIX. - no-entry, - /// No locks available, similar to `ENOLCK` in POSIX. - no-lock, - /// Not enough space, similar to `ENOMEM` in POSIX. - insufficient-memory, - /// No space left on device, similar to `ENOSPC` in POSIX. - insufficient-space, - /// Not a directory or a symbolic link to a directory, similar to `ENOTDIR` in POSIX. - not-directory, - /// Directory not empty, similar to `ENOTEMPTY` in POSIX. - not-empty, - /// State not recoverable, similar to `ENOTRECOVERABLE` in POSIX. - not-recoverable, - /// Not supported, similar to `ENOTSUP` and `ENOSYS` in POSIX. - unsupported, - /// Inappropriate I/O control operation, similar to `ENOTTY` in POSIX. - no-tty, - /// No such device or address, similar to `ENXIO` in POSIX. - no-such-device, - /// Value too large to be stored in data type, similar to `EOVERFLOW` in POSIX. - overflow, - /// Operation not permitted, similar to `EPERM` in POSIX. - not-permitted, - /// Broken pipe, similar to `EPIPE` in POSIX. - pipe, - /// Read-only file system, similar to `EROFS` in POSIX. - read-only, - /// Invalid seek, similar to `ESPIPE` in POSIX. - invalid-seek, - /// Text file busy, similar to `ETXTBSY` in POSIX. - text-file-busy, - /// Cross-device link, similar to `EXDEV` in POSIX. - cross-device, - } - - /// File or memory access pattern advisory information. - enum advice { - /// The application has no advice to give on its behavior with respect - /// to the specified data. - normal, - /// The application expects to access the specified data sequentially - /// from lower offsets to higher offsets. - sequential, - /// The application expects to access the specified data in a random - /// order. - random, - /// The application expects to access the specified data in the near - /// future. - will-need, - /// The application expects that it will not access the specified data - /// in the near future. - dont-need, - /// The application expects to access the specified data once and then - /// not reuse it thereafter. - no-reuse, - } - - /// A 128-bit hash value, split into parts because wasm doesn't have a - /// 128-bit integer type. - record metadata-hash-value { - /// 64 bits of a 128-bit hash value. - lower: u64, - /// Another 64 bits of a 128-bit hash value. - upper: u64, - } - - /// A descriptor is a reference to a filesystem object, which may be a file, - /// directory, named pipe, special file, or other object on which filesystem - /// calls may be made. - resource descriptor { - /// Return a stream for reading from a file, if available. - /// - /// May fail with an error-code describing why the file cannot be read. - /// - /// Multiple read, write, and append streams may be active on the same open - /// file and they do not interfere with each other. - /// - /// Note: This allows using `read-stream`, which is similar to `read` in POSIX. - read-via-stream: func( - /// The offset within the file at which to start reading. - offset: filesize, - ) -> result; - - /// Return a stream for writing to a file, if available. - /// - /// May fail with an error-code describing why the file cannot be written. - /// - /// Note: This allows using `write-stream`, which is similar to `write` in - /// POSIX. - write-via-stream: func( - /// The offset within the file at which to start writing. - offset: filesize, - ) -> result; - - /// Return a stream for appending to a file, if available. - /// - /// May fail with an error-code describing why the file cannot be appended. - /// - /// Note: This allows using `write-stream`, which is similar to `write` with - /// `O_APPEND` in in POSIX. - append-via-stream: func() -> result; - - /// Provide file advisory information on a descriptor. - /// - /// This is similar to `posix_fadvise` in POSIX. - advise: func( - /// The offset within the file to which the advisory applies. - offset: filesize, - /// The length of the region to which the advisory applies. - length: filesize, - /// The advice. - advice: advice - ) -> result<_, error-code>; - - /// Synchronize the data of a file to disk. - /// - /// This function succeeds with no effect if the file descriptor is not - /// opened for writing. - /// - /// Note: This is similar to `fdatasync` in POSIX. - sync-data: func() -> result<_, error-code>; - - /// Get flags associated with a descriptor. - /// - /// Note: This returns similar flags to `fcntl(fd, F_GETFL)` in POSIX. - /// - /// Note: This returns the value that was the `fs_flags` value returned - /// from `fdstat_get` in earlier versions of WASI. - get-flags: func() -> result; - - /// Get the dynamic type of a descriptor. - /// - /// Note: This returns the same value as the `type` field of the `fd-stat` - /// returned by `stat`, `stat-at` and similar. - /// - /// Note: This returns similar flags to the `st_mode & S_IFMT` value provided - /// by `fstat` in POSIX. - /// - /// Note: This returns the value that was the `fs_filetype` value returned - /// from `fdstat_get` in earlier versions of WASI. - get-type: func() -> result; - - /// Adjust the size of an open file. If this increases the file's size, the - /// extra bytes are filled with zeros. - /// - /// Note: This was called `fd_filestat_set_size` in earlier versions of WASI. - set-size: func(size: filesize) -> result<_, error-code>; - - /// Adjust the timestamps of an open file or directory. - /// - /// Note: This is similar to `futimens` in POSIX. - /// - /// Note: This was called `fd_filestat_set_times` in earlier versions of WASI. - set-times: func( - /// The desired values of the data access timestamp. - data-access-timestamp: new-timestamp, - /// The desired values of the data modification timestamp. - data-modification-timestamp: new-timestamp, - ) -> result<_, error-code>; - - /// Read from a descriptor, without using and updating the descriptor's offset. - /// - /// This function returns a list of bytes containing the data that was - /// read, along with a bool which, when true, indicates that the end of the - /// file was reached. The returned list will contain up to `length` bytes; it - /// may return fewer than requested, if the end of the file is reached or - /// if the I/O operation is interrupted. - /// - /// In the future, this may change to return a `stream`. - /// - /// Note: This is similar to `pread` in POSIX. - read: func( - /// The maximum number of bytes to read. - length: filesize, - /// The offset within the file at which to read. - offset: filesize, - ) -> result, bool>, error-code>; - - /// Write to a descriptor, without using and updating the descriptor's offset. - /// - /// It is valid to write past the end of a file; the file is extended to the - /// extent of the write, with bytes between the previous end and the start of - /// the write set to zero. - /// - /// In the future, this may change to take a `stream`. - /// - /// Note: This is similar to `pwrite` in POSIX. - write: func( - /// Data to write - buffer: list, - /// The offset within the file at which to write. - offset: filesize, - ) -> result; - - /// Read directory entries from a directory. - /// - /// On filesystems where directories contain entries referring to themselves - /// and their parents, often named `.` and `..` respectively, these entries - /// are omitted. - /// - /// This always returns a new stream which starts at the beginning of the - /// directory. Multiple streams may be active on the same directory, and they - /// do not interfere with each other. - read-directory: func() -> result; - - /// Synchronize the data and metadata of a file to disk. - /// - /// This function succeeds with no effect if the file descriptor is not - /// opened for writing. - /// - /// Note: This is similar to `fsync` in POSIX. - sync: func() -> result<_, error-code>; - - /// Create a directory. - /// - /// Note: This is similar to `mkdirat` in POSIX. - create-directory-at: func( - /// The relative path at which to create the directory. - path: string, - ) -> result<_, error-code>; - - /// Return the attributes of an open file or directory. - /// - /// Note: This is similar to `fstat` in POSIX, except that it does not return - /// device and inode information. For testing whether two descriptors refer to - /// the same underlying filesystem object, use `is-same-object`. To obtain - /// additional data that can be used do determine whether a file has been - /// modified, use `metadata-hash`. - /// - /// Note: This was called `fd_filestat_get` in earlier versions of WASI. - stat: func() -> result; - - /// Return the attributes of a file or directory. - /// - /// Note: This is similar to `fstatat` in POSIX, except that it does not - /// return device and inode information. See the `stat` description for a - /// discussion of alternatives. - /// - /// Note: This was called `path_filestat_get` in earlier versions of WASI. - stat-at: func( - /// Flags determining the method of how the path is resolved. - path-flags: path-flags, - /// The relative path of the file or directory to inspect. - path: string, - ) -> result; - - /// Adjust the timestamps of a file or directory. - /// - /// Note: This is similar to `utimensat` in POSIX. - /// - /// Note: This was called `path_filestat_set_times` in earlier versions of - /// WASI. - set-times-at: func( - /// Flags determining the method of how the path is resolved. - path-flags: path-flags, - /// The relative path of the file or directory to operate on. - path: string, - /// The desired values of the data access timestamp. - data-access-timestamp: new-timestamp, - /// The desired values of the data modification timestamp. - data-modification-timestamp: new-timestamp, - ) -> result<_, error-code>; - - /// Create a hard link. - /// - /// Note: This is similar to `linkat` in POSIX. - link-at: func( - /// Flags determining the method of how the path is resolved. - old-path-flags: path-flags, - /// The relative source path from which to link. - old-path: string, - /// The base directory for `new-path`. - new-descriptor: borrow, - /// The relative destination path at which to create the hard link. - new-path: string, - ) -> result<_, error-code>; - - /// Open a file or directory. - /// - /// The returned descriptor is not guaranteed to be the lowest-numbered - /// descriptor not currently open/ it is randomized to prevent applications - /// from depending on making assumptions about indexes, since this is - /// error-prone in multi-threaded contexts. The returned descriptor is - /// guaranteed to be less than 2**31. - /// - /// If `flags` contains `descriptor-flags::mutate-directory`, and the base - /// descriptor doesn't have `descriptor-flags::mutate-directory` set, - /// `open-at` fails with `error-code::read-only`. - /// - /// If `flags` contains `write` or `mutate-directory`, or `open-flags` - /// contains `truncate` or `create`, and the base descriptor doesn't have - /// `descriptor-flags::mutate-directory` set, `open-at` fails with - /// `error-code::read-only`. - /// - /// Note: This is similar to `openat` in POSIX. - open-at: func( - /// Flags determining the method of how the path is resolved. - path-flags: path-flags, - /// The relative path of the object to open. - path: string, - /// The method by which to open the file. - open-flags: open-flags, - /// Flags to use for the resulting descriptor. - %flags: descriptor-flags, - /// Permissions to use when creating a new file. - modes: modes - ) -> result; - - /// Read the contents of a symbolic link. - /// - /// If the contents contain an absolute or rooted path in the underlying - /// filesystem, this function fails with `error-code::not-permitted`. - /// - /// Note: This is similar to `readlinkat` in POSIX. - readlink-at: func( - /// The relative path of the symbolic link from which to read. - path: string, - ) -> result; - - /// Remove a directory. - /// - /// Return `error-code::not-empty` if the directory is not empty. - /// - /// Note: This is similar to `unlinkat(fd, path, AT_REMOVEDIR)` in POSIX. - remove-directory-at: func( - /// The relative path to a directory to remove. - path: string, - ) -> result<_, error-code>; - - /// Rename a filesystem object. - /// - /// Note: This is similar to `renameat` in POSIX. - rename-at: func( - /// The relative source path of the file or directory to rename. - old-path: string, - /// The base directory for `new-path`. - new-descriptor: borrow, - /// The relative destination path to which to rename the file or directory. - new-path: string, - ) -> result<_, error-code>; - - /// Create a symbolic link (also known as a "symlink"). - /// - /// If `old-path` starts with `/`, the function fails with - /// `error-code::not-permitted`. - /// - /// Note: This is similar to `symlinkat` in POSIX. - symlink-at: func( - /// The contents of the symbolic link. - old-path: string, - /// The relative destination path at which to create the symbolic link. - new-path: string, - ) -> result<_, error-code>; - - /// Check accessibility of a filesystem path. - /// - /// Check whether the given filesystem path names an object which is - /// readable, writable, or executable, or whether it exists. - /// - /// This does not a guarantee that subsequent accesses will succeed, as - /// filesystem permissions may be modified asynchronously by external - /// entities. - /// - /// Note: This is similar to `faccessat` with the `AT_EACCESS` flag in POSIX. - access-at: func( - /// Flags determining the method of how the path is resolved. - path-flags: path-flags, - /// The relative path to check. - path: string, - /// The type of check to perform. - %type: access-type - ) -> result<_, error-code>; - - /// Unlink a filesystem object that is not a directory. - /// - /// Return `error-code::is-directory` if the path refers to a directory. - /// Note: This is similar to `unlinkat(fd, path, 0)` in POSIX. - unlink-file-at: func( - /// The relative path to a file to unlink. - path: string, - ) -> result<_, error-code>; - - /// Change the permissions of a filesystem object that is not a directory. - /// - /// Note that the ultimate meanings of these permissions is - /// filesystem-specific. - /// - /// Note: This is similar to `fchmodat` in POSIX. - change-file-permissions-at: func( - /// Flags determining the method of how the path is resolved. - path-flags: path-flags, - /// The relative path to operate on. - path: string, - /// The new permissions for the filesystem object. - modes: modes, - ) -> result<_, error-code>; - - /// Change the permissions of a directory. - /// - /// Note that the ultimate meanings of these permissions is - /// filesystem-specific. - /// - /// Unlike in POSIX, the `executable` flag is not reinterpreted as a "search" - /// flag. `read` on a directory implies readability and searchability, and - /// `execute` is not valid for directories. - /// - /// Note: This is similar to `fchmodat` in POSIX. - change-directory-permissions-at: func( - /// Flags determining the method of how the path is resolved. - path-flags: path-flags, - /// The relative path to operate on. - path: string, - /// The new permissions for the directory. - modes: modes, - ) -> result<_, error-code>; - - /// Request a shared advisory lock for an open file. - /// - /// This requests a *shared* lock; more than one shared lock can be held for - /// a file at the same time. - /// - /// If the open file has an exclusive lock, this function downgrades the lock - /// to a shared lock. If it has a shared lock, this function has no effect. - /// - /// This requests an *advisory* lock, meaning that the file could be accessed - /// by other programs that don't hold the lock. - /// - /// It is unspecified how shared locks interact with locks acquired by - /// non-WASI programs. - /// - /// This function blocks until the lock can be acquired. - /// - /// Not all filesystems support locking; on filesystems which don't support - /// locking, this function returns `error-code::unsupported`. - /// - /// Note: This is similar to `flock(fd, LOCK_SH)` in Unix. - lock-shared: func() -> result<_, error-code>; - - /// Request an exclusive advisory lock for an open file. - /// - /// This requests an *exclusive* lock; no other locks may be held for the - /// file while an exclusive lock is held. - /// - /// If the open file has a shared lock and there are no exclusive locks held - /// for the file, this function upgrades the lock to an exclusive lock. If the - /// open file already has an exclusive lock, this function has no effect. - /// - /// This requests an *advisory* lock, meaning that the file could be accessed - /// by other programs that don't hold the lock. - /// - /// It is unspecified whether this function succeeds if the file descriptor - /// is not opened for writing. It is unspecified how exclusive locks interact - /// with locks acquired by non-WASI programs. - /// - /// This function blocks until the lock can be acquired. - /// - /// Not all filesystems support locking; on filesystems which don't support - /// locking, this function returns `error-code::unsupported`. - /// - /// Note: This is similar to `flock(fd, LOCK_EX)` in Unix. - lock-exclusive: func() -> result<_, error-code>; - - /// Request a shared advisory lock for an open file. - /// - /// This requests a *shared* lock; more than one shared lock can be held for - /// a file at the same time. - /// - /// If the open file has an exclusive lock, this function downgrades the lock - /// to a shared lock. If it has a shared lock, this function has no effect. - /// - /// This requests an *advisory* lock, meaning that the file could be accessed - /// by other programs that don't hold the lock. - /// - /// It is unspecified how shared locks interact with locks acquired by - /// non-WASI programs. - /// - /// This function returns `error-code::would-block` if the lock cannot be - /// acquired. - /// - /// Not all filesystems support locking; on filesystems which don't support - /// locking, this function returns `error-code::unsupported`. - /// - /// Note: This is similar to `flock(fd, LOCK_SH | LOCK_NB)` in Unix. - try-lock-shared: func() -> result<_, error-code>; - - /// Request an exclusive advisory lock for an open file. - /// - /// This requests an *exclusive* lock; no other locks may be held for the - /// file while an exclusive lock is held. - /// - /// If the open file has a shared lock and there are no exclusive locks held - /// for the file, this function upgrades the lock to an exclusive lock. If the - /// open file already has an exclusive lock, this function has no effect. - /// - /// This requests an *advisory* lock, meaning that the file could be accessed - /// by other programs that don't hold the lock. - /// - /// It is unspecified whether this function succeeds if the file descriptor - /// is not opened for writing. It is unspecified how exclusive locks interact - /// with locks acquired by non-WASI programs. - /// - /// This function returns `error-code::would-block` if the lock cannot be - /// acquired. - /// - /// Not all filesystems support locking; on filesystems which don't support - /// locking, this function returns `error-code::unsupported`. - /// - /// Note: This is similar to `flock(fd, LOCK_EX | LOCK_NB)` in Unix. - try-lock-exclusive: func() -> result<_, error-code>; - - /// Release a shared or exclusive lock on an open file. - /// - /// Note: This is similar to `flock(fd, LOCK_UN)` in Unix. - unlock: func() -> result<_, error-code>; - - /// Test whether two descriptors refer to the same filesystem object. - /// - /// In POSIX, this corresponds to testing whether the two descriptors have the - /// same device (`st_dev`) and inode (`st_ino` or `d_ino`) numbers. - /// wasi-filesystem does not expose device and inode numbers, so this function - /// may be used instead. - is-same-object: func(other: borrow) -> bool; - - /// Return a hash of the metadata associated with a filesystem object referred - /// to by a descriptor. - /// - /// This returns a hash of the last-modification timestamp and file size, and - /// may also include the inode number, device number, birth timestamp, and - /// other metadata fields that may change when the file is modified or - /// replaced. It may also include a secret value chosen by the - /// implementation and not otherwise exposed. - /// - /// Implementations are encourated to provide the following properties: - /// - /// - If the file is not modified or replaced, the computed hash value should - /// usually not change. - /// - If the object is modified or replaced, the computed hash value should - /// usually change. - /// - The inputs to the hash should not be easily computable from the - /// computed hash. - /// - /// However, none of these is required. - metadata-hash: func() -> result; - - /// Return a hash of the metadata associated with a filesystem object referred - /// to by a directory descriptor and a relative path. - /// - /// This performs the same hash computation as `metadata-hash`. - metadata-hash-at: func( - /// Flags determining the method of how the path is resolved. - path-flags: path-flags, - /// The relative path of the file or directory to inspect. - path: string, - ) -> result; - } - - /// A stream of directory entries. - resource directory-entry-stream { - /// Read a single directory entry from a `directory-entry-stream`. - read-directory-entry: func() -> result, error-code>; - } - - /// Attempts to extract a filesystem-related `error-code` from the stream - /// `error` provided. - /// - /// Stream operations which return `stream-error::last-operation-failed` - /// have a payload with more information about the operation that failed. - /// This payload can be passed through to this function to see if there's - /// filesystem-related information about the error to return. - /// - /// Note that this function is fallible because not all stream-related - /// errors are filesystem-related errors. - filesystem-error-code: func(err: borrow) -> option; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/filesystem/world.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/filesystem/world.wit deleted file mode 100644 index 3f953f89..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/filesystem/world.wit +++ /dev/null @@ -1,6 +0,0 @@ -package wasi:filesystem@0.2.0-rc-2023-10-18; - -world imports { - import types; - import preopens; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/incoming-handler.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/incoming-handler.wit deleted file mode 100644 index 6968d633..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/incoming-handler.wit +++ /dev/null @@ -1,24 +0,0 @@ -// The `wasi:http/incoming-handler` interface is meant to be exported by -// components and called by the host in response to a new incoming HTTP -// response. -// -// NOTE: in Preview3, this interface will be merged with -// `wasi:http/outgoing-handler` into a single `wasi:http/handler` interface -// that takes a `request` parameter and returns a `response` result. -// -interface incoming-handler { - use types.{incoming-request, response-outparam}; - - // The `handle` function takes an outparam instead of returning its response - // so that the component may stream its response while streaming any other - // request or response bodies. The callee MUST write a response to the - // `response-outparam` and then finish the response before returning. The `handle` - // function is allowed to continue execution after finishing the response's - // output stream. While this post-response execution is taken off the - // critical path, since there is no return value, there is no way to report - // its success or failure. - handle: func( - request: incoming-request, - response-out: response-outparam - ); -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/outgoing-handler.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/outgoing-handler.wit deleted file mode 100644 index 286e2833..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/outgoing-handler.wit +++ /dev/null @@ -1,20 +0,0 @@ -// The `wasi:http/outgoing-handler` interface is meant to be imported by -// components and implemented by the host. -// -// NOTE: in Preview3, this interface will be merged with -// `wasi:http/outgoing-handler` into a single `wasi:http/handler` interface -// that takes a `request` parameter and returns a `response` result. -// -interface outgoing-handler { - use types.{outgoing-request, request-options, future-incoming-response, error}; - - // The parameter and result types of the `handle` function allow the caller - // to concurrently stream the bodies of the outgoing request and the incoming - // response. - // Consumes the outgoing-request. Gives an error if the outgoing-request - // is invalid or cannot be satisfied by this handler. - handle: func( - request: outgoing-request, - options: option - ) -> result; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/proxy.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/proxy.wit deleted file mode 100644 index dde0659d..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/proxy.wit +++ /dev/null @@ -1,34 +0,0 @@ -package wasi:http@0.2.0-rc-2023-10-18; - -// The `wasi:http/proxy` world captures a widely-implementable intersection of -// hosts that includes HTTP forward and reverse proxies. Components targeting -// this world may concurrently stream in and out any number of incoming and -// outgoing HTTP requests. -world proxy { - // HTTP proxies have access to time and randomness. - import wasi:clocks/wall-clock@0.2.0-rc-2023-10-18; - import wasi:clocks/monotonic-clock@0.2.0-rc-2023-10-18; - import wasi:clocks/timezone@0.2.0-rc-2023-10-18; - import wasi:random/random@0.2.0-rc-2023-10-18; - - // Proxies have standard output and error streams which are expected to - // terminate in a developer-facing console provided by the host. - import wasi:cli/stdout@0.2.0-rc-2023-10-18; - import wasi:cli/stderr@0.2.0-rc-2023-10-18; - - // TODO: this is a temporary workaround until component tooling is able to - // gracefully handle the absence of stdin. Hosts must return an eof stream - // for this import, which is what wasi-libc + tooling will do automatically - // when this import is properly removed. - import wasi:cli/stdin@0.2.0-rc-2023-10-18; - - // This is the default handler to use when user code simply wants to make an - // HTTP request (e.g., via `fetch()`). - import outgoing-handler; - - // The host delivers incoming HTTP requests to a component by calling the - // `handle` function of this exported interface. A host may arbitrarily reuse - // or not reuse component instance when delivering incoming HTTP requests and - // thus a component must be able to handle 0..N calls to `handle`. - export incoming-handler; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/types.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/types.wit deleted file mode 100644 index 2cd2fe21..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/http/types.wit +++ /dev/null @@ -1,214 +0,0 @@ -// The `wasi:http/types` interface is meant to be imported by components to -// define the HTTP resource types and operations used by the component's -// imported and exported interfaces. -interface types { - use wasi:io/streams@0.2.0-rc-2023-10-18.{input-stream, output-stream}; - use wasi:io/poll@0.2.0-rc-2023-10-18.{pollable}; - - // This type corresponds to HTTP standard Methods. - variant method { - get, - head, - post, - put, - delete, - connect, - options, - trace, - patch, - other(string) - } - - // This type corresponds to HTTP standard Related Schemes. - variant scheme { - HTTP, - HTTPS, - other(string) - } - - // TODO: perhaps better align with HTTP semantics? - // This type enumerates the different kinds of errors that may occur when - // initially returning a response. - variant error { - invalid-url(string), - timeout-error(string), - protocol-error(string), - unexpected-error(string) - } - - // This following block defines the `fields` resource which corresponds to - // HTTP standard Fields. Soon, when resource types are added, the `type - // fields = u32` type alias can be replaced by a proper `resource fields` - // definition containing all the functions using the method syntactic sugar. - resource fields { - // Multiple values for a header are multiple entries in the list with the - // same key. - constructor(entries: list>>); - - // Values off wire are not necessarily well formed, so they are given by - // list instead of string. - get: func(name: string) -> list>; - - // Values off wire are not necessarily well formed, so they are given by - // list instead of string. - set: func(name: string, value: list>); - delete: func(name: string); - append: func(name: string, value: list); - - // Values off wire are not necessarily well formed, so they are given by - // list instead of string. - entries: func() -> list>>; - - // Deep copy of all contents in a fields. - clone: func() -> fields; - } - - type headers = fields; - type trailers = fields; - - // The following block defines the `incoming-request` and `outgoing-request` - // resource types that correspond to HTTP standard Requests. Soon, when - // resource types are added, the `u32` type aliases can be replaced by - // proper `resource` type definitions containing all the functions as - // methods. Later, Preview2 will allow both types to be merged together into - // a single `request` type (that uses the single `stream` type mentioned - // above). The `consume` and `write` methods may only be called once (and - // return failure thereafter). - resource incoming-request { - method: func() -> method; - - path-with-query: func() -> option; - - scheme: func() -> option; - - authority: func() -> option; - - headers: func() -> /* child */ headers; - // Will return the input-stream child at most once. If called more than - // once, subsequent calls will return error. - - consume: func() -> result; - } - - resource outgoing-request { - constructor( - method: method, - path-with-query: option, - scheme: option, - authority: option, - headers: borrow - ); - - // Will return the outgoing-body child at most once. If called more than - // once, subsequent calls will return error. - write: func() -> result< /* child */ outgoing-body>; - } - - // Additional optional parameters that can be set when making a request. - record request-options { - // The following timeouts are specific to the HTTP protocol and work - // independently of the overall timeouts passed to `io.poll.poll-list`. - - // The timeout for the initial connect. - connect-timeout-ms: option, - - // The timeout for receiving the first byte of the response body. - first-byte-timeout-ms: option, - - // The timeout for receiving the next chunk of bytes in the response body - // stream. - between-bytes-timeout-ms: option - } - - // The following block defines a special resource type used by the - // `wasi:http/incoming-handler` interface. When resource types are added, this - // block can be replaced by a proper `resource response-outparam { ... }` - // definition. Later, with Preview3, the need for an outparam goes away entirely - // (the `wasi:http/handler` interface used for both incoming and outgoing can - // simply return a `stream`). - resource response-outparam { - set: static func(param: response-outparam, response: result); - } - - // This type corresponds to the HTTP standard Status Code. - type status-code = u16; - - // The following block defines the `incoming-response` and `outgoing-response` - // resource types that correspond to HTTP standard Responses. Soon, when - // resource types are added, the `u32` type aliases can be replaced by proper - // `resource` type definitions containing all the functions as methods. Later, - // Preview2 will allow both types to be merged together into a single `response` - // type (that uses the single `stream` type mentioned above). The `consume` and - // `write` methods may only be called once (and return failure thereafter). - resource incoming-response { - status: func() -> status-code; - - headers: func() -> /* child */ headers; - - // May be called at most once. returns error if called additional times. - // TODO: make incoming-request-consume work the same way, giving a child - // incoming-body. - consume: func() -> result; - } - - resource incoming-body { - // returned input-stream is a child - the implementation may trap if - // incoming-body is dropped (or consumed by call to - // incoming-body-finish) before the input-stream is dropped. - // May be called at most once. returns error if called additional times. - %stream: func() -> result; - - // takes ownership of incoming-body. this will trap if the - // incoming-body-stream child is still alive! - finish: static func(this: incoming-body) -> - /* transitive child of the incoming-response of incoming-body */ future-trailers; - } - - resource future-trailers { - /// Pollable that resolves when the body has been fully read, and the trailers - /// are ready to be consumed. - subscribe: func() -> /* child */ pollable; - - /// Retrieve reference to trailers, if they are ready. - get: func() -> option>; - } - - resource outgoing-response { - constructor(status-code: status-code, headers: borrow); - - /// Will give the child outgoing-response at most once. subsequent calls will - /// return an error. - write: func() -> result; - } - - resource outgoing-body { - /// Will give the child output-stream at most once. subsequent calls will - /// return an error. - write: func() -> result; - - /// Finalize an outgoing body, optionally providing trailers. This must be - /// called to signal that the response is complete. If the `outgoing-body` is - /// dropped without calling `outgoing-body-finalize`, the implementation - /// should treat the body as corrupted. - finish: static func(this: outgoing-body, trailers: option); - } - - /// The following block defines a special resource type used by the - /// `wasi:http/outgoing-handler` interface to emulate - /// `future>` in advance of Preview3. Given a - /// `future-incoming-response`, the client can call the non-blocking `get` - /// method to get the result if it is available. If the result is not available, - /// the client can call `listen` to get a `pollable` that can be passed to - /// `wasi:io/poll.poll-list`. - resource future-incoming-response { - /// option indicates readiness. - /// outer result indicates you are allowed to get the - /// incoming-response-or-error at most once. subsequent calls after ready - /// will return an error here. - /// inner result indicates whether the incoming-response was available, or an - /// error occured. - get: func() -> option>>; - - subscribe: func() -> /* child */ pollable; - } -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/io/poll.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/io/poll.wit deleted file mode 100644 index 047389d2..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/io/poll.wit +++ /dev/null @@ -1,34 +0,0 @@ -package wasi:io@0.2.0-rc-2023-10-18; - -/// A poll API intended to let users wait for I/O events on multiple handles -/// at once. -interface poll { - /// A "pollable" handle. - resource pollable; - - /// Poll for completion on a set of pollables. - /// - /// This function takes a list of pollables, which identify I/O sources of - /// interest, and waits until one or more of the events is ready for I/O. - /// - /// The result `list` contains one or more indices of handles in the - /// argument list that is ready for I/O. - /// - /// If the list contains more elements than can be indexed with a `u32` - /// value, this function traps. - /// - /// A timeout can be implemented by adding a pollable from the - /// wasi-clocks API to the list. - /// - /// This function does not return a `result`; polling in itself does not - /// do any I/O so it doesn't fail. If any of the I/O sources identified by - /// the pollables has an error, it is indicated by marking the source as - /// being reaedy for I/O. - poll-list: func(in: list>) -> list; - - /// Poll for completion on a single pollable. - /// - /// This function is similar to `poll-list`, but operates on only a single - /// pollable. When it returns, the handle is ready for I/O. - poll-one: func(in: borrow); -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/io/streams.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/io/streams.wit deleted file mode 100644 index d0e8f5c3..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/io/streams.wit +++ /dev/null @@ -1,289 +0,0 @@ -package wasi:io@0.2.0-rc-2023-10-18; - -/// WASI I/O is an I/O abstraction API which is currently focused on providing -/// stream types. -/// -/// In the future, the component model is expected to add built-in stream types; -/// when it does, they are expected to subsume this API. -interface streams { - use poll.{pollable}; - - /// An error for input-stream and output-stream operations. - variant stream-error { - /// The last operation (a write or flush) failed before completion. - /// - /// More information is available in the `error` payload. - last-operation-failed(error), - /// The stream is closed: no more input will be accepted by the - /// stream. A closed output-stream will return this error on all - /// future operations. - closed - } - - /// Contextual error information about the last failure that happened on - /// a read, write, or flush from an `input-stream` or `output-stream`. - /// - /// This type is returned through the `stream-error` type whenever an - /// operation on a stream directly fails or an error is discovered - /// after-the-fact, for example when a write's failure shows up through a - /// later `flush` or `check-write`. - /// - /// Interfaces such as `wasi:filesystem/types` provide functionality to - /// further "downcast" this error into interface-specific error information. - resource error { - /// Returns a string that's suitable to assist humans in debugging this - /// error. - /// - /// The returned string will change across platforms and hosts which - /// means that parsing it, for example, would be a - /// platform-compatibility hazard. - to-debug-string: func() -> string; - } - - /// An input bytestream. - /// - /// `input-stream`s are *non-blocking* to the extent practical on underlying - /// platforms. I/O operations always return promptly; if fewer bytes are - /// promptly available than requested, they return the number of bytes promptly - /// available, which could even be zero. To wait for data to be available, - /// use the `subscribe` function to obtain a `pollable` which can be polled - /// for using `wasi:io/poll`. - resource input-stream { - /// Perform a non-blocking read from the stream. - /// - /// This function returns a list of bytes containing the data that was - /// read, along with a `stream-status` which, indicates whether further - /// reads are expected to produce data. The returned list will contain up to - /// `len` bytes; it may return fewer than requested, but not more. An - /// empty list and `stream-status:open` indicates no more data is - /// available at this time, and that the pollable given by `subscribe` - /// will be ready when more data is available. - /// - /// Once a stream has reached the end, subsequent calls to `read` or - /// `skip` will always report `stream-status:ended` rather than producing more - /// data. - /// - /// When the caller gives a `len` of 0, it represents a request to read 0 - /// bytes. This read should always succeed and return an empty list and - /// the current `stream-status`. - /// - /// The `len` parameter is a `u64`, which could represent a list of u8 which - /// is not possible to allocate in wasm32, or not desirable to allocate as - /// as a return value by the callee. The callee may return a list of bytes - /// less than `len` in size while more bytes are available for reading. - read: func( - /// The maximum number of bytes to read - len: u64 - ) -> result, stream-error>; - - /// Read bytes from a stream, after blocking until at least one byte can - /// be read. Except for blocking, identical to `read`. - blocking-read: func( - /// The maximum number of bytes to read - len: u64 - ) -> result, stream-error>; - - /// Skip bytes from a stream. - /// - /// This is similar to the `read` function, but avoids copying the - /// bytes into the instance. - /// - /// Once a stream has reached the end, subsequent calls to read or - /// `skip` will always report end-of-stream rather than producing more - /// data. - /// - /// This function returns the number of bytes skipped, along with a - /// `stream-status` indicating whether the end of the stream was - /// reached. The returned value will be at most `len`; it may be less. - skip: func( - /// The maximum number of bytes to skip. - len: u64, - ) -> result; - - /// Skip bytes from a stream, after blocking until at least one byte - /// can be skipped. Except for blocking behavior, identical to `skip`. - blocking-skip: func( - /// The maximum number of bytes to skip. - len: u64, - ) -> result; - - /// Create a `pollable` which will resolve once either the specified stream - /// has bytes available to read or the other end of the stream has been - /// closed. - /// The created `pollable` is a child resource of the `input-stream`. - /// Implementations may trap if the `input-stream` is dropped before - /// all derived `pollable`s created with this function are dropped. - subscribe: func() -> pollable; - } - - - /// An output bytestream. - /// - /// `output-stream`s are *non-blocking* to the extent practical on - /// underlying platforms. Except where specified otherwise, I/O operations also - /// always return promptly, after the number of bytes that can be written - /// promptly, which could even be zero. To wait for the stream to be ready to - /// accept data, the `subscribe` function to obtain a `pollable` which can be - /// polled for using `wasi:io/poll`. - resource output-stream { - /// Check readiness for writing. This function never blocks. - /// - /// Returns the number of bytes permitted for the next call to `write`, - /// or an error. Calling `write` with more bytes than this function has - /// permitted will trap. - /// - /// When this function returns 0 bytes, the `subscribe` pollable will - /// become ready when this function will report at least 1 byte, or an - /// error. - check-write: func() -> result; - - /// Perform a write. This function never blocks. - /// - /// Precondition: check-write gave permit of Ok(n) and contents has a - /// length of less than or equal to n. Otherwise, this function will trap. - /// - /// returns Err(closed) without writing if the stream has closed since - /// the last call to check-write provided a permit. - write: func( - contents: list - ) -> result<_, stream-error>; - - /// Perform a write of up to 4096 bytes, and then flush the stream. Block - /// until all of these operations are complete, or an error occurs. - /// - /// This is a convenience wrapper around the use of `check-write`, - /// `subscribe`, `write`, and `flush`, and is implemented with the - /// following pseudo-code: - /// - /// ```text - /// let pollable = this.subscribe(); - /// while !contents.is_empty() { - /// // Wait for the stream to become writable - /// poll-one(pollable); - /// let Ok(n) = this.check-write(); // eliding error handling - /// let len = min(n, contents.len()); - /// let (chunk, rest) = contents.split_at(len); - /// this.write(chunk ); // eliding error handling - /// contents = rest; - /// } - /// this.flush(); - /// // Wait for completion of `flush` - /// poll-one(pollable); - /// // Check for any errors that arose during `flush` - /// let _ = this.check-write(); // eliding error handling - /// ``` - blocking-write-and-flush: func( - contents: list - ) -> result<_, stream-error>; - - /// Request to flush buffered output. This function never blocks. - /// - /// This tells the output-stream that the caller intends any buffered - /// output to be flushed. the output which is expected to be flushed - /// is all that has been passed to `write` prior to this call. - /// - /// Upon calling this function, the `output-stream` will not accept any - /// writes (`check-write` will return `ok(0)`) until the flush has - /// completed. The `subscribe` pollable will become ready when the - /// flush has completed and the stream can accept more writes. - flush: func() -> result<_, stream-error>; - - /// Request to flush buffered output, and block until flush completes - /// and stream is ready for writing again. - blocking-flush: func() -> result<_, stream-error>; - - /// Create a `pollable` which will resolve once the output-stream - /// is ready for more writing, or an error has occured. When this - /// pollable is ready, `check-write` will return `ok(n)` with n>0, or an - /// error. - /// - /// If the stream is closed, this pollable is always ready immediately. - /// - /// The created `pollable` is a child resource of the `output-stream`. - /// Implementations may trap if the `output-stream` is dropped before - /// all derived `pollable`s created with this function are dropped. - subscribe: func() -> pollable; - - /// Write zeroes to a stream. - /// - /// this should be used precisely like `write` with the exact same - /// preconditions (must use check-write first), but instead of - /// passing a list of bytes, you simply pass the number of zero-bytes - /// that should be written. - write-zeroes: func( - /// The number of zero-bytes to write - len: u64 - ) -> result<_, stream-error>; - - /// Perform a write of up to 4096 zeroes, and then flush the stream. - /// Block until all of these operations are complete, or an error - /// occurs. - /// - /// This is a convenience wrapper around the use of `check-write`, - /// `subscribe`, `write-zeroes`, and `flush`, and is implemented with - /// the following pseudo-code: - /// - /// ```text - /// let pollable = this.subscribe(); - /// while num_zeroes != 0 { - /// // Wait for the stream to become writable - /// poll-one(pollable); - /// let Ok(n) = this.check-write(); // eliding error handling - /// let len = min(n, num_zeroes); - /// this.write-zeroes(len); // eliding error handling - /// num_zeroes -= len; - /// } - /// this.flush(); - /// // Wait for completion of `flush` - /// poll-one(pollable); - /// // Check for any errors that arose during `flush` - /// let _ = this.check-write(); // eliding error handling - /// ``` - blocking-write-zeroes-and-flush: func( - /// The number of zero-bytes to write - len: u64 - ) -> result<_, stream-error>; - - /// Read from one stream and write to another. - /// - /// This function returns the number of bytes transferred; it may be less - /// than `len`. - /// - /// Unlike other I/O functions, this function blocks until all the data - /// read from the input stream has been written to the output stream. - splice: func( - /// The stream to read from - src: input-stream, - /// The number of bytes to splice - len: u64, - ) -> result; - - /// Read from one stream and write to another, with blocking. - /// - /// This is similar to `splice`, except that it blocks until at least - /// one byte can be read. - blocking-splice: func( - /// The stream to read from - src: input-stream, - /// The number of bytes to splice - len: u64, - ) -> result; - - /// Forward the entire contents of an input stream to an output stream. - /// - /// This function repeatedly reads from the input stream and writes - /// the data to the output stream, until the end of the input stream - /// is reached, or an error is encountered. - /// - /// Unlike other I/O functions, this function blocks until the end - /// of the input stream is seen and all the data has been written to - /// the output stream. - /// - /// This function returns the number of bytes transferred, and the status of - /// the output stream. - forward: func( - /// The stream to read from - src: input-stream - ) -> result; - } -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/io/world.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/io/world.wit deleted file mode 100644 index 3627c9d6..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/io/world.wit +++ /dev/null @@ -1,6 +0,0 @@ -package wasi:io@0.2.0-rc-2023-10-18; - -world imports { - import streams; - import poll; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/logging/logging.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/logging/logging.wit deleted file mode 100644 index b897a5ae..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/logging/logging.wit +++ /dev/null @@ -1,37 +0,0 @@ -package wasi:logging@0.2.0-rc-2023-10-18; - -/// WASI Logging is a logging API intended to let users emit log messages with -/// simple priority levels and context values. -interface logging { - /// A log level, describing a kind of message. - enum level { - /// Describes messages about the values of variables and the flow of - /// control within a program. - trace, - - /// Describes messages likely to be of interest to someone debugging a - /// program. - debug, - - /// Describes messages likely to be of interest to someone monitoring a - /// program. - info, - - /// Describes messages indicating hazardous situations. - warn, - - /// Describes messages indicating serious errors. - error, - - /// Describes messages indicating fatal errors. - critical, - } - - /// Emit a log message. - /// - /// A log message has a `level` describing what kind of message is being - /// sent, a context, which is an uninterpreted string meant to help - /// consumers group similar messages, and a string containing the message - /// text. - log: func(level: level, context: string, message: string); -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/logging/world.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/logging/world.wit deleted file mode 100644 index a0fb255c..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/logging/world.wit +++ /dev/null @@ -1,5 +0,0 @@ -package wasi:logging@0.2.0-rc-2023-10-18; - -world imports { - import logging; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/insecure-seed.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/insecure-seed.wit deleted file mode 100644 index 139aed15..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/insecure-seed.wit +++ /dev/null @@ -1,24 +0,0 @@ -/// The insecure-seed interface for seeding hash-map DoS resistance. -/// -/// It is intended to be portable at least between Unix-family platforms and -/// Windows. -interface insecure-seed { - /// Return a 128-bit value that may contain a pseudo-random value. - /// - /// The returned value is not required to be computed from a CSPRNG, and may - /// even be entirely deterministic. Host implementations are encouraged to - /// provide pseudo-random values to any program exposed to - /// attacker-controlled content, to enable DoS protection built into many - /// languages' hash-map implementations. - /// - /// This function is intended to only be called once, by a source language - /// to initialize Denial Of Service (DoS) protection in its hash-map - /// implementation. - /// - /// # Expected future evolution - /// - /// This will likely be changed to a value import, to prevent it from being - /// called multiple times and potentially used for purposes other than DoS - /// protection. - insecure-seed: func() -> tuple; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/insecure.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/insecure.wit deleted file mode 100644 index 2ffd223c..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/insecure.wit +++ /dev/null @@ -1,21 +0,0 @@ -/// The insecure interface for insecure pseudo-random numbers. -/// -/// It is intended to be portable at least between Unix-family platforms and -/// Windows. -interface insecure { - /// Return `len` insecure pseudo-random bytes. - /// - /// This function is not cryptographically secure. Do not use it for - /// anything related to security. - /// - /// There are no requirements on the values of the returned bytes, however - /// implementations are encouraged to return evenly distributed values with - /// a long period. - get-insecure-random-bytes: func(len: u64) -> list; - - /// Return an insecure pseudo-random `u64` value. - /// - /// This function returns the same type of pseudo-random data as - /// `get-insecure-random-bytes`, represented as a `u64`. - get-insecure-random-u64: func() -> u64; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/random.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/random.wit deleted file mode 100644 index 2c3c6a85..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/random.wit +++ /dev/null @@ -1,25 +0,0 @@ -/// WASI Random is a random data API. -/// -/// It is intended to be portable at least between Unix-family platforms and -/// Windows. -interface random { - /// Return `len` cryptographically-secure random or pseudo-random bytes. - /// - /// This function must produce data at least as cryptographically secure and - /// fast as an adequately seeded cryptographically-secure pseudo-random - /// number generator (CSPRNG). It must not block, from the perspective of - /// the calling program, under any circumstances, including on the first - /// request and on requests for numbers of bytes. The returned data must - /// always be unpredictable. - /// - /// This function must always return fresh data. Deterministic environments - /// must omit this function, rather than implementing it with deterministic - /// data. - get-random-bytes: func(len: u64) -> list; - - /// Return a cryptographically-secure random or pseudo-random `u64` value. - /// - /// This function returns the same type of data as `get-random-bytes`, - /// represented as a `u64`. - get-random-u64: func() -> u64; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/world.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/world.wit deleted file mode 100644 index dcbff938..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/random/world.wit +++ /dev/null @@ -1,7 +0,0 @@ -package wasi:random@0.2.0-rc-2023-10-18; - -world imports { - import random; - import insecure; - import insecure-seed; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/instance-network.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/instance-network.wit deleted file mode 100644 index 14e4479e..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/instance-network.wit +++ /dev/null @@ -1,9 +0,0 @@ - -/// This interface provides a value-export of the default network handle.. -interface instance-network { - use network.{network}; - - /// Get a handle to the default network. - instance-network: func() -> network; - -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/ip-name-lookup.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/ip-name-lookup.wit deleted file mode 100644 index f2dab32f..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/ip-name-lookup.wit +++ /dev/null @@ -1,61 +0,0 @@ - -interface ip-name-lookup { - use wasi:io/poll@0.2.0-rc-2023-10-18.{pollable}; - use network.{network, error-code, ip-address, ip-address-family}; - - - /// Resolve an internet host name to a list of IP addresses. - /// - /// See the wasi-socket proposal README.md for a comparison with getaddrinfo. - /// - /// # Parameters - /// - `name`: The name to look up. IP addresses are not allowed. Unicode domain names are automatically converted - /// to ASCII using IDNA encoding. - /// - `address-family`: If provided, limit the results to addresses of this specific address family. - /// - `include-unavailable`: When set to true, this function will also return addresses of which the runtime - /// thinks (or knows) can't be connected to at the moment. For example, this will return IPv6 addresses on - /// systems without an active IPv6 interface. Notes: - /// - Even when no public IPv6 interfaces are present or active, names like "localhost" can still resolve to an IPv6 address. - /// - Whatever is "available" or "unavailable" is volatile and can change everytime a network cable is unplugged. - /// - /// This function never blocks. It either immediately fails or immediately returns successfully with a `resolve-address-stream` - /// that can be used to (asynchronously) fetch the results. - /// - /// At the moment, the stream never completes successfully with 0 items. Ie. the first call - /// to `resolve-next-address` never returns `ok(none)`. This may change in the future. - /// - /// # Typical errors - /// - `invalid-argument`: `name` is a syntactically invalid domain name. - /// - `invalid-argument`: `name` is an IP address. - /// - `not-supported`: The specified `address-family` is not supported. (EAI_FAMILY) - /// - /// # References: - /// - - /// - - /// - - /// - - resolve-addresses: func(network: borrow, name: string, address-family: option, include-unavailable: bool) -> result; - - resource resolve-address-stream { - /// Returns the next address from the resolver. - /// - /// This function should be called multiple times. On each call, it will - /// return the next address in connection order preference. If all - /// addresses have been exhausted, this function returns `none`. - /// - /// This function never returns IPv4-mapped IPv6 addresses. - /// - /// # Typical errors - /// - `name-unresolvable`: Name does not exist or has no suitable associated IP addresses. (EAI_NONAME, EAI_NODATA, EAI_ADDRFAMILY) - /// - `temporary-resolver-failure`: A temporary failure in name resolution occurred. (EAI_AGAIN) - /// - `permanent-resolver-failure`: A permanent failure in name resolution occurred. (EAI_FAIL) - /// - `would-block`: A result is not available yet. (EWOULDBLOCK, EAGAIN) - resolve-next-address: func() -> result, error-code>; - - /// Create a `pollable` which will resolve once the stream is ready for I/O. - /// - /// Note: this function is here for WASI Preview2 only. - /// It's planned to be removed when `future` is natively supported in Preview3. - subscribe: func() -> pollable; - } -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/network.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/network.wit deleted file mode 100644 index fc516047..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/network.wit +++ /dev/null @@ -1,146 +0,0 @@ - -interface network { - /// An opaque resource that represents access to (a subset of) the network. - /// This enables context-based security for networking. - /// There is no need for this to map 1:1 to a physical network interface. - resource network; - - /// Error codes. - /// - /// In theory, every API can return any error code. - /// In practice, API's typically only return the errors documented per API - /// combined with a couple of errors that are always possible: - /// - `unknown` - /// - `access-denied` - /// - `not-supported` - /// - `out-of-memory` - /// - `concurrency-conflict` - /// - /// See each individual API for what the POSIX equivalents are. They sometimes differ per API. - enum error-code { - // ### GENERAL ERRORS ### - - /// Unknown error - unknown, - - /// Access denied. - /// - /// POSIX equivalent: EACCES, EPERM - access-denied, - - /// The operation is not supported. - /// - /// POSIX equivalent: EOPNOTSUPP - not-supported, - - /// One of the arguments is invalid. - /// - /// POSIX equivalent: EINVAL - invalid-argument, - - /// Not enough memory to complete the operation. - /// - /// POSIX equivalent: ENOMEM, ENOBUFS, EAI_MEMORY - out-of-memory, - - /// The operation timed out before it could finish completely. - timeout, - - /// This operation is incompatible with another asynchronous operation that is already in progress. - /// - /// POSIX equivalent: EALREADY - concurrency-conflict, - - /// Trying to finish an asynchronous operation that: - /// - has not been started yet, or: - /// - was already finished by a previous `finish-*` call. - /// - /// Note: this is scheduled to be removed when `future`s are natively supported. - not-in-progress, - - /// The operation has been aborted because it could not be completed immediately. - /// - /// Note: this is scheduled to be removed when `future`s are natively supported. - would-block, - - - - // ### TCP & UDP SOCKET ERRORS ### - - /// The operation is not valid in the socket's current state. - invalid-state, - - /// A new socket resource could not be created because of a system limit. - new-socket-limit, - - /// A bind operation failed because the provided address is not an address that the `network` can bind to. - address-not-bindable, - - /// A bind operation failed because the provided address is already in use or because there are no ephemeral ports available. - address-in-use, - - /// The remote address is not reachable - remote-unreachable, - - - // ### TCP SOCKET ERRORS ### - - /// The connection was forcefully rejected - connection-refused, - - /// The connection was reset. - connection-reset, - - /// A connection was aborted. - connection-aborted, - - // ### UDP SOCKET ERRORS ### - datagram-too-large, - - - // ### NAME LOOKUP ERRORS ### - - /// Name does not exist or has no suitable associated IP addresses. - name-unresolvable, - - /// A temporary failure in name resolution occurred. - temporary-resolver-failure, - - /// A permanent failure in name resolution occurred. - permanent-resolver-failure, - } - - enum ip-address-family { - /// Similar to `AF_INET` in POSIX. - ipv4, - - /// Similar to `AF_INET6` in POSIX. - ipv6, - } - - type ipv4-address = tuple; - type ipv6-address = tuple; - - variant ip-address { - ipv4(ipv4-address), - ipv6(ipv6-address), - } - - record ipv4-socket-address { - port: u16, // sin_port - address: ipv4-address, // sin_addr - } - - record ipv6-socket-address { - port: u16, // sin6_port - flow-info: u32, // sin6_flowinfo - address: ipv6-address, // sin6_addr - scope-id: u32, // sin6_scope_id - } - - variant ip-socket-address { - ipv4(ipv4-socket-address), - ipv6(ipv6-socket-address), - } - -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/tcp-create-socket.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/tcp-create-socket.wit deleted file mode 100644 index a9a33738..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/tcp-create-socket.wit +++ /dev/null @@ -1,26 +0,0 @@ - -interface tcp-create-socket { - use network.{network, error-code, ip-address-family}; - use tcp.{tcp-socket}; - - /// Create a new TCP socket. - /// - /// Similar to `socket(AF_INET or AF_INET6, SOCK_STREAM, IPPROTO_TCP)` in POSIX. - /// - /// This function does not require a network capability handle. This is considered to be safe because - /// at time of creation, the socket is not bound to any `network` yet. Up to the moment `bind`/`listen`/`connect` - /// is called, the socket is effectively an in-memory configuration object, unable to communicate with the outside world. - /// - /// All sockets are non-blocking. Use the wasi-poll interface to block on asynchronous operations. - /// - /// # Typical errors - /// - `not-supported`: The specified `address-family` is not supported. (EAFNOSUPPORT) - /// - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) - /// - /// # References - /// - - /// - - /// - - /// - - create-tcp-socket: func(address-family: ip-address-family) -> result; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/tcp.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/tcp.wit deleted file mode 100644 index 448f629e..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/tcp.wit +++ /dev/null @@ -1,268 +0,0 @@ - -interface tcp { - use wasi:io/streams@0.2.0-rc-2023-10-18.{input-stream, output-stream}; - use wasi:io/poll@0.2.0-rc-2023-10-18.{pollable}; - use network.{network, error-code, ip-socket-address, ip-address-family}; - - enum shutdown-type { - /// Similar to `SHUT_RD` in POSIX. - receive, - - /// Similar to `SHUT_WR` in POSIX. - send, - - /// Similar to `SHUT_RDWR` in POSIX. - both, - } - - - /// A TCP socket handle. - resource tcp-socket { - /// Bind the socket to a specific network on the provided IP address and port. - /// - /// If the IP address is zero (`0.0.0.0` in IPv4, `::` in IPv6), it is left to the implementation to decide which - /// network interface(s) to bind to. - /// If the TCP/UDP port is zero, the socket will be bound to a random free port. - /// - /// When a socket is not explicitly bound, the first invocation to a listen or connect operation will - /// implicitly bind the socket. - /// - /// Unlike in POSIX, this function is async. This enables interactive WASI hosts to inject permission prompts. - /// - /// # Typical `start` errors - /// - `invalid-argument`: The `local-address` has the wrong address family. (EAFNOSUPPORT, EFAULT on Windows) - /// - `invalid-argument`: `local-address` is not a unicast address. (EINVAL) - /// - `invalid-argument`: `local-address` is an IPv4-mapped IPv6 address, but the socket has `ipv6-only` enabled. (EINVAL) - /// - `invalid-state`: The socket is already bound. (EINVAL) - /// - /// # Typical `finish` errors - /// - `address-in-use`: No ephemeral ports available. (EADDRINUSE, ENOBUFS on Windows) - /// - `address-in-use`: Address is already in use. (EADDRINUSE) - /// - `address-not-bindable`: `local-address` is not an address that the `network` can bind to. (EADDRNOTAVAIL) - /// - `not-in-progress`: A `bind` operation is not in progress. - /// - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - /// - /// # References - /// - - /// - - /// - - /// - - start-bind: func(network: borrow, local-address: ip-socket-address) -> result<_, error-code>; - finish-bind: func() -> result<_, error-code>; - - /// Connect to a remote endpoint. - /// - /// On success: - /// - the socket is transitioned into the Connection state - /// - a pair of streams is returned that can be used to read & write to the connection - /// - /// POSIX mentions: - /// > If connect() fails, the state of the socket is unspecified. Conforming applications should - /// > close the file descriptor and create a new socket before attempting to reconnect. - /// - /// WASI prescribes the following behavior: - /// - If `connect` fails because an input/state validation error, the socket should remain usable. - /// - If a connection was actually attempted but failed, the socket should become unusable for further network communication. - /// Besides `drop`, any method after such a failure may return an error. - /// - /// # Typical `start` errors - /// - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) - /// - `invalid-argument`: `remote-address` is not a unicast address. (EINVAL, ENETUNREACH on Linux, EAFNOSUPPORT on MacOS) - /// - `invalid-argument`: `remote-address` is an IPv4-mapped IPv6 address, but the socket has `ipv6-only` enabled. (EINVAL, EADDRNOTAVAIL on Illumos) - /// - `invalid-argument`: `remote-address` is a non-IPv4-mapped IPv6 address, but the socket was bound to a specific IPv4-mapped IPv6 address. (or vice versa) - /// - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EADDRNOTAVAIL on Windows) - /// - `invalid-argument`: The port in `remote-address` is set to 0. (EADDRNOTAVAIL on Windows) - /// - `invalid-argument`: The socket is already attached to a different network. The `network` passed to `connect` must be identical to the one passed to `bind`. - /// - `invalid-state`: The socket is already in the Connection state. (EISCONN) - /// - `invalid-state`: The socket is already in the Listener state. (EOPNOTSUPP, EINVAL on Windows) - /// - /// # Typical `finish` errors - /// - `timeout`: Connection timed out. (ETIMEDOUT) - /// - `connection-refused`: The connection was forcefully rejected. (ECONNREFUSED) - /// - `connection-reset`: The connection was reset. (ECONNRESET) - /// - `connection-aborted`: The connection was aborted. (ECONNABORTED) - /// - `remote-unreachable`: The remote address is not reachable. (EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN) - /// - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE, EADDRNOTAVAIL on Linux, EAGAIN on BSD) - /// - `not-in-progress`: A `connect` operation is not in progress. - /// - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - /// - /// # References - /// - - /// - - /// - - /// - - start-connect: func(network: borrow, remote-address: ip-socket-address) -> result<_, error-code>; - finish-connect: func() -> result, error-code>; - - /// Start listening for new connections. - /// - /// Transitions the socket into the Listener state. - /// - /// Unlike POSIX: - /// - this function is async. This enables interactive WASI hosts to inject permission prompts. - /// - the socket must already be explicitly bound. - /// - /// # Typical `start` errors - /// - `invalid-state`: The socket is not bound to any local address. (EDESTADDRREQ) - /// - `invalid-state`: The socket is already in the Connection state. (EISCONN, EINVAL on BSD) - /// - `invalid-state`: The socket is already in the Listener state. - /// - /// # Typical `finish` errors - /// - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE) - /// - `not-in-progress`: A `listen` operation is not in progress. - /// - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - /// - /// # References - /// - - /// - - /// - - /// - - start-listen: func() -> result<_, error-code>; - finish-listen: func() -> result<_, error-code>; - - /// Accept a new client socket. - /// - /// The returned socket is bound and in the Connection state. The following properties are inherited from the listener socket: - /// - `address-family` - /// - `ipv6-only` - /// - `keep-alive` - /// - `no-delay` - /// - `unicast-hop-limit` - /// - `receive-buffer-size` - /// - `send-buffer-size` - /// - /// On success, this function returns the newly accepted client socket along with - /// a pair of streams that can be used to read & write to the connection. - /// - /// # Typical errors - /// - `invalid-state`: Socket is not in the Listener state. (EINVAL) - /// - `would-block`: No pending connections at the moment. (EWOULDBLOCK, EAGAIN) - /// - `connection-aborted`: An incoming connection was pending, but was terminated by the client before this listener could accept it. (ECONNABORTED) - /// - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) - /// - /// # References - /// - - /// - - /// - - /// - - accept: func() -> result, error-code>; - - /// Get the bound local address. - /// - /// POSIX mentions: - /// > If the socket has not been bound to a local name, the value - /// > stored in the object pointed to by `address` is unspecified. - /// - /// WASI is stricter and requires `local-address` to return `invalid-state` when the socket hasn't been bound yet. - /// - /// # Typical errors - /// - `invalid-state`: The socket is not bound to any local address. - /// - /// # References - /// - - /// - - /// - - /// - - local-address: func() -> result; - - /// Get the remote address. - /// - /// # Typical errors - /// - `invalid-state`: The socket is not connected to a remote address. (ENOTCONN) - /// - /// # References - /// - - /// - - /// - - /// - - remote-address: func() -> result; - - /// Whether this is a IPv4 or IPv6 socket. - /// - /// Equivalent to the SO_DOMAIN socket option. - address-family: func() -> ip-address-family; - - /// Whether IPv4 compatibility (dual-stack) mode is disabled or not. - /// - /// Equivalent to the IPV6_V6ONLY socket option. - /// - /// # Typical errors - /// - `invalid-state`: (set) The socket is already bound. - /// - `not-supported`: (get/set) `this` socket is an IPv4 socket. - /// - `not-supported`: (set) Host does not support dual-stack sockets. (Implementations are not required to.) - ipv6-only: func() -> result; - set-ipv6-only: func(value: bool) -> result<_, error-code>; - - /// Hints the desired listen queue size. Implementations are free to ignore this. - /// - /// # Typical errors - /// - `not-supported`: (set) The platform does not support changing the backlog size after the initial listen. - /// - `invalid-state`: (set) The socket is already in the Connection state. - set-listen-backlog-size: func(value: u64) -> result<_, error-code>; - - /// Equivalent to the SO_KEEPALIVE socket option. - keep-alive: func() -> result; - set-keep-alive: func(value: bool) -> result<_, error-code>; - - /// Equivalent to the TCP_NODELAY socket option. - /// - /// The default value is `false`. - no-delay: func() -> result; - set-no-delay: func(value: bool) -> result<_, error-code>; - - /// Equivalent to the IP_TTL & IPV6_UNICAST_HOPS socket options. - /// - /// # Typical errors - /// - `invalid-argument`: (set) The TTL value must be 1 or higher. - /// - `invalid-state`: (set) The socket is already in the Connection state. - /// - `invalid-state`: (set) The socket is already in the Listener state. - unicast-hop-limit: func() -> result; - set-unicast-hop-limit: func(value: u8) -> result<_, error-code>; - - /// The kernel buffer space reserved for sends/receives on this socket. - /// - /// Note #1: an implementation may choose to cap or round the buffer size when setting the value. - /// In other words, after setting a value, reading the same setting back may return a different value. - /// - /// Note #2: there is not necessarily a direct relationship between the kernel buffer size and the bytes of - /// actual data to be sent/received by the application, because the kernel might also use the buffer space - /// for internal metadata structures. - /// - /// Equivalent to the SO_RCVBUF and SO_SNDBUF socket options. - /// - /// # Typical errors - /// - `invalid-state`: (set) The socket is already in the Connection state. - /// - `invalid-state`: (set) The socket is already in the Listener state. - receive-buffer-size: func() -> result; - set-receive-buffer-size: func(value: u64) -> result<_, error-code>; - send-buffer-size: func() -> result; - set-send-buffer-size: func(value: u64) -> result<_, error-code>; - - /// Create a `pollable` which will resolve once the socket is ready for I/O. - /// - /// Note: this function is here for WASI Preview2 only. - /// It's planned to be removed when `future` is natively supported in Preview3. - subscribe: func() -> pollable; - - /// Initiate a graceful shutdown. - /// - /// - receive: the socket is not expecting to receive any more data from the peer. All subsequent read - /// operations on the `input-stream` associated with this socket will return an End Of Stream indication. - /// Any data still in the receive queue at time of calling `shutdown` will be discarded. - /// - send: the socket is not expecting to send any more data to the peer. All subsequent write - /// operations on the `output-stream` associated with this socket will return an error. - /// - both: same effect as receive & send combined. - /// - /// The shutdown function does not close (drop) the socket. - /// - /// # Typical errors - /// - `invalid-state`: The socket is not in the Connection state. (ENOTCONN) - /// - /// # References - /// - - /// - - /// - - /// - - shutdown: func(shutdown-type: shutdown-type) -> result<_, error-code>; - } -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/udp-create-socket.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/udp-create-socket.wit deleted file mode 100644 index e026359f..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/udp-create-socket.wit +++ /dev/null @@ -1,26 +0,0 @@ - -interface udp-create-socket { - use network.{network, error-code, ip-address-family}; - use udp.{udp-socket}; - - /// Create a new UDP socket. - /// - /// Similar to `socket(AF_INET or AF_INET6, SOCK_DGRAM, IPPROTO_UDP)` in POSIX. - /// - /// This function does not require a network capability handle. This is considered to be safe because - /// at time of creation, the socket is not bound to any `network` yet. Up to the moment `bind`/`connect` is called, - /// the socket is effectively an in-memory configuration object, unable to communicate with the outside world. - /// - /// All sockets are non-blocking. Use the wasi-poll interface to block on asynchronous operations. - /// - /// # Typical errors - /// - `not-supported`: The specified `address-family` is not supported. (EAFNOSUPPORT) - /// - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) - /// - /// # References: - /// - - /// - - /// - - /// - - create-udp-socket: func(address-family: ip-address-family) -> result; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/udp.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/udp.wit deleted file mode 100644 index 91a8c6c4..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/udp.wit +++ /dev/null @@ -1,213 +0,0 @@ - -interface udp { - use wasi:io/poll@0.2.0-rc-2023-10-18.{pollable}; - use network.{network, error-code, ip-socket-address, ip-address-family}; - - - record datagram { - data: list, // Theoretical max size: ~64 KiB. In practice, typically less than 1500 bytes. - remote-address: ip-socket-address, - - /// Possible future additions: - /// local-address: ip-socket-address, // IP_PKTINFO / IP_RECVDSTADDR / IPV6_PKTINFO - /// local-interface: u32, // IP_PKTINFO / IP_RECVIF - /// ttl: u8, // IP_RECVTTL - /// dscp: u6, // IP_RECVTOS - /// ecn: u2, // IP_RECVTOS - } - - - - /// A UDP socket handle. - resource udp-socket { - /// Bind the socket to a specific network on the provided IP address and port. - /// - /// If the IP address is zero (`0.0.0.0` in IPv4, `::` in IPv6), it is left to the implementation to decide which - /// network interface(s) to bind to. - /// If the TCP/UDP port is zero, the socket will be bound to a random free port. - /// - /// When a socket is not explicitly bound, the first invocation to connect will implicitly bind the socket. - /// - /// Unlike in POSIX, this function is async. This enables interactive WASI hosts to inject permission prompts. - /// - /// # Typical `start` errors - /// - `invalid-argument`: The `local-address` has the wrong address family. (EAFNOSUPPORT, EFAULT on Windows) - /// - `invalid-state`: The socket is already bound. (EINVAL) - /// - /// # Typical `finish` errors - /// - `address-in-use`: No ephemeral ports available. (EADDRINUSE, ENOBUFS on Windows) - /// - `address-in-use`: Address is already in use. (EADDRINUSE) - /// - `address-not-bindable`: `local-address` is not an address that the `network` can bind to. (EADDRNOTAVAIL) - /// - `not-in-progress`: A `bind` operation is not in progress. - /// - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - /// - /// # References - /// - - /// - - /// - - /// - - start-bind: func(network: borrow, local-address: ip-socket-address) -> result<_, error-code>; - finish-bind: func() -> result<_, error-code>; - - /// Set the destination address. - /// - /// The local-address is updated based on the best network path to `remote-address`. - /// - /// When a destination address is set: - /// - all receive operations will only return datagrams sent from the provided `remote-address`. - /// - the `send` function can only be used to send to this destination. - /// - /// Note that this function does not generate any network traffic and the peer is not aware of this "connection". - /// - /// Unlike in POSIX, this function is async. This enables interactive WASI hosts to inject permission prompts. - /// - /// # Typical `start` errors - /// - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) - /// - `invalid-argument`: `remote-address` is a non-IPv4-mapped IPv6 address, but the socket was bound to a specific IPv4-mapped IPv6 address. (or vice versa) - /// - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EDESTADDRREQ, EADDRNOTAVAIL) - /// - `invalid-argument`: The port in `remote-address` is set to 0. (EDESTADDRREQ, EADDRNOTAVAIL) - /// - `invalid-argument`: The socket is already bound to a different network. The `network` passed to `connect` must be identical to the one passed to `bind`. - /// - /// # Typical `finish` errors - /// - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE, EADDRNOTAVAIL on Linux, EAGAIN on BSD) - /// - `not-in-progress`: A `connect` operation is not in progress. - /// - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - /// - /// # References - /// - - /// - - /// - - /// - - start-connect: func(network: borrow, remote-address: ip-socket-address) -> result<_, error-code>; - finish-connect: func() -> result<_, error-code>; - - /// Receive messages on the socket. - /// - /// This function attempts to receive up to `max-results` datagrams on the socket without blocking. - /// The returned list may contain fewer elements than requested, but never more. - /// If `max-results` is 0, this function returns successfully with an empty list. - /// - /// # Typical errors - /// - `invalid-state`: The socket is not bound to any local address. (EINVAL) - /// - `remote-unreachable`: The remote address is not reachable. (ECONNREFUSED, ECONNRESET, ENETRESET on Windows, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN) - /// - `would-block`: There is no pending data available to be read at the moment. (EWOULDBLOCK, EAGAIN) - /// - /// # References - /// - - /// - - /// - - /// - - /// - - /// - - /// - - /// - - receive: func(max-results: u64) -> result, error-code>; - - /// Send messages on the socket. - /// - /// This function attempts to send all provided `datagrams` on the socket without blocking and - /// returns how many messages were actually sent (or queued for sending). - /// - /// This function semantically behaves the same as iterating the `datagrams` list and sequentially - /// sending each individual datagram until either the end of the list has been reached or the first error occurred. - /// If at least one datagram has been sent successfully, this function never returns an error. - /// - /// If the input list is empty, the function returns `ok(0)`. - /// - /// The remote address option is required. To send a message to the "connected" peer, - /// call `remote-address` to get their address. - /// - /// # Typical errors - /// - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) - /// - `invalid-argument`: `remote-address` is a non-IPv4-mapped IPv6 address, but the socket was bound to a specific IPv4-mapped IPv6 address. (or vice versa) - /// - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EDESTADDRREQ, EADDRNOTAVAIL) - /// - `invalid-argument`: The port in `remote-address` is set to 0. (EDESTADDRREQ, EADDRNOTAVAIL) - /// - `invalid-argument`: The socket is in "connected" mode and the `datagram.remote-address` does not match the address passed to `connect`. (EISCONN) - /// - `invalid-state`: The socket is not bound to any local address. Unlike POSIX, this function does not perform an implicit bind. - /// - `remote-unreachable`: The remote address is not reachable. (ECONNREFUSED, ECONNRESET, ENETRESET on Windows, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN) - /// - `datagram-too-large`: The datagram is too large. (EMSGSIZE) - /// - `would-block`: The send buffer is currently full. (EWOULDBLOCK, EAGAIN) - /// - /// # References - /// - - /// - - /// - - /// - - /// - - /// - - /// - - /// - - send: func(datagrams: list) -> result; - - /// Get the current bound address. - /// - /// POSIX mentions: - /// > If the socket has not been bound to a local name, the value - /// > stored in the object pointed to by `address` is unspecified. - /// - /// WASI is stricter and requires `local-address` to return `invalid-state` when the socket hasn't been bound yet. - /// - /// # Typical errors - /// - `invalid-state`: The socket is not bound to any local address. - /// - /// # References - /// - - /// - - /// - - /// - - local-address: func() -> result; - - /// Get the address set with `connect`. - /// - /// # Typical errors - /// - `invalid-state`: The socket is not connected to a remote address. (ENOTCONN) - /// - /// # References - /// - - /// - - /// - - /// - - remote-address: func() -> result; - - /// Whether this is a IPv4 or IPv6 socket. - /// - /// Equivalent to the SO_DOMAIN socket option. - address-family: func() -> ip-address-family; - - /// Whether IPv4 compatibility (dual-stack) mode is disabled or not. - /// - /// Equivalent to the IPV6_V6ONLY socket option. - /// - /// # Typical errors - /// - `not-supported`: (get/set) `this` socket is an IPv4 socket. - /// - `invalid-state`: (set) The socket is already bound. - /// - `not-supported`: (set) Host does not support dual-stack sockets. (Implementations are not required to.) - ipv6-only: func() -> result; - set-ipv6-only: func(value: bool) -> result<_, error-code>; - - /// Equivalent to the IP_TTL & IPV6_UNICAST_HOPS socket options. - unicast-hop-limit: func() -> result; - set-unicast-hop-limit: func(value: u8) -> result<_, error-code>; - - /// The kernel buffer space reserved for sends/receives on this socket. - /// - /// Note #1: an implementation may choose to cap or round the buffer size when setting the value. - /// In other words, after setting a value, reading the same setting back may return a different value. - /// - /// Note #2: there is not necessarily a direct relationship between the kernel buffer size and the bytes of - /// actual data to be sent/received by the application, because the kernel might also use the buffer space - /// for internal metadata structures. - /// - /// Equivalent to the SO_RCVBUF and SO_SNDBUF socket options. - receive-buffer-size: func() -> result; - set-receive-buffer-size: func(value: u64) -> result<_, error-code>; - send-buffer-size: func() -> result; - set-send-buffer-size: func(value: u64) -> result<_, error-code>; - - /// Create a `pollable` which will resolve once the socket is ready for I/O. - /// - /// Note: this function is here for WASI Preview2 only. - /// It's planned to be removed when `future` is natively supported in Preview3. - subscribe: func() -> pollable; - } -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/world.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/world.wit deleted file mode 100644 index d16530c3..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/deps/sockets/world.wit +++ /dev/null @@ -1,11 +0,0 @@ -package wasi:sockets@0.2.0-rc-2023-10-18; - -world imports { - import instance-network; - import network; - import udp; - import udp-create-socket; - import tcp; - import tcp-create-socket; - import ip-name-lookup; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/main.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/main.wit deleted file mode 100644 index a8f64304..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/main.wit +++ /dev/null @@ -1,6 +0,0 @@ -package local:bindings; - -world bindings { - include wasi:cli/command@0.2.0-rc-2023-10-18; - include wasi:http/proxy@0.2.0-rc-2023-10-18; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/test.wit b/host-apis/wasi-0.2.0-rc-2023-10-18/wit/test.wit deleted file mode 100644 index 3db5e082..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-10-18/wit/test.wit +++ /dev/null @@ -1,46 +0,0 @@ -// only used as part of `test-programs` -world test-reactor { - - import wasi:cli/environment@0.2.0-rc-2023-10-18; - import wasi:io/poll@0.2.0-rc-2023-10-18; - import wasi:io/streams@0.2.0-rc-2023-10-18; - import wasi:filesystem/types@0.2.0-rc-2023-10-18; - import wasi:filesystem/preopens@0.2.0-rc-2023-10-18; - import wasi:cli/exit@0.2.0-rc-2023-10-18; - - export add-strings: func(s: list) -> u32; - export get-strings: func() -> list; - - use wasi:io/streams@0.2.0-rc-2023-10-18.{output-stream}; - - export write-strings-to: func(o: output-stream) -> result; - - use wasi:filesystem/types@0.2.0-rc-2023-10-18.{descriptor-stat}; - export pass-an-imported-record: func(d: descriptor-stat) -> string; -} - -world test-command { - import wasi:io/poll@0.2.0-rc-2023-10-18; - import wasi:io/streams@0.2.0-rc-2023-10-18; - import wasi:cli/environment@0.2.0-rc-2023-10-18; - import wasi:cli/stdin@0.2.0-rc-2023-10-18; - import wasi:cli/stdout@0.2.0-rc-2023-10-18; - import wasi:cli/stderr@0.2.0-rc-2023-10-18; -} - -world test-command-with-sockets { - import wasi:io/poll@0.2.0-rc-2023-10-18; - import wasi:io/streams@0.2.0-rc-2023-10-18; - import wasi:cli/environment@0.2.0-rc-2023-10-18; - import wasi:cli/stdin@0.2.0-rc-2023-10-18; - import wasi:cli/stdout@0.2.0-rc-2023-10-18; - import wasi:cli/stderr@0.2.0-rc-2023-10-18; - import wasi:sockets/tcp@0.2.0-rc-2023-10-18; - import wasi:sockets/tcp-create-socket@0.2.0-rc-2023-10-18; - import wasi:sockets/udp@0.2.0-rc-2023-10-18; - import wasi:sockets/udp-create-socket@0.2.0-rc-2023-10-18; - import wasi:sockets/network@0.2.0-rc-2023-10-18; - import wasi:sockets/instance-network@0.2.0-rc-2023-10-18; - import wasi:sockets/ip-name-lookup@0.2.0-rc-2023-10-18; - import wasi:clocks/monotonic-clock@0.2.0-rc-2023-10-18; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/bindings/bindings.c b/host-apis/wasi-0.2.0-rc-2023-12-05/bindings/bindings.c deleted file mode 100644 index f140318c..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/bindings/bindings.c +++ /dev/null @@ -1,9144 +0,0 @@ -// Generated by `wit-bindgen` 0.16.0. DO NOT EDIT! -#include "bindings.h" - - -__attribute__((__import_module__("wasi:cli/environment@0.2.0-rc-2023-12-05"), __import_name__("get-environment"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_environment_get_environment(int32_t); - -__attribute__((__import_module__("wasi:cli/environment@0.2.0-rc-2023-12-05"), __import_name__("get-arguments"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_environment_get_arguments(int32_t); - -__attribute__((__import_module__("wasi:cli/environment@0.2.0-rc-2023-12-05"), __import_name__("initial-cwd"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_environment_initial_cwd(int32_t); - -__attribute__((__import_module__("wasi:cli/exit@0.2.0-rc-2023-12-05"), __import_name__("exit"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_exit_exit(int32_t); - -__attribute__((__import_module__("wasi:io/error@0.2.0-rc-2023-11-10"), __import_name__("[method]error.to-debug-string"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_error_method_error_to_debug_string(int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/poll@0.2.0-rc-2023-11-10"), __import_name__("[method]pollable.ready"))) -extern int32_t __wasm_import_wasi_io_0_2_0_rc_2023_11_10_poll_method_pollable_ready(int32_t); - -__attribute__((__import_module__("wasi:io/poll@0.2.0-rc-2023-11-10"), __import_name__("[method]pollable.block"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_poll_method_pollable_block(int32_t); - -__attribute__((__import_module__("wasi:io/poll@0.2.0-rc-2023-11-10"), __import_name__("poll"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_poll_poll(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]input-stream.read"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_read(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]input-stream.blocking-read"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_blocking_read(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]input-stream.skip"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_skip(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]input-stream.blocking-skip"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_blocking_skip(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]input-stream.subscribe"))) -extern int32_t __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_subscribe(int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]output-stream.check-write"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_check_write(int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]output-stream.write"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_write(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]output-stream.blocking-write-and-flush"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_write_and_flush(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]output-stream.flush"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_flush(int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]output-stream.blocking-flush"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_flush(int32_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]output-stream.subscribe"))) -extern int32_t __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_subscribe(int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]output-stream.write-zeroes"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_write_zeroes(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]output-stream.blocking-write-zeroes-and-flush"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_write_zeroes_and_flush(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]output-stream.splice"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_splice(int32_t, int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[method]output-stream.blocking-splice"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_splice(int32_t, int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:cli/stdin@0.2.0-rc-2023-12-05"), __import_name__("get-stdin"))) -extern int32_t __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_stdin_get_stdin(void); - -__attribute__((__import_module__("wasi:cli/stdout@0.2.0-rc-2023-12-05"), __import_name__("get-stdout"))) -extern int32_t __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_stdout_get_stdout(void); - -__attribute__((__import_module__("wasi:cli/stderr@0.2.0-rc-2023-12-05"), __import_name__("get-stderr"))) -extern int32_t __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_stderr_get_stderr(void); - -__attribute__((__import_module__("wasi:cli/terminal-stdin@0.2.0-rc-2023-12-05"), __import_name__("get-terminal-stdin"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_get_terminal_stdin(int32_t); - -__attribute__((__import_module__("wasi:cli/terminal-stdout@0.2.0-rc-2023-12-05"), __import_name__("get-terminal-stdout"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_get_terminal_stdout(int32_t); - -__attribute__((__import_module__("wasi:cli/terminal-stderr@0.2.0-rc-2023-12-05"), __import_name__("get-terminal-stderr"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_get_terminal_stderr(int32_t); - -__attribute__((__import_module__("wasi:clocks/monotonic-clock@0.2.0-rc-2023-11-10"), __import_name__("now"))) -extern int64_t __wasm_import_wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_now(void); - -__attribute__((__import_module__("wasi:clocks/monotonic-clock@0.2.0-rc-2023-11-10"), __import_name__("resolution"))) -extern int64_t __wasm_import_wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_resolution(void); - -__attribute__((__import_module__("wasi:clocks/monotonic-clock@0.2.0-rc-2023-11-10"), __import_name__("subscribe-instant"))) -extern int32_t __wasm_import_wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_subscribe_instant(int64_t); - -__attribute__((__import_module__("wasi:clocks/monotonic-clock@0.2.0-rc-2023-11-10"), __import_name__("subscribe-duration"))) -extern int32_t __wasm_import_wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_subscribe_duration(int64_t); - -__attribute__((__import_module__("wasi:clocks/wall-clock@0.2.0-rc-2023-11-10"), __import_name__("now"))) -extern void __wasm_import_wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_now(int32_t); - -__attribute__((__import_module__("wasi:clocks/wall-clock@0.2.0-rc-2023-11-10"), __import_name__("resolution"))) -extern void __wasm_import_wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_resolution(int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.read-via-stream"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_read_via_stream(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.write-via-stream"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_write_via_stream(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.append-via-stream"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_append_via_stream(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.advise"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_advise(int32_t, int64_t, int64_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.sync-data"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_sync_data(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.get-flags"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_get_flags(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.get-type"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_get_type(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.set-size"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_set_size(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.set-times"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_set_times(int32_t, int32_t, int64_t, int32_t, int32_t, int64_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.read"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_read(int32_t, int64_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.write"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_write(int32_t, int32_t, int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.read-directory"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_read_directory(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.sync"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_sync(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.create-directory-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_create_directory_at(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.stat"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_stat(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.stat-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_stat_at(int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.set-times-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_set_times_at(int32_t, int32_t, int32_t, int32_t, int32_t, int64_t, int32_t, int32_t, int64_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.link-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_link_at(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.open-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_open_at(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.readlink-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_readlink_at(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.remove-directory-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_remove_directory_at(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.rename-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_rename_at(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.symlink-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_symlink_at(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.unlink-file-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_unlink_file_at(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.is-same-object"))) -extern int32_t __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_is_same_object(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.metadata-hash"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_metadata_hash(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]descriptor.metadata-hash-at"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_metadata_hash_at(int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[method]directory-entry-stream.read-directory-entry"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_directory_entry_stream_read_directory_entry(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("filesystem-error-code"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_filesystem_error_code(int32_t, int32_t); - -__attribute__((__import_module__("wasi:filesystem/preopens@0.2.0-rc-2023-11-10"), __import_name__("get-directories"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_preopens_get_directories(int32_t); - -__attribute__((__import_module__("wasi:sockets/instance-network@0.2.0-rc-2023-11-10"), __import_name__("instance-network"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_instance_network_instance_network(void); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.start-bind"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_start_bind(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.finish-bind"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_finish_bind(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.stream"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_stream(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.local-address"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_local_address(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.remote-address"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_remote_address(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.address-family"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_address_family(int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.ipv6-only"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_ipv6_only(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.set-ipv6-only"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_ipv6_only(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.unicast-hop-limit"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_unicast_hop_limit(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.set-unicast-hop-limit"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_unicast_hop_limit(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.receive-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_receive_buffer_size(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.set-receive-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_receive_buffer_size(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.send-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_send_buffer_size(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.set-send-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_send_buffer_size(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]udp-socket.subscribe"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_subscribe(int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]incoming-datagram-stream.receive"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_incoming_datagram_stream_receive(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]incoming-datagram-stream.subscribe"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_incoming_datagram_stream_subscribe(int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]outgoing-datagram-stream.check-send"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_outgoing_datagram_stream_check_send(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]outgoing-datagram-stream.send"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_outgoing_datagram_stream_send(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[method]outgoing-datagram-stream.subscribe"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_outgoing_datagram_stream_subscribe(int32_t); - -__attribute__((__import_module__("wasi:sockets/udp-create-socket@0.2.0-rc-2023-11-10"), __import_name__("create-udp-socket"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_create_udp_socket(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.start-bind"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_start_bind(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.finish-bind"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_finish_bind(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.start-connect"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_start_connect(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.finish-connect"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_finish_connect(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.start-listen"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_start_listen(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.finish-listen"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_finish_listen(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.accept"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_accept(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.local-address"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_local_address(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.remote-address"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_remote_address(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.is-listening"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_is_listening(int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.address-family"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_address_family(int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.ipv6-only"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_ipv6_only(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.set-ipv6-only"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_ipv6_only(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.set-listen-backlog-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_listen_backlog_size(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.keep-alive-enabled"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_enabled(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.set-keep-alive-enabled"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_enabled(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.keep-alive-idle-time"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_idle_time(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.set-keep-alive-idle-time"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_idle_time(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.keep-alive-interval"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_interval(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.set-keep-alive-interval"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_interval(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.keep-alive-count"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_count(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.set-keep-alive-count"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_count(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.hop-limit"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_hop_limit(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.set-hop-limit"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_hop_limit(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.receive-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_receive_buffer_size(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.set-receive-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_receive_buffer_size(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.send-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_send_buffer_size(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.set-send-buffer-size"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_send_buffer_size(int32_t, int64_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.subscribe"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_subscribe(int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[method]tcp-socket.shutdown"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_shutdown(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/tcp-create-socket@0.2.0-rc-2023-11-10"), __import_name__("create-tcp-socket"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_create_tcp_socket(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/ip-name-lookup@0.2.0-rc-2023-11-10"), __import_name__("resolve-addresses"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_resolve_addresses(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/ip-name-lookup@0.2.0-rc-2023-11-10"), __import_name__("[method]resolve-address-stream.resolve-next-address"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_method_resolve_address_stream_resolve_next_address(int32_t, int32_t); - -__attribute__((__import_module__("wasi:sockets/ip-name-lookup@0.2.0-rc-2023-11-10"), __import_name__("[method]resolve-address-stream.subscribe"))) -extern int32_t __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_method_resolve_address_stream_subscribe(int32_t); - -__attribute__((__import_module__("wasi:random/random@0.2.0-rc-2023-11-10"), __import_name__("get-random-bytes"))) -extern void __wasm_import_wasi_random_0_2_0_rc_2023_11_10_random_get_random_bytes(int64_t, int32_t); - -__attribute__((__import_module__("wasi:random/random@0.2.0-rc-2023-11-10"), __import_name__("get-random-u64"))) -extern int64_t __wasm_import_wasi_random_0_2_0_rc_2023_11_10_random_get_random_u64(void); - -__attribute__((__import_module__("wasi:random/insecure@0.2.0-rc-2023-11-10"), __import_name__("get-insecure-random-bytes"))) -extern void __wasm_import_wasi_random_0_2_0_rc_2023_11_10_insecure_get_insecure_random_bytes(int64_t, int32_t); - -__attribute__((__import_module__("wasi:random/insecure@0.2.0-rc-2023-11-10"), __import_name__("get-insecure-random-u64"))) -extern int64_t __wasm_import_wasi_random_0_2_0_rc_2023_11_10_insecure_get_insecure_random_u64(void); - -__attribute__((__import_module__("wasi:random/insecure-seed@0.2.0-rc-2023-11-10"), __import_name__("insecure-seed"))) -extern void __wasm_import_wasi_random_0_2_0_rc_2023_11_10_insecure_seed_insecure_seed(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("http-error-code"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_http_error_code(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[constructor]fields"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_constructor_fields(void); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[static]fields.from-list"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_static_fields_from_list(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]fields.get"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_get(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]fields.has"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_has(int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]fields.set"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_set(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]fields.delete"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_delete(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]fields.append"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_append(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]fields.entries"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_entries(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]fields.clone"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_clone(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]incoming-request.method"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_method(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]incoming-request.path-with-query"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_path_with_query(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]incoming-request.scheme"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_scheme(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]incoming-request.authority"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_authority(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]incoming-request.headers"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_headers(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]incoming-request.consume"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_consume(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[constructor]outgoing-request"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_constructor_outgoing_request(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-request.body"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_body(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-request.method"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_method(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-request.set-method"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_method(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-request.path-with-query"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_path_with_query(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-request.set-path-with-query"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_path_with_query(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-request.scheme"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_scheme(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-request.set-scheme"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_scheme(int32_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-request.authority"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_authority(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-request.set-authority"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_authority(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-request.headers"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_headers(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[constructor]request-options"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_constructor_request_options(void); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]request-options.connect-timeout"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_connect_timeout(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]request-options.set-connect-timeout"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_set_connect_timeout(int32_t, int32_t, int64_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]request-options.first-byte-timeout"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_first_byte_timeout(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]request-options.set-first-byte-timeout"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_set_first_byte_timeout(int32_t, int32_t, int64_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]request-options.between-bytes-timeout"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_between_bytes_timeout(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]request-options.set-between-bytes-timeout"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_set_between_bytes_timeout(int32_t, int32_t, int64_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[static]response-outparam.set"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_static_response_outparam_set(int32_t, int32_t, int32_t, int32_t, int64_t, int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]incoming-response.status"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_status(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]incoming-response.headers"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_headers(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]incoming-response.consume"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_consume(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]incoming-body.stream"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_body_stream(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[static]incoming-body.finish"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_static_incoming_body_finish(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]future-trailers.subscribe"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_future_trailers_subscribe(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]future-trailers.get"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_future_trailers_get(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[constructor]outgoing-response"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_constructor_outgoing_response(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-response.status-code"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_status_code(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-response.set-status-code"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_set_status_code(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-response.headers"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_headers(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-response.body"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_body(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]outgoing-body.write"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_body_write(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[static]outgoing-body.finish"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_static_outgoing_body_finish(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]future-incoming-response.subscribe"))) -extern int32_t __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_future_incoming_response_subscribe(int32_t); - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[method]future-incoming-response.get"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_future_incoming_response_get(int32_t, int32_t); - -__attribute__((__import_module__("wasi:http/outgoing-handler@0.2.0-rc-2023-12-05"), __import_name__("handle"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_handle(int32_t, int32_t, int32_t, int32_t); - -__attribute__((__weak__, __export_name__("cabi_realloc"))) -void *cabi_realloc(void *ptr, size_t old_size, size_t align, size_t new_size) { - (void) old_size; - if (new_size == 0) return (void*) align; - void *ret = realloc(ptr, new_size); - if (!ret) abort(); - return ret; -} - -// Helper Functions - -void bindings_tuple2_string_string_free(bindings_tuple2_string_string_t *ptr) { - bindings_string_free(&ptr->f0); - bindings_string_free(&ptr->f1); -} - -void bindings_list_tuple2_string_string_free(bindings_list_tuple2_string_string_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - bindings_tuple2_string_string_free(&ptr->ptr[i]); - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void bindings_list_string_free(bindings_list_string_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - bindings_string_free(&ptr->ptr[i]); - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void bindings_option_string_free(bindings_option_string_t *ptr) { - if (ptr->is_some) { - bindings_string_free(&ptr->val); - } -} - -void wasi_cli_0_2_0_rc_2023_12_05_exit_result_void_void_free(wasi_cli_0_2_0_rc_2023_12_05_exit_result_void_void_t *ptr) { - if (!ptr->is_err) { - } -} - -__attribute__((__import_module__("wasi:io/error@0.2.0-rc-2023-11-10"), __import_name__("[resource-drop]error"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_error_error_drop(int32_t handle); - -void wasi_io_0_2_0_rc_2023_11_10_error_error_drop_own(wasi_io_0_2_0_rc_2023_11_10_error_own_error_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_error_error_drop(handle.__handle); -} - -void wasi_io_0_2_0_rc_2023_11_10_error_error_drop_borrow(wasi_io_0_2_0_rc_2023_11_10_error_own_error_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_error_error_drop(handle.__handle); -} - -wasi_io_0_2_0_rc_2023_11_10_error_borrow_error_t wasi_io_0_2_0_rc_2023_11_10_error_borrow_error(wasi_io_0_2_0_rc_2023_11_10_error_own_error_t arg) { - return (wasi_io_0_2_0_rc_2023_11_10_error_borrow_error_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:io/poll@0.2.0-rc-2023-11-10"), __import_name__("[resource-drop]pollable"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_poll_pollable_drop(int32_t handle); - -void wasi_io_0_2_0_rc_2023_11_10_poll_pollable_drop_own(wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_poll_pollable_drop(handle.__handle); -} - -void wasi_io_0_2_0_rc_2023_11_10_poll_pollable_drop_borrow(wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_poll_pollable_drop(handle.__handle); -} - -wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable_t wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable(wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t arg) { - return (wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable_t) { arg.__handle }; -} - -void wasi_io_0_2_0_rc_2023_11_10_poll_list_borrow_pollable_free(wasi_io_0_2_0_rc_2023_11_10_poll_list_borrow_pollable_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void bindings_list_u32_free(bindings_list_u32_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_free(wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *ptr) { - switch ((int32_t) ptr->tag) { - case 0: { - break; - } - } -} - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[resource-drop]input-stream"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_input_stream_drop(int32_t handle); - -void wasi_io_0_2_0_rc_2023_11_10_streams_input_stream_drop_own(wasi_io_0_2_0_rc_2023_11_10_streams_own_input_stream_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_input_stream_drop(handle.__handle); -} - -void wasi_io_0_2_0_rc_2023_11_10_streams_input_stream_drop_borrow(wasi_io_0_2_0_rc_2023_11_10_streams_own_input_stream_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_input_stream_drop(handle.__handle); -} - -wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream(wasi_io_0_2_0_rc_2023_11_10_streams_own_input_stream_t arg) { - return (wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:io/streams@0.2.0-rc-2023-11-10"), __import_name__("[resource-drop]output-stream"))) -extern void __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_output_stream_drop(int32_t handle); - -void wasi_io_0_2_0_rc_2023_11_10_streams_output_stream_drop_own(wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_output_stream_drop(handle.__handle); -} - -void wasi_io_0_2_0_rc_2023_11_10_streams_output_stream_drop_borrow(wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t handle) { - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_output_stream_drop(handle.__handle); -} - -wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream(wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t arg) { - return (wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t) { arg.__handle }; -} - -void bindings_list_u8_free(bindings_list_u8_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void wasi_io_0_2_0_rc_2023_11_10_streams_result_list_u8_stream_error_free(wasi_io_0_2_0_rc_2023_11_10_streams_result_list_u8_stream_error_t *ptr) { - if (!ptr->is_err) { - bindings_list_u8_free(&ptr->val.ok); - } else { - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_free(&ptr->val.err); - } -} - -void wasi_io_0_2_0_rc_2023_11_10_streams_result_u64_stream_error_free(wasi_io_0_2_0_rc_2023_11_10_streams_result_u64_stream_error_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_free(&ptr->val.err); - } -} - -void wasi_io_0_2_0_rc_2023_11_10_streams_result_void_stream_error_free(wasi_io_0_2_0_rc_2023_11_10_streams_result_void_stream_error_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_free(&ptr->val.err); - } -} - -__attribute__((__import_module__("wasi:cli/terminal-input@0.2.0-rc-2023-12-05"), __import_name__("[resource-drop]terminal-input"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_terminal_input_terminal_input_drop(int32_t handle); - -void wasi_cli_0_2_0_rc_2023_12_05_terminal_input_terminal_input_drop_own(wasi_cli_0_2_0_rc_2023_12_05_terminal_input_own_terminal_input_t handle) { - __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_terminal_input_terminal_input_drop(handle.__handle); -} - -void wasi_cli_0_2_0_rc_2023_12_05_terminal_input_terminal_input_drop_borrow(wasi_cli_0_2_0_rc_2023_12_05_terminal_input_own_terminal_input_t handle) { - __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_terminal_input_terminal_input_drop(handle.__handle); -} - -wasi_cli_0_2_0_rc_2023_12_05_terminal_input_borrow_terminal_input_t wasi_cli_0_2_0_rc_2023_12_05_terminal_input_borrow_terminal_input(wasi_cli_0_2_0_rc_2023_12_05_terminal_input_own_terminal_input_t arg) { - return (wasi_cli_0_2_0_rc_2023_12_05_terminal_input_borrow_terminal_input_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:cli/terminal-output@0.2.0-rc-2023-12-05"), __import_name__("[resource-drop]terminal-output"))) -extern void __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_terminal_output_terminal_output_drop(int32_t handle); - -void wasi_cli_0_2_0_rc_2023_12_05_terminal_output_terminal_output_drop_own(wasi_cli_0_2_0_rc_2023_12_05_terminal_output_own_terminal_output_t handle) { - __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_terminal_output_terminal_output_drop(handle.__handle); -} - -void wasi_cli_0_2_0_rc_2023_12_05_terminal_output_terminal_output_drop_borrow(wasi_cli_0_2_0_rc_2023_12_05_terminal_output_own_terminal_output_t handle) { - __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_terminal_output_terminal_output_drop(handle.__handle); -} - -wasi_cli_0_2_0_rc_2023_12_05_terminal_output_borrow_terminal_output_t wasi_cli_0_2_0_rc_2023_12_05_terminal_output_borrow_terminal_output(wasi_cli_0_2_0_rc_2023_12_05_terminal_output_own_terminal_output_t arg) { - return (wasi_cli_0_2_0_rc_2023_12_05_terminal_output_borrow_terminal_output_t) { arg.__handle }; -} - -void wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_option_own_terminal_input_free(wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_option_own_terminal_input_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_option_own_terminal_output_free(wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_option_own_terminal_output_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_option_own_terminal_output_free(wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_option_own_terminal_output_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_stat_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_stat_t *ptr) { - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_free(&ptr->data_access_timestamp); - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_free(&ptr->data_modification_timestamp); - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_free(&ptr->status_change_timestamp); -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_new_timestamp_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_new_timestamp_t *ptr) { - switch ((int32_t) ptr->tag) { - case 2: { - break; - } - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_t *ptr) { - bindings_string_free(&ptr->name); -} - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[resource-drop]descriptor"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_drop(int32_t handle); - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_drop_own(wasi_filesystem_0_2_0_rc_2023_11_10_types_own_descriptor_t handle) { - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_drop(handle.__handle); -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_drop_borrow(wasi_filesystem_0_2_0_rc_2023_11_10_types_own_descriptor_t handle) { - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_drop(handle.__handle); -} - -wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor(wasi_filesystem_0_2_0_rc_2023_11_10_types_own_descriptor_t arg) { - return (wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:filesystem/types@0.2.0-rc-2023-11-10"), __import_name__("[resource-drop]directory-entry-stream"))) -extern void __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_stream_drop(int32_t handle); - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_stream_drop_own(wasi_filesystem_0_2_0_rc_2023_11_10_types_own_directory_entry_stream_t handle) { - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_stream_drop(handle.__handle); -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_stream_drop_borrow(wasi_filesystem_0_2_0_rc_2023_11_10_types_own_directory_entry_stream_t handle) { - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_stream_drop(handle.__handle); -} - -wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_directory_entry_stream_t wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_directory_entry_stream(wasi_filesystem_0_2_0_rc_2023_11_10_types_own_directory_entry_stream_t arg) { - return (wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_directory_entry_stream_t) { arg.__handle }; -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_input_stream_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_input_stream_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_output_stream_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_output_stream_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_flags_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_flags_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_type_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_type_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_tuple2_list_u8_bool_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_tuple2_list_u8_bool_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_filesize_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_filesize_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_directory_entry_stream_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_directory_entry_stream_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_stat_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_stat_error_code_t *ptr) { - if (!ptr->is_err) { - wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_stat_free(&ptr->val.ok); - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_descriptor_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_descriptor_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_string_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_string_error_code_t *ptr) { - if (!ptr->is_err) { - bindings_string_free(&ptr->val.ok); - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_metadata_hash_value_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_metadata_hash_value_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_option_directory_entry_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_option_directory_entry_t *ptr) { - if (ptr->is_some) { - wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_free(&ptr->val); - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_option_directory_entry_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_option_directory_entry_error_code_t *ptr) { - if (!ptr->is_err) { - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_directory_entry_free(&ptr->val.ok); - } else { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_types_option_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_option_error_code_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_preopens_tuple2_own_descriptor_string_free(wasi_filesystem_0_2_0_rc_2023_11_10_preopens_tuple2_own_descriptor_string_t *ptr) { - bindings_string_free(&ptr->f1); -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_preopens_list_tuple2_own_descriptor_string_free(wasi_filesystem_0_2_0_rc_2023_11_10_preopens_list_tuple2_own_descriptor_string_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - wasi_filesystem_0_2_0_rc_2023_11_10_preopens_tuple2_own_descriptor_string_free(&ptr->ptr[i]); - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -__attribute__((__import_module__("wasi:sockets/network@0.2.0-rc-2023-11-10"), __import_name__("[resource-drop]network"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_network_network_drop(int32_t handle); - -void wasi_sockets_0_2_0_rc_2023_11_10_network_network_drop_own(wasi_sockets_0_2_0_rc_2023_11_10_network_own_network_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_network_network_drop(handle.__handle); -} - -void wasi_sockets_0_2_0_rc_2023_11_10_network_network_drop_borrow(wasi_sockets_0_2_0_rc_2023_11_10_network_own_network_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_network_network_drop(handle.__handle); -} - -wasi_sockets_0_2_0_rc_2023_11_10_network_borrow_network_t wasi_sockets_0_2_0_rc_2023_11_10_network_borrow_network(wasi_sockets_0_2_0_rc_2023_11_10_network_own_network_t arg) { - return (wasi_sockets_0_2_0_rc_2023_11_10_network_borrow_network_t) { arg.__handle }; -} - -void wasi_sockets_0_2_0_rc_2023_11_10_network_ip_address_free(wasi_sockets_0_2_0_rc_2023_11_10_network_ip_address_t *ptr) { - switch ((int32_t) ptr->tag) { - case 0: { - break; - } - case 1: { - break; - } - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_network_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_11_10_network_ip_socket_address_t *ptr) { - switch ((int32_t) ptr->tag) { - case 0: { - break; - } - case 1: { - break; - } - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t *ptr) { - wasi_sockets_0_2_0_rc_2023_11_10_network_ip_socket_address_free(ptr); -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_t *ptr) { - wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_free(&ptr->remote_address); -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_option_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_option_ip_socket_address_t *ptr) { - if (ptr->is_some) { - wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_free(&ptr->val); - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_t *ptr) { - wasi_sockets_0_2_0_rc_2023_11_10_udp_option_ip_socket_address_free(&ptr->remote_address); -} - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[resource-drop]udp-socket"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_udp_socket_drop(int32_t handle); - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_udp_socket_drop_own(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_udp_socket_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_udp_socket_drop(handle.__handle); -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_udp_socket_drop_borrow(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_udp_socket_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_udp_socket_drop(handle.__handle); -} - -wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_udp_socket_t arg) { - return (wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[resource-drop]incoming-datagram-stream"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_stream_drop(int32_t handle); - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_stream_drop_own(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_incoming_datagram_stream_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_stream_drop(handle.__handle); -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_stream_drop_borrow(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_incoming_datagram_stream_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_stream_drop(handle.__handle); -} - -wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_incoming_datagram_stream_t wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_incoming_datagram_stream(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_incoming_datagram_stream_t arg) { - return (wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_incoming_datagram_stream_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:sockets/udp@0.2.0-rc-2023-11-10"), __import_name__("[resource-drop]outgoing-datagram-stream"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_stream_drop(int32_t handle); - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_stream_drop_own(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_outgoing_datagram_stream_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_stream_drop(handle.__handle); -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_stream_drop_borrow(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_outgoing_datagram_stream_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_stream_drop(handle.__handle); -} - -wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_outgoing_datagram_stream_t wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_outgoing_datagram_stream(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_outgoing_datagram_stream_t arg) { - return (wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_outgoing_datagram_stream_t) { arg.__handle }; -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_void_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_void_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_tuple2_own_incoming_datagram_stream_own_outgoing_datagram_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_tuple2_own_incoming_datagram_stream_own_outgoing_datagram_stream_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_ip_socket_address_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_ip_socket_address_error_code_t *ptr) { - if (!ptr->is_err) { - wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_free(&ptr->val.ok); - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_bool_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_bool_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u8_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u8_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u64_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u64_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_list_incoming_datagram_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_list_incoming_datagram_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_free(&ptr->ptr[i]); - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_list_incoming_datagram_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_list_incoming_datagram_error_code_t *ptr) { - if (!ptr->is_err) { - wasi_sockets_0_2_0_rc_2023_11_10_udp_list_incoming_datagram_free(&ptr->val.ok); - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_list_outgoing_datagram_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_list_outgoing_datagram_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_free(&ptr->ptr[i]); - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_result_own_udp_socket_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_result_own_udp_socket_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_t *ptr) { - wasi_sockets_0_2_0_rc_2023_11_10_network_ip_socket_address_free(ptr); -} - -__attribute__((__import_module__("wasi:sockets/tcp@0.2.0-rc-2023-11-10"), __import_name__("[resource-drop]tcp-socket"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_tcp_socket_drop(int32_t handle); - -void wasi_sockets_0_2_0_rc_2023_11_10_tcp_tcp_socket_drop_own(wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_tcp_socket_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_tcp_socket_drop(handle.__handle); -} - -void wasi_sockets_0_2_0_rc_2023_11_10_tcp_tcp_socket_drop_borrow(wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_tcp_socket_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_tcp_socket_drop(handle.__handle); -} - -wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket(wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_tcp_socket_t arg) { - return (wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t) { arg.__handle }; -} - -void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_tuple2_own_input_stream_own_output_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_tuple2_own_input_stream_own_output_stream_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_tuple3_own_tcp_socket_own_input_stream_own_output_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_tuple3_own_tcp_socket_own_input_stream_own_output_stream_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_ip_socket_address_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_ip_socket_address_error_code_t *ptr) { - if (!ptr->is_err) { - wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_free(&ptr->val.ok); - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_bool_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_bool_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_duration_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_duration_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u32_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u32_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u8_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u8_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u64_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u64_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_result_own_tcp_socket_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_result_own_tcp_socket_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_ip_address_free(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_ip_address_t *ptr) { - wasi_sockets_0_2_0_rc_2023_11_10_network_ip_address_free(ptr); -} - -__attribute__((__import_module__("wasi:sockets/ip-name-lookup@0.2.0-rc-2023-11-10"), __import_name__("[resource-drop]resolve-address-stream"))) -extern void __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_resolve_address_stream_drop(int32_t handle); - -void wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_resolve_address_stream_drop_own(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_resolve_address_stream_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_resolve_address_stream_drop(handle.__handle); -} - -void wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_resolve_address_stream_drop_borrow(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_resolve_address_stream_t handle) { - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_resolve_address_stream_drop(handle.__handle); -} - -wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_resolve_address_stream_t wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_resolve_address_stream(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_resolve_address_stream_t arg) { - return (wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_resolve_address_stream_t) { arg.__handle }; -} - -void wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_result_own_resolve_address_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_result_own_resolve_address_stream_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_option_ip_address_free(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_option_ip_address_t *ptr) { - if (ptr->is_some) { - wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_ip_address_free(&ptr->val); - } -} - -void wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_result_option_ip_address_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_result_option_ip_address_error_code_t *ptr) { - if (!ptr->is_err) { - wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_option_ip_address_free(&ptr->val.ok); - } else { - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_method_free(wasi_http_0_2_0_rc_2023_12_05_types_method_t *ptr) { - switch ((int32_t) ptr->tag) { - case 9: { - bindings_string_free(&ptr->val.other); - break; - } - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_scheme_free(wasi_http_0_2_0_rc_2023_12_05_types_scheme_t *ptr) { - switch ((int32_t) ptr->tag) { - case 2: { - bindings_string_free(&ptr->val.other); - break; - } - } -} - -void bindings_option_u16_free(bindings_option_u16_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_dns_error_payload_free(wasi_http_0_2_0_rc_2023_12_05_types_dns_error_payload_t *ptr) { - bindings_option_u16_free(&ptr->info_code); -} - -void bindings_option_u8_free(bindings_option_u8_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_tls_alert_received_payload_free(wasi_http_0_2_0_rc_2023_12_05_types_tls_alert_received_payload_t *ptr) { - bindings_option_u8_free(&ptr->alert_id); -} - -void bindings_option_u32_free(bindings_option_u32_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_free(wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t *ptr) { - bindings_option_u32_free(&ptr->field_size); -} - -void bindings_option_u64_free(bindings_option_u64_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_option_field_size_payload_free(wasi_http_0_2_0_rc_2023_12_05_types_option_field_size_payload_t *ptr) { - if (ptr->is_some) { - wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_free(&ptr->val); - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_error_code_free(wasi_http_0_2_0_rc_2023_12_05_types_error_code_t *ptr) { - switch ((int32_t) ptr->tag) { - case 1: { - wasi_http_0_2_0_rc_2023_12_05_types_dns_error_payload_free(&ptr->val.dns_error); - break; - } - case 14: { - wasi_http_0_2_0_rc_2023_12_05_types_tls_alert_received_payload_free(&ptr->val.tls_alert_received); - break; - } - case 17: { - bindings_option_u64_free(&ptr->val.http_request_body_size); - break; - } - case 21: { - bindings_option_u32_free(&ptr->val.http_request_header_section_size); - break; - } - case 22: { - wasi_http_0_2_0_rc_2023_12_05_types_option_field_size_payload_free(&ptr->val.http_request_header_size); - break; - } - case 23: { - bindings_option_u32_free(&ptr->val.http_request_trailer_section_size); - break; - } - case 24: { - wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_free(&ptr->val.http_request_trailer_size); - break; - } - case 26: { - bindings_option_u32_free(&ptr->val.http_response_header_section_size); - break; - } - case 27: { - wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_free(&ptr->val.http_response_header_size); - break; - } - case 28: { - bindings_option_u64_free(&ptr->val.http_response_body_size); - break; - } - case 29: { - bindings_option_u32_free(&ptr->val.http_response_trailer_section_size); - break; - } - case 30: { - wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_free(&ptr->val.http_response_trailer_size); - break; - } - case 31: { - break; - } - case 32: { - break; - } - case 38: { - break; - } - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_header_error_free(wasi_http_0_2_0_rc_2023_12_05_types_header_error_t *ptr) { - switch ((int32_t) ptr->tag) { - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_field_key_free(wasi_http_0_2_0_rc_2023_12_05_types_field_key_t *ptr) { - bindings_string_free(ptr); -} - -void wasi_http_0_2_0_rc_2023_12_05_types_field_value_free(wasi_http_0_2_0_rc_2023_12_05_types_field_value_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[resource-drop]fields"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_fields_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_12_05_types_fields_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_fields_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_12_05_types_fields_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_fields_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields(wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t arg) { - return (wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[resource-drop]incoming-request"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_incoming_request_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_12_05_types_incoming_request_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_request_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_incoming_request_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_12_05_types_incoming_request_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_request_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_incoming_request_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_request_t arg) { - return (wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[resource-drop]outgoing-request"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_outgoing_request_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_12_05_types_outgoing_request_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_request_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_outgoing_request_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_12_05_types_outgoing_request_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_request_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_outgoing_request_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_request_t arg) { - return (wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[resource-drop]request-options"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_request_options_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_12_05_types_request_options_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_request_options_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_request_options_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_12_05_types_request_options_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_request_options_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_request_options_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options(wasi_http_0_2_0_rc_2023_12_05_types_own_request_options_t arg) { - return (wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[resource-drop]response-outparam"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_response_outparam_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_12_05_types_response_outparam_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_response_outparam_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_response_outparam_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_12_05_types_response_outparam_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_response_outparam_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_response_outparam_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_12_05_types_borrow_response_outparam_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_response_outparam(wasi_http_0_2_0_rc_2023_12_05_types_own_response_outparam_t arg) { - return (wasi_http_0_2_0_rc_2023_12_05_types_borrow_response_outparam_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[resource-drop]incoming-response"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_incoming_response_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_12_05_types_incoming_response_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_response_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_incoming_response_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_12_05_types_incoming_response_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_response_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_incoming_response_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_response_t arg) { - return (wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[resource-drop]incoming-body"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_incoming_body_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_12_05_types_incoming_body_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_incoming_body_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_12_05_types_incoming_body_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_incoming_body_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_body_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_body(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t arg) { - return (wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_body_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[resource-drop]future-trailers"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_future_trailers_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_12_05_types_future_trailers_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_future_trailers_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_future_trailers_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_12_05_types_future_trailers_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_future_trailers_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_future_trailers_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_trailers_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_trailers(wasi_http_0_2_0_rc_2023_12_05_types_own_future_trailers_t arg) { - return (wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_trailers_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[resource-drop]outgoing-response"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_outgoing_response_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_12_05_types_outgoing_response_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_response_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_outgoing_response_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_12_05_types_outgoing_response_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_response_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_outgoing_response_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_response_t arg) { - return (wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[resource-drop]outgoing-body"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_outgoing_body_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_12_05_types_outgoing_body_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_outgoing_body_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_12_05_types_outgoing_body_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_outgoing_body_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_body_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_body(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t arg) { - return (wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_body_t) { arg.__handle }; -} - -__attribute__((__import_module__("wasi:http/types@0.2.0-rc-2023-12-05"), __import_name__("[resource-drop]future-incoming-response"))) -extern void __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_future_incoming_response_drop(int32_t handle); - -void wasi_http_0_2_0_rc_2023_12_05_types_future_incoming_response_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_future_incoming_response_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_future_incoming_response_drop(handle.__handle); -} - -void wasi_http_0_2_0_rc_2023_12_05_types_future_incoming_response_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_future_incoming_response_t handle) { - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_future_incoming_response_drop(handle.__handle); -} - -wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response(wasi_http_0_2_0_rc_2023_12_05_types_own_future_incoming_response_t arg) { - return (wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response_t) { arg.__handle }; -} - -void wasi_http_0_2_0_rc_2023_12_05_types_option_error_code_free(wasi_http_0_2_0_rc_2023_12_05_types_option_error_code_t *ptr) { - if (ptr->is_some) { - wasi_http_0_2_0_rc_2023_12_05_types_error_code_free(&ptr->val); - } -} - -void bindings_tuple2_field_key_field_value_free(bindings_tuple2_field_key_field_value_t *ptr) { - wasi_http_0_2_0_rc_2023_12_05_types_field_key_free(&ptr->f0); - wasi_http_0_2_0_rc_2023_12_05_types_field_value_free(&ptr->f1); -} - -void bindings_list_tuple2_field_key_field_value_free(bindings_list_tuple2_field_key_field_value_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - bindings_tuple2_field_key_field_value_free(&ptr->ptr[i]); - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_result_own_fields_header_error_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_fields_header_error_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_http_0_2_0_rc_2023_12_05_types_header_error_free(&ptr->val.err); - } -} - -void bindings_list_field_value_free(bindings_list_field_value_t *ptr) { - for (size_t i = 0; i < ptr->len; i++) { - wasi_http_0_2_0_rc_2023_12_05_types_field_value_free(&ptr->ptr[i]); - } - if (ptr->len > 0) { - free(ptr->ptr); - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_result_void_header_error_free(wasi_http_0_2_0_rc_2023_12_05_types_result_void_header_error_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_http_0_2_0_rc_2023_12_05_types_header_error_free(&ptr->val.err); - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_option_scheme_free(wasi_http_0_2_0_rc_2023_12_05_types_option_scheme_t *ptr) { - if (ptr->is_some) { - wasi_http_0_2_0_rc_2023_12_05_types_scheme_free(&ptr->val); - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_body_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_body_void_t *ptr) { - if (!ptr->is_err) { - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_body_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_body_void_t *ptr) { - if (!ptr->is_err) { - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_result_void_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_void_void_t *ptr) { - if (!ptr->is_err) { - } -} - -void bindings_option_duration_free(bindings_option_duration_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_response_error_code_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_response_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_http_0_2_0_rc_2023_12_05_types_error_code_free(&ptr->val.err); - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_result_own_input_stream_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_input_stream_void_t *ptr) { - if (!ptr->is_err) { - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_option_own_trailers_free(wasi_http_0_2_0_rc_2023_12_05_types_option_own_trailers_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_result_option_own_trailers_error_code_free(wasi_http_0_2_0_rc_2023_12_05_types_result_option_own_trailers_error_code_t *ptr) { - if (!ptr->is_err) { - wasi_http_0_2_0_rc_2023_12_05_types_option_own_trailers_free(&ptr->val.ok); - } else { - wasi_http_0_2_0_rc_2023_12_05_types_error_code_free(&ptr->val.err); - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_result_result_option_own_trailers_error_code_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_result_option_own_trailers_error_code_void_t *ptr) { - if (!ptr->is_err) { - wasi_http_0_2_0_rc_2023_12_05_types_result_option_own_trailers_error_code_free(&ptr->val.ok); - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_option_result_result_option_own_trailers_error_code_void_free(wasi_http_0_2_0_rc_2023_12_05_types_option_result_result_option_own_trailers_error_code_void_t *ptr) { - if (ptr->is_some) { - wasi_http_0_2_0_rc_2023_12_05_types_result_result_option_own_trailers_error_code_void_free(&ptr->val); - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_result_own_output_stream_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_output_stream_void_t *ptr) { - if (!ptr->is_err) { - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_result_void_error_code_free(wasi_http_0_2_0_rc_2023_12_05_types_result_void_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_http_0_2_0_rc_2023_12_05_types_error_code_free(&ptr->val.err); - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_response_error_code_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_response_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_http_0_2_0_rc_2023_12_05_types_error_code_free(&ptr->val.err); - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_result_result_own_incoming_response_error_code_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_result_own_incoming_response_error_code_void_t *ptr) { - if (!ptr->is_err) { - wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_response_error_code_free(&ptr->val.ok); - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_option_result_result_own_incoming_response_error_code_void_free(wasi_http_0_2_0_rc_2023_12_05_types_option_result_result_own_incoming_response_error_code_void_t *ptr) { - if (ptr->is_some) { - wasi_http_0_2_0_rc_2023_12_05_types_result_result_own_incoming_response_error_code_void_free(&ptr->val); - } -} - -void wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_error_code_free(wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_error_code_t *ptr) { - wasi_http_0_2_0_rc_2023_12_05_types_error_code_free(ptr); -} - -void wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_option_own_request_options_free(wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_option_own_request_options_t *ptr) { - if (ptr->is_some) { - } -} - -void wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_result_own_future_incoming_response_error_code_free(wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_result_own_future_incoming_response_error_code_t *ptr) { - if (!ptr->is_err) { - } else { - wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_error_code_free(&ptr->val.err); - } -} - -void exports_wasi_cli_0_2_0_rc_2023_12_05_run_result_void_void_free(exports_wasi_cli_0_2_0_rc_2023_12_05_run_result_void_void_t *ptr) { - if (!ptr->is_err) { - } -} - -void bindings_string_set(bindings_string_t *ret, char*s) { - ret->ptr = (uint8_t*) s; - ret->len = strlen(s); -} - -void bindings_string_dup(bindings_string_t *ret, const char*s) { - ret->len = strlen(s); - ret->ptr = cabi_realloc(NULL, 0, 1, ret->len * 1); - memcpy(ret->ptr, s, ret->len * 1); -} - -void bindings_string_free(bindings_string_t *ret) { - if (ret->len > 0) { - free(ret->ptr); - } - ret->ptr = NULL; - ret->len = 0; -} - -// Component Adapters - -void wasi_cli_0_2_0_rc_2023_12_05_environment_get_environment(bindings_list_tuple2_string_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_environment_get_environment(ptr); - *ret = (bindings_list_tuple2_string_string_t) { (bindings_tuple2_string_string_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -void wasi_cli_0_2_0_rc_2023_12_05_environment_get_arguments(bindings_list_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_environment_get_arguments(ptr); - *ret = (bindings_list_string_t) { (bindings_string_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -bool wasi_cli_0_2_0_rc_2023_12_05_environment_initial_cwd(bindings_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_environment_initial_cwd(ptr); - bindings_option_string_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -void wasi_cli_0_2_0_rc_2023_12_05_exit_exit(wasi_cli_0_2_0_rc_2023_12_05_exit_result_void_void_t *status) { - int32_t result; - if ((*status).is_err) { - result = 1; - } else { - result = 0; - } - __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_exit_exit(result); -} - -void wasi_io_0_2_0_rc_2023_11_10_error_method_error_to_debug_string(wasi_io_0_2_0_rc_2023_11_10_error_borrow_error_t self, bindings_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_error_method_error_to_debug_string((self).__handle, ptr); - *ret = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -bool wasi_io_0_2_0_rc_2023_11_10_poll_method_pollable_ready(wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable_t self) { - int32_t ret = __wasm_import_wasi_io_0_2_0_rc_2023_11_10_poll_method_pollable_ready((self).__handle); - return ret; -} - -void wasi_io_0_2_0_rc_2023_11_10_poll_method_pollable_block(wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable_t self) { - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_poll_method_pollable_block((self).__handle); -} - -void wasi_io_0_2_0_rc_2023_11_10_poll_poll(wasi_io_0_2_0_rc_2023_11_10_poll_list_borrow_pollable_t *in, bindings_list_u32_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_poll_poll((int32_t) (*in).ptr, (int32_t) (*in).len, ptr); - *ret = (bindings_list_u32_t) { (uint32_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -bool wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_read(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t self, uint64_t len, bindings_list_u8_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_read((self).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_11_10_streams_result_list_u8_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (bindings_list_u8_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_blocking_read(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t self, uint64_t len, bindings_list_u8_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_blocking_read((self).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_11_10_streams_result_list_u8_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (bindings_list_u8_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_skip(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t self, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_skip((self).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_11_10_streams_result_u64_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t) { *((int32_t*) (ptr + 12)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_blocking_skip(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t self, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_blocking_skip((self).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_11_10_streams_result_u64_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t) { *((int32_t*) (ptr + 12)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_io_0_2_0_rc_2023_11_10_streams_own_pollable_t wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_subscribe(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t self) { - int32_t ret = __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_subscribe((self).__handle); - return (wasi_io_0_2_0_rc_2023_11_10_streams_own_pollable_t) { ret }; -} - -bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_check_write(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, uint64_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_check_write((self).__handle, ptr); - wasi_io_0_2_0_rc_2023_11_10_streams_result_u64_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t) { *((int32_t*) (ptr + 12)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_write(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, bindings_list_u8_t *contents, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_write((self).__handle, (int32_t) (*contents).ptr, (int32_t) (*contents).len, ptr); - wasi_io_0_2_0_rc_2023_11_10_streams_result_void_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_write_and_flush(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, bindings_list_u8_t *contents, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_write_and_flush((self).__handle, (int32_t) (*contents).ptr, (int32_t) (*contents).len, ptr); - wasi_io_0_2_0_rc_2023_11_10_streams_result_void_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_flush(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_flush((self).__handle, ptr); - wasi_io_0_2_0_rc_2023_11_10_streams_result_void_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_flush(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_flush((self).__handle, ptr); - wasi_io_0_2_0_rc_2023_11_10_streams_result_void_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_io_0_2_0_rc_2023_11_10_streams_own_pollable_t wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_subscribe(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self) { - int32_t ret = __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_subscribe((self).__handle); - return (wasi_io_0_2_0_rc_2023_11_10_streams_own_pollable_t) { ret }; -} - -bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_write_zeroes(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, uint64_t len, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_write_zeroes((self).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_11_10_streams_result_void_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_write_zeroes_and_flush(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, uint64_t len, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_write_zeroes_and_flush((self).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_11_10_streams_result_void_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_splice(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t src, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_splice((self).__handle, (src).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_11_10_streams_result_u64_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t) { *((int32_t*) (ptr + 12)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_splice(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t src, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_splice((self).__handle, (src).__handle, (int64_t) (len), ptr); - wasi_io_0_2_0_rc_2023_11_10_streams_result_u64_stream_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.last_operation_failed = (wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t) { *((int32_t*) (ptr + 12)) }; - break; - } - case 1: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_cli_0_2_0_rc_2023_12_05_stdin_own_input_stream_t wasi_cli_0_2_0_rc_2023_12_05_stdin_get_stdin(void) { - int32_t ret = __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_stdin_get_stdin(); - return (wasi_cli_0_2_0_rc_2023_12_05_stdin_own_input_stream_t) { ret }; -} - -wasi_cli_0_2_0_rc_2023_12_05_stdout_own_output_stream_t wasi_cli_0_2_0_rc_2023_12_05_stdout_get_stdout(void) { - int32_t ret = __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_stdout_get_stdout(); - return (wasi_cli_0_2_0_rc_2023_12_05_stdout_own_output_stream_t) { ret }; -} - -wasi_cli_0_2_0_rc_2023_12_05_stderr_own_output_stream_t wasi_cli_0_2_0_rc_2023_12_05_stderr_get_stderr(void) { - int32_t ret = __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_stderr_get_stderr(); - return (wasi_cli_0_2_0_rc_2023_12_05_stderr_own_output_stream_t) { ret }; -} - -bool wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_get_terminal_stdin(wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_own_terminal_input_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_get_terminal_stdin(ptr); - wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_option_own_terminal_input_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_own_terminal_input_t) { *((int32_t*) (ptr + 4)) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_get_terminal_stdout(wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_own_terminal_output_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_get_terminal_stdout(ptr); - wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_option_own_terminal_output_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_own_terminal_output_t) { *((int32_t*) (ptr + 4)) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_get_terminal_stderr(wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_own_terminal_output_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_get_terminal_stderr(ptr); - wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_option_own_terminal_output_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_own_terminal_output_t) { *((int32_t*) (ptr + 4)) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_instant_t wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_now(void) { - int64_t ret = __wasm_import_wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_now(); - return (uint64_t) (ret); -} - -wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_duration_t wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_resolution(void) { - int64_t ret = __wasm_import_wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_resolution(); - return (uint64_t) (ret); -} - -wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_own_pollable_t wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_subscribe_instant(wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_instant_t when) { - int32_t ret = __wasm_import_wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_subscribe_instant((int64_t) (when)); - return (wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_own_pollable_t) { ret }; -} - -wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_own_pollable_t wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_subscribe_duration(wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_duration_t when) { - int32_t ret = __wasm_import_wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_subscribe_duration((int64_t) (when)); - return (wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_own_pollable_t) { ret }; -} - -void wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_now(wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t *ret) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_now(ptr); - *ret = (wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 0))), - (uint32_t) (*((int32_t*) (ptr + 8))), - }; -} - -void wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_resolution(wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t *ret) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_resolution(ptr); - *ret = (wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 0))), - (uint32_t) (*((int32_t*) (ptr + 8))), - }; -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_read_via_stream(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_11_10_types_own_input_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_read_via_stream((self).__handle, (int64_t) (offset), ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_input_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_11_10_types_own_input_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_write_via_stream(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_11_10_types_own_output_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_write_via_stream((self).__handle, (int64_t) (offset), ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_output_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_11_10_types_own_output_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_append_via_stream(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_own_output_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_append_via_stream((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_output_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_11_10_types_own_output_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_advise(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t length, wasi_filesystem_0_2_0_rc_2023_11_10_types_advice_t advice, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_advise((self).__handle, (int64_t) (offset), (int64_t) (length), (int32_t) advice, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_sync_data(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_sync_data((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_get_flags(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_flags_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_get_flags((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_flags_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_get_type(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_type_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_get_type((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_type_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_set_size(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t size, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_set_size((self).__handle, (int64_t) (size), ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_set_times(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_new_timestamp_t *data_access_timestamp, wasi_filesystem_0_2_0_rc_2023_11_10_types_new_timestamp_t *data_modification_timestamp, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t variant; - int64_t variant2; - int32_t variant3; - switch ((int32_t) (*data_access_timestamp).tag) { - case 0: { - variant = 0; - variant2 = 0; - variant3 = 0; - break; - } - case 1: { - variant = 1; - variant2 = 0; - variant3 = 0; - break; - } - case 2: { - const wasi_filesystem_0_2_0_rc_2023_11_10_types_datetime_t *payload1 = &(*data_access_timestamp).val.timestamp; - variant = 2; - variant2 = (int64_t) ((*payload1).seconds); - variant3 = (int32_t) ((*payload1).nanoseconds); - break; - } - } - int32_t variant7; - int64_t variant8; - int32_t variant9; - switch ((int32_t) (*data_modification_timestamp).tag) { - case 0: { - variant7 = 0; - variant8 = 0; - variant9 = 0; - break; - } - case 1: { - variant7 = 1; - variant8 = 0; - variant9 = 0; - break; - } - case 2: { - const wasi_filesystem_0_2_0_rc_2023_11_10_types_datetime_t *payload6 = &(*data_modification_timestamp).val.timestamp; - variant7 = 2; - variant8 = (int64_t) ((*payload6).seconds); - variant9 = (int32_t) ((*payload6).nanoseconds); - break; - } - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_set_times((self).__handle, variant, variant2, variant3, variant7, variant8, variant9, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_read(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t length, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t offset, bindings_tuple2_list_u8_bool_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_read((self).__handle, (int64_t) (length), (int64_t) (offset), ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_tuple2_list_u8_bool_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (bindings_tuple2_list_u8_bool_t) { - (bindings_list_u8_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }, - (int32_t) (*((uint8_t*) (ptr + 12))), - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_write(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_list_u8_t *buffer, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_write((self).__handle, (int32_t) (*buffer).ptr, (int32_t) (*buffer).len, (int64_t) (offset), ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_filesize_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_read_directory(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_own_directory_entry_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_read_directory((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_directory_entry_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_11_10_types_own_directory_entry_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_sync(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_sync((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_create_directory_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_create_directory_at((self).__handle, (int32_t) (*path).ptr, (int32_t) (*path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_stat(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_stat_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[104]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_stat((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_stat_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 40))), - (uint32_t) (*((int32_t*) (ptr + 48))), - }; - break; - } - } - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_t option0; - switch ((int32_t) (*((uint8_t*) (ptr + 56)))) { - case 0: { - option0.is_some = false; - break; - } - case 1: { - option0.is_some = true; - option0.val = (wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 64))), - (uint32_t) (*((int32_t*) (ptr + 72))), - }; - break; - } - } - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_t option1; - switch ((int32_t) (*((uint8_t*) (ptr + 80)))) { - case 0: { - option1.is_some = false; - break; - } - case 1: { - option1.is_some = true; - option1.val = (wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 88))), - (uint32_t) (*((int32_t*) (ptr + 96))), - }; - break; - } - } - - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_stat_t) { - (int32_t) (*((uint8_t*) (ptr + 8))), - (uint64_t) (*((int64_t*) (ptr + 16))), - (uint64_t) (*((int64_t*) (ptr + 24))), - option, - option0, - option1, - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_stat_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_stat_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[104]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_stat_at((self).__handle, path_flags, (int32_t) (*path).ptr, (int32_t) (*path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_stat_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 40))), - (uint32_t) (*((int32_t*) (ptr + 48))), - }; - break; - } - } - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_t option0; - switch ((int32_t) (*((uint8_t*) (ptr + 56)))) { - case 0: { - option0.is_some = false; - break; - } - case 1: { - option0.is_some = true; - option0.val = (wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 64))), - (uint32_t) (*((int32_t*) (ptr + 72))), - }; - break; - } - } - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_t option1; - switch ((int32_t) (*((uint8_t*) (ptr + 80)))) { - case 0: { - option1.is_some = false; - break; - } - case 1: { - option1.is_some = true; - option1.val = (wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t) { - (uint64_t) (*((int64_t*) (ptr + 88))), - (uint32_t) (*((int32_t*) (ptr + 96))), - }; - break; - } - } - - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_stat_t) { - (int32_t) (*((uint8_t*) (ptr + 8))), - (uint64_t) (*((int64_t*) (ptr + 16))), - (uint64_t) (*((int64_t*) (ptr + 24))), - option, - option0, - option1, - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_set_times_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_new_timestamp_t *data_access_timestamp, wasi_filesystem_0_2_0_rc_2023_11_10_types_new_timestamp_t *data_modification_timestamp, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t variant; - int64_t variant2; - int32_t variant3; - switch ((int32_t) (*data_access_timestamp).tag) { - case 0: { - variant = 0; - variant2 = 0; - variant3 = 0; - break; - } - case 1: { - variant = 1; - variant2 = 0; - variant3 = 0; - break; - } - case 2: { - const wasi_filesystem_0_2_0_rc_2023_11_10_types_datetime_t *payload1 = &(*data_access_timestamp).val.timestamp; - variant = 2; - variant2 = (int64_t) ((*payload1).seconds); - variant3 = (int32_t) ((*payload1).nanoseconds); - break; - } - } - int32_t variant7; - int64_t variant8; - int32_t variant9; - switch ((int32_t) (*data_modification_timestamp).tag) { - case 0: { - variant7 = 0; - variant8 = 0; - variant9 = 0; - break; - } - case 1: { - variant7 = 1; - variant8 = 0; - variant9 = 0; - break; - } - case 2: { - const wasi_filesystem_0_2_0_rc_2023_11_10_types_datetime_t *payload6 = &(*data_modification_timestamp).val.timestamp; - variant7 = 2; - variant8 = (int64_t) ((*payload6).seconds); - variant9 = (int32_t) ((*payload6).nanoseconds); - break; - } - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_set_times_at((self).__handle, path_flags, (int32_t) (*path).ptr, (int32_t) (*path).len, variant, variant2, variant3, variant7, variant8, variant9, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_link_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_path_flags_t old_path_flags, bindings_string_t *old_path, wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t new_descriptor, bindings_string_t *new_path, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_link_at((self).__handle, old_path_flags, (int32_t) (*old_path).ptr, (int32_t) (*old_path).len, (new_descriptor).__handle, (int32_t) (*new_path).ptr, (int32_t) (*new_path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_open_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_open_flags_t open_flags, wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_flags_t flags, wasi_filesystem_0_2_0_rc_2023_11_10_types_own_descriptor_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_open_at((self).__handle, path_flags, (int32_t) (*path).ptr, (int32_t) (*path).len, open_flags, flags, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_descriptor_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_11_10_types_own_descriptor_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_readlink_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_string_t *path, bindings_string_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_readlink_at((self).__handle, (int32_t) (*path).ptr, (int32_t) (*path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_string_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_remove_directory_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_remove_directory_at((self).__handle, (int32_t) (*path).ptr, (int32_t) (*path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_rename_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_string_t *old_path, wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t new_descriptor, bindings_string_t *new_path, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_rename_at((self).__handle, (int32_t) (*old_path).ptr, (int32_t) (*old_path).len, (new_descriptor).__handle, (int32_t) (*new_path).ptr, (int32_t) (*new_path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_symlink_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_string_t *old_path, bindings_string_t *new_path, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_symlink_at((self).__handle, (int32_t) (*old_path).ptr, (int32_t) (*old_path).len, (int32_t) (*new_path).ptr, (int32_t) (*new_path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_unlink_file_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_unlink_file_at((self).__handle, (int32_t) (*path).ptr, (int32_t) (*path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_is_same_object(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t other) { - int32_t ret = __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_is_same_object((self).__handle, (other).__handle); - return ret; -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_metadata_hash(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_metadata_hash_value_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[24]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_metadata_hash((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_metadata_hash_value_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_11_10_types_metadata_hash_value_t) { - (uint64_t) (*((int64_t*) (ptr + 8))), - (uint64_t) (*((int64_t*) (ptr + 16))), - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_metadata_hash_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_metadata_hash_value_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[24]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_metadata_hash_at((self).__handle, path_flags, (int32_t) (*path).ptr, (int32_t) (*path).len, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_metadata_hash_value_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_filesystem_0_2_0_rc_2023_11_10_types_metadata_hash_value_t) { - (uint64_t) (*((int64_t*) (ptr + 8))), - (uint64_t) (*((int64_t*) (ptr + 16))), - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_directory_entry_stream_read_directory_entry(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_directory_entry_stream_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_option_directory_entry_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[20]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_method_directory_entry_stream_read_directory_entry((self).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_result_option_directory_entry_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_directory_entry_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 4)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_t) { - (int32_t) (*((uint8_t*) (ptr + 8))), - (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 12))), (size_t)(*((int32_t*) (ptr + 16))) }, - }; - break; - } - } - - result.val.ok = option; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_filesystem_0_2_0_rc_2023_11_10_types_filesystem_error_code(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_error_t err_, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *ret) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_types_filesystem_error_code((err_).__handle, ptr); - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_error_code_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - *ret = option.val; - return option.is_some; -} - -void wasi_filesystem_0_2_0_rc_2023_11_10_preopens_get_directories(wasi_filesystem_0_2_0_rc_2023_11_10_preopens_list_tuple2_own_descriptor_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_filesystem_0_2_0_rc_2023_11_10_preopens_get_directories(ptr); - *ret = (wasi_filesystem_0_2_0_rc_2023_11_10_preopens_list_tuple2_own_descriptor_string_t) { (wasi_filesystem_0_2_0_rc_2023_11_10_preopens_tuple2_own_descriptor_string_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -wasi_sockets_0_2_0_rc_2023_11_10_instance_network_own_network_t wasi_sockets_0_2_0_rc_2023_11_10_instance_network_instance_network(void) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_instance_network_instance_network(); - return (wasi_sockets_0_2_0_rc_2023_11_10_instance_network_own_network_t) { ret }; -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_start_bind(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t *local_address, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t variant; - int32_t variant1; - int32_t variant2; - int32_t variant3; - int32_t variant4; - int32_t variant5; - int32_t variant6; - int32_t variant7; - int32_t variant8; - int32_t variant9; - int32_t variant10; - int32_t variant11; - switch ((int32_t) (*local_address).tag) { - case 0: { - const wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_socket_address_t *payload = &(*local_address).val.ipv4; - variant = 0; - variant1 = (int32_t) ((*payload).port); - variant2 = (int32_t) (((*payload).address).f0); - variant3 = (int32_t) (((*payload).address).f1); - variant4 = (int32_t) (((*payload).address).f2); - variant5 = (int32_t) (((*payload).address).f3); - variant6 = 0; - variant7 = 0; - variant8 = 0; - variant9 = 0; - variant10 = 0; - variant11 = 0; - break; - } - case 1: { - const wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_socket_address_t *payload0 = &(*local_address).val.ipv6; - variant = 1; - variant1 = (int32_t) ((*payload0).port); - variant2 = (int32_t) ((*payload0).flow_info); - variant3 = (int32_t) (((*payload0).address).f0); - variant4 = (int32_t) (((*payload0).address).f1); - variant5 = (int32_t) (((*payload0).address).f2); - variant6 = (int32_t) (((*payload0).address).f3); - variant7 = (int32_t) (((*payload0).address).f4); - variant8 = (int32_t) (((*payload0).address).f5); - variant9 = (int32_t) (((*payload0).address).f6); - variant10 = (int32_t) (((*payload0).address).f7); - variant11 = (int32_t) ((*payload0).scope_id); - break; - } - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_start_bind((self).__handle, (network).__handle, variant, variant1, variant2, variant3, variant4, variant5, variant6, variant7, variant8, variant9, variant10, variant11, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_finish_bind(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_finish_bind((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_stream(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t *maybe_remote_address, wasi_sockets_0_2_0_rc_2023_11_10_udp_tuple2_own_incoming_datagram_stream_own_outgoing_datagram_stream_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - wasi_sockets_0_2_0_rc_2023_11_10_udp_option_ip_socket_address_t remote_address; - remote_address.is_some = maybe_remote_address != NULL;if (maybe_remote_address) { - remote_address.val = *maybe_remote_address; - } - int32_t option; - int32_t option14; - int32_t option15; - int32_t option16; - int32_t option17; - int32_t option18; - int32_t option19; - int32_t option20; - int32_t option21; - int32_t option22; - int32_t option23; - int32_t option24; - int32_t option25; - if ((remote_address).is_some) { - const wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t *payload0 = &(remote_address).val; - int32_t variant; - int32_t variant3; - int32_t variant4; - int32_t variant5; - int32_t variant6; - int32_t variant7; - int32_t variant8; - int32_t variant9; - int32_t variant10; - int32_t variant11; - int32_t variant12; - int32_t variant13; - switch ((int32_t) (*payload0).tag) { - case 0: { - const wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_socket_address_t *payload1 = &(*payload0).val.ipv4; - variant = 0; - variant3 = (int32_t) ((*payload1).port); - variant4 = (int32_t) (((*payload1).address).f0); - variant5 = (int32_t) (((*payload1).address).f1); - variant6 = (int32_t) (((*payload1).address).f2); - variant7 = (int32_t) (((*payload1).address).f3); - variant8 = 0; - variant9 = 0; - variant10 = 0; - variant11 = 0; - variant12 = 0; - variant13 = 0; - break; - } - case 1: { - const wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_socket_address_t *payload2 = &(*payload0).val.ipv6; - variant = 1; - variant3 = (int32_t) ((*payload2).port); - variant4 = (int32_t) ((*payload2).flow_info); - variant5 = (int32_t) (((*payload2).address).f0); - variant6 = (int32_t) (((*payload2).address).f1); - variant7 = (int32_t) (((*payload2).address).f2); - variant8 = (int32_t) (((*payload2).address).f3); - variant9 = (int32_t) (((*payload2).address).f4); - variant10 = (int32_t) (((*payload2).address).f5); - variant11 = (int32_t) (((*payload2).address).f6); - variant12 = (int32_t) (((*payload2).address).f7); - variant13 = (int32_t) ((*payload2).scope_id); - break; - } - } - option = 1; - option14 = variant; - option15 = variant3; - option16 = variant4; - option17 = variant5; - option18 = variant6; - option19 = variant7; - option20 = variant8; - option21 = variant9; - option22 = variant10; - option23 = variant11; - option24 = variant12; - option25 = variant13; - } else { - option = 0; - option14 = 0; - option15 = 0; - option16 = 0; - option17 = 0; - option18 = 0; - option19 = 0; - option20 = 0; - option21 = 0; - option22 = 0; - option23 = 0; - option24 = 0; - option25 = 0; - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_stream((self).__handle, option, option14, option15, option16, option17, option18, option19, option20, option21, option22, option23, option24, option25, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_tuple2_own_incoming_datagram_stream_own_outgoing_datagram_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_sockets_0_2_0_rc_2023_11_10_udp_tuple2_own_incoming_datagram_stream_own_outgoing_datagram_stream_t) { - (wasi_sockets_0_2_0_rc_2023_11_10_udp_own_incoming_datagram_stream_t) { *((int32_t*) (ptr + 4)) }, - (wasi_sockets_0_2_0_rc_2023_11_10_udp_own_outgoing_datagram_stream_t) { *((int32_t*) (ptr + 8)) }, - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_local_address(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[36]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_local_address((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_ip_socket_address_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_sockets_0_2_0_rc_2023_11_10_network_ip_socket_address_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.ipv4 = (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_address_t) { - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 10)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 11)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 12)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 13)))), - }, - }; - break; - } - case 1: { - variant.val.ipv6 = (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (uint32_t) (*((int32_t*) (ptr + 12))), - (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 16)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 18)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 20)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 22)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 24)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 26)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 28)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 30)))), - }, - (uint32_t) (*((int32_t*) (ptr + 32))), - }; - break; - } - } - - result.val.ok = variant; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_remote_address(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[36]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_remote_address((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_ip_socket_address_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_sockets_0_2_0_rc_2023_11_10_network_ip_socket_address_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.ipv4 = (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_address_t) { - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 10)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 11)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 12)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 13)))), - }, - }; - break; - } - case 1: { - variant.val.ipv6 = (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (uint32_t) (*((int32_t*) (ptr + 12))), - (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 16)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 18)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 20)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 22)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 24)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 26)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 28)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 30)))), - }, - (uint32_t) (*((int32_t*) (ptr + 32))), - }; - break; - } - } - - result.val.ok = variant; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_address_family_t wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_address_family(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_address_family((self).__handle); - return ret; -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_ipv6_only(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_ipv6_only((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_bool_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_ipv6_only(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_ipv6_only((self).__handle, value, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_unicast_hop_limit(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, uint8_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_unicast_hop_limit((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u8_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 1)))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_unicast_hop_limit(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, uint8_t value, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_unicast_hop_limit((self).__handle, (int32_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_receive_buffer_size((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u64_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_receive_buffer_size((self).__handle, (int64_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_send_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_send_buffer_size((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u64_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_send_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_send_buffer_size((self).__handle, (int64_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_sockets_0_2_0_rc_2023_11_10_udp_own_pollable_t wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_subscribe(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_subscribe((self).__handle); - return (wasi_sockets_0_2_0_rc_2023_11_10_udp_own_pollable_t) { ret }; -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_incoming_datagram_stream_receive(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_incoming_datagram_stream_t self, uint64_t max_results, wasi_sockets_0_2_0_rc_2023_11_10_udp_list_incoming_datagram_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_incoming_datagram_stream_receive((self).__handle, (int64_t) (max_results), ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_list_incoming_datagram_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_sockets_0_2_0_rc_2023_11_10_udp_list_incoming_datagram_t) { (wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_sockets_0_2_0_rc_2023_11_10_udp_own_pollable_t wasi_sockets_0_2_0_rc_2023_11_10_udp_method_incoming_datagram_stream_subscribe(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_incoming_datagram_stream_t self) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_incoming_datagram_stream_subscribe((self).__handle); - return (wasi_sockets_0_2_0_rc_2023_11_10_udp_own_pollable_t) { ret }; -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_outgoing_datagram_stream_check_send(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_outgoing_datagram_stream_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_outgoing_datagram_stream_check_send((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u64_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_outgoing_datagram_stream_send(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_outgoing_datagram_stream_t self, wasi_sockets_0_2_0_rc_2023_11_10_udp_list_outgoing_datagram_t *datagrams, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_outgoing_datagram_stream_send((self).__handle, (int32_t) (*datagrams).ptr, (int32_t) (*datagrams).len, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u64_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_sockets_0_2_0_rc_2023_11_10_udp_own_pollable_t wasi_sockets_0_2_0_rc_2023_11_10_udp_method_outgoing_datagram_stream_subscribe(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_outgoing_datagram_stream_t self) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_method_outgoing_datagram_stream_subscribe((self).__handle); - return (wasi_sockets_0_2_0_rc_2023_11_10_udp_own_pollable_t) { ret }; -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_create_udp_socket(wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_ip_address_family_t address_family, wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_own_udp_socket_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_create_udp_socket((int32_t) address_family, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_result_own_udp_socket_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_own_udp_socket_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_start_bind(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_t *local_address, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t variant; - int32_t variant1; - int32_t variant2; - int32_t variant3; - int32_t variant4; - int32_t variant5; - int32_t variant6; - int32_t variant7; - int32_t variant8; - int32_t variant9; - int32_t variant10; - int32_t variant11; - switch ((int32_t) (*local_address).tag) { - case 0: { - const wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_socket_address_t *payload = &(*local_address).val.ipv4; - variant = 0; - variant1 = (int32_t) ((*payload).port); - variant2 = (int32_t) (((*payload).address).f0); - variant3 = (int32_t) (((*payload).address).f1); - variant4 = (int32_t) (((*payload).address).f2); - variant5 = (int32_t) (((*payload).address).f3); - variant6 = 0; - variant7 = 0; - variant8 = 0; - variant9 = 0; - variant10 = 0; - variant11 = 0; - break; - } - case 1: { - const wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_socket_address_t *payload0 = &(*local_address).val.ipv6; - variant = 1; - variant1 = (int32_t) ((*payload0).port); - variant2 = (int32_t) ((*payload0).flow_info); - variant3 = (int32_t) (((*payload0).address).f0); - variant4 = (int32_t) (((*payload0).address).f1); - variant5 = (int32_t) (((*payload0).address).f2); - variant6 = (int32_t) (((*payload0).address).f3); - variant7 = (int32_t) (((*payload0).address).f4); - variant8 = (int32_t) (((*payload0).address).f5); - variant9 = (int32_t) (((*payload0).address).f6); - variant10 = (int32_t) (((*payload0).address).f7); - variant11 = (int32_t) ((*payload0).scope_id); - break; - } - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_start_bind((self).__handle, (network).__handle, variant, variant1, variant2, variant3, variant4, variant5, variant6, variant7, variant8, variant9, variant10, variant11, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_finish_bind(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_finish_bind((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_start_connect(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_t *remote_address, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t variant; - int32_t variant1; - int32_t variant2; - int32_t variant3; - int32_t variant4; - int32_t variant5; - int32_t variant6; - int32_t variant7; - int32_t variant8; - int32_t variant9; - int32_t variant10; - int32_t variant11; - switch ((int32_t) (*remote_address).tag) { - case 0: { - const wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_socket_address_t *payload = &(*remote_address).val.ipv4; - variant = 0; - variant1 = (int32_t) ((*payload).port); - variant2 = (int32_t) (((*payload).address).f0); - variant3 = (int32_t) (((*payload).address).f1); - variant4 = (int32_t) (((*payload).address).f2); - variant5 = (int32_t) (((*payload).address).f3); - variant6 = 0; - variant7 = 0; - variant8 = 0; - variant9 = 0; - variant10 = 0; - variant11 = 0; - break; - } - case 1: { - const wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_socket_address_t *payload0 = &(*remote_address).val.ipv6; - variant = 1; - variant1 = (int32_t) ((*payload0).port); - variant2 = (int32_t) ((*payload0).flow_info); - variant3 = (int32_t) (((*payload0).address).f0); - variant4 = (int32_t) (((*payload0).address).f1); - variant5 = (int32_t) (((*payload0).address).f2); - variant6 = (int32_t) (((*payload0).address).f3); - variant7 = (int32_t) (((*payload0).address).f4); - variant8 = (int32_t) (((*payload0).address).f5); - variant9 = (int32_t) (((*payload0).address).f6); - variant10 = (int32_t) (((*payload0).address).f7); - variant11 = (int32_t) ((*payload0).scope_id); - break; - } - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_start_connect((self).__handle, (network).__handle, variant, variant1, variant2, variant3, variant4, variant5, variant6, variant7, variant8, variant9, variant10, variant11, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_finish_connect(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_tuple2_own_input_stream_own_output_stream_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_finish_connect((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_tuple2_own_input_stream_own_output_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_sockets_0_2_0_rc_2023_11_10_tcp_tuple2_own_input_stream_own_output_stream_t) { - (wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_input_stream_t) { *((int32_t*) (ptr + 4)) }, - (wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_output_stream_t) { *((int32_t*) (ptr + 8)) }, - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_start_listen(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_start_listen((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_finish_listen(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_finish_listen((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_accept(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_tuple3_own_tcp_socket_own_input_stream_own_output_stream_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_accept((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_tuple3_own_tcp_socket_own_input_stream_own_output_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_sockets_0_2_0_rc_2023_11_10_tcp_tuple3_own_tcp_socket_own_input_stream_own_output_stream_t) { - (wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_tcp_socket_t) { *((int32_t*) (ptr + 4)) }, - (wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_input_stream_t) { *((int32_t*) (ptr + 8)) }, - (wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_output_stream_t) { *((int32_t*) (ptr + 12)) }, - }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_local_address(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[36]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_local_address((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_ip_socket_address_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_sockets_0_2_0_rc_2023_11_10_network_ip_socket_address_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.ipv4 = (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_address_t) { - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 10)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 11)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 12)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 13)))), - }, - }; - break; - } - case 1: { - variant.val.ipv6 = (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (uint32_t) (*((int32_t*) (ptr + 12))), - (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 16)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 18)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 20)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 22)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 24)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 26)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 28)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 30)))), - }, - (uint32_t) (*((int32_t*) (ptr + 32))), - }; - break; - } - } - - result.val.ok = variant; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_remote_address(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[36]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_remote_address((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_ip_socket_address_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_sockets_0_2_0_rc_2023_11_10_network_ip_socket_address_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.ipv4 = (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_address_t) { - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 10)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 11)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 12)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 13)))), - }, - }; - break; - } - case 1: { - variant.val.ipv6 = (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_socket_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (uint32_t) (*((int32_t*) (ptr + 12))), - (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 16)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 18)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 20)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 22)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 24)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 26)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 28)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 30)))), - }, - (uint32_t) (*((int32_t*) (ptr + 32))), - }; - break; - } - } - - result.val.ok = variant; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_is_listening(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_is_listening((self).__handle); - return ret; -} - -wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_address_family_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_address_family(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_address_family((self).__handle); - return ret; -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_ipv6_only(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_ipv6_only((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_bool_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_ipv6_only(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_ipv6_only((self).__handle, value, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_listen_backlog_size(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_listen_backlog_size((self).__handle, (int64_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_enabled(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_enabled((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_bool_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_enabled(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_enabled((self).__handle, value, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_idle_time(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_duration_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_idle_time((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_duration_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_idle_time(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_duration_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_idle_time((self).__handle, (int64_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_interval(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_duration_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_interval((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_duration_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_interval(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_duration_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_interval((self).__handle, (int64_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_count(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint32_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_count((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u32_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint32_t) (*((int32_t*) (ptr + 4))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_count(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint32_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_count((self).__handle, (int32_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_hop_limit(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint8_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_hop_limit((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u8_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 1)))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_hop_limit(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint8_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_hop_limit((self).__handle, (int32_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_receive_buffer_size((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u64_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_receive_buffer_size((self).__handle, (int64_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_send_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_send_buffer_size((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u64_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 8))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_send_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_send_buffer_size((self).__handle, (int64_t) (value), ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_pollable_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_subscribe(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_subscribe((self).__handle); - return (wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_pollable_t) { ret }; -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_shutdown(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_shutdown_type_t shutdown_type, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_shutdown((self).__handle, (int32_t) shutdown_type, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 1))); - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_create_tcp_socket(wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_ip_address_family_t address_family, wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_own_tcp_socket_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_create_tcp_socket((int32_t) address_family, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_result_own_tcp_socket_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_own_tcp_socket_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_resolve_addresses(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_network_t network, bindings_string_t *name, wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_resolve_address_stream_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_error_code_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_resolve_addresses((network).__handle, (int32_t) (*name).ptr, (int32_t) (*name).len, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_result_own_resolve_address_stream_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_resolve_address_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 4))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_method_resolve_address_stream_resolve_next_address(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_resolve_address_stream_t self, wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_option_ip_address_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_error_code_t *err) { - __attribute__((__aligned__(2))) - uint8_t ret_area[22]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_method_resolve_address_stream_resolve_next_address((self).__handle, ptr); - wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_result_option_ip_address_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_option_ip_address_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 2)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - wasi_sockets_0_2_0_rc_2023_11_10_network_ip_address_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - variant.val.ipv4 = (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_address_t) { - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 6)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 7)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 8)))), - (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 9)))), - }; - break; - } - case 1: { - variant.val.ipv6 = (wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_address_t) { - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 6)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 8)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 10)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 12)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 14)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 16)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 18)))), - (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 20)))), - }; - break; - } - } - - option.val = variant; - break; - } - } - - result.val.ok = option; - break; - } - case 1: { - result.is_err = true; - result.val.err = (int32_t) (*((uint8_t*) (ptr + 2))); - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_pollable_t wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_method_resolve_address_stream_subscribe(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_resolve_address_stream_t self) { - int32_t ret = __wasm_import_wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_method_resolve_address_stream_subscribe((self).__handle); - return (wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_pollable_t) { ret }; -} - -void wasi_random_0_2_0_rc_2023_11_10_random_get_random_bytes(uint64_t len, bindings_list_u8_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_random_0_2_0_rc_2023_11_10_random_get_random_bytes((int64_t) (len), ptr); - *ret = (bindings_list_u8_t) { (uint8_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -uint64_t wasi_random_0_2_0_rc_2023_11_10_random_get_random_u64(void) { - int64_t ret = __wasm_import_wasi_random_0_2_0_rc_2023_11_10_random_get_random_u64(); - return (uint64_t) (ret); -} - -void wasi_random_0_2_0_rc_2023_11_10_insecure_get_insecure_random_bytes(uint64_t len, bindings_list_u8_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_random_0_2_0_rc_2023_11_10_insecure_get_insecure_random_bytes((int64_t) (len), ptr); - *ret = (bindings_list_u8_t) { (uint8_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -uint64_t wasi_random_0_2_0_rc_2023_11_10_insecure_get_insecure_random_u64(void) { - int64_t ret = __wasm_import_wasi_random_0_2_0_rc_2023_11_10_insecure_get_insecure_random_u64(); - return (uint64_t) (ret); -} - -void wasi_random_0_2_0_rc_2023_11_10_insecure_seed_insecure_seed(bindings_tuple2_u64_u64_t *ret) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_random_0_2_0_rc_2023_11_10_insecure_seed_insecure_seed(ptr); - *ret = (bindings_tuple2_u64_u64_t) { - (uint64_t) (*((int64_t*) (ptr + 0))), - (uint64_t) (*((int64_t*) (ptr + 8))), - }; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_http_error_code(wasi_http_0_2_0_rc_2023_12_05_types_borrow_io_error_t err_, wasi_http_0_2_0_rc_2023_12_05_types_error_code_t *ret) { - __attribute__((__aligned__(8))) - uint8_t ret_area[40]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_http_error_code((err_).__handle, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_option_error_code_t option21; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option21.is_some = false; - break; - } - case 1: { - option21.is_some = true; - wasi_http_0_2_0_rc_2023_12_05_types_error_code_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - bindings_option_string_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - bindings_option_u16_t option0; - switch ((int32_t) (*((uint8_t*) (ptr + 28)))) { - case 0: { - option0.is_some = false; - break; - } - case 1: { - option0.is_some = true; - option0.val = (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 30)))); - break; - } - } - variant.val.dns_error = (wasi_http_0_2_0_rc_2023_12_05_types_dns_error_payload_t) { - option, - option0, - }; - break; - } - case 2: { - break; - } - case 3: { - break; - } - case 4: { - break; - } - case 5: { - break; - } - case 6: { - break; - } - case 7: { - break; - } - case 8: { - break; - } - case 9: { - break; - } - case 10: { - break; - } - case 11: { - break; - } - case 12: { - break; - } - case 13: { - break; - } - case 14: { - bindings_option_u8_t option1; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option1.is_some = false; - break; - } - case 1: { - option1.is_some = true; - option1.val = (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 17)))); - break; - } - } - bindings_option_string_t option2; - switch ((int32_t) (*((uint8_t*) (ptr + 20)))) { - case 0: { - option2.is_some = false; - break; - } - case 1: { - option2.is_some = true; - option2.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 24))), (size_t)(*((int32_t*) (ptr + 28))) }; - break; - } - } - variant.val.tls_alert_received = (wasi_http_0_2_0_rc_2023_12_05_types_tls_alert_received_payload_t) { - option1, - option2, - }; - break; - } - case 15: { - break; - } - case 16: { - break; - } - case 17: { - bindings_option_u64_t option3; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option3.is_some = false; - break; - } - case 1: { - option3.is_some = true; - option3.val = (uint64_t) (*((int64_t*) (ptr + 24))); - break; - } - } - variant.val.http_request_body_size = option3; - break; - } - case 18: { - break; - } - case 19: { - break; - } - case 20: { - break; - } - case 21: { - bindings_option_u32_t option4; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option4.is_some = false; - break; - } - case 1: { - option4.is_some = true; - option4.val = (uint32_t) (*((int32_t*) (ptr + 20))); - break; - } - } - variant.val.http_request_header_section_size = option4; - break; - } - case 22: { - wasi_http_0_2_0_rc_2023_12_05_types_option_field_size_payload_t option7; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option7.is_some = false; - break; - } - case 1: { - option7.is_some = true; - bindings_option_string_t option5; - switch ((int32_t) (*((uint8_t*) (ptr + 20)))) { - case 0: { - option5.is_some = false; - break; - } - case 1: { - option5.is_some = true; - option5.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 24))), (size_t)(*((int32_t*) (ptr + 28))) }; - break; - } - } - bindings_option_u32_t option6; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option6.is_some = false; - break; - } - case 1: { - option6.is_some = true; - option6.val = (uint32_t) (*((int32_t*) (ptr + 36))); - break; - } - } - - option7.val = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option5, - option6, - }; - break; - } - } - variant.val.http_request_header_size = option7; - break; - } - case 23: { - bindings_option_u32_t option8; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option8.is_some = false; - break; - } - case 1: { - option8.is_some = true; - option8.val = (uint32_t) (*((int32_t*) (ptr + 20))); - break; - } - } - variant.val.http_request_trailer_section_size = option8; - break; - } - case 24: { - bindings_option_string_t option9; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option9.is_some = false; - break; - } - case 1: { - option9.is_some = true; - option9.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - bindings_option_u32_t option10; - switch ((int32_t) (*((uint8_t*) (ptr + 28)))) { - case 0: { - option10.is_some = false; - break; - } - case 1: { - option10.is_some = true; - option10.val = (uint32_t) (*((int32_t*) (ptr + 32))); - break; - } - } - variant.val.http_request_trailer_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option9, - option10, - }; - break; - } - case 25: { - break; - } - case 26: { - bindings_option_u32_t option11; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option11.is_some = false; - break; - } - case 1: { - option11.is_some = true; - option11.val = (uint32_t) (*((int32_t*) (ptr + 20))); - break; - } - } - variant.val.http_response_header_section_size = option11; - break; - } - case 27: { - bindings_option_string_t option12; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option12.is_some = false; - break; - } - case 1: { - option12.is_some = true; - option12.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - bindings_option_u32_t option13; - switch ((int32_t) (*((uint8_t*) (ptr + 28)))) { - case 0: { - option13.is_some = false; - break; - } - case 1: { - option13.is_some = true; - option13.val = (uint32_t) (*((int32_t*) (ptr + 32))); - break; - } - } - variant.val.http_response_header_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option12, - option13, - }; - break; - } - case 28: { - bindings_option_u64_t option14; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option14.is_some = false; - break; - } - case 1: { - option14.is_some = true; - option14.val = (uint64_t) (*((int64_t*) (ptr + 24))); - break; - } - } - variant.val.http_response_body_size = option14; - break; - } - case 29: { - bindings_option_u32_t option15; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option15.is_some = false; - break; - } - case 1: { - option15.is_some = true; - option15.val = (uint32_t) (*((int32_t*) (ptr + 20))); - break; - } - } - variant.val.http_response_trailer_section_size = option15; - break; - } - case 30: { - bindings_option_string_t option16; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option16.is_some = false; - break; - } - case 1: { - option16.is_some = true; - option16.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - bindings_option_u32_t option17; - switch ((int32_t) (*((uint8_t*) (ptr + 28)))) { - case 0: { - option17.is_some = false; - break; - } - case 1: { - option17.is_some = true; - option17.val = (uint32_t) (*((int32_t*) (ptr + 32))); - break; - } - } - variant.val.http_response_trailer_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option16, - option17, - }; - break; - } - case 31: { - bindings_option_string_t option18; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option18.is_some = false; - break; - } - case 1: { - option18.is_some = true; - option18.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - variant.val.http_response_transfer_coding = option18; - break; - } - case 32: { - bindings_option_string_t option19; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option19.is_some = false; - break; - } - case 1: { - option19.is_some = true; - option19.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - variant.val.http_response_content_coding = option19; - break; - } - case 33: { - break; - } - case 34: { - break; - } - case 35: { - break; - } - case 36: { - break; - } - case 37: { - break; - } - case 38: { - bindings_option_string_t option20; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option20.is_some = false; - break; - } - case 1: { - option20.is_some = true; - option20.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - variant.val.internal_error = option20; - break; - } - } - - option21.val = variant; - break; - } - } - *ret = option21.val; - return option21.is_some; -} - -wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t wasi_http_0_2_0_rc_2023_12_05_types_constructor_fields(void) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_constructor_fields(); - return (wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_static_fields_from_list(bindings_list_tuple2_field_key_field_value_t *entries, wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t *ret, wasi_http_0_2_0_rc_2023_12_05_types_header_error_t *err) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_static_fields_from_list((int32_t) (*entries).ptr, (int32_t) (*entries).len, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_result_own_fields_header_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - wasi_http_0_2_0_rc_2023_12_05_types_header_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - break; - } - case 2: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_method_fields_get(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self, wasi_http_0_2_0_rc_2023_12_05_types_field_key_t *name, bindings_list_field_value_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_get((self).__handle, (int32_t) (*name).ptr, (int32_t) (*name).len, ptr); - *ret = (bindings_list_field_value_t) { (wasi_http_0_2_0_rc_2023_12_05_types_field_value_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_fields_has(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self, wasi_http_0_2_0_rc_2023_12_05_types_field_key_t *name) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_has((self).__handle, (int32_t) (*name).ptr, (int32_t) (*name).len); - return ret; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_fields_set(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self, wasi_http_0_2_0_rc_2023_12_05_types_field_key_t *name, bindings_list_field_value_t *value, wasi_http_0_2_0_rc_2023_12_05_types_header_error_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_set((self).__handle, (int32_t) (*name).ptr, (int32_t) (*name).len, (int32_t) (*value).ptr, (int32_t) (*value).len, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_result_void_header_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_http_0_2_0_rc_2023_12_05_types_header_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 1))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - break; - } - case 2: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_fields_delete(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self, wasi_http_0_2_0_rc_2023_12_05_types_field_key_t *name, wasi_http_0_2_0_rc_2023_12_05_types_header_error_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_delete((self).__handle, (int32_t) (*name).ptr, (int32_t) (*name).len, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_result_void_header_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_http_0_2_0_rc_2023_12_05_types_header_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 1))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - break; - } - case 2: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_fields_append(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self, wasi_http_0_2_0_rc_2023_12_05_types_field_key_t *name, wasi_http_0_2_0_rc_2023_12_05_types_field_value_t *value, wasi_http_0_2_0_rc_2023_12_05_types_header_error_t *err) { - __attribute__((__aligned__(1))) - uint8_t ret_area[2]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_append((self).__handle, (int32_t) (*name).ptr, (int32_t) (*name).len, (int32_t) (*value).ptr, (int32_t) (*value).len, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_result_void_header_error_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_http_0_2_0_rc_2023_12_05_types_header_error_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 1))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - break; - } - case 2: { - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_method_fields_entries(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self, bindings_list_tuple2_field_key_field_value_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_entries((self).__handle, ptr); - *ret = (bindings_list_tuple2_field_key_field_value_t) { (bindings_tuple2_field_key_field_value_t*)(*((int32_t*) (ptr + 0))), (size_t)(*((int32_t*) (ptr + 4))) }; -} - -wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t wasi_http_0_2_0_rc_2023_12_05_types_method_fields_clone(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_fields_clone((self).__handle); - return (wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t) { ret }; -} - -void wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_method(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_method_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_method((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_method_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 0))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - break; - } - case 2: { - break; - } - case 3: { - break; - } - case 4: { - break; - } - case 5: { - break; - } - case 6: { - break; - } - case 7: { - break; - } - case 8: { - break; - } - case 9: { - variant.val.other = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - } - *ret = variant; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_path_with_query(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t self, bindings_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_path_with_query((self).__handle, ptr); - bindings_option_string_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_scheme(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_scheme_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_scheme((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_option_scheme_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - wasi_http_0_2_0_rc_2023_12_05_types_scheme_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - break; - } - case 2: { - variant.val.other = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 8))), (size_t)(*((int32_t*) (ptr + 12))) }; - break; - } - } - - option.val = variant; - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_authority(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t self, bindings_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_authority((self).__handle, ptr); - bindings_option_string_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_headers(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_headers((self).__handle); - return (wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_consume(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_consume((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_body_void_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - return 0; - } -} - -wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_request_t wasi_http_0_2_0_rc_2023_12_05_types_constructor_outgoing_request(wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t headers) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_constructor_outgoing_request((headers).__handle); - return (wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_request_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_body(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_body((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_body_void_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - return 0; - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_method(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_method_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_method((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_method_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 0))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - break; - } - case 2: { - break; - } - case 3: { - break; - } - case 4: { - break; - } - case 5: { - break; - } - case 6: { - break; - } - case 7: { - break; - } - case 8: { - break; - } - case 9: { - variant.val.other = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - } - *ret = variant; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_method(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_method_t *method) { - int32_t variant; - int32_t variant9; - int32_t variant10; - switch ((int32_t) (*method).tag) { - case 0: { - variant = 0; - variant9 = 0; - variant10 = 0; - break; - } - case 1: { - variant = 1; - variant9 = 0; - variant10 = 0; - break; - } - case 2: { - variant = 2; - variant9 = 0; - variant10 = 0; - break; - } - case 3: { - variant = 3; - variant9 = 0; - variant10 = 0; - break; - } - case 4: { - variant = 4; - variant9 = 0; - variant10 = 0; - break; - } - case 5: { - variant = 5; - variant9 = 0; - variant10 = 0; - break; - } - case 6: { - variant = 6; - variant9 = 0; - variant10 = 0; - break; - } - case 7: { - variant = 7; - variant9 = 0; - variant10 = 0; - break; - } - case 8: { - variant = 8; - variant9 = 0; - variant10 = 0; - break; - } - case 9: { - const bindings_string_t *payload8 = &(*method).val.other; - variant = 9; - variant9 = (int32_t) (*payload8).ptr; - variant10 = (int32_t) (*payload8).len; - break; - } - } - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_method((self).__handle, variant, variant9, variant10); - wasi_http_0_2_0_rc_2023_12_05_types_result_void_void_t result; - switch (ret) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - return 1; - } else { - return 0; - } -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_path_with_query(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, bindings_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_path_with_query((self).__handle, ptr); - bindings_option_string_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_path_with_query(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, bindings_string_t *maybe_path_with_query) { - bindings_option_string_t path_with_query; - path_with_query.is_some = maybe_path_with_query != NULL;if (maybe_path_with_query) { - path_with_query.val = *maybe_path_with_query; - } - int32_t option; - int32_t option1; - int32_t option2; - if ((path_with_query).is_some) { - const bindings_string_t *payload0 = &(path_with_query).val; - option = 1; - option1 = (int32_t) (*payload0).ptr; - option2 = (int32_t) (*payload0).len; - } else { - option = 0; - option1 = 0; - option2 = 0; - } - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_path_with_query((self).__handle, option, option1, option2); - wasi_http_0_2_0_rc_2023_12_05_types_result_void_void_t result; - switch (ret) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - return 1; - } else { - return 0; - } -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_scheme(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_scheme_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_scheme((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_option_scheme_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - wasi_http_0_2_0_rc_2023_12_05_types_scheme_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 4))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - break; - } - case 2: { - variant.val.other = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 8))), (size_t)(*((int32_t*) (ptr + 12))) }; - break; - } - } - - option.val = variant; - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_scheme(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_scheme_t *maybe_scheme) { - wasi_http_0_2_0_rc_2023_12_05_types_option_scheme_t scheme; - scheme.is_some = maybe_scheme != NULL;if (maybe_scheme) { - scheme.val = *maybe_scheme; - } - int32_t option; - int32_t option6; - int32_t option7; - int32_t option8; - if ((scheme).is_some) { - const wasi_http_0_2_0_rc_2023_12_05_types_scheme_t *payload0 = &(scheme).val; - int32_t variant; - int32_t variant4; - int32_t variant5; - switch ((int32_t) (*payload0).tag) { - case 0: { - variant = 0; - variant4 = 0; - variant5 = 0; - break; - } - case 1: { - variant = 1; - variant4 = 0; - variant5 = 0; - break; - } - case 2: { - const bindings_string_t *payload3 = &(*payload0).val.other; - variant = 2; - variant4 = (int32_t) (*payload3).ptr; - variant5 = (int32_t) (*payload3).len; - break; - } - } - option = 1; - option6 = variant; - option7 = variant4; - option8 = variant5; - } else { - option = 0; - option6 = 0; - option7 = 0; - option8 = 0; - } - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_scheme((self).__handle, option, option6, option7, option8); - wasi_http_0_2_0_rc_2023_12_05_types_result_void_void_t result; - switch (ret) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - return 1; - } else { - return 0; - } -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_authority(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, bindings_string_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[12]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_authority((self).__handle, ptr); - bindings_option_string_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 4))), (size_t)(*((int32_t*) (ptr + 8))) }; - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_authority(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, bindings_string_t *maybe_authority) { - bindings_option_string_t authority; - authority.is_some = maybe_authority != NULL;if (maybe_authority) { - authority.val = *maybe_authority; - } - int32_t option; - int32_t option1; - int32_t option2; - if ((authority).is_some) { - const bindings_string_t *payload0 = &(authority).val; - option = 1; - option1 = (int32_t) (*payload0).ptr; - option2 = (int32_t) (*payload0).len; - } else { - option = 0; - option1 = 0; - option2 = 0; - } - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_authority((self).__handle, option, option1, option2); - wasi_http_0_2_0_rc_2023_12_05_types_result_void_void_t result; - switch (ret) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - return 1; - } else { - return 0; - } -} - -wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_headers(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_headers((self).__handle); - return (wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t) { ret }; -} - -wasi_http_0_2_0_rc_2023_12_05_types_own_request_options_t wasi_http_0_2_0_rc_2023_12_05_types_constructor_request_options(void) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_constructor_request_options(); - return (wasi_http_0_2_0_rc_2023_12_05_types_own_request_options_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_connect_timeout(wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t self, wasi_http_0_2_0_rc_2023_12_05_types_duration_t *ret) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_connect_timeout((self).__handle, ptr); - bindings_option_duration_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_set_connect_timeout(wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t self, wasi_http_0_2_0_rc_2023_12_05_types_duration_t *maybe_duration) { - bindings_option_duration_t duration; - duration.is_some = maybe_duration != NULL;if (maybe_duration) { - duration.val = *maybe_duration; - } - int32_t option; - int64_t option1; - if ((duration).is_some) { - const wasi_http_0_2_0_rc_2023_12_05_types_duration_t *payload0 = &(duration).val; - option = 1; - option1 = (int64_t) (*payload0); - } else { - option = 0; - option1 = 0; - } - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_set_connect_timeout((self).__handle, option, option1); - wasi_http_0_2_0_rc_2023_12_05_types_result_void_void_t result; - switch (ret) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - return 1; - } else { - return 0; - } -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_first_byte_timeout(wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t self, wasi_http_0_2_0_rc_2023_12_05_types_duration_t *ret) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_first_byte_timeout((self).__handle, ptr); - bindings_option_duration_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_set_first_byte_timeout(wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t self, wasi_http_0_2_0_rc_2023_12_05_types_duration_t *maybe_duration) { - bindings_option_duration_t duration; - duration.is_some = maybe_duration != NULL;if (maybe_duration) { - duration.val = *maybe_duration; - } - int32_t option; - int64_t option1; - if ((duration).is_some) { - const wasi_http_0_2_0_rc_2023_12_05_types_duration_t *payload0 = &(duration).val; - option = 1; - option1 = (int64_t) (*payload0); - } else { - option = 0; - option1 = 0; - } - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_set_first_byte_timeout((self).__handle, option, option1); - wasi_http_0_2_0_rc_2023_12_05_types_result_void_void_t result; - switch (ret) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - return 1; - } else { - return 0; - } -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_between_bytes_timeout(wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t self, wasi_http_0_2_0_rc_2023_12_05_types_duration_t *ret) { - __attribute__((__aligned__(8))) - uint8_t ret_area[16]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_between_bytes_timeout((self).__handle, ptr); - bindings_option_duration_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (uint64_t) (*((int64_t*) (ptr + 8))); - break; - } - } - *ret = option.val; - return option.is_some; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_set_between_bytes_timeout(wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t self, wasi_http_0_2_0_rc_2023_12_05_types_duration_t *maybe_duration) { - bindings_option_duration_t duration; - duration.is_some = maybe_duration != NULL;if (maybe_duration) { - duration.val = *maybe_duration; - } - int32_t option; - int64_t option1; - if ((duration).is_some) { - const wasi_http_0_2_0_rc_2023_12_05_types_duration_t *payload0 = &(duration).val; - option = 1; - option1 = (int64_t) (*payload0); - } else { - option = 0; - option1 = 0; - } - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_set_between_bytes_timeout((self).__handle, option, option1); - wasi_http_0_2_0_rc_2023_12_05_types_result_void_void_t result; - switch (ret) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - return 1; - } else { - return 0; - } -} - -void wasi_http_0_2_0_rc_2023_12_05_types_static_response_outparam_set(wasi_http_0_2_0_rc_2023_12_05_types_own_response_outparam_t param, wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_response_error_code_t *response) { - int32_t result; - int32_t result146; - int32_t result147; - int64_t result148; - int32_t result149; - int32_t result150; - int32_t result151; - int32_t result152; - if ((*response).is_err) { - const wasi_http_0_2_0_rc_2023_12_05_types_error_code_t *payload0 = &(*response).val.err;int32_t variant; - int32_t variant140; - int64_t variant141; - int32_t variant142; - int32_t variant143; - int32_t variant144; - int32_t variant145; - switch ((int32_t) (*payload0).tag) { - case 0: { - variant = 0; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 1: { - const wasi_http_0_2_0_rc_2023_12_05_types_dns_error_payload_t *payload2 = &(*payload0).val.dns_error; - int32_t option; - int32_t option5; - int32_t option6; - if (((*payload2).rcode).is_some) { - const bindings_string_t *payload4 = &((*payload2).rcode).val; - option = 1; - option5 = (int32_t) (*payload4).ptr; - option6 = (int32_t) (*payload4).len; - } else { - option = 0; - option5 = 0; - option6 = 0; - } - int32_t option9; - int32_t option10; - if (((*payload2).info_code).is_some) { - const uint16_t *payload8 = &((*payload2).info_code).val; - option9 = 1; - option10 = (int32_t) (*payload8); - } else { - option9 = 0; - option10 = 0; - } - variant = 1; - variant140 = option; - variant141 = (int64_t) option5; - variant142 = option6; - variant143 = option9; - variant144 = option10; - variant145 = 0; - break; - } - case 2: { - variant = 2; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 3: { - variant = 3; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 4: { - variant = 4; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 5: { - variant = 5; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 6: { - variant = 6; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 7: { - variant = 7; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 8: { - variant = 8; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 9: { - variant = 9; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 10: { - variant = 10; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 11: { - variant = 11; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 12: { - variant = 12; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 13: { - variant = 13; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 14: { - const wasi_http_0_2_0_rc_2023_12_05_types_tls_alert_received_payload_t *payload23 = &(*payload0).val.tls_alert_received; - int32_t option26; - int32_t option27; - if (((*payload23).alert_id).is_some) { - const uint8_t *payload25 = &((*payload23).alert_id).val; - option26 = 1; - option27 = (int32_t) (*payload25); - } else { - option26 = 0; - option27 = 0; - } - int32_t option30; - int32_t option31; - int32_t option32; - if (((*payload23).alert_message).is_some) { - const bindings_string_t *payload29 = &((*payload23).alert_message).val; - option30 = 1; - option31 = (int32_t) (*payload29).ptr; - option32 = (int32_t) (*payload29).len; - } else { - option30 = 0; - option31 = 0; - option32 = 0; - } - variant = 14; - variant140 = option26; - variant141 = (int64_t) option27; - variant142 = option30; - variant143 = option31; - variant144 = option32; - variant145 = 0; - break; - } - case 15: { - variant = 15; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 16: { - variant = 16; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 17: { - const bindings_option_u64_t *payload35 = &(*payload0).val.http_request_body_size; - int32_t option38; - int64_t option39; - if ((*payload35).is_some) { - const uint64_t *payload37 = &(*payload35).val; - option38 = 1; - option39 = (int64_t) (*payload37); - } else { - option38 = 0; - option39 = 0; - } - variant = 17; - variant140 = option38; - variant141 = option39; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 18: { - variant = 18; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 19: { - variant = 19; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 20: { - variant = 20; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 21: { - const bindings_option_u32_t *payload43 = &(*payload0).val.http_request_header_section_size; - int32_t option46; - int32_t option47; - if ((*payload43).is_some) { - const uint32_t *payload45 = &(*payload43).val; - option46 = 1; - option47 = (int32_t) (*payload45); - } else { - option46 = 0; - option47 = 0; - } - variant = 21; - variant140 = option46; - variant141 = (int64_t) option47; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 22: { - const wasi_http_0_2_0_rc_2023_12_05_types_option_field_size_payload_t *payload48 = &(*payload0).val.http_request_header_size; - int32_t option60; - int32_t option61; - int32_t option62; - int32_t option63; - int32_t option64; - int32_t option65; - if ((*payload48).is_some) { - const wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t *payload50 = &(*payload48).val; - int32_t option53; - int32_t option54; - int32_t option55; - if (((*payload50).field_name).is_some) { - const bindings_string_t *payload52 = &((*payload50).field_name).val; - option53 = 1; - option54 = (int32_t) (*payload52).ptr; - option55 = (int32_t) (*payload52).len; - } else { - option53 = 0; - option54 = 0; - option55 = 0; - } - int32_t option58; - int32_t option59; - if (((*payload50).field_size).is_some) { - const uint32_t *payload57 = &((*payload50).field_size).val; - option58 = 1; - option59 = (int32_t) (*payload57); - } else { - option58 = 0; - option59 = 0; - } - option60 = 1; - option61 = option53; - option62 = option54; - option63 = option55; - option64 = option58; - option65 = option59; - } else { - option60 = 0; - option61 = 0; - option62 = 0; - option63 = 0; - option64 = 0; - option65 = 0; - } - variant = 22; - variant140 = option60; - variant141 = (int64_t) option61; - variant142 = option62; - variant143 = option63; - variant144 = option64; - variant145 = option65; - break; - } - case 23: { - const bindings_option_u32_t *payload66 = &(*payload0).val.http_request_trailer_section_size; - int32_t option69; - int32_t option70; - if ((*payload66).is_some) { - const uint32_t *payload68 = &(*payload66).val; - option69 = 1; - option70 = (int32_t) (*payload68); - } else { - option69 = 0; - option70 = 0; - } - variant = 23; - variant140 = option69; - variant141 = (int64_t) option70; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 24: { - const wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t *payload71 = &(*payload0).val.http_request_trailer_size; - int32_t option74; - int32_t option75; - int32_t option76; - if (((*payload71).field_name).is_some) { - const bindings_string_t *payload73 = &((*payload71).field_name).val; - option74 = 1; - option75 = (int32_t) (*payload73).ptr; - option76 = (int32_t) (*payload73).len; - } else { - option74 = 0; - option75 = 0; - option76 = 0; - } - int32_t option79; - int32_t option80; - if (((*payload71).field_size).is_some) { - const uint32_t *payload78 = &((*payload71).field_size).val; - option79 = 1; - option80 = (int32_t) (*payload78); - } else { - option79 = 0; - option80 = 0; - } - variant = 24; - variant140 = option74; - variant141 = (int64_t) option75; - variant142 = option76; - variant143 = option79; - variant144 = option80; - variant145 = 0; - break; - } - case 25: { - variant = 25; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 26: { - const bindings_option_u32_t *payload82 = &(*payload0).val.http_response_header_section_size; - int32_t option85; - int32_t option86; - if ((*payload82).is_some) { - const uint32_t *payload84 = &(*payload82).val; - option85 = 1; - option86 = (int32_t) (*payload84); - } else { - option85 = 0; - option86 = 0; - } - variant = 26; - variant140 = option85; - variant141 = (int64_t) option86; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 27: { - const wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t *payload87 = &(*payload0).val.http_response_header_size; - int32_t option90; - int32_t option91; - int32_t option92; - if (((*payload87).field_name).is_some) { - const bindings_string_t *payload89 = &((*payload87).field_name).val; - option90 = 1; - option91 = (int32_t) (*payload89).ptr; - option92 = (int32_t) (*payload89).len; - } else { - option90 = 0; - option91 = 0; - option92 = 0; - } - int32_t option95; - int32_t option96; - if (((*payload87).field_size).is_some) { - const uint32_t *payload94 = &((*payload87).field_size).val; - option95 = 1; - option96 = (int32_t) (*payload94); - } else { - option95 = 0; - option96 = 0; - } - variant = 27; - variant140 = option90; - variant141 = (int64_t) option91; - variant142 = option92; - variant143 = option95; - variant144 = option96; - variant145 = 0; - break; - } - case 28: { - const bindings_option_u64_t *payload97 = &(*payload0).val.http_response_body_size; - int32_t option100; - int64_t option101; - if ((*payload97).is_some) { - const uint64_t *payload99 = &(*payload97).val; - option100 = 1; - option101 = (int64_t) (*payload99); - } else { - option100 = 0; - option101 = 0; - } - variant = 28; - variant140 = option100; - variant141 = option101; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 29: { - const bindings_option_u32_t *payload102 = &(*payload0).val.http_response_trailer_section_size; - int32_t option105; - int32_t option106; - if ((*payload102).is_some) { - const uint32_t *payload104 = &(*payload102).val; - option105 = 1; - option106 = (int32_t) (*payload104); - } else { - option105 = 0; - option106 = 0; - } - variant = 29; - variant140 = option105; - variant141 = (int64_t) option106; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 30: { - const wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t *payload107 = &(*payload0).val.http_response_trailer_size; - int32_t option110; - int32_t option111; - int32_t option112; - if (((*payload107).field_name).is_some) { - const bindings_string_t *payload109 = &((*payload107).field_name).val; - option110 = 1; - option111 = (int32_t) (*payload109).ptr; - option112 = (int32_t) (*payload109).len; - } else { - option110 = 0; - option111 = 0; - option112 = 0; - } - int32_t option115; - int32_t option116; - if (((*payload107).field_size).is_some) { - const uint32_t *payload114 = &((*payload107).field_size).val; - option115 = 1; - option116 = (int32_t) (*payload114); - } else { - option115 = 0; - option116 = 0; - } - variant = 30; - variant140 = option110; - variant141 = (int64_t) option111; - variant142 = option112; - variant143 = option115; - variant144 = option116; - variant145 = 0; - break; - } - case 31: { - const bindings_option_string_t *payload117 = &(*payload0).val.http_response_transfer_coding; - int32_t option120; - int32_t option121; - int32_t option122; - if ((*payload117).is_some) { - const bindings_string_t *payload119 = &(*payload117).val; - option120 = 1; - option121 = (int32_t) (*payload119).ptr; - option122 = (int32_t) (*payload119).len; - } else { - option120 = 0; - option121 = 0; - option122 = 0; - } - variant = 31; - variant140 = option120; - variant141 = (int64_t) option121; - variant142 = option122; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 32: { - const bindings_option_string_t *payload123 = &(*payload0).val.http_response_content_coding; - int32_t option126; - int32_t option127; - int32_t option128; - if ((*payload123).is_some) { - const bindings_string_t *payload125 = &(*payload123).val; - option126 = 1; - option127 = (int32_t) (*payload125).ptr; - option128 = (int32_t) (*payload125).len; - } else { - option126 = 0; - option127 = 0; - option128 = 0; - } - variant = 32; - variant140 = option126; - variant141 = (int64_t) option127; - variant142 = option128; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 33: { - variant = 33; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 34: { - variant = 34; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 35: { - variant = 35; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 36: { - variant = 36; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 37: { - variant = 37; - variant140 = 0; - variant141 = 0; - variant142 = 0; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - case 38: { - const bindings_option_string_t *payload134 = &(*payload0).val.internal_error; - int32_t option137; - int32_t option138; - int32_t option139; - if ((*payload134).is_some) { - const bindings_string_t *payload136 = &(*payload134).val; - option137 = 1; - option138 = (int32_t) (*payload136).ptr; - option139 = (int32_t) (*payload136).len; - } else { - option137 = 0; - option138 = 0; - option139 = 0; - } - variant = 38; - variant140 = option137; - variant141 = (int64_t) option138; - variant142 = option139; - variant143 = 0; - variant144 = 0; - variant145 = 0; - break; - } - } - result = 1; - result146 = variant; - result147 = variant140; - result148 = variant141; - result149 = variant142; - result150 = variant143; - result151 = variant144; - result152 = variant145; - } else { - const wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_response_t *payload = &(*response).val.ok;result = 0; - result146 = (*payload).__handle; - result147 = 0; - result148 = 0; - result149 = 0; - result150 = 0; - result151 = 0; - result152 = 0; - } - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_static_response_outparam_set((param).__handle, result, result146, result147, result148, result149, result150, result151, result152); -} - -wasi_http_0_2_0_rc_2023_12_05_types_status_code_t wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_status(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_status((self).__handle); - return (uint16_t) (ret); -} - -wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_headers(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_headers((self).__handle); - return (wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_consume(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response_t self, wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_consume((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_body_void_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - return 0; - } -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_body_stream(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_body_t self, wasi_http_0_2_0_rc_2023_12_05_types_own_input_stream_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_body_stream((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_result_own_input_stream_void_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_12_05_types_own_input_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - return 0; - } -} - -wasi_http_0_2_0_rc_2023_12_05_types_own_future_trailers_t wasi_http_0_2_0_rc_2023_12_05_types_static_incoming_body_finish(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t this_) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_static_incoming_body_finish((this_).__handle); - return (wasi_http_0_2_0_rc_2023_12_05_types_own_future_trailers_t) { ret }; -} - -wasi_http_0_2_0_rc_2023_12_05_types_own_pollable_t wasi_http_0_2_0_rc_2023_12_05_types_method_future_trailers_subscribe(wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_trailers_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_future_trailers_subscribe((self).__handle); - return (wasi_http_0_2_0_rc_2023_12_05_types_own_pollable_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_future_trailers_get(wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_trailers_t self, wasi_http_0_2_0_rc_2023_12_05_types_result_result_option_own_trailers_error_code_void_t *ret) { - __attribute__((__aligned__(8))) - uint8_t ret_area[56]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_future_trailers_get((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_option_result_result_option_own_trailers_error_code_void_t option23; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option23.is_some = false; - break; - } - case 1: { - option23.is_some = true; - wasi_http_0_2_0_rc_2023_12_05_types_result_result_option_own_trailers_error_code_void_t result22; - switch ((int32_t) (*((uint8_t*) (ptr + 8)))) { - case 0: { - result22.is_err = false; - wasi_http_0_2_0_rc_2023_12_05_types_result_option_own_trailers_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - result.is_err = false; - wasi_http_0_2_0_rc_2023_12_05_types_option_own_trailers_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 24)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (wasi_http_0_2_0_rc_2023_12_05_types_own_trailers_t) { *((int32_t*) (ptr + 28)) }; - break; - } - } - - result.val.ok = option; - break; - } - case 1: { - result.is_err = true; - wasi_http_0_2_0_rc_2023_12_05_types_error_code_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 24))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - bindings_option_string_t option0; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option0.is_some = false; - break; - } - case 1: { - option0.is_some = true; - option0.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - bindings_option_u16_t option1; - switch ((int32_t) (*((uint8_t*) (ptr + 44)))) { - case 0: { - option1.is_some = false; - break; - } - case 1: { - option1.is_some = true; - option1.val = (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 46)))); - break; - } - } - variant.val.dns_error = (wasi_http_0_2_0_rc_2023_12_05_types_dns_error_payload_t) { - option0, - option1, - }; - break; - } - case 2: { - break; - } - case 3: { - break; - } - case 4: { - break; - } - case 5: { - break; - } - case 6: { - break; - } - case 7: { - break; - } - case 8: { - break; - } - case 9: { - break; - } - case 10: { - break; - } - case 11: { - break; - } - case 12: { - break; - } - case 13: { - break; - } - case 14: { - bindings_option_u8_t option2; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option2.is_some = false; - break; - } - case 1: { - option2.is_some = true; - option2.val = (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 33)))); - break; - } - } - bindings_option_string_t option3; - switch ((int32_t) (*((uint8_t*) (ptr + 36)))) { - case 0: { - option3.is_some = false; - break; - } - case 1: { - option3.is_some = true; - option3.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 40))), (size_t)(*((int32_t*) (ptr + 44))) }; - break; - } - } - variant.val.tls_alert_received = (wasi_http_0_2_0_rc_2023_12_05_types_tls_alert_received_payload_t) { - option2, - option3, - }; - break; - } - case 15: { - break; - } - case 16: { - break; - } - case 17: { - bindings_option_u64_t option4; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option4.is_some = false; - break; - } - case 1: { - option4.is_some = true; - option4.val = (uint64_t) (*((int64_t*) (ptr + 40))); - break; - } - } - variant.val.http_request_body_size = option4; - break; - } - case 18: { - break; - } - case 19: { - break; - } - case 20: { - break; - } - case 21: { - bindings_option_u32_t option5; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option5.is_some = false; - break; - } - case 1: { - option5.is_some = true; - option5.val = (uint32_t) (*((int32_t*) (ptr + 36))); - break; - } - } - variant.val.http_request_header_section_size = option5; - break; - } - case 22: { - wasi_http_0_2_0_rc_2023_12_05_types_option_field_size_payload_t option8; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option8.is_some = false; - break; - } - case 1: { - option8.is_some = true; - bindings_option_string_t option6; - switch ((int32_t) (*((uint8_t*) (ptr + 36)))) { - case 0: { - option6.is_some = false; - break; - } - case 1: { - option6.is_some = true; - option6.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 40))), (size_t)(*((int32_t*) (ptr + 44))) }; - break; - } - } - bindings_option_u32_t option7; - switch ((int32_t) (*((uint8_t*) (ptr + 48)))) { - case 0: { - option7.is_some = false; - break; - } - case 1: { - option7.is_some = true; - option7.val = (uint32_t) (*((int32_t*) (ptr + 52))); - break; - } - } - - option8.val = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option6, - option7, - }; - break; - } - } - variant.val.http_request_header_size = option8; - break; - } - case 23: { - bindings_option_u32_t option9; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option9.is_some = false; - break; - } - case 1: { - option9.is_some = true; - option9.val = (uint32_t) (*((int32_t*) (ptr + 36))); - break; - } - } - variant.val.http_request_trailer_section_size = option9; - break; - } - case 24: { - bindings_option_string_t option10; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option10.is_some = false; - break; - } - case 1: { - option10.is_some = true; - option10.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - bindings_option_u32_t option11; - switch ((int32_t) (*((uint8_t*) (ptr + 44)))) { - case 0: { - option11.is_some = false; - break; - } - case 1: { - option11.is_some = true; - option11.val = (uint32_t) (*((int32_t*) (ptr + 48))); - break; - } - } - variant.val.http_request_trailer_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option10, - option11, - }; - break; - } - case 25: { - break; - } - case 26: { - bindings_option_u32_t option12; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option12.is_some = false; - break; - } - case 1: { - option12.is_some = true; - option12.val = (uint32_t) (*((int32_t*) (ptr + 36))); - break; - } - } - variant.val.http_response_header_section_size = option12; - break; - } - case 27: { - bindings_option_string_t option13; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option13.is_some = false; - break; - } - case 1: { - option13.is_some = true; - option13.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - bindings_option_u32_t option14; - switch ((int32_t) (*((uint8_t*) (ptr + 44)))) { - case 0: { - option14.is_some = false; - break; - } - case 1: { - option14.is_some = true; - option14.val = (uint32_t) (*((int32_t*) (ptr + 48))); - break; - } - } - variant.val.http_response_header_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option13, - option14, - }; - break; - } - case 28: { - bindings_option_u64_t option15; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option15.is_some = false; - break; - } - case 1: { - option15.is_some = true; - option15.val = (uint64_t) (*((int64_t*) (ptr + 40))); - break; - } - } - variant.val.http_response_body_size = option15; - break; - } - case 29: { - bindings_option_u32_t option16; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option16.is_some = false; - break; - } - case 1: { - option16.is_some = true; - option16.val = (uint32_t) (*((int32_t*) (ptr + 36))); - break; - } - } - variant.val.http_response_trailer_section_size = option16; - break; - } - case 30: { - bindings_option_string_t option17; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option17.is_some = false; - break; - } - case 1: { - option17.is_some = true; - option17.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - bindings_option_u32_t option18; - switch ((int32_t) (*((uint8_t*) (ptr + 44)))) { - case 0: { - option18.is_some = false; - break; - } - case 1: { - option18.is_some = true; - option18.val = (uint32_t) (*((int32_t*) (ptr + 48))); - break; - } - } - variant.val.http_response_trailer_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option17, - option18, - }; - break; - } - case 31: { - bindings_option_string_t option19; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option19.is_some = false; - break; - } - case 1: { - option19.is_some = true; - option19.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - variant.val.http_response_transfer_coding = option19; - break; - } - case 32: { - bindings_option_string_t option20; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option20.is_some = false; - break; - } - case 1: { - option20.is_some = true; - option20.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - variant.val.http_response_content_coding = option20; - break; - } - case 33: { - break; - } - case 34: { - break; - } - case 35: { - break; - } - case 36: { - break; - } - case 37: { - break; - } - case 38: { - bindings_option_string_t option21; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option21.is_some = false; - break; - } - case 1: { - option21.is_some = true; - option21.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - variant.val.internal_error = option21; - break; - } - } - - result.val.err = variant; - break; - } - } - - result22.val.ok = result; - break; - } - case 1: { - result22.is_err = true; - break; - } - } - - option23.val = result22; - break; - } - } - *ret = option23.val; - return option23.is_some; -} - -wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_response_t wasi_http_0_2_0_rc_2023_12_05_types_constructor_outgoing_response(wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t headers) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_constructor_outgoing_response((headers).__handle); - return (wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_response_t) { ret }; -} - -wasi_http_0_2_0_rc_2023_12_05_types_status_code_t wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_status_code(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_status_code((self).__handle); - return (uint16_t) (ret); -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_set_status_code(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response_t self, wasi_http_0_2_0_rc_2023_12_05_types_status_code_t status_code) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_set_status_code((self).__handle, (int32_t) (status_code)); - wasi_http_0_2_0_rc_2023_12_05_types_result_void_void_t result; - switch (ret) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - return 1; - } else { - return 0; - } -} - -wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_headers(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_headers((self).__handle); - return (wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_body(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response_t self, wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_body((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_body_void_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - return 0; - } -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_body_write(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_body_t self, wasi_http_0_2_0_rc_2023_12_05_types_own_output_stream_t *ret) { - __attribute__((__aligned__(4))) - uint8_t ret_area[8]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_body_write((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_result_own_output_stream_void_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_12_05_types_own_output_stream_t) { *((int32_t*) (ptr + 4)) }; - break; - } - case 1: { - result.is_err = true; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - return 0; - } -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_static_outgoing_body_finish(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t this_, wasi_http_0_2_0_rc_2023_12_05_types_own_trailers_t *maybe_trailers, wasi_http_0_2_0_rc_2023_12_05_types_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[40]; - wasi_http_0_2_0_rc_2023_12_05_types_option_own_trailers_t trailers; - trailers.is_some = maybe_trailers != NULL;if (maybe_trailers) { - trailers.val = *maybe_trailers; - } - int32_t option; - int32_t option1; - if ((trailers).is_some) { - const wasi_http_0_2_0_rc_2023_12_05_types_own_trailers_t *payload0 = &(trailers).val; - option = 1; - option1 = (*payload0).__handle; - } else { - option = 0; - option1 = 0; - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_static_outgoing_body_finish((this_).__handle, option, option1, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_result_void_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - break; - } - case 1: { - result.is_err = true; - wasi_http_0_2_0_rc_2023_12_05_types_error_code_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - bindings_option_string_t option2; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option2.is_some = false; - break; - } - case 1: { - option2.is_some = true; - option2.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - bindings_option_u16_t option3; - switch ((int32_t) (*((uint8_t*) (ptr + 28)))) { - case 0: { - option3.is_some = false; - break; - } - case 1: { - option3.is_some = true; - option3.val = (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 30)))); - break; - } - } - variant.val.dns_error = (wasi_http_0_2_0_rc_2023_12_05_types_dns_error_payload_t) { - option2, - option3, - }; - break; - } - case 2: { - break; - } - case 3: { - break; - } - case 4: { - break; - } - case 5: { - break; - } - case 6: { - break; - } - case 7: { - break; - } - case 8: { - break; - } - case 9: { - break; - } - case 10: { - break; - } - case 11: { - break; - } - case 12: { - break; - } - case 13: { - break; - } - case 14: { - bindings_option_u8_t option4; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option4.is_some = false; - break; - } - case 1: { - option4.is_some = true; - option4.val = (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 17)))); - break; - } - } - bindings_option_string_t option5; - switch ((int32_t) (*((uint8_t*) (ptr + 20)))) { - case 0: { - option5.is_some = false; - break; - } - case 1: { - option5.is_some = true; - option5.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 24))), (size_t)(*((int32_t*) (ptr + 28))) }; - break; - } - } - variant.val.tls_alert_received = (wasi_http_0_2_0_rc_2023_12_05_types_tls_alert_received_payload_t) { - option4, - option5, - }; - break; - } - case 15: { - break; - } - case 16: { - break; - } - case 17: { - bindings_option_u64_t option6; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option6.is_some = false; - break; - } - case 1: { - option6.is_some = true; - option6.val = (uint64_t) (*((int64_t*) (ptr + 24))); - break; - } - } - variant.val.http_request_body_size = option6; - break; - } - case 18: { - break; - } - case 19: { - break; - } - case 20: { - break; - } - case 21: { - bindings_option_u32_t option7; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option7.is_some = false; - break; - } - case 1: { - option7.is_some = true; - option7.val = (uint32_t) (*((int32_t*) (ptr + 20))); - break; - } - } - variant.val.http_request_header_section_size = option7; - break; - } - case 22: { - wasi_http_0_2_0_rc_2023_12_05_types_option_field_size_payload_t option10; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option10.is_some = false; - break; - } - case 1: { - option10.is_some = true; - bindings_option_string_t option8; - switch ((int32_t) (*((uint8_t*) (ptr + 20)))) { - case 0: { - option8.is_some = false; - break; - } - case 1: { - option8.is_some = true; - option8.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 24))), (size_t)(*((int32_t*) (ptr + 28))) }; - break; - } - } - bindings_option_u32_t option9; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option9.is_some = false; - break; - } - case 1: { - option9.is_some = true; - option9.val = (uint32_t) (*((int32_t*) (ptr + 36))); - break; - } - } - - option10.val = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option8, - option9, - }; - break; - } - } - variant.val.http_request_header_size = option10; - break; - } - case 23: { - bindings_option_u32_t option11; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option11.is_some = false; - break; - } - case 1: { - option11.is_some = true; - option11.val = (uint32_t) (*((int32_t*) (ptr + 20))); - break; - } - } - variant.val.http_request_trailer_section_size = option11; - break; - } - case 24: { - bindings_option_string_t option12; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option12.is_some = false; - break; - } - case 1: { - option12.is_some = true; - option12.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - bindings_option_u32_t option13; - switch ((int32_t) (*((uint8_t*) (ptr + 28)))) { - case 0: { - option13.is_some = false; - break; - } - case 1: { - option13.is_some = true; - option13.val = (uint32_t) (*((int32_t*) (ptr + 32))); - break; - } - } - variant.val.http_request_trailer_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option12, - option13, - }; - break; - } - case 25: { - break; - } - case 26: { - bindings_option_u32_t option14; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option14.is_some = false; - break; - } - case 1: { - option14.is_some = true; - option14.val = (uint32_t) (*((int32_t*) (ptr + 20))); - break; - } - } - variant.val.http_response_header_section_size = option14; - break; - } - case 27: { - bindings_option_string_t option15; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option15.is_some = false; - break; - } - case 1: { - option15.is_some = true; - option15.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - bindings_option_u32_t option16; - switch ((int32_t) (*((uint8_t*) (ptr + 28)))) { - case 0: { - option16.is_some = false; - break; - } - case 1: { - option16.is_some = true; - option16.val = (uint32_t) (*((int32_t*) (ptr + 32))); - break; - } - } - variant.val.http_response_header_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option15, - option16, - }; - break; - } - case 28: { - bindings_option_u64_t option17; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option17.is_some = false; - break; - } - case 1: { - option17.is_some = true; - option17.val = (uint64_t) (*((int64_t*) (ptr + 24))); - break; - } - } - variant.val.http_response_body_size = option17; - break; - } - case 29: { - bindings_option_u32_t option18; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option18.is_some = false; - break; - } - case 1: { - option18.is_some = true; - option18.val = (uint32_t) (*((int32_t*) (ptr + 20))); - break; - } - } - variant.val.http_response_trailer_section_size = option18; - break; - } - case 30: { - bindings_option_string_t option19; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option19.is_some = false; - break; - } - case 1: { - option19.is_some = true; - option19.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - bindings_option_u32_t option20; - switch ((int32_t) (*((uint8_t*) (ptr + 28)))) { - case 0: { - option20.is_some = false; - break; - } - case 1: { - option20.is_some = true; - option20.val = (uint32_t) (*((int32_t*) (ptr + 32))); - break; - } - } - variant.val.http_response_trailer_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option19, - option20, - }; - break; - } - case 31: { - bindings_option_string_t option21; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option21.is_some = false; - break; - } - case 1: { - option21.is_some = true; - option21.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - variant.val.http_response_transfer_coding = option21; - break; - } - case 32: { - bindings_option_string_t option22; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option22.is_some = false; - break; - } - case 1: { - option22.is_some = true; - option22.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - variant.val.http_response_content_coding = option22; - break; - } - case 33: { - break; - } - case 34: { - break; - } - case 35: { - break; - } - case 36: { - break; - } - case 37: { - break; - } - case 38: { - bindings_option_string_t option23; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option23.is_some = false; - break; - } - case 1: { - option23.is_some = true; - option23.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - variant.val.internal_error = option23; - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -wasi_http_0_2_0_rc_2023_12_05_types_own_pollable_t wasi_http_0_2_0_rc_2023_12_05_types_method_future_incoming_response_subscribe(wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response_t self) { - int32_t ret = __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_future_incoming_response_subscribe((self).__handle); - return (wasi_http_0_2_0_rc_2023_12_05_types_own_pollable_t) { ret }; -} - -bool wasi_http_0_2_0_rc_2023_12_05_types_method_future_incoming_response_get(wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response_t self, wasi_http_0_2_0_rc_2023_12_05_types_result_result_own_incoming_response_error_code_void_t *ret) { - __attribute__((__aligned__(8))) - uint8_t ret_area[56]; - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_types_method_future_incoming_response_get((self).__handle, ptr); - wasi_http_0_2_0_rc_2023_12_05_types_option_result_result_own_incoming_response_error_code_void_t option22; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - option22.is_some = false; - break; - } - case 1: { - option22.is_some = true; - wasi_http_0_2_0_rc_2023_12_05_types_result_result_own_incoming_response_error_code_void_t result21; - switch ((int32_t) (*((uint8_t*) (ptr + 8)))) { - case 0: { - result21.is_err = false; - wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_response_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_response_t) { *((int32_t*) (ptr + 24)) }; - break; - } - case 1: { - result.is_err = true; - wasi_http_0_2_0_rc_2023_12_05_types_error_code_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 24))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - bindings_option_string_t option; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option.is_some = false; - break; - } - case 1: { - option.is_some = true; - option.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - bindings_option_u16_t option0; - switch ((int32_t) (*((uint8_t*) (ptr + 44)))) { - case 0: { - option0.is_some = false; - break; - } - case 1: { - option0.is_some = true; - option0.val = (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 46)))); - break; - } - } - variant.val.dns_error = (wasi_http_0_2_0_rc_2023_12_05_types_dns_error_payload_t) { - option, - option0, - }; - break; - } - case 2: { - break; - } - case 3: { - break; - } - case 4: { - break; - } - case 5: { - break; - } - case 6: { - break; - } - case 7: { - break; - } - case 8: { - break; - } - case 9: { - break; - } - case 10: { - break; - } - case 11: { - break; - } - case 12: { - break; - } - case 13: { - break; - } - case 14: { - bindings_option_u8_t option1; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option1.is_some = false; - break; - } - case 1: { - option1.is_some = true; - option1.val = (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 33)))); - break; - } - } - bindings_option_string_t option2; - switch ((int32_t) (*((uint8_t*) (ptr + 36)))) { - case 0: { - option2.is_some = false; - break; - } - case 1: { - option2.is_some = true; - option2.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 40))), (size_t)(*((int32_t*) (ptr + 44))) }; - break; - } - } - variant.val.tls_alert_received = (wasi_http_0_2_0_rc_2023_12_05_types_tls_alert_received_payload_t) { - option1, - option2, - }; - break; - } - case 15: { - break; - } - case 16: { - break; - } - case 17: { - bindings_option_u64_t option3; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option3.is_some = false; - break; - } - case 1: { - option3.is_some = true; - option3.val = (uint64_t) (*((int64_t*) (ptr + 40))); - break; - } - } - variant.val.http_request_body_size = option3; - break; - } - case 18: { - break; - } - case 19: { - break; - } - case 20: { - break; - } - case 21: { - bindings_option_u32_t option4; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option4.is_some = false; - break; - } - case 1: { - option4.is_some = true; - option4.val = (uint32_t) (*((int32_t*) (ptr + 36))); - break; - } - } - variant.val.http_request_header_section_size = option4; - break; - } - case 22: { - wasi_http_0_2_0_rc_2023_12_05_types_option_field_size_payload_t option7; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option7.is_some = false; - break; - } - case 1: { - option7.is_some = true; - bindings_option_string_t option5; - switch ((int32_t) (*((uint8_t*) (ptr + 36)))) { - case 0: { - option5.is_some = false; - break; - } - case 1: { - option5.is_some = true; - option5.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 40))), (size_t)(*((int32_t*) (ptr + 44))) }; - break; - } - } - bindings_option_u32_t option6; - switch ((int32_t) (*((uint8_t*) (ptr + 48)))) { - case 0: { - option6.is_some = false; - break; - } - case 1: { - option6.is_some = true; - option6.val = (uint32_t) (*((int32_t*) (ptr + 52))); - break; - } - } - - option7.val = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option5, - option6, - }; - break; - } - } - variant.val.http_request_header_size = option7; - break; - } - case 23: { - bindings_option_u32_t option8; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option8.is_some = false; - break; - } - case 1: { - option8.is_some = true; - option8.val = (uint32_t) (*((int32_t*) (ptr + 36))); - break; - } - } - variant.val.http_request_trailer_section_size = option8; - break; - } - case 24: { - bindings_option_string_t option9; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option9.is_some = false; - break; - } - case 1: { - option9.is_some = true; - option9.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - bindings_option_u32_t option10; - switch ((int32_t) (*((uint8_t*) (ptr + 44)))) { - case 0: { - option10.is_some = false; - break; - } - case 1: { - option10.is_some = true; - option10.val = (uint32_t) (*((int32_t*) (ptr + 48))); - break; - } - } - variant.val.http_request_trailer_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option9, - option10, - }; - break; - } - case 25: { - break; - } - case 26: { - bindings_option_u32_t option11; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option11.is_some = false; - break; - } - case 1: { - option11.is_some = true; - option11.val = (uint32_t) (*((int32_t*) (ptr + 36))); - break; - } - } - variant.val.http_response_header_section_size = option11; - break; - } - case 27: { - bindings_option_string_t option12; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option12.is_some = false; - break; - } - case 1: { - option12.is_some = true; - option12.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - bindings_option_u32_t option13; - switch ((int32_t) (*((uint8_t*) (ptr + 44)))) { - case 0: { - option13.is_some = false; - break; - } - case 1: { - option13.is_some = true; - option13.val = (uint32_t) (*((int32_t*) (ptr + 48))); - break; - } - } - variant.val.http_response_header_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option12, - option13, - }; - break; - } - case 28: { - bindings_option_u64_t option14; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option14.is_some = false; - break; - } - case 1: { - option14.is_some = true; - option14.val = (uint64_t) (*((int64_t*) (ptr + 40))); - break; - } - } - variant.val.http_response_body_size = option14; - break; - } - case 29: { - bindings_option_u32_t option15; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option15.is_some = false; - break; - } - case 1: { - option15.is_some = true; - option15.val = (uint32_t) (*((int32_t*) (ptr + 36))); - break; - } - } - variant.val.http_response_trailer_section_size = option15; - break; - } - case 30: { - bindings_option_string_t option16; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option16.is_some = false; - break; - } - case 1: { - option16.is_some = true; - option16.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - bindings_option_u32_t option17; - switch ((int32_t) (*((uint8_t*) (ptr + 44)))) { - case 0: { - option17.is_some = false; - break; - } - case 1: { - option17.is_some = true; - option17.val = (uint32_t) (*((int32_t*) (ptr + 48))); - break; - } - } - variant.val.http_response_trailer_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option16, - option17, - }; - break; - } - case 31: { - bindings_option_string_t option18; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option18.is_some = false; - break; - } - case 1: { - option18.is_some = true; - option18.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - variant.val.http_response_transfer_coding = option18; - break; - } - case 32: { - bindings_option_string_t option19; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option19.is_some = false; - break; - } - case 1: { - option19.is_some = true; - option19.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - variant.val.http_response_content_coding = option19; - break; - } - case 33: { - break; - } - case 34: { - break; - } - case 35: { - break; - } - case 36: { - break; - } - case 37: { - break; - } - case 38: { - bindings_option_string_t option20; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option20.is_some = false; - break; - } - case 1: { - option20.is_some = true; - option20.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 36))), (size_t)(*((int32_t*) (ptr + 40))) }; - break; - } - } - variant.val.internal_error = option20; - break; - } - } - - result.val.err = variant; - break; - } - } - - result21.val.ok = result; - break; - } - case 1: { - result21.is_err = true; - break; - } - } - - option22.val = result21; - break; - } - } - *ret = option22.val; - return option22.is_some; -} - -bool wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_handle(wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_own_outgoing_request_t request, wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_own_request_options_t *maybe_options, wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_own_future_incoming_response_t *ret, wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_error_code_t *err) { - __attribute__((__aligned__(8))) - uint8_t ret_area[40]; - wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_option_own_request_options_t options; - options.is_some = maybe_options != NULL;if (maybe_options) { - options.val = *maybe_options; - } - int32_t option; - int32_t option1; - if ((options).is_some) { - const wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_own_request_options_t *payload0 = &(options).val; - option = 1; - option1 = (*payload0).__handle; - } else { - option = 0; - option1 = 0; - } - int32_t ptr = (int32_t) &ret_area; - __wasm_import_wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_handle((request).__handle, option, option1, ptr); - wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_result_own_future_incoming_response_error_code_t result; - switch ((int32_t) (*((uint8_t*) (ptr + 0)))) { - case 0: { - result.is_err = false; - result.val.ok = (wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_own_future_incoming_response_t) { *((int32_t*) (ptr + 8)) }; - break; - } - case 1: { - result.is_err = true; - wasi_http_0_2_0_rc_2023_12_05_types_error_code_t variant; - variant.tag = (int32_t) (*((uint8_t*) (ptr + 8))); - switch ((int32_t) variant.tag) { - case 0: { - break; - } - case 1: { - bindings_option_string_t option2; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option2.is_some = false; - break; - } - case 1: { - option2.is_some = true; - option2.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - bindings_option_u16_t option3; - switch ((int32_t) (*((uint8_t*) (ptr + 28)))) { - case 0: { - option3.is_some = false; - break; - } - case 1: { - option3.is_some = true; - option3.val = (uint16_t) ((int32_t) (*((uint16_t*) (ptr + 30)))); - break; - } - } - variant.val.dns_error = (wasi_http_0_2_0_rc_2023_12_05_types_dns_error_payload_t) { - option2, - option3, - }; - break; - } - case 2: { - break; - } - case 3: { - break; - } - case 4: { - break; - } - case 5: { - break; - } - case 6: { - break; - } - case 7: { - break; - } - case 8: { - break; - } - case 9: { - break; - } - case 10: { - break; - } - case 11: { - break; - } - case 12: { - break; - } - case 13: { - break; - } - case 14: { - bindings_option_u8_t option4; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option4.is_some = false; - break; - } - case 1: { - option4.is_some = true; - option4.val = (uint8_t) ((int32_t) (*((uint8_t*) (ptr + 17)))); - break; - } - } - bindings_option_string_t option5; - switch ((int32_t) (*((uint8_t*) (ptr + 20)))) { - case 0: { - option5.is_some = false; - break; - } - case 1: { - option5.is_some = true; - option5.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 24))), (size_t)(*((int32_t*) (ptr + 28))) }; - break; - } - } - variant.val.tls_alert_received = (wasi_http_0_2_0_rc_2023_12_05_types_tls_alert_received_payload_t) { - option4, - option5, - }; - break; - } - case 15: { - break; - } - case 16: { - break; - } - case 17: { - bindings_option_u64_t option6; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option6.is_some = false; - break; - } - case 1: { - option6.is_some = true; - option6.val = (uint64_t) (*((int64_t*) (ptr + 24))); - break; - } - } - variant.val.http_request_body_size = option6; - break; - } - case 18: { - break; - } - case 19: { - break; - } - case 20: { - break; - } - case 21: { - bindings_option_u32_t option7; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option7.is_some = false; - break; - } - case 1: { - option7.is_some = true; - option7.val = (uint32_t) (*((int32_t*) (ptr + 20))); - break; - } - } - variant.val.http_request_header_section_size = option7; - break; - } - case 22: { - wasi_http_0_2_0_rc_2023_12_05_types_option_field_size_payload_t option10; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option10.is_some = false; - break; - } - case 1: { - option10.is_some = true; - bindings_option_string_t option8; - switch ((int32_t) (*((uint8_t*) (ptr + 20)))) { - case 0: { - option8.is_some = false; - break; - } - case 1: { - option8.is_some = true; - option8.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 24))), (size_t)(*((int32_t*) (ptr + 28))) }; - break; - } - } - bindings_option_u32_t option9; - switch ((int32_t) (*((uint8_t*) (ptr + 32)))) { - case 0: { - option9.is_some = false; - break; - } - case 1: { - option9.is_some = true; - option9.val = (uint32_t) (*((int32_t*) (ptr + 36))); - break; - } - } - - option10.val = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option8, - option9, - }; - break; - } - } - variant.val.http_request_header_size = option10; - break; - } - case 23: { - bindings_option_u32_t option11; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option11.is_some = false; - break; - } - case 1: { - option11.is_some = true; - option11.val = (uint32_t) (*((int32_t*) (ptr + 20))); - break; - } - } - variant.val.http_request_trailer_section_size = option11; - break; - } - case 24: { - bindings_option_string_t option12; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option12.is_some = false; - break; - } - case 1: { - option12.is_some = true; - option12.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - bindings_option_u32_t option13; - switch ((int32_t) (*((uint8_t*) (ptr + 28)))) { - case 0: { - option13.is_some = false; - break; - } - case 1: { - option13.is_some = true; - option13.val = (uint32_t) (*((int32_t*) (ptr + 32))); - break; - } - } - variant.val.http_request_trailer_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option12, - option13, - }; - break; - } - case 25: { - break; - } - case 26: { - bindings_option_u32_t option14; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option14.is_some = false; - break; - } - case 1: { - option14.is_some = true; - option14.val = (uint32_t) (*((int32_t*) (ptr + 20))); - break; - } - } - variant.val.http_response_header_section_size = option14; - break; - } - case 27: { - bindings_option_string_t option15; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option15.is_some = false; - break; - } - case 1: { - option15.is_some = true; - option15.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - bindings_option_u32_t option16; - switch ((int32_t) (*((uint8_t*) (ptr + 28)))) { - case 0: { - option16.is_some = false; - break; - } - case 1: { - option16.is_some = true; - option16.val = (uint32_t) (*((int32_t*) (ptr + 32))); - break; - } - } - variant.val.http_response_header_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option15, - option16, - }; - break; - } - case 28: { - bindings_option_u64_t option17; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option17.is_some = false; - break; - } - case 1: { - option17.is_some = true; - option17.val = (uint64_t) (*((int64_t*) (ptr + 24))); - break; - } - } - variant.val.http_response_body_size = option17; - break; - } - case 29: { - bindings_option_u32_t option18; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option18.is_some = false; - break; - } - case 1: { - option18.is_some = true; - option18.val = (uint32_t) (*((int32_t*) (ptr + 20))); - break; - } - } - variant.val.http_response_trailer_section_size = option18; - break; - } - case 30: { - bindings_option_string_t option19; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option19.is_some = false; - break; - } - case 1: { - option19.is_some = true; - option19.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - bindings_option_u32_t option20; - switch ((int32_t) (*((uint8_t*) (ptr + 28)))) { - case 0: { - option20.is_some = false; - break; - } - case 1: { - option20.is_some = true; - option20.val = (uint32_t) (*((int32_t*) (ptr + 32))); - break; - } - } - variant.val.http_response_trailer_size = (wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t) { - option19, - option20, - }; - break; - } - case 31: { - bindings_option_string_t option21; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option21.is_some = false; - break; - } - case 1: { - option21.is_some = true; - option21.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - variant.val.http_response_transfer_coding = option21; - break; - } - case 32: { - bindings_option_string_t option22; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option22.is_some = false; - break; - } - case 1: { - option22.is_some = true; - option22.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - variant.val.http_response_content_coding = option22; - break; - } - case 33: { - break; - } - case 34: { - break; - } - case 35: { - break; - } - case 36: { - break; - } - case 37: { - break; - } - case 38: { - bindings_option_string_t option23; - switch ((int32_t) (*((uint8_t*) (ptr + 16)))) { - case 0: { - option23.is_some = false; - break; - } - case 1: { - option23.is_some = true; - option23.val = (bindings_string_t) { (uint8_t*)(*((int32_t*) (ptr + 20))), (size_t)(*((int32_t*) (ptr + 24))) }; - break; - } - } - variant.val.internal_error = option23; - break; - } - } - - result.val.err = variant; - break; - } - } - if (!result.is_err) { - *ret = result.val.ok; - return 1; - } else { - *err = result.val.err; - return 0; - } -} - -__attribute__((__export_name__("wasi:cli/run@0.2.0-rc-2023-12-05#run"))) -int32_t __wasm_export_exports_wasi_cli_0_2_0_rc_2023_12_05_run_run(void) { - exports_wasi_cli_0_2_0_rc_2023_12_05_run_result_void_void_t ret; - ret.is_err = !exports_wasi_cli_0_2_0_rc_2023_12_05_run_run(); - int32_t result; - if ((ret).is_err) { - result = 1; - } else { - result = 0; - } - return result; -} - -__attribute__((__export_name__("wasi:http/incoming-handler@0.2.0-rc-2023-12-05#handle"))) -void __wasm_export_exports_wasi_http_0_2_0_rc_2023_12_05_incoming_handler_handle(int32_t arg, int32_t arg0) { - exports_wasi_http_0_2_0_rc_2023_12_05_incoming_handler_handle((exports_wasi_http_0_2_0_rc_2023_12_05_incoming_handler_own_incoming_request_t) { arg }, (exports_wasi_http_0_2_0_rc_2023_12_05_incoming_handler_own_response_outparam_t) { arg0 }); -} - -extern void __component_type_object_force_link_bindings(void); -void __component_type_object_force_link_bindings_public_use_in_this_compilation_unit(void) { - __component_type_object_force_link_bindings(); -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/bindings/bindings.h b/host-apis/wasi-0.2.0-rc-2023-12-05/bindings/bindings.h deleted file mode 100644 index 6293dc65..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/bindings/bindings.h +++ /dev/null @@ -1,3351 +0,0 @@ -// Generated by `wit-bindgen` 0.16.0. DO NOT EDIT! -#ifndef __BINDINGS_BINDINGS_H -#define __BINDINGS_BINDINGS_H -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include -#include - -typedef struct { - uint8_t*ptr; - size_t len; -} bindings_string_t; - -typedef struct { - bindings_string_t f0; - bindings_string_t f1; -} bindings_tuple2_string_string_t; - -typedef struct { - bindings_tuple2_string_string_t *ptr; - size_t len; -} bindings_list_tuple2_string_string_t; - -typedef struct { - bindings_string_t *ptr; - size_t len; -} bindings_list_string_t; - -typedef struct { - bool is_some; - bindings_string_t val; -} bindings_option_string_t; - -typedef struct { - bool is_err; -} wasi_cli_0_2_0_rc_2023_12_05_exit_result_void_void_t; - -typedef struct wasi_io_0_2_0_rc_2023_11_10_error_own_error_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_11_10_error_own_error_t; - -typedef struct wasi_io_0_2_0_rc_2023_11_10_error_borrow_error_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_11_10_error_borrow_error_t; - -typedef struct wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t; - -typedef struct wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable_t; - -typedef struct { - wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable_t *ptr; - size_t len; -} wasi_io_0_2_0_rc_2023_11_10_poll_list_borrow_pollable_t; - -typedef struct { - uint32_t *ptr; - size_t len; -} bindings_list_u32_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_error_own_error_t wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t; - -// An error for input-stream and output-stream operations. -typedef struct { - uint8_t tag; - union { - wasi_io_0_2_0_rc_2023_11_10_streams_own_error_t last_operation_failed; - } val; -} wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t; - -// The last operation (a write or flush) failed before completion. -// -// More information is available in the `error` payload. -#define WASI_IO_0_2_0_RC_2023_11_10_STREAMS_STREAM_ERROR_LAST_OPERATION_FAILED 0 -// The stream is closed: no more input will be accepted by the -// stream. A closed output-stream will return this error on all -// future operations. -#define WASI_IO_0_2_0_RC_2023_11_10_STREAMS_STREAM_ERROR_CLOSED 1 - -typedef struct wasi_io_0_2_0_rc_2023_11_10_streams_own_input_stream_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_11_10_streams_own_input_stream_t; - -typedef struct wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t; - -typedef struct wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t; - -typedef struct wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t { - int32_t __handle; -} wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t; - -typedef struct { - uint8_t *ptr; - size_t len; -} bindings_list_u8_t; - -typedef struct { - bool is_err; - union { - bindings_list_u8_t ok; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t err; - } val; -} wasi_io_0_2_0_rc_2023_11_10_streams_result_list_u8_stream_error_t; - -typedef struct { - bool is_err; - union { - uint64_t ok; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t err; - } val; -} wasi_io_0_2_0_rc_2023_11_10_streams_result_u64_stream_error_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t wasi_io_0_2_0_rc_2023_11_10_streams_own_pollable_t; - -typedef struct { - bool is_err; - union { - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t err; - } val; -} wasi_io_0_2_0_rc_2023_11_10_streams_result_void_stream_error_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_streams_own_input_stream_t wasi_cli_0_2_0_rc_2023_12_05_stdin_own_input_stream_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t wasi_cli_0_2_0_rc_2023_12_05_stdout_own_output_stream_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t wasi_cli_0_2_0_rc_2023_12_05_stderr_own_output_stream_t; - -typedef struct wasi_cli_0_2_0_rc_2023_12_05_terminal_input_own_terminal_input_t { - int32_t __handle; -} wasi_cli_0_2_0_rc_2023_12_05_terminal_input_own_terminal_input_t; - -typedef struct wasi_cli_0_2_0_rc_2023_12_05_terminal_input_borrow_terminal_input_t { - int32_t __handle; -} wasi_cli_0_2_0_rc_2023_12_05_terminal_input_borrow_terminal_input_t; - -typedef struct wasi_cli_0_2_0_rc_2023_12_05_terminal_output_own_terminal_output_t { - int32_t __handle; -} wasi_cli_0_2_0_rc_2023_12_05_terminal_output_own_terminal_output_t; - -typedef struct wasi_cli_0_2_0_rc_2023_12_05_terminal_output_borrow_terminal_output_t { - int32_t __handle; -} wasi_cli_0_2_0_rc_2023_12_05_terminal_output_borrow_terminal_output_t; - -typedef wasi_cli_0_2_0_rc_2023_12_05_terminal_input_own_terminal_input_t wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_own_terminal_input_t; - -typedef struct { - bool is_some; - wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_own_terminal_input_t val; -} wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_option_own_terminal_input_t; - -typedef wasi_cli_0_2_0_rc_2023_12_05_terminal_output_own_terminal_output_t wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_own_terminal_output_t; - -typedef struct { - bool is_some; - wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_own_terminal_output_t val; -} wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_option_own_terminal_output_t; - -typedef wasi_cli_0_2_0_rc_2023_12_05_terminal_output_own_terminal_output_t wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_own_terminal_output_t; - -typedef struct { - bool is_some; - wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_own_terminal_output_t val; -} wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_option_own_terminal_output_t; - -// An instant in time, in nanoseconds. An instant is relative to an -// unspecified initial value, and can only be compared to instances from -// the same monotonic-clock. -typedef uint64_t wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_instant_t; - -// A duration of time, in nanoseconds. -typedef uint64_t wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_duration_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_own_pollable_t; - -// A time and date in seconds plus nanoseconds. -typedef struct { - uint64_t seconds; - uint32_t nanoseconds; -} wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t; - -typedef wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t wasi_filesystem_0_2_0_rc_2023_11_10_types_datetime_t; - -// File size or length of a region within a file. -typedef uint64_t wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t; - -// The type of a filesystem object referenced by a descriptor. -// -// Note: This was called `filetype` in earlier versions of WASI. -typedef uint8_t wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_type_t; - -// The type of the descriptor or file is unknown or is different from -// any of the other types specified. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_TYPE_UNKNOWN 0 -// The descriptor refers to a block device inode. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_TYPE_BLOCK_DEVICE 1 -// The descriptor refers to a character device inode. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_TYPE_CHARACTER_DEVICE 2 -// The descriptor refers to a directory inode. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_TYPE_DIRECTORY 3 -// The descriptor refers to a named pipe. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_TYPE_FIFO 4 -// The file refers to a symbolic link inode. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_TYPE_SYMBOLIC_LINK 5 -// The descriptor refers to a regular file inode. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_TYPE_REGULAR_FILE 6 -// The descriptor refers to a socket. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_TYPE_SOCKET 7 - -// Descriptor flags. -// -// Note: This was called `fdflags` in earlier versions of WASI. -typedef uint8_t wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_flags_t; - -// Read mode: Data can be read. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_FLAGS_READ (1 << 0) -// Write mode: Data can be written to. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_FLAGS_WRITE (1 << 1) -// Request that writes be performed according to synchronized I/O file -// integrity completion. The data stored in the file and the file's -// metadata are synchronized. This is similar to `O_SYNC` in POSIX. -// -// The precise semantics of this operation have not yet been defined for -// WASI. At this time, it should be interpreted as a request, and not a -// requirement. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_FLAGS_FILE_INTEGRITY_SYNC (1 << 2) -// Request that writes be performed according to synchronized I/O data -// integrity completion. Only the data stored in the file is -// synchronized. This is similar to `O_DSYNC` in POSIX. -// -// The precise semantics of this operation have not yet been defined for -// WASI. At this time, it should be interpreted as a request, and not a -// requirement. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_FLAGS_DATA_INTEGRITY_SYNC (1 << 3) -// Requests that reads be performed at the same level of integrety -// requested for writes. This is similar to `O_RSYNC` in POSIX. -// -// The precise semantics of this operation have not yet been defined for -// WASI. At this time, it should be interpreted as a request, and not a -// requirement. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_FLAGS_REQUESTED_WRITE_SYNC (1 << 4) -// Mutating directories mode: Directory contents may be mutated. -// -// When this flag is unset on a descriptor, operations using the -// descriptor which would create, rename, delete, modify the data or -// metadata of filesystem objects, or obtain another handle which -// would permit any of those, shall fail with `error-code::read-only` if -// they would otherwise succeed. -// -// This may only be set on directories. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_DESCRIPTOR_FLAGS_MUTATE_DIRECTORY (1 << 5) - -// Flags determining the method of how paths are resolved. -typedef uint8_t wasi_filesystem_0_2_0_rc_2023_11_10_types_path_flags_t; - -// As long as the resolved path corresponds to a symbolic link, it is -// expanded. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_PATH_FLAGS_SYMLINK_FOLLOW (1 << 0) - -// Open flags used by `open-at`. -typedef uint8_t wasi_filesystem_0_2_0_rc_2023_11_10_types_open_flags_t; - -// Create file if it does not exist, similar to `O_CREAT` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_OPEN_FLAGS_CREATE (1 << 0) -// Fail if not a directory, similar to `O_DIRECTORY` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_OPEN_FLAGS_DIRECTORY (1 << 1) -// Fail if file already exists, similar to `O_EXCL` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_OPEN_FLAGS_EXCLUSIVE (1 << 2) -// Truncate file to size 0, similar to `O_TRUNC` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_OPEN_FLAGS_TRUNCATE (1 << 3) - -// Number of hard links to an inode. -typedef uint64_t wasi_filesystem_0_2_0_rc_2023_11_10_types_link_count_t; - -typedef struct { - bool is_some; - wasi_filesystem_0_2_0_rc_2023_11_10_types_datetime_t val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_t; - -// File attributes. -// -// Note: This was called `filestat` in earlier versions of WASI. -typedef struct { - // File type. - wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_type_t type; - // Number of hard links to the file. - wasi_filesystem_0_2_0_rc_2023_11_10_types_link_count_t link_count; - // For regular files, the file size in bytes. For symbolic links, the - // length in bytes of the pathname contained in the symbolic link. - wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t size; - // Last data access timestamp. - // - // If the `option` is none, the platform doesn't maintain an access - // timestamp for this file. - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_t data_access_timestamp; - // Last data modification timestamp. - // - // If the `option` is none, the platform doesn't maintain a - // modification timestamp for this file. - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_t data_modification_timestamp; - // Last file status-change timestamp. - // - // If the `option` is none, the platform doesn't maintain a - // status-change timestamp for this file. - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_t status_change_timestamp; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_stat_t; - -// When setting a timestamp, this gives the value to set it to. -typedef struct { - uint8_t tag; - union { - wasi_filesystem_0_2_0_rc_2023_11_10_types_datetime_t timestamp; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_new_timestamp_t; - -// Leave the timestamp set to its previous value. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_NEW_TIMESTAMP_NO_CHANGE 0 -// Set the timestamp to the current time of the system clock associated -// with the filesystem. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_NEW_TIMESTAMP_NOW 1 -// Set the timestamp to the given value. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_NEW_TIMESTAMP_TIMESTAMP 2 - -// A directory entry. -typedef struct { - // The type of the file referred to by this directory entry. - wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_type_t type; - // The name of the object. - bindings_string_t name; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_t; - -// Error codes returned by functions, similar to `errno` in POSIX. -// Not all of these error codes are returned by the functions provided by this -// API; some are used in higher-level library layers, and others are provided -// merely for alignment with POSIX. -typedef uint8_t wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t; - -// Permission denied, similar to `EACCES` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_ACCESS 0 -// Resource unavailable, or operation would block, similar to `EAGAIN` and `EWOULDBLOCK` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_WOULD_BLOCK 1 -// Connection already in progress, similar to `EALREADY` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_ALREADY 2 -// Bad descriptor, similar to `EBADF` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_BAD_DESCRIPTOR 3 -// Device or resource busy, similar to `EBUSY` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_BUSY 4 -// Resource deadlock would occur, similar to `EDEADLK` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_DEADLOCK 5 -// Storage quota exceeded, similar to `EDQUOT` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_QUOTA 6 -// File exists, similar to `EEXIST` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_EXIST 7 -// File too large, similar to `EFBIG` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_FILE_TOO_LARGE 8 -// Illegal byte sequence, similar to `EILSEQ` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_ILLEGAL_BYTE_SEQUENCE 9 -// Operation in progress, similar to `EINPROGRESS` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_IN_PROGRESS 10 -// Interrupted function, similar to `EINTR` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_INTERRUPTED 11 -// Invalid argument, similar to `EINVAL` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_INVALID 12 -// I/O error, similar to `EIO` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_IO 13 -// Is a directory, similar to `EISDIR` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_IS_DIRECTORY 14 -// Too many levels of symbolic links, similar to `ELOOP` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_LOOP 15 -// Too many links, similar to `EMLINK` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_TOO_MANY_LINKS 16 -// Message too large, similar to `EMSGSIZE` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_MESSAGE_SIZE 17 -// Filename too long, similar to `ENAMETOOLONG` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_NAME_TOO_LONG 18 -// No such device, similar to `ENODEV` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_NO_DEVICE 19 -// No such file or directory, similar to `ENOENT` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_NO_ENTRY 20 -// No locks available, similar to `ENOLCK` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_NO_LOCK 21 -// Not enough space, similar to `ENOMEM` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_INSUFFICIENT_MEMORY 22 -// No space left on device, similar to `ENOSPC` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_INSUFFICIENT_SPACE 23 -// Not a directory or a symbolic link to a directory, similar to `ENOTDIR` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_NOT_DIRECTORY 24 -// Directory not empty, similar to `ENOTEMPTY` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_NOT_EMPTY 25 -// State not recoverable, similar to `ENOTRECOVERABLE` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_NOT_RECOVERABLE 26 -// Not supported, similar to `ENOTSUP` and `ENOSYS` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_UNSUPPORTED 27 -// Inappropriate I/O control operation, similar to `ENOTTY` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_NO_TTY 28 -// No such device or address, similar to `ENXIO` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_NO_SUCH_DEVICE 29 -// Value too large to be stored in data type, similar to `EOVERFLOW` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_OVERFLOW 30 -// Operation not permitted, similar to `EPERM` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_NOT_PERMITTED 31 -// Broken pipe, similar to `EPIPE` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_PIPE 32 -// Read-only file system, similar to `EROFS` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_READ_ONLY 33 -// Invalid seek, similar to `ESPIPE` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_INVALID_SEEK 34 -// Text file busy, similar to `ETXTBSY` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_TEXT_FILE_BUSY 35 -// Cross-device link, similar to `EXDEV` in POSIX. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ERROR_CODE_CROSS_DEVICE 36 - -// File or memory access pattern advisory information. -typedef uint8_t wasi_filesystem_0_2_0_rc_2023_11_10_types_advice_t; - -// The application has no advice to give on its behavior with respect -// to the specified data. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ADVICE_NORMAL 0 -// The application expects to access the specified data sequentially -// from lower offsets to higher offsets. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ADVICE_SEQUENTIAL 1 -// The application expects to access the specified data in a random -// order. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ADVICE_RANDOM 2 -// The application expects to access the specified data in the near -// future. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ADVICE_WILL_NEED 3 -// The application expects that it will not access the specified data -// in the near future. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ADVICE_DONT_NEED 4 -// The application expects to access the specified data once and then -// not reuse it thereafter. -#define WASI_FILESYSTEM_0_2_0_RC_2023_11_10_TYPES_ADVICE_NO_REUSE 5 - -// A 128-bit hash value, split into parts because wasm doesn't have a -// 128-bit integer type. -typedef struct { - // 64 bits of a 128-bit hash value. - uint64_t lower; - // Another 64 bits of a 128-bit hash value. - uint64_t upper; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_metadata_hash_value_t; - -typedef struct wasi_filesystem_0_2_0_rc_2023_11_10_types_own_descriptor_t { - int32_t __handle; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_own_descriptor_t; - -typedef struct wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t { - int32_t __handle; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t; - -typedef struct wasi_filesystem_0_2_0_rc_2023_11_10_types_own_directory_entry_stream_t { - int32_t __handle; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_own_directory_entry_stream_t; - -typedef struct wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_directory_entry_stream_t { - int32_t __handle; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_directory_entry_stream_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_streams_own_input_stream_t wasi_filesystem_0_2_0_rc_2023_11_10_types_own_input_stream_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_11_10_types_own_input_stream_t ok; - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_input_stream_error_code_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t wasi_filesystem_0_2_0_rc_2023_11_10_types_own_output_stream_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_11_10_types_own_output_stream_t ok; - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_output_stream_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_flags_t ok; - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_flags_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_type_t ok; - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_type_error_code_t; - -typedef struct { - bindings_list_u8_t f0; - bool f1; -} bindings_tuple2_list_u8_bool_t; - -typedef struct { - bool is_err; - union { - bindings_tuple2_list_u8_bool_t ok; - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_result_tuple2_list_u8_bool_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t ok; - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_result_filesize_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_11_10_types_own_directory_entry_stream_t ok; - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_directory_entry_stream_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_stat_t ok; - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_stat_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_11_10_types_own_descriptor_t ok; - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_descriptor_error_code_t; - -typedef struct { - bool is_err; - union { - bindings_string_t ok; - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_result_string_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_11_10_types_metadata_hash_value_t ok; - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_result_metadata_hash_value_error_code_t; - -typedef struct { - bool is_some; - wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_t val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_option_directory_entry_t; - -typedef struct { - bool is_err; - union { - wasi_filesystem_0_2_0_rc_2023_11_10_types_option_directory_entry_t ok; - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t err; - } val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_result_option_directory_entry_error_code_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_error_borrow_error_t wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_error_t; - -typedef struct { - bool is_some; - wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t val; -} wasi_filesystem_0_2_0_rc_2023_11_10_types_option_error_code_t; - -typedef wasi_filesystem_0_2_0_rc_2023_11_10_types_own_descriptor_t wasi_filesystem_0_2_0_rc_2023_11_10_preopens_own_descriptor_t; - -typedef struct { - wasi_filesystem_0_2_0_rc_2023_11_10_preopens_own_descriptor_t f0; - bindings_string_t f1; -} wasi_filesystem_0_2_0_rc_2023_11_10_preopens_tuple2_own_descriptor_string_t; - -typedef struct { - wasi_filesystem_0_2_0_rc_2023_11_10_preopens_tuple2_own_descriptor_string_t *ptr; - size_t len; -} wasi_filesystem_0_2_0_rc_2023_11_10_preopens_list_tuple2_own_descriptor_string_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_11_10_network_own_network_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_11_10_network_own_network_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_11_10_network_borrow_network_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_11_10_network_borrow_network_t; - -// Error codes. -// -// In theory, every API can return any error code. -// In practice, API's typically only return the errors documented per API -// combined with a couple of errors that are always possible: -// - `unknown` -// - `access-denied` -// - `not-supported` -// - `out-of-memory` -// - `concurrency-conflict` -// -// See each individual API for what the POSIX equivalents are. They sometimes differ per API. -typedef uint8_t wasi_sockets_0_2_0_rc_2023_11_10_network_error_code_t; - -// Unknown error -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_UNKNOWN 0 -// Access denied. -// -// POSIX equivalent: EACCES, EPERM -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_ACCESS_DENIED 1 -// The operation is not supported. -// -// POSIX equivalent: EOPNOTSUPP -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_NOT_SUPPORTED 2 -// One of the arguments is invalid. -// -// POSIX equivalent: EINVAL -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_INVALID_ARGUMENT 3 -// Not enough memory to complete the operation. -// -// POSIX equivalent: ENOMEM, ENOBUFS, EAI_MEMORY -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_OUT_OF_MEMORY 4 -// The operation timed out before it could finish completely. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_TIMEOUT 5 -// This operation is incompatible with another asynchronous operation that is already in progress. -// -// POSIX equivalent: EALREADY -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_CONCURRENCY_CONFLICT 6 -// Trying to finish an asynchronous operation that: -// - has not been started yet, or: -// - was already finished by a previous `finish-*` call. -// -// Note: this is scheduled to be removed when `future`s are natively supported. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_NOT_IN_PROGRESS 7 -// The operation has been aborted because it could not be completed immediately. -// -// Note: this is scheduled to be removed when `future`s are natively supported. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_WOULD_BLOCK 8 -// The operation is not valid in the socket's current state. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_INVALID_STATE 9 -// A new socket resource could not be created because of a system limit. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_NEW_SOCKET_LIMIT 10 -// A bind operation failed because the provided address is not an address that the `network` can bind to. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_ADDRESS_NOT_BINDABLE 11 -// A bind operation failed because the provided address is already in use or because there are no ephemeral ports available. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_ADDRESS_IN_USE 12 -// The remote address is not reachable -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_REMOTE_UNREACHABLE 13 -// The connection was forcefully rejected -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_CONNECTION_REFUSED 14 -// The connection was reset. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_CONNECTION_RESET 15 -// A connection was aborted. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_CONNECTION_ABORTED 16 -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_DATAGRAM_TOO_LARGE 17 -// Name does not exist or has no suitable associated IP addresses. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_NAME_UNRESOLVABLE 18 -// A temporary failure in name resolution occurred. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_TEMPORARY_RESOLVER_FAILURE 19 -// A permanent failure in name resolution occurred. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_ERROR_CODE_PERMANENT_RESOLVER_FAILURE 20 - -typedef uint8_t wasi_sockets_0_2_0_rc_2023_11_10_network_ip_address_family_t; - -// Similar to `AF_INET` in POSIX. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_IP_ADDRESS_FAMILY_IPV4 0 -// Similar to `AF_INET6` in POSIX. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_IP_ADDRESS_FAMILY_IPV6 1 - -typedef struct { - uint8_t f0; - uint8_t f1; - uint8_t f2; - uint8_t f3; -} wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_address_t; - -typedef struct { - uint16_t f0; - uint16_t f1; - uint16_t f2; - uint16_t f3; - uint16_t f4; - uint16_t f5; - uint16_t f6; - uint16_t f7; -} wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_address_t; - -typedef struct { - uint8_t tag; - union { - wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_address_t ipv4; - wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_address_t ipv6; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_network_ip_address_t; - -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_IP_ADDRESS_IPV4 0 -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_IP_ADDRESS_IPV6 1 - -typedef struct { - uint16_t port; - wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_address_t address; -} wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_socket_address_t; - -typedef struct { - uint16_t port; - uint32_t flow_info; - wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_address_t address; - uint32_t scope_id; -} wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_socket_address_t; - -typedef struct { - uint8_t tag; - union { - wasi_sockets_0_2_0_rc_2023_11_10_network_ipv4_socket_address_t ipv4; - wasi_sockets_0_2_0_rc_2023_11_10_network_ipv6_socket_address_t ipv6; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_network_ip_socket_address_t; - -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_IP_SOCKET_ADDRESS_IPV4 0 -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_NETWORK_IP_SOCKET_ADDRESS_IPV6 1 - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_own_network_t wasi_sockets_0_2_0_rc_2023_11_10_instance_network_own_network_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_error_code_t wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_ip_socket_address_t wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_ip_address_family_t wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_address_family_t; - -// A received datagram. -typedef struct { - // The payload. - // - // Theoretical max size: ~64 KiB. In practice, typically less than 1500 bytes. - bindings_list_u8_t data; - // The source address. - // - // This field is guaranteed to match the remote address the stream was initialized with, if any. - // - // Equivalent to the `src_addr` out parameter of `recvfrom`. - wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t remote_address; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_t; - -typedef struct { - bool is_some; - wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t val; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_option_ip_socket_address_t; - -// A datagram to be sent out. -typedef struct { - // The payload. - bindings_list_u8_t data; - // The destination address. - // - // The requirements on this field depend on how the stream was initialized: - // - with a remote address: this field must be None or match the stream's remote address exactly. - // - without a remote address: this field is required. - // - // If this value is None, the send operation is equivalent to `send` in POSIX. Otherwise it is equivalent to `sendto`. - wasi_sockets_0_2_0_rc_2023_11_10_udp_option_ip_socket_address_t remote_address; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_11_10_udp_own_udp_socket_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_own_udp_socket_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_11_10_udp_own_incoming_datagram_stream_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_own_incoming_datagram_stream_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_incoming_datagram_stream_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_incoming_datagram_stream_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_11_10_udp_own_outgoing_datagram_stream_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_own_outgoing_datagram_stream_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_outgoing_datagram_stream_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_outgoing_datagram_stream_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_borrow_network_t wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_network_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_result_void_error_code_t; - -typedef struct { - wasi_sockets_0_2_0_rc_2023_11_10_udp_own_incoming_datagram_stream_t f0; - wasi_sockets_0_2_0_rc_2023_11_10_udp_own_outgoing_datagram_stream_t f1; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_tuple2_own_incoming_datagram_stream_own_outgoing_datagram_stream_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_11_10_udp_tuple2_own_incoming_datagram_stream_own_outgoing_datagram_stream_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_result_tuple2_own_incoming_datagram_stream_own_outgoing_datagram_stream_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_result_ip_socket_address_error_code_t; - -typedef struct { - bool is_err; - union { - bool ok; - wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_result_bool_error_code_t; - -typedef struct { - bool is_err; - union { - uint8_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u8_error_code_t; - -typedef struct { - bool is_err; - union { - uint64_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u64_error_code_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t wasi_sockets_0_2_0_rc_2023_11_10_udp_own_pollable_t; - -typedef struct { - wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_t *ptr; - size_t len; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_list_incoming_datagram_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_11_10_udp_list_incoming_datagram_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_result_list_incoming_datagram_error_code_t; - -typedef struct { - wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_t *ptr; - size_t len; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_list_outgoing_datagram_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_error_code_t wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_error_code_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_ip_address_family_t wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_ip_address_family_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_udp_own_udp_socket_t wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_own_udp_socket_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_own_udp_socket_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_result_own_udp_socket_error_code_t; - -typedef wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_duration_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_duration_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_error_code_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_ip_socket_address_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_ip_address_family_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_address_family_t; - -typedef uint8_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_shutdown_type_t; - -// Similar to `SHUT_RD` in POSIX. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_TCP_SHUTDOWN_TYPE_RECEIVE 0 -// Similar to `SHUT_WR` in POSIX. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_TCP_SHUTDOWN_TYPE_SEND 1 -// Similar to `SHUT_RDWR` in POSIX. -#define WASI_SOCKETS_0_2_0_RC_2023_11_10_TCP_SHUTDOWN_TYPE_BOTH 2 - -typedef struct wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_tcp_socket_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_tcp_socket_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_borrow_network_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_network_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_streams_own_input_stream_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_input_stream_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_output_stream_t; - -typedef struct { - wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_input_stream_t f0; - wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_output_stream_t f1; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_tuple2_own_input_stream_own_output_stream_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_11_10_tcp_tuple2_own_input_stream_own_output_stream_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_tuple2_own_input_stream_own_output_stream_error_code_t; - -typedef struct { - wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_tcp_socket_t f0; - wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_input_stream_t f1; - wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_output_stream_t f2; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_tuple3_own_tcp_socket_own_input_stream_own_output_stream_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_11_10_tcp_tuple3_own_tcp_socket_own_input_stream_own_output_stream_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_tuple3_own_tcp_socket_own_input_stream_own_output_stream_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_ip_socket_address_error_code_t; - -typedef struct { - bool is_err; - union { - bool ok; - wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_bool_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_11_10_tcp_duration_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_duration_error_code_t; - -typedef struct { - bool is_err; - union { - uint32_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u32_error_code_t; - -typedef struct { - bool is_err; - union { - uint8_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u8_error_code_t; - -typedef struct { - bool is_err; - union { - uint64_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u64_error_code_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_pollable_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_error_code_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_error_code_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_ip_address_family_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_ip_address_family_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_tcp_socket_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_own_tcp_socket_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_own_tcp_socket_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_result_own_tcp_socket_error_code_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_error_code_t wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_error_code_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_ip_address_t wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_ip_address_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_resolve_address_stream_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_resolve_address_stream_t; - -typedef struct wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_resolve_address_stream_t { - int32_t __handle; -} wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_resolve_address_stream_t; - -typedef wasi_sockets_0_2_0_rc_2023_11_10_network_borrow_network_t wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_network_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_resolve_address_stream_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_result_own_resolve_address_stream_error_code_t; - -typedef struct { - bool is_some; - wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_ip_address_t val; -} wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_option_ip_address_t; - -typedef struct { - bool is_err; - union { - wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_option_ip_address_t ok; - wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_error_code_t err; - } val; -} wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_result_option_ip_address_error_code_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_pollable_t; - -typedef struct { - uint64_t f0; - uint64_t f1; -} bindings_tuple2_u64_u64_t; - -typedef wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_duration_t wasi_http_0_2_0_rc_2023_12_05_types_duration_t; - -// This type corresponds to HTTP standard Methods. -typedef struct { - uint8_t tag; - union { - bindings_string_t other; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_method_t; - -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_GET 0 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_HEAD 1 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_POST 2 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_PUT 3 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_DELETE 4 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_CONNECT 5 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_OPTIONS 6 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_TRACE 7 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_PATCH 8 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_OTHER 9 - -// This type corresponds to HTTP standard Related Schemes. -typedef struct { - uint8_t tag; - union { - bindings_string_t other; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_scheme_t; - -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_SCHEME_HTTP 0 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_SCHEME_HTTPS 1 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_SCHEME_OTHER 2 - -typedef struct { - bool is_some; - uint16_t val; -} bindings_option_u16_t; - -// Defines the case payload type for `DNS-error` above: -typedef struct { - bindings_option_string_t rcode; - bindings_option_u16_t info_code; -} wasi_http_0_2_0_rc_2023_12_05_types_dns_error_payload_t; - -typedef struct { - bool is_some; - uint8_t val; -} bindings_option_u8_t; - -// Defines the case payload type for `TLS-alert-received` above: -typedef struct { - bindings_option_u8_t alert_id; - bindings_option_string_t alert_message; -} wasi_http_0_2_0_rc_2023_12_05_types_tls_alert_received_payload_t; - -typedef struct { - bool is_some; - uint32_t val; -} bindings_option_u32_t; - -// Defines the case payload type for `HTTP-response-{header,trailer}-size` above: -typedef struct { - bindings_option_string_t field_name; - bindings_option_u32_t field_size; -} wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t; - -typedef struct { - bool is_some; - uint64_t val; -} bindings_option_u64_t; - -typedef struct { - bool is_some; - wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t val; -} wasi_http_0_2_0_rc_2023_12_05_types_option_field_size_payload_t; - -// These cases are inspired by the IANA HTTP Proxy Error Types: -// https://www.iana.org/assignments/http-proxy-status/http-proxy-status.xhtml#table-http-proxy-error-types -typedef struct { - uint8_t tag; - union { - wasi_http_0_2_0_rc_2023_12_05_types_dns_error_payload_t dns_error; - wasi_http_0_2_0_rc_2023_12_05_types_tls_alert_received_payload_t tls_alert_received; - bindings_option_u64_t http_request_body_size; - bindings_option_u32_t http_request_header_section_size; - wasi_http_0_2_0_rc_2023_12_05_types_option_field_size_payload_t http_request_header_size; - bindings_option_u32_t http_request_trailer_section_size; - wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t http_request_trailer_size; - bindings_option_u32_t http_response_header_section_size; - wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t http_response_header_size; - bindings_option_u64_t http_response_body_size; - bindings_option_u32_t http_response_trailer_section_size; - wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t http_response_trailer_size; - bindings_option_string_t http_response_transfer_coding; - bindings_option_string_t http_response_content_coding; - bindings_option_string_t internal_error; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_error_code_t; - -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_DNS_TIMEOUT 0 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_DNS_ERROR 1 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_DESTINATION_NOT_FOUND 2 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_DESTINATION_UNAVAILABLE 3 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_DESTINATION_IP_PROHIBITED 4 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_DESTINATION_IP_UNROUTABLE 5 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_CONNECTION_REFUSED 6 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_CONNECTION_TERMINATED 7 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_CONNECTION_TIMEOUT 8 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_CONNECTION_READ_TIMEOUT 9 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_CONNECTION_WRITE_TIMEOUT 10 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_CONNECTION_LIMIT_REACHED 11 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_TLS_PROTOCOL_ERROR 12 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_TLS_CERTIFICATE_ERROR 13 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_TLS_ALERT_RECEIVED 14 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_REQUEST_DENIED 15 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_REQUEST_LENGTH_REQUIRED 16 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_REQUEST_BODY_SIZE 17 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_REQUEST_METHOD_INVALID 18 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_REQUEST_URI_INVALID 19 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_REQUEST_URI_TOO_LONG 20 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_REQUEST_HEADER_SECTION_SIZE 21 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_REQUEST_HEADER_SIZE 22 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_REQUEST_TRAILER_SECTION_SIZE 23 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_REQUEST_TRAILER_SIZE 24 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_RESPONSE_INCOMPLETE 25 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_RESPONSE_HEADER_SECTION_SIZE 26 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_RESPONSE_HEADER_SIZE 27 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_RESPONSE_BODY_SIZE 28 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_RESPONSE_TRAILER_SECTION_SIZE 29 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_RESPONSE_TRAILER_SIZE 30 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_RESPONSE_TRANSFER_CODING 31 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_RESPONSE_CONTENT_CODING 32 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_RESPONSE_TIMEOUT 33 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_UPGRADE_FAILED 34 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_HTTP_PROTOCOL_ERROR 35 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_LOOP_DETECTED 36 -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_CONFIGURATION_ERROR 37 -// This is a catch-all error for anything that doesn't fit cleanly into a -// more specific case. It also includes an optional string for an -// unstructured description of the error. Users should not depend on the -// string for diagnosing errors, as it's not required to be consistent -// between implementations. -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_ERROR_CODE_INTERNAL_ERROR 38 - -// This type enumerates the different kinds of errors that may occur when -// setting or appending to a `fields` resource. -typedef struct { - uint8_t tag; -} wasi_http_0_2_0_rc_2023_12_05_types_header_error_t; - -// This error indicates that a `field-key` or `field-value` was -// syntactically invalid when used with an operation that sets headers in a -// `fields`. -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_HEADER_ERROR_INVALID_SYNTAX 0 -// This error indicates that a forbidden `field-key` was used when trying -// to set a header in a `fields`. -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_HEADER_ERROR_FORBIDDEN 1 -// This error indicates that the operation on the `fields` was not -// permitted because the fields are immutable. -#define WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_HEADER_ERROR_IMMUTABLE 2 - -// Field keys are always strings. -typedef bindings_string_t wasi_http_0_2_0_rc_2023_12_05_types_field_key_t; - -// Field values should always be ASCII strings. However, in -// reality, HTTP implementations often have to interpret malformed values, -// so they are provided as a list of bytes. -typedef struct { - uint8_t *ptr; - size_t len; -} wasi_http_0_2_0_rc_2023_12_05_types_field_value_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_request_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_request_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_request_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_request_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_own_request_options_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_own_request_options_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_own_response_outparam_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_own_response_outparam_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_borrow_response_outparam_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_borrow_response_outparam_t; - -// This type corresponds to the HTTP standard Status Code. -typedef uint16_t wasi_http_0_2_0_rc_2023_12_05_types_status_code_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_response_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_response_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_body_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_body_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_own_future_trailers_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_own_future_trailers_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_trailers_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_trailers_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_response_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_response_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_body_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_body_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_own_future_incoming_response_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_own_future_incoming_response_t; - -typedef struct wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response_t { - int32_t __handle; -} wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_error_borrow_error_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_io_error_t; - -typedef struct { - bool is_some; - wasi_http_0_2_0_rc_2023_12_05_types_error_code_t val; -} wasi_http_0_2_0_rc_2023_12_05_types_option_error_code_t; - -typedef struct { - wasi_http_0_2_0_rc_2023_12_05_types_field_key_t f0; - wasi_http_0_2_0_rc_2023_12_05_types_field_value_t f1; -} bindings_tuple2_field_key_field_value_t; - -typedef struct { - bindings_tuple2_field_key_field_value_t *ptr; - size_t len; -} bindings_list_tuple2_field_key_field_value_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t ok; - wasi_http_0_2_0_rc_2023_12_05_types_header_error_t err; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_result_own_fields_header_error_t; - -typedef struct { - wasi_http_0_2_0_rc_2023_12_05_types_field_value_t *ptr; - size_t len; -} bindings_list_field_value_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_12_05_types_header_error_t err; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_result_void_header_error_t; - -typedef struct { - bool is_some; - wasi_http_0_2_0_rc_2023_12_05_types_scheme_t val; -} wasi_http_0_2_0_rc_2023_12_05_types_option_scheme_t; - -typedef wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t ok; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_body_void_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t ok; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_body_void_t; - -typedef struct { - bool is_err; -} wasi_http_0_2_0_rc_2023_12_05_types_result_void_void_t; - -typedef struct { - bool is_some; - wasi_http_0_2_0_rc_2023_12_05_types_duration_t val; -} bindings_option_duration_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_response_t ok; - wasi_http_0_2_0_rc_2023_12_05_types_error_code_t err; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_response_error_code_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_streams_own_input_stream_t wasi_http_0_2_0_rc_2023_12_05_types_own_input_stream_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_12_05_types_own_input_stream_t ok; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_result_own_input_stream_void_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t wasi_http_0_2_0_rc_2023_12_05_types_own_pollable_t; - -typedef wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t wasi_http_0_2_0_rc_2023_12_05_types_own_trailers_t; - -typedef struct { - bool is_some; - wasi_http_0_2_0_rc_2023_12_05_types_own_trailers_t val; -} wasi_http_0_2_0_rc_2023_12_05_types_option_own_trailers_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_12_05_types_option_own_trailers_t ok; - wasi_http_0_2_0_rc_2023_12_05_types_error_code_t err; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_result_option_own_trailers_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_12_05_types_result_option_own_trailers_error_code_t ok; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_result_result_option_own_trailers_error_code_void_t; - -typedef struct { - bool is_some; - wasi_http_0_2_0_rc_2023_12_05_types_result_result_option_own_trailers_error_code_void_t val; -} wasi_http_0_2_0_rc_2023_12_05_types_option_result_result_option_own_trailers_error_code_void_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t wasi_http_0_2_0_rc_2023_12_05_types_own_output_stream_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_12_05_types_own_output_stream_t ok; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_result_own_output_stream_void_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_12_05_types_error_code_t err; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_result_void_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_response_t ok; - wasi_http_0_2_0_rc_2023_12_05_types_error_code_t err; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_response_error_code_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_response_error_code_t ok; - } val; -} wasi_http_0_2_0_rc_2023_12_05_types_result_result_own_incoming_response_error_code_void_t; - -typedef struct { - bool is_some; - wasi_http_0_2_0_rc_2023_12_05_types_result_result_own_incoming_response_error_code_void_t val; -} wasi_http_0_2_0_rc_2023_12_05_types_option_result_result_own_incoming_response_error_code_void_t; - -typedef wasi_http_0_2_0_rc_2023_12_05_types_error_code_t wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_error_code_t; - -typedef wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_request_t wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_own_outgoing_request_t; - -typedef wasi_http_0_2_0_rc_2023_12_05_types_own_request_options_t wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_own_request_options_t; - -typedef struct { - bool is_some; - wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_own_request_options_t val; -} wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_option_own_request_options_t; - -typedef wasi_http_0_2_0_rc_2023_12_05_types_own_future_incoming_response_t wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_own_future_incoming_response_t; - -typedef struct { - bool is_err; - union { - wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_own_future_incoming_response_t ok; - wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_error_code_t err; - } val; -} wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_result_own_future_incoming_response_error_code_t; - -typedef struct { - bool is_err; -} exports_wasi_cli_0_2_0_rc_2023_12_05_run_result_void_void_t; - -typedef wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_request_t exports_wasi_http_0_2_0_rc_2023_12_05_incoming_handler_own_incoming_request_t; - -typedef wasi_http_0_2_0_rc_2023_12_05_types_own_response_outparam_t exports_wasi_http_0_2_0_rc_2023_12_05_incoming_handler_own_response_outparam_t; - -// Imported Functions from `wasi:cli/environment@0.2.0-rc-2023-12-05` -// Get the POSIX-style environment variables. -// -// Each environment variable is provided as a pair of string variable names -// and string value. -// -// Morally, these are a value import, but until value imports are available -// in the component model, this import function should return the same -// values each time it is called. -extern void wasi_cli_0_2_0_rc_2023_12_05_environment_get_environment(bindings_list_tuple2_string_string_t *ret); -// Get the POSIX-style arguments to the program. -extern void wasi_cli_0_2_0_rc_2023_12_05_environment_get_arguments(bindings_list_string_t *ret); -// Return a path that programs should use as their initial current working -// directory, interpreting `.` as shorthand for this. -extern bool wasi_cli_0_2_0_rc_2023_12_05_environment_initial_cwd(bindings_string_t *ret); - -// Imported Functions from `wasi:cli/exit@0.2.0-rc-2023-12-05` -// Exit the current instance and any linked instances. -extern void wasi_cli_0_2_0_rc_2023_12_05_exit_exit(wasi_cli_0_2_0_rc_2023_12_05_exit_result_void_void_t *status); - -// Imported Functions from `wasi:io/error@0.2.0-rc-2023-11-10` -// Returns a string that is suitable to assist humans in debugging -// this error. -// -// WARNING: The returned string should not be consumed mechanically! -// It may change across platforms, hosts, or other implementation -// details. Parsing this string is a major platform-compatibility -// hazard. -extern void wasi_io_0_2_0_rc_2023_11_10_error_method_error_to_debug_string(wasi_io_0_2_0_rc_2023_11_10_error_borrow_error_t self, bindings_string_t *ret); - -// Imported Functions from `wasi:io/poll@0.2.0-rc-2023-11-10` -// Return the readiness of a pollable. This function never blocks. -// -// Returns `true` when the pollable is ready, and `false` otherwise. -extern bool wasi_io_0_2_0_rc_2023_11_10_poll_method_pollable_ready(wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable_t self); -// `block` returns immediately if the pollable is ready, and otherwise -// blocks until ready. -// -// This function is equivalent to calling `poll.poll` on a list -// containing only this pollable. -extern void wasi_io_0_2_0_rc_2023_11_10_poll_method_pollable_block(wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable_t self); -// Poll for completion on a set of pollables. -// -// This function takes a list of pollables, which identify I/O sources of -// interest, and waits until one or more of the events is ready for I/O. -// -// The result `list` contains one or more indices of handles in the -// argument list that is ready for I/O. -// -// If the list contains more elements than can be indexed with a `u32` -// value, this function traps. -// -// A timeout can be implemented by adding a pollable from the -// wasi-clocks API to the list. -// -// This function does not return a `result`; polling in itself does not -// do any I/O so it doesn't fail. If any of the I/O sources identified by -// the pollables has an error, it is indicated by marking the source as -// being reaedy for I/O. -extern void wasi_io_0_2_0_rc_2023_11_10_poll_poll(wasi_io_0_2_0_rc_2023_11_10_poll_list_borrow_pollable_t *in, bindings_list_u32_t *ret); - -// Imported Functions from `wasi:io/streams@0.2.0-rc-2023-11-10` -// Perform a non-blocking read from the stream. -// -// This function returns a list of bytes containing the read data, -// when successful. The returned list will contain up to `len` bytes; -// it may return fewer than requested, but not more. The list is -// empty when no bytes are available for reading at this time. The -// pollable given by `subscribe` will be ready when more bytes are -// available. -// -// This function fails with a `stream-error` when the operation -// encounters an error, giving `last-operation-failed`, or when the -// stream is closed, giving `closed`. -// -// When the caller gives a `len` of 0, it represents a request to -// read 0 bytes. If the stream is still open, this call should -// succeed and return an empty list, or otherwise fail with `closed`. -// -// The `len` parameter is a `u64`, which could represent a list of u8 which -// is not possible to allocate in wasm32, or not desirable to allocate as -// as a return value by the callee. The callee may return a list of bytes -// less than `len` in size while more bytes are available for reading. -extern bool wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_read(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t self, uint64_t len, bindings_list_u8_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err); -// Read bytes from a stream, after blocking until at least one byte can -// be read. Except for blocking, behavior is identical to `read`. -extern bool wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_blocking_read(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t self, uint64_t len, bindings_list_u8_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err); -// Skip bytes from a stream. Returns number of bytes skipped. -// -// Behaves identical to `read`, except instead of returning a list -// of bytes, returns the number of bytes consumed from the stream. -extern bool wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_skip(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t self, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err); -// Skip bytes from a stream, after blocking until at least one byte -// can be skipped. Except for blocking behavior, identical to `skip`. -extern bool wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_blocking_skip(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t self, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err); -// Create a `pollable` which will resolve once either the specified stream -// has bytes available to read or the other end of the stream has been -// closed. -// The created `pollable` is a child resource of the `input-stream`. -// Implementations may trap if the `input-stream` is dropped before -// all derived `pollable`s created with this function are dropped. -extern wasi_io_0_2_0_rc_2023_11_10_streams_own_pollable_t wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_subscribe(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t self); -// Check readiness for writing. This function never blocks. -// -// Returns the number of bytes permitted for the next call to `write`, -// or an error. Calling `write` with more bytes than this function has -// permitted will trap. -// -// When this function returns 0 bytes, the `subscribe` pollable will -// become ready when this function will report at least 1 byte, or an -// error. -extern bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_check_write(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, uint64_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err); -// Perform a write. This function never blocks. -// -// Precondition: check-write gave permit of Ok(n) and contents has a -// length of less than or equal to n. Otherwise, this function will trap. -// -// returns Err(closed) without writing if the stream has closed since -// the last call to check-write provided a permit. -extern bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_write(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, bindings_list_u8_t *contents, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err); -// Perform a write of up to 4096 bytes, and then flush the stream. Block -// until all of these operations are complete, or an error occurs. -// -// This is a convenience wrapper around the use of `check-write`, -// `subscribe`, `write`, and `flush`, and is implemented with the -// following pseudo-code: -// -// ```text -// let pollable = this.subscribe(); -// while !contents.is_empty() { - // // Wait for the stream to become writable - // poll-one(pollable); - // let Ok(n) = this.check-write(); // eliding error handling - // let len = min(n, contents.len()); - // let (chunk, rest) = contents.split_at(len); - // this.write(chunk ); // eliding error handling - // contents = rest; - // } - // this.flush(); - // // Wait for completion of `flush` - // poll-one(pollable); - // // Check for any errors that arose during `flush` - // let _ = this.check-write(); // eliding error handling - // ``` - extern bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_write_and_flush(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, bindings_list_u8_t *contents, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err); - // Request to flush buffered output. This function never blocks. - // - // This tells the output-stream that the caller intends any buffered - // output to be flushed. the output which is expected to be flushed - // is all that has been passed to `write` prior to this call. - // - // Upon calling this function, the `output-stream` will not accept any - // writes (`check-write` will return `ok(0)`) until the flush has - // completed. The `subscribe` pollable will become ready when the - // flush has completed and the stream can accept more writes. - extern bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_flush(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err); - // Request to flush buffered output, and block until flush completes - // and stream is ready for writing again. - extern bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_flush(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err); - // Create a `pollable` which will resolve once the output-stream - // is ready for more writing, or an error has occured. When this - // pollable is ready, `check-write` will return `ok(n)` with n>0, or an - // error. - // - // If the stream is closed, this pollable is always ready immediately. - // - // The created `pollable` is a child resource of the `output-stream`. - // Implementations may trap if the `output-stream` is dropped before - // all derived `pollable`s created with this function are dropped. - extern wasi_io_0_2_0_rc_2023_11_10_streams_own_pollable_t wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_subscribe(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self); - // Write zeroes to a stream. - // - // this should be used precisely like `write` with the exact same - // preconditions (must use check-write first), but instead of - // passing a list of bytes, you simply pass the number of zero-bytes - // that should be written. - extern bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_write_zeroes(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, uint64_t len, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err); - // Perform a write of up to 4096 zeroes, and then flush the stream. - // Block until all of these operations are complete, or an error - // occurs. - // - // This is a convenience wrapper around the use of `check-write`, - // `subscribe`, `write-zeroes`, and `flush`, and is implemented with - // the following pseudo-code: - // - // ```text - // let pollable = this.subscribe(); - // while num_zeroes != 0 { - // // Wait for the stream to become writable - // poll-one(pollable); - // let Ok(n) = this.check-write(); // eliding error handling - // let len = min(n, num_zeroes); - // this.write-zeroes(len); // eliding error handling - // num_zeroes -= len; - // } - // this.flush(); - // // Wait for completion of `flush` - // poll-one(pollable); - // // Check for any errors that arose during `flush` - // let _ = this.check-write(); // eliding error handling - // ``` - extern bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_write_zeroes_and_flush(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, uint64_t len, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err); - // Read from one stream and write to another. - // - // The behavior of splice is equivelant to: - // 1. calling `check-write` on the `output-stream` - // 2. calling `read` on the `input-stream` with the smaller of the - // `check-write` permitted length and the `len` provided to `splice` - // 3. calling `write` on the `output-stream` with that read data. - // - // Any error reported by the call to `check-write`, `read`, or - // `write` ends the splice and reports that error. - // - // This function returns the number of bytes transferred; it may be less - // than `len`. - extern bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_splice(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t src, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err); - // Read from one stream and write to another, with blocking. - // - // This is similar to `splice`, except that it blocks until the - // `output-stream` is ready for writing, and the `input-stream` - // is ready for reading, before performing the `splice`. - extern bool wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_splice(wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t self, wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t src, uint64_t len, uint64_t *ret, wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *err); - - // Imported Functions from `wasi:cli/stdin@0.2.0-rc-2023-12-05` - extern wasi_cli_0_2_0_rc_2023_12_05_stdin_own_input_stream_t wasi_cli_0_2_0_rc_2023_12_05_stdin_get_stdin(void); - - // Imported Functions from `wasi:cli/stdout@0.2.0-rc-2023-12-05` - extern wasi_cli_0_2_0_rc_2023_12_05_stdout_own_output_stream_t wasi_cli_0_2_0_rc_2023_12_05_stdout_get_stdout(void); - - // Imported Functions from `wasi:cli/stderr@0.2.0-rc-2023-12-05` - extern wasi_cli_0_2_0_rc_2023_12_05_stderr_own_output_stream_t wasi_cli_0_2_0_rc_2023_12_05_stderr_get_stderr(void); - - // Imported Functions from `wasi:cli/terminal-stdin@0.2.0-rc-2023-12-05` - // If stdin is connected to a terminal, return a `terminal-input` handle - // allowing further interaction with it. - extern bool wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_get_terminal_stdin(wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_own_terminal_input_t *ret); - - // Imported Functions from `wasi:cli/terminal-stdout@0.2.0-rc-2023-12-05` - // If stdout is connected to a terminal, return a `terminal-output` handle - // allowing further interaction with it. - extern bool wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_get_terminal_stdout(wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_own_terminal_output_t *ret); - - // Imported Functions from `wasi:cli/terminal-stderr@0.2.0-rc-2023-12-05` - // If stderr is connected to a terminal, return a `terminal-output` handle - // allowing further interaction with it. - extern bool wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_get_terminal_stderr(wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_own_terminal_output_t *ret); - - // Imported Functions from `wasi:clocks/monotonic-clock@0.2.0-rc-2023-11-10` - // Read the current value of the clock. - // - // The clock is monotonic, therefore calling this function repeatedly will - // produce a sequence of non-decreasing values. - extern wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_instant_t wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_now(void); - // Query the resolution of the clock. Returns the duration of time - // corresponding to a clock tick. - extern wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_duration_t wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_resolution(void); - // Create a `pollable` which will resolve once the specified instant - // occured. - extern wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_own_pollable_t wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_subscribe_instant(wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_instant_t when); - // Create a `pollable` which will resolve once the given duration has - // elapsed, starting at the time at which this function was called. - // occured. - extern wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_own_pollable_t wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_subscribe_duration(wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_duration_t when); - - // Imported Functions from `wasi:clocks/wall-clock@0.2.0-rc-2023-11-10` - // Read the current value of the clock. - // - // This clock is not monotonic, therefore calling this function repeatedly - // will not necessarily produce a sequence of non-decreasing values. - // - // The returned timestamps represent the number of seconds since - // 1970-01-01T00:00:00Z, also known as [POSIX's Seconds Since the Epoch], - // also known as [Unix Time]. - // - // The nanoseconds field of the output is always less than 1000000000. - // - // [POSIX's Seconds Since the Epoch]: https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap04.html#tag_21_04_16 - // [Unix Time]: https://en.wikipedia.org/wiki/Unix_time - extern void wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_now(wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t *ret); - // Query the resolution of the clock. - // - // The nanoseconds field of the output is always less than 1000000000. - extern void wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_resolution(wasi_clocks_0_2_0_rc_2023_11_10_wall_clock_datetime_t *ret); - - // Imported Functions from `wasi:filesystem/types@0.2.0-rc-2023-11-10` - // Return a stream for reading from a file, if available. - // - // May fail with an error-code describing why the file cannot be read. - // - // Multiple read, write, and append streams may be active on the same open - // file and they do not interfere with each other. - // - // Note: This allows using `read-stream`, which is similar to `read` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_read_via_stream(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_11_10_types_own_input_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Return a stream for writing to a file, if available. - // - // May fail with an error-code describing why the file cannot be written. - // - // Note: This allows using `write-stream`, which is similar to `write` in - // POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_write_via_stream(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_11_10_types_own_output_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Return a stream for appending to a file, if available. - // - // May fail with an error-code describing why the file cannot be appended. - // - // Note: This allows using `write-stream`, which is similar to `write` with - // `O_APPEND` in in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_append_via_stream(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_own_output_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Provide file advisory information on a descriptor. - // - // This is similar to `posix_fadvise` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_advise(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t length, wasi_filesystem_0_2_0_rc_2023_11_10_types_advice_t advice, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Synchronize the data of a file to disk. - // - // This function succeeds with no effect if the file descriptor is not - // opened for writing. - // - // Note: This is similar to `fdatasync` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_sync_data(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Get flags associated with a descriptor. - // - // Note: This returns similar flags to `fcntl(fd, F_GETFL)` in POSIX. - // - // Note: This returns the value that was the `fs_flags` value returned - // from `fdstat_get` in earlier versions of WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_get_flags(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_flags_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Get the dynamic type of a descriptor. - // - // Note: This returns the same value as the `type` field of the `fd-stat` - // returned by `stat`, `stat-at` and similar. - // - // Note: This returns similar flags to the `st_mode & S_IFMT` value provided - // by `fstat` in POSIX. - // - // Note: This returns the value that was the `fs_filetype` value returned - // from `fdstat_get` in earlier versions of WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_get_type(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_type_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Adjust the size of an open file. If this increases the file's size, the - // extra bytes are filled with zeros. - // - // Note: This was called `fd_filestat_set_size` in earlier versions of WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_set_size(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t size, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Adjust the timestamps of an open file or directory. - // - // Note: This is similar to `futimens` in POSIX. - // - // Note: This was called `fd_filestat_set_times` in earlier versions of WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_set_times(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_new_timestamp_t *data_access_timestamp, wasi_filesystem_0_2_0_rc_2023_11_10_types_new_timestamp_t *data_modification_timestamp, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Read from a descriptor, without using and updating the descriptor's offset. - // - // This function returns a list of bytes containing the data that was - // read, along with a bool which, when true, indicates that the end of the - // file was reached. The returned list will contain up to `length` bytes; it - // may return fewer than requested, if the end of the file is reached or - // if the I/O operation is interrupted. - // - // In the future, this may change to return a `stream`. - // - // Note: This is similar to `pread` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_read(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t length, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t offset, bindings_tuple2_list_u8_bool_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Write to a descriptor, without using and updating the descriptor's offset. - // - // It is valid to write past the end of a file; the file is extended to the - // extent of the write, with bytes between the previous end and the start of - // the write set to zero. - // - // In the future, this may change to take a `stream`. - // - // Note: This is similar to `pwrite` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_write(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_list_u8_t *buffer, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t offset, wasi_filesystem_0_2_0_rc_2023_11_10_types_filesize_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Read directory entries from a directory. - // - // On filesystems where directories contain entries referring to themselves - // and their parents, often named `.` and `..` respectively, these entries - // are omitted. - // - // This always returns a new stream which starts at the beginning of the - // directory. Multiple streams may be active on the same directory, and they - // do not interfere with each other. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_read_directory(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_own_directory_entry_stream_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Synchronize the data and metadata of a file to disk. - // - // This function succeeds with no effect if the file descriptor is not - // opened for writing. - // - // Note: This is similar to `fsync` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_sync(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Create a directory. - // - // Note: This is similar to `mkdirat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_create_directory_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Return the attributes of an open file or directory. - // - // Note: This is similar to `fstat` in POSIX, except that it does not return - // device and inode information. For testing whether two descriptors refer to - // the same underlying filesystem object, use `is-same-object`. To obtain - // additional data that can be used do determine whether a file has been - // modified, use `metadata-hash`. - // - // Note: This was called `fd_filestat_get` in earlier versions of WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_stat(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_stat_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Return the attributes of a file or directory. - // - // Note: This is similar to `fstatat` in POSIX, except that it does not - // return device and inode information. See the `stat` description for a - // discussion of alternatives. - // - // Note: This was called `path_filestat_get` in earlier versions of WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_stat_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_stat_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Adjust the timestamps of a file or directory. - // - // Note: This is similar to `utimensat` in POSIX. - // - // Note: This was called `path_filestat_set_times` in earlier versions of - // WASI. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_set_times_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_new_timestamp_t *data_access_timestamp, wasi_filesystem_0_2_0_rc_2023_11_10_types_new_timestamp_t *data_modification_timestamp, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Create a hard link. - // - // Note: This is similar to `linkat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_link_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_path_flags_t old_path_flags, bindings_string_t *old_path, wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t new_descriptor, bindings_string_t *new_path, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Open a file or directory. - // - // The returned descriptor is not guaranteed to be the lowest-numbered - // descriptor not currently open/ it is randomized to prevent applications - // from depending on making assumptions about indexes, since this is - // error-prone in multi-threaded contexts. The returned descriptor is - // guaranteed to be less than 2**31. - // - // If `flags` contains `descriptor-flags::mutate-directory`, and the base - // descriptor doesn't have `descriptor-flags::mutate-directory` set, - // `open-at` fails with `error-code::read-only`. - // - // If `flags` contains `write` or `mutate-directory`, or `open-flags` - // contains `truncate` or `create`, and the base descriptor doesn't have - // `descriptor-flags::mutate-directory` set, `open-at` fails with - // `error-code::read-only`. - // - // Note: This is similar to `openat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_open_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_open_flags_t open_flags, wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_flags_t flags, wasi_filesystem_0_2_0_rc_2023_11_10_types_own_descriptor_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Read the contents of a symbolic link. - // - // If the contents contain an absolute or rooted path in the underlying - // filesystem, this function fails with `error-code::not-permitted`. - // - // Note: This is similar to `readlinkat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_readlink_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_string_t *path, bindings_string_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Remove a directory. - // - // Return `error-code::not-empty` if the directory is not empty. - // - // Note: This is similar to `unlinkat(fd, path, AT_REMOVEDIR)` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_remove_directory_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Rename a filesystem object. - // - // Note: This is similar to `renameat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_rename_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_string_t *old_path, wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t new_descriptor, bindings_string_t *new_path, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Create a symbolic link (also known as a "symlink"). - // - // If `old-path` starts with `/`, the function fails with - // `error-code::not-permitted`. - // - // Note: This is similar to `symlinkat` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_symlink_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_string_t *old_path, bindings_string_t *new_path, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Unlink a filesystem object that is not a directory. - // - // Return `error-code::is-directory` if the path refers to a directory. - // Note: This is similar to `unlinkat(fd, path, 0)` in POSIX. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_unlink_file_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Test whether two descriptors refer to the same filesystem object. - // - // In POSIX, this corresponds to testing whether the two descriptors have the - // same device (`st_dev`) and inode (`st_ino` or `d_ino`) numbers. - // wasi-filesystem does not expose device and inode numbers, so this function - // may be used instead. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_is_same_object(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t other); - // Return a hash of the metadata associated with a filesystem object referred - // to by a descriptor. - // - // This returns a hash of the last-modification timestamp and file size, and - // may also include the inode number, device number, birth timestamp, and - // other metadata fields that may change when the file is modified or - // replaced. It may also include a secret value chosen by the - // implementation and not otherwise exposed. - // - // Implementations are encourated to provide the following properties: - // - // - If the file is not modified or replaced, the computed hash value should - // usually not change. - // - If the object is modified or replaced, the computed hash value should - // usually change. - // - The inputs to the hash should not be easily computable from the - // computed hash. - // - // However, none of these is required. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_metadata_hash(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_metadata_hash_value_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Return a hash of the metadata associated with a filesystem object referred - // to by a directory descriptor and a relative path. - // - // This performs the same hash computation as `metadata-hash`. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_descriptor_metadata_hash_at(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_path_flags_t path_flags, bindings_string_t *path, wasi_filesystem_0_2_0_rc_2023_11_10_types_metadata_hash_value_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Read a single directory entry from a `directory-entry-stream`. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_method_directory_entry_stream_read_directory_entry(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_directory_entry_stream_t self, wasi_filesystem_0_2_0_rc_2023_11_10_types_option_directory_entry_t *ret, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *err); - // Attempts to extract a filesystem-related `error-code` from the stream - // `error` provided. - // - // Stream operations which return `stream-error::last-operation-failed` - // have a payload with more information about the operation that failed. - // This payload can be passed through to this function to see if there's - // filesystem-related information about the error to return. - // - // Note that this function is fallible because not all stream-related - // errors are filesystem-related errors. - extern bool wasi_filesystem_0_2_0_rc_2023_11_10_types_filesystem_error_code(wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_error_t err_, wasi_filesystem_0_2_0_rc_2023_11_10_types_error_code_t *ret); - - // Imported Functions from `wasi:filesystem/preopens@0.2.0-rc-2023-11-10` - // Return the set of preopened directories, and their path. - extern void wasi_filesystem_0_2_0_rc_2023_11_10_preopens_get_directories(wasi_filesystem_0_2_0_rc_2023_11_10_preopens_list_tuple2_own_descriptor_string_t *ret); - - // Imported Functions from `wasi:sockets/instance-network@0.2.0-rc-2023-11-10` - // Get a handle to the default network. - extern wasi_sockets_0_2_0_rc_2023_11_10_instance_network_own_network_t wasi_sockets_0_2_0_rc_2023_11_10_instance_network_instance_network(void); - - // Imported Functions from `wasi:sockets/udp@0.2.0-rc-2023-11-10` - // Bind the socket to a specific network on the provided IP address and port. - // - // If the IP address is zero (`0.0.0.0` in IPv4, `::` in IPv6), it is left to the implementation to decide which - // network interface(s) to bind to. - // If the port is zero, the socket will be bound to a random free port. - // - // Unlike in POSIX, this function is async. This enables interactive WASI hosts to inject permission prompts. - // - // # Typical `start` errors - // - `invalid-argument`: The `local-address` has the wrong address family. (EAFNOSUPPORT, EFAULT on Windows) - // - `invalid-state`: The socket is already bound. (EINVAL) - // - // # Typical `finish` errors - // - `address-in-use`: No ephemeral ports available. (EADDRINUSE, ENOBUFS on Windows) - // - `address-in-use`: Address is already in use. (EADDRINUSE) - // - `address-not-bindable`: `local-address` is not an address that the `network` can bind to. (EADDRNOTAVAIL) - // - `not-in-progress`: A `bind` operation is not in progress. - // - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_start_bind(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t *local_address, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_finish_bind(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - // Set up inbound & outbound communication channels, optionally to a specific peer. - // - // This function only changes the local socket configuration and does not generate any network traffic. - // On success, the `remote-address` of the socket is updated. The `local-address` may be updated as well, - // based on the best network path to `remote-address`. - // - // When a `remote-address` is provided, the returned streams are limited to communicating with that specific peer: - // - `send` can only be used to send to this destination. - // - `receive` will only return datagrams sent from the provided `remote-address`. - // - // This method may be called multiple times on the same socket to change its association, but - // only the most recently returned pair of streams will be operational. Implementations may trap if - // the streams returned by a previous invocation haven't been dropped yet before calling `stream` again. - // - // The POSIX equivalent in pseudo-code is: - // ```text - // if (was previously connected) { - // connect(s, AF_UNSPEC) - // } - // if (remote_address is Some) { - // connect(s, remote_address) - // } - // ``` - // - // Unlike in POSIX, the socket must already be explicitly bound. - // - // # Typical errors - // - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) - // - `invalid-argument`: `remote-address` is a non-IPv4-mapped IPv6 address, but the socket was bound to a specific IPv4-mapped IPv6 address. (or vice versa) - // - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EDESTADDRREQ, EADDRNOTAVAIL) - // - `invalid-argument`: The port in `remote-address` is set to 0. (EDESTADDRREQ, EADDRNOTAVAIL) - // - `invalid-state`: The socket is not bound. - // - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE, EADDRNOTAVAIL on Linux, EAGAIN on BSD) - // - `remote-unreachable`: The remote address is not reachable. (ECONNRESET, ENETRESET, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN, ENONET) - // - `connection-refused`: The connection was refused. (ECONNREFUSED) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_stream(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t *maybe_remote_address, wasi_sockets_0_2_0_rc_2023_11_10_udp_tuple2_own_incoming_datagram_stream_own_outgoing_datagram_stream_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - // Get the current bound address. - // - // POSIX mentions: - // > If the socket has not been bound to a local name, the value - // > stored in the object pointed to by `address` is unspecified. - // - // WASI is stricter and requires `local-address` to return `invalid-state` when the socket hasn't been bound yet. - // - // # Typical errors - // - `invalid-state`: The socket is not bound to any local address. - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_local_address(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - // Get the address the socket is currently streaming to. - // - // # Typical errors - // - `invalid-state`: The socket is not streaming to a specific remote address. (ENOTCONN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_remote_address(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - // Whether this is a IPv4 or IPv6 socket. - // - // Equivalent to the SO_DOMAIN socket option. - extern wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_address_family_t wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_address_family(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self); - // Whether IPv4 compatibility (dual-stack) mode is disabled or not. - // - // Equivalent to the IPV6_V6ONLY socket option. - // - // # Typical errors - // - `not-supported`: (get/set) `this` socket is an IPv4 socket. - // - `invalid-state`: (set) The socket is already bound. - // - `not-supported`: (set) Host does not support dual-stack sockets. (Implementations are not required to.) - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_ipv6_only(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_ipv6_only(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - // Equivalent to the IP_TTL & IPV6_UNICAST_HOPS socket options. - // - // If the provided value is 0, an `invalid-argument` error is returned. - // - // # Typical errors - // - `invalid-argument`: (set) The TTL value must be 1 or higher. - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_unicast_hop_limit(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, uint8_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_unicast_hop_limit(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, uint8_t value, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - // The kernel buffer space reserved for sends/receives on this socket. - // - // If the provided value is 0, an `invalid-argument` error is returned. - // Any other value will never cause an error, but it might be silently clamped and/or rounded. - // I.e. after setting a value, reading the same setting back may return a different value. - // - // Equivalent to the SO_RCVBUF and SO_SNDBUF socket options. - // - // # Typical errors - // - `invalid-argument`: (set) The provided value was 0. - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_send_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_set_send_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - // Create a `pollable` which will resolve once the socket is ready for I/O. - // - // Note: this function is here for WASI Preview2 only. - // It's planned to be removed when `future` is natively supported in Preview3. - extern wasi_sockets_0_2_0_rc_2023_11_10_udp_own_pollable_t wasi_sockets_0_2_0_rc_2023_11_10_udp_method_udp_socket_subscribe(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t self); - // Receive messages on the socket. - // - // This function attempts to receive up to `max-results` datagrams on the socket without blocking. - // The returned list may contain fewer elements than requested, but never more. - // - // This function returns successfully with an empty list when either: - // - `max-results` is 0, or: - // - `max-results` is greater than 0, but no results are immediately available. - // This function never returns `error(would-block)`. - // - // # Typical errors - // - `remote-unreachable`: The remote address is not reachable. (ECONNRESET, ENETRESET on Windows, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN, ENONET) - // - `connection-refused`: The connection was refused. (ECONNREFUSED) - // - // # References - // - - // - - // - - // - - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_incoming_datagram_stream_receive(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_incoming_datagram_stream_t self, uint64_t max_results, wasi_sockets_0_2_0_rc_2023_11_10_udp_list_incoming_datagram_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - // Create a `pollable` which will resolve once the stream is ready to receive again. - // - // Note: this function is here for WASI Preview2 only. - // It's planned to be removed when `future` is natively supported in Preview3. - extern wasi_sockets_0_2_0_rc_2023_11_10_udp_own_pollable_t wasi_sockets_0_2_0_rc_2023_11_10_udp_method_incoming_datagram_stream_subscribe(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_incoming_datagram_stream_t self); - // Check readiness for sending. This function never blocks. - // - // Returns the number of datagrams permitted for the next call to `send`, - // or an error. Calling `send` with more datagrams than this function has - // permitted will trap. - // - // When this function returns ok(0), the `subscribe` pollable will - // become ready when this function will report at least ok(1), or an - // error. - // - // Never returns `would-block`. - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_outgoing_datagram_stream_check_send(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_outgoing_datagram_stream_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - // Send messages on the socket. - // - // This function attempts to send all provided `datagrams` on the socket without blocking and - // returns how many messages were actually sent (or queued for sending). This function never - // returns `error(would-block)`. If none of the datagrams were able to be sent, `ok(0)` is returned. - // - // This function semantically behaves the same as iterating the `datagrams` list and sequentially - // sending each individual datagram until either the end of the list has been reached or the first error occurred. - // If at least one datagram has been sent successfully, this function never returns an error. - // - // If the input list is empty, the function returns `ok(0)`. - // - // Each call to `send` must be permitted by a preceding `check-send`. Implementations must trap if - // either `check-send` was not called or `datagrams` contains more items than `check-send` permitted. - // - // # Typical errors - // - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) - // - `invalid-argument`: `remote-address` is a non-IPv4-mapped IPv6 address, but the socket was bound to a specific IPv4-mapped IPv6 address. (or vice versa) - // - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EDESTADDRREQ, EADDRNOTAVAIL) - // - `invalid-argument`: The port in `remote-address` is set to 0. (EDESTADDRREQ, EADDRNOTAVAIL) - // - `invalid-argument`: The socket is in "connected" mode and `remote-address` is `some` value that does not match the address passed to `stream`. (EISCONN) - // - `invalid-argument`: The socket is not "connected" and no value for `remote-address` was provided. (EDESTADDRREQ) - // - `remote-unreachable`: The remote address is not reachable. (ECONNRESET, ENETRESET on Windows, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN, ENONET) - // - `connection-refused`: The connection was refused. (ECONNREFUSED) - // - `datagram-too-large`: The datagram is too large. (EMSGSIZE) - // - // # References - // - - // - - // - - // - - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_method_outgoing_datagram_stream_send(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_outgoing_datagram_stream_t self, wasi_sockets_0_2_0_rc_2023_11_10_udp_list_outgoing_datagram_t *datagrams, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_error_code_t *err); - // Create a `pollable` which will resolve once the stream is ready to send again. - // - // Note: this function is here for WASI Preview2 only. - // It's planned to be removed when `future` is natively supported in Preview3. - extern wasi_sockets_0_2_0_rc_2023_11_10_udp_own_pollable_t wasi_sockets_0_2_0_rc_2023_11_10_udp_method_outgoing_datagram_stream_subscribe(wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_outgoing_datagram_stream_t self); - - // Imported Functions from `wasi:sockets/udp-create-socket@0.2.0-rc-2023-11-10` - // Create a new UDP socket. - // - // Similar to `socket(AF_INET or AF_INET6, SOCK_DGRAM, IPPROTO_UDP)` in POSIX. - // - // This function does not require a network capability handle. This is considered to be safe because - // at time of creation, the socket is not bound to any `network` yet. Up to the moment `bind` is called, - // the socket is effectively an in-memory configuration object, unable to communicate with the outside world. - // - // All sockets are non-blocking. Use the wasi-poll interface to block on asynchronous operations. - // - // # Typical errors - // - `not-supported`: The specified `address-family` is not supported. (EAFNOSUPPORT) - // - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) - // - // # References: - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_create_udp_socket(wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_ip_address_family_t address_family, wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_own_udp_socket_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_error_code_t *err); - - // Imported Functions from `wasi:sockets/tcp@0.2.0-rc-2023-11-10` - // Bind the socket to a specific network on the provided IP address and port. - // - // If the IP address is zero (`0.0.0.0` in IPv4, `::` in IPv6), it is left to the implementation to decide which - // network interface(s) to bind to. - // If the TCP/UDP port is zero, the socket will be bound to a random free port. - // - // When a socket is not explicitly bound, the first invocation to a listen or connect operation will - // implicitly bind the socket. - // - // Unlike in POSIX, this function is async. This enables interactive WASI hosts to inject permission prompts. - // - // # Typical `start` errors - // - `invalid-argument`: The `local-address` has the wrong address family. (EAFNOSUPPORT, EFAULT on Windows) - // - `invalid-argument`: `local-address` is not a unicast address. (EINVAL) - // - `invalid-argument`: `local-address` is an IPv4-mapped IPv6 address, but the socket has `ipv6-only` enabled. (EINVAL) - // - `invalid-state`: The socket is already bound. (EINVAL) - // - // # Typical `finish` errors - // - `address-in-use`: No ephemeral ports available. (EADDRINUSE, ENOBUFS on Windows) - // - `address-in-use`: Address is already in use. (EADDRINUSE) - // - `address-not-bindable`: `local-address` is not an address that the `network` can bind to. (EADDRNOTAVAIL) - // - `not-in-progress`: A `bind` operation is not in progress. - // - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - // - // # Implementors note - // When binding to a non-zero port, this bind operation shouldn't be affected by the TIME_WAIT - // state of a recently closed socket on the same local address (i.e. the SO_REUSEADDR socket - // option should be set implicitly on platforms that require it). - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_start_bind(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_t *local_address, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_finish_bind(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // Connect to a remote endpoint. - // - // On success: - // - the socket is transitioned into the Connection state - // - a pair of streams is returned that can be used to read & write to the connection - // - // POSIX mentions: - // > If connect() fails, the state of the socket is unspecified. Conforming applications should - // > close the file descriptor and create a new socket before attempting to reconnect. - // - // WASI prescribes the following behavior: - // - If `connect` fails because an input/state validation error, the socket should remain usable. - // - If a connection was actually attempted but failed, the socket should become unusable for further network communication. - // Besides `drop`, any method after such a failure may return an error. - // - // # Typical `start` errors - // - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) - // - `invalid-argument`: `remote-address` is not a unicast address. (EINVAL, ENETUNREACH on Linux, EAFNOSUPPORT on MacOS) - // - `invalid-argument`: `remote-address` is an IPv4-mapped IPv6 address, but the socket has `ipv6-only` enabled. (EINVAL, EADDRNOTAVAIL on Illumos) - // - `invalid-argument`: `remote-address` is a non-IPv4-mapped IPv6 address, but the socket was bound to a specific IPv4-mapped IPv6 address. (or vice versa) - // - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EADDRNOTAVAIL on Windows) - // - `invalid-argument`: The port in `remote-address` is set to 0. (EADDRNOTAVAIL on Windows) - // - `invalid-argument`: The socket is already attached to a different network. The `network` passed to `connect` must be identical to the one passed to `bind`. - // - `invalid-state`: The socket is already in the Connection state. (EISCONN) - // - `invalid-state`: The socket is already in the Listener state. (EOPNOTSUPP, EINVAL on Windows) - // - // # Typical `finish` errors - // - `timeout`: Connection timed out. (ETIMEDOUT) - // - `connection-refused`: The connection was forcefully rejected. (ECONNREFUSED) - // - `connection-reset`: The connection was reset. (ECONNRESET) - // - `connection-aborted`: The connection was aborted. (ECONNABORTED) - // - `remote-unreachable`: The remote address is not reachable. (EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN, ENONET) - // - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE, EADDRNOTAVAIL on Linux, EAGAIN on BSD) - // - `not-in-progress`: A `connect` operation is not in progress. - // - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_start_connect(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_network_t network, wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_t *remote_address, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_finish_connect(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_tuple2_own_input_stream_own_output_stream_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // Start listening for new connections. - // - // Transitions the socket into the Listener state. - // - // Unlike POSIX: - // - this function is async. This enables interactive WASI hosts to inject permission prompts. - // - the socket must already be explicitly bound. - // - // # Typical `start` errors - // - `invalid-state`: The socket is not bound to any local address. (EDESTADDRREQ) - // - `invalid-state`: The socket is already in the Connection state. (EISCONN, EINVAL on BSD) - // - `invalid-state`: The socket is already in the Listener state. - // - // # Typical `finish` errors - // - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE) - // - `not-in-progress`: A `listen` operation is not in progress. - // - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_start_listen(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_finish_listen(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // Accept a new client socket. - // - // The returned socket is bound and in the Connection state. The following properties are inherited from the listener socket: - // - `address-family` - // - `ipv6-only` - // - `keep-alive-enabled` - // - `keep-alive-idle-time` - // - `keep-alive-interval` - // - `keep-alive-count` - // - `hop-limit` - // - `receive-buffer-size` - // - `send-buffer-size` - // - // On success, this function returns the newly accepted client socket along with - // a pair of streams that can be used to read & write to the connection. - // - // # Typical errors - // - `invalid-state`: Socket is not in the Listener state. (EINVAL) - // - `would-block`: No pending connections at the moment. (EWOULDBLOCK, EAGAIN) - // - `connection-aborted`: An incoming connection was pending, but was terminated by the client before this listener could accept it. (ECONNABORTED) - // - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_accept(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_tuple3_own_tcp_socket_own_input_stream_own_output_stream_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // Get the bound local address. - // - // POSIX mentions: - // > If the socket has not been bound to a local name, the value - // > stored in the object pointed to by `address` is unspecified. - // - // WASI is stricter and requires `local-address` to return `invalid-state` when the socket hasn't been bound yet. - // - // # Typical errors - // - `invalid-state`: The socket is not bound to any local address. - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_local_address(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // Get the remote address. - // - // # Typical errors - // - `invalid-state`: The socket is not connected to a remote address. (ENOTCONN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_remote_address(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // Whether the socket is listening for new connections. - // - // Equivalent to the SO_ACCEPTCONN socket option. - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_is_listening(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self); - // Whether this is a IPv4 or IPv6 socket. - // - // Equivalent to the SO_DOMAIN socket option. - extern wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_address_family_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_address_family(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self); - // Whether IPv4 compatibility (dual-stack) mode is disabled or not. - // - // Equivalent to the IPV6_V6ONLY socket option. - // - // # Typical errors - // - `invalid-state`: (set) The socket is already bound. - // - `not-supported`: (get/set) `this` socket is an IPv4 socket. - // - `not-supported`: (set) Host does not support dual-stack sockets. (Implementations are not required to.) - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_ipv6_only(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_ipv6_only(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // Hints the desired listen queue size. Implementations are free to ignore this. - // - // If the provided value is 0, an `invalid-argument` error is returned. - // Any other value will never cause an error, but it might be silently clamped and/or rounded. - // - // # Typical errors - // - `not-supported`: (set) The platform does not support changing the backlog size after the initial listen. - // - `invalid-argument`: (set) The provided value was 0. - // - `invalid-state`: (set) The socket is already in the Connection state. - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_listen_backlog_size(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // Enables or disables keepalive. - // - // The keepalive behavior can be adjusted using: - // - `keep-alive-idle-time` - // - `keep-alive-interval` - // - `keep-alive-count` - // These properties can be configured while `keep-alive-enabled` is false, but only come into effect when `keep-alive-enabled` is true. - // - // Equivalent to the SO_KEEPALIVE socket option. - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_enabled(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, bool *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_enabled(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, bool value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // Amount of time the connection has to be idle before TCP starts sending keepalive packets. - // - // If the provided value is 0, an `invalid-argument` error is returned. - // Any other value will never cause an error, but it might be silently clamped and/or rounded. - // I.e. after setting a value, reading the same setting back may return a different value. - // - // Equivalent to the TCP_KEEPIDLE socket option. (TCP_KEEPALIVE on MacOS) - // - // # Typical errors - // - `invalid-argument`: (set) The provided value was 0. - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_idle_time(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_duration_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_idle_time(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_duration_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // The time between keepalive packets. - // - // If the provided value is 0, an `invalid-argument` error is returned. - // Any other value will never cause an error, but it might be silently clamped and/or rounded. - // I.e. after setting a value, reading the same setting back may return a different value. - // - // Equivalent to the TCP_KEEPINTVL socket option. - // - // # Typical errors - // - `invalid-argument`: (set) The provided value was 0. - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_interval(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_duration_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_interval(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_duration_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // The maximum amount of keepalive packets TCP should send before aborting the connection. - // - // If the provided value is 0, an `invalid-argument` error is returned. - // Any other value will never cause an error, but it might be silently clamped and/or rounded. - // I.e. after setting a value, reading the same setting back may return a different value. - // - // Equivalent to the TCP_KEEPCNT socket option. - // - // # Typical errors - // - `invalid-argument`: (set) The provided value was 0. - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_keep_alive_count(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint32_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_keep_alive_count(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint32_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // Equivalent to the IP_TTL & IPV6_UNICAST_HOPS socket options. - // - // If the provided value is 0, an `invalid-argument` error is returned. - // - // # Typical errors - // - `invalid-argument`: (set) The TTL value must be 1 or higher. - // - `invalid-state`: (set) The socket is already in the Connection state. - // - `invalid-state`: (set) The socket is already in the Listener state. - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_hop_limit(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint8_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_hop_limit(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint8_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // The kernel buffer space reserved for sends/receives on this socket. - // - // If the provided value is 0, an `invalid-argument` error is returned. - // Any other value will never cause an error, but it might be silently clamped and/or rounded. - // I.e. after setting a value, reading the same setting back may return a different value. - // - // Equivalent to the SO_RCVBUF and SO_SNDBUF socket options. - // - // # Typical errors - // - `invalid-argument`: (set) The provided value was 0. - // - `invalid-state`: (set) The socket is already in the Connection state. - // - `invalid-state`: (set) The socket is already in the Listener state. - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_receive_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_send_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint64_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_set_send_buffer_size(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, uint64_t value, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - // Create a `pollable` which will resolve once the socket is ready for I/O. - // - // Note: this function is here for WASI Preview2 only. - // It's planned to be removed when `future` is natively supported in Preview3. - extern wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_pollable_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_subscribe(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self); - // Initiate a graceful shutdown. - // - // - receive: the socket is not expecting to receive any more data from the peer. All subsequent read - // operations on the `input-stream` associated with this socket will return an End Of Stream indication. - // Any data still in the receive queue at time of calling `shutdown` will be discarded. - // - send: the socket is not expecting to send any more data to the peer. All subsequent write - // operations on the `output-stream` associated with this socket will return an error. - // - both: same effect as receive & send combined. - // - // The shutdown function does not close (drop) the socket. - // - // # Typical errors - // - `invalid-state`: The socket is not in the Connection state. (ENOTCONN) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_method_tcp_socket_shutdown(wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t self, wasi_sockets_0_2_0_rc_2023_11_10_tcp_shutdown_type_t shutdown_type, wasi_sockets_0_2_0_rc_2023_11_10_tcp_error_code_t *err); - - // Imported Functions from `wasi:sockets/tcp-create-socket@0.2.0-rc-2023-11-10` - // Create a new TCP socket. - // - // Similar to `socket(AF_INET or AF_INET6, SOCK_STREAM, IPPROTO_TCP)` in POSIX. - // - // This function does not require a network capability handle. This is considered to be safe because - // at time of creation, the socket is not bound to any `network` yet. Up to the moment `bind`/`listen`/`connect` - // is called, the socket is effectively an in-memory configuration object, unable to communicate with the outside world. - // - // All sockets are non-blocking. Use the wasi-poll interface to block on asynchronous operations. - // - // # Typical errors - // - `not-supported`: The specified `address-family` is not supported. (EAFNOSUPPORT) - // - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) - // - // # References - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_create_tcp_socket(wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_ip_address_family_t address_family, wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_own_tcp_socket_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_error_code_t *err); - - // Imported Functions from `wasi:sockets/ip-name-lookup@0.2.0-rc-2023-11-10` - // Resolve an internet host name to a list of IP addresses. - // - // Unicode domain names are automatically converted to ASCII using IDNA encoding. - // If the input is an IP address string, the address is parsed and returned - // as-is without making any external requests. - // - // See the wasi-socket proposal README.md for a comparison with getaddrinfo. - // - // This function never blocks. It either immediately fails or immediately - // returns successfully with a `resolve-address-stream` that can be used - // to (asynchronously) fetch the results. - // - // # Typical errors - // - `invalid-argument`: `name` is a syntactically invalid domain name or IP address. - // - // # References: - // - - // - - // - - // - - extern bool wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_resolve_addresses(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_network_t network, bindings_string_t *name, wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_resolve_address_stream_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_error_code_t *err); - // Returns the next address from the resolver. - // - // This function should be called multiple times. On each call, it will - // return the next address in connection order preference. If all - // addresses have been exhausted, this function returns `none`. - // - // This function never returns IPv4-mapped IPv6 addresses. - // - // # Typical errors - // - `name-unresolvable`: Name does not exist or has no suitable associated IP addresses. (EAI_NONAME, EAI_NODATA, EAI_ADDRFAMILY) - // - `temporary-resolver-failure`: A temporary failure in name resolution occurred. (EAI_AGAIN) - // - `permanent-resolver-failure`: A permanent failure in name resolution occurred. (EAI_FAIL) - // - `would-block`: A result is not available yet. (EWOULDBLOCK, EAGAIN) - extern bool wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_method_resolve_address_stream_resolve_next_address(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_resolve_address_stream_t self, wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_option_ip_address_t *ret, wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_error_code_t *err); - // Create a `pollable` which will resolve once the stream is ready for I/O. - // - // Note: this function is here for WASI Preview2 only. - // It's planned to be removed when `future` is natively supported in Preview3. - extern wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_pollable_t wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_method_resolve_address_stream_subscribe(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_resolve_address_stream_t self); - - // Imported Functions from `wasi:random/random@0.2.0-rc-2023-11-10` - // Return `len` cryptographically-secure random or pseudo-random bytes. - // - // This function must produce data at least as cryptographically secure and - // fast as an adequately seeded cryptographically-secure pseudo-random - // number generator (CSPRNG). It must not block, from the perspective of - // the calling program, under any circumstances, including on the first - // request and on requests for numbers of bytes. The returned data must - // always be unpredictable. - // - // This function must always return fresh data. Deterministic environments - // must omit this function, rather than implementing it with deterministic - // data. - extern void wasi_random_0_2_0_rc_2023_11_10_random_get_random_bytes(uint64_t len, bindings_list_u8_t *ret); - // Return a cryptographically-secure random or pseudo-random `u64` value. - // - // This function returns the same type of data as `get-random-bytes`, - // represented as a `u64`. - extern uint64_t wasi_random_0_2_0_rc_2023_11_10_random_get_random_u64(void); - - // Imported Functions from `wasi:random/insecure@0.2.0-rc-2023-11-10` - // Return `len` insecure pseudo-random bytes. - // - // This function is not cryptographically secure. Do not use it for - // anything related to security. - // - // There are no requirements on the values of the returned bytes, however - // implementations are encouraged to return evenly distributed values with - // a long period. - extern void wasi_random_0_2_0_rc_2023_11_10_insecure_get_insecure_random_bytes(uint64_t len, bindings_list_u8_t *ret); - // Return an insecure pseudo-random `u64` value. - // - // This function returns the same type of pseudo-random data as - // `get-insecure-random-bytes`, represented as a `u64`. - extern uint64_t wasi_random_0_2_0_rc_2023_11_10_insecure_get_insecure_random_u64(void); - - // Imported Functions from `wasi:random/insecure-seed@0.2.0-rc-2023-11-10` - // Return a 128-bit value that may contain a pseudo-random value. - // - // The returned value is not required to be computed from a CSPRNG, and may - // even be entirely deterministic. Host implementations are encouraged to - // provide pseudo-random values to any program exposed to - // attacker-controlled content, to enable DoS protection built into many - // languages' hash-map implementations. - // - // This function is intended to only be called once, by a source language - // to initialize Denial Of Service (DoS) protection in its hash-map - // implementation. - // - // # Expected future evolution - // - // This will likely be changed to a value import, to prevent it from being - // called multiple times and potentially used for purposes other than DoS - // protection. - extern void wasi_random_0_2_0_rc_2023_11_10_insecure_seed_insecure_seed(bindings_tuple2_u64_u64_t *ret); - - // Imported Functions from `wasi:http/types@0.2.0-rc-2023-12-05` - // Attempts to extract a http-related `error` from the wasi:io `error` - // provided. - // - // Stream operations which return - // `wasi:io/stream/stream-error::last-operation-failed` have a payload of - // type `wasi:io/error/error` with more information about the operation - // that failed. This payload can be passed through to this function to see - // if there's http-related information about the error to return. - // - // Note that this function is fallible because not all io-errors are - // http-related errors. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_http_error_code(wasi_http_0_2_0_rc_2023_12_05_types_borrow_io_error_t err_, wasi_http_0_2_0_rc_2023_12_05_types_error_code_t *ret); - // Construct an empty HTTP Fields. - // - // The resulting `fields` is mutable. - extern wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t wasi_http_0_2_0_rc_2023_12_05_types_constructor_fields(void); - // Construct an HTTP Fields. - // - // The resulting `fields` is mutable. - // - // The list represents each key-value pair in the Fields. Keys - // which have multiple values are represented by multiple entries in this - // list with the same key. - // - // The tuple is a pair of the field key, represented as a string, and - // Value, represented as a list of bytes. In a valid Fields, all keys - // and values are valid UTF-8 strings. However, values are not always - // well-formed, so they are represented as a raw list of bytes. - // - // An error result will be returned if any header or value was - // syntactically invalid, or if a header was forbidden. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_static_fields_from_list(bindings_list_tuple2_field_key_field_value_t *entries, wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t *ret, wasi_http_0_2_0_rc_2023_12_05_types_header_error_t *err); - // Get all of the values corresponding to a key. If the key is not present - // in this `fields`, an empty list is returned. However, if the key is - // present but empty, this is represented by a list with one or more - // empty field-values present. - extern void wasi_http_0_2_0_rc_2023_12_05_types_method_fields_get(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self, wasi_http_0_2_0_rc_2023_12_05_types_field_key_t *name, bindings_list_field_value_t *ret); - // Returns `true` when the key is present in this `fields`. If the key is - // syntactically invalid, `false` is returned. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_fields_has(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self, wasi_http_0_2_0_rc_2023_12_05_types_field_key_t *name); - // Set all of the values for a key. Clears any existing values for that - // key, if they have been set. - // - // Fails with `header-error.immutable` if the `fields` are immutable. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_fields_set(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self, wasi_http_0_2_0_rc_2023_12_05_types_field_key_t *name, bindings_list_field_value_t *value, wasi_http_0_2_0_rc_2023_12_05_types_header_error_t *err); - // Delete all values for a key. Does nothing if no values for the key - // exist. - // - // Fails with `header-error.immutable` if the `fields` are immutable. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_fields_delete(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self, wasi_http_0_2_0_rc_2023_12_05_types_field_key_t *name, wasi_http_0_2_0_rc_2023_12_05_types_header_error_t *err); - // Append a value for a key. Does not change or delete any existing - // values for that key. - // - // Fails with `header-error.immutable` if the `fields` are immutable. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_fields_append(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self, wasi_http_0_2_0_rc_2023_12_05_types_field_key_t *name, wasi_http_0_2_0_rc_2023_12_05_types_field_value_t *value, wasi_http_0_2_0_rc_2023_12_05_types_header_error_t *err); - // Retrieve the full set of keys and values in the Fields. Like the - // constructor, the list represents each key-value pair. - // - // The outer list represents each key-value pair in the Fields. Keys - // which have multiple values are represented by multiple entries in this - // list with the same key. - extern void wasi_http_0_2_0_rc_2023_12_05_types_method_fields_entries(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self, bindings_list_tuple2_field_key_field_value_t *ret); - // Make a deep copy of the Fields. Equivelant in behavior to calling the - // `fields` constructor on the return value of `entries`. The resulting - // `fields` is mutable. - extern wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t wasi_http_0_2_0_rc_2023_12_05_types_method_fields_clone(wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t self); - // Returns the method of the incoming request. - extern void wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_method(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_method_t *ret); - // Returns the path with query parameters from the request, as a string. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_path_with_query(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t self, bindings_string_t *ret); - // Returns the protocol scheme from the request. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_scheme(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_scheme_t *ret); - // Returns the authority from the request, if it was present. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_authority(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t self, bindings_string_t *ret); - // Get the `headers` associated with the request. - // - // The returned `headers` resource is immutable: `set`, `append`, and - // `delete` operations will fail with `header-error.immutable`. - // - // The `headers` returned are a child resource: it must be dropped before - // the parent `incoming-request` is dropped. Dropping this - // `incoming-request` before all children are dropped will trap. - extern wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_headers(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t self); - // Gives the `incoming-body` associated with this request. Will only - // return success at most once, and subsequent calls will return error. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_consume(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t *ret); - // Construct a new `outgoing-request` with a default `method` of `GET`, and - // `none` values for `path-with-query`, `scheme`, and `authority`. - // - // * `headers` is the HTTP Headers for the Request. - // - // It is possible to construct, or manipulate with the accessor functions - // below, an `outgoing-request` with an invalid combination of `scheme` - // and `authority`, or `headers` which are not permitted to be sent. - // It is the obligation of the `outgoing-handler.handle` implementation - // to reject invalid constructions of `outgoing-request`. - extern wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_request_t wasi_http_0_2_0_rc_2023_12_05_types_constructor_outgoing_request(wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t headers); - // Returns the resource corresponding to the outgoing Body for this - // Request. - // - // Returns success on the first call: the `outgoing-body` resource for - // this `outgoing-request` can be retrieved at most once. Subsequent - // calls will return error. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_body(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t *ret); - // Get the Method for the Request. - extern void wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_method(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_method_t *ret); - // Set the Method for the Request. Fails if the string present in a - // `method.other` argument is not a syntactically valid method. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_method(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_method_t *method); - // Get the combination of the HTTP Path and Query for the Request. - // When `none`, this represents an empty Path and empty Query. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_path_with_query(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, bindings_string_t *ret); - // Set the combination of the HTTP Path and Query for the Request. - // When `none`, this represents an empty Path and empty Query. Fails is the - // string given is not a syntactically valid path and query uri component. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_path_with_query(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, bindings_string_t *maybe_path_with_query); - // Get the HTTP Related Scheme for the Request. When `none`, the - // implementation may choose an appropriate default scheme. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_scheme(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_scheme_t *ret); - // Set the HTTP Related Scheme for the Request. When `none`, the - // implementation may choose an appropriate default scheme. Fails if the - // string given is not a syntactically valid uri scheme. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_scheme(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, wasi_http_0_2_0_rc_2023_12_05_types_scheme_t *maybe_scheme); - // Get the HTTP Authority for the Request. A value of `none` may be used - // with Related Schemes which do not require an Authority. The HTTP and - // HTTPS schemes always require an authority. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_authority(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, bindings_string_t *ret); - // Set the HTTP Authority for the Request. A value of `none` may be used - // with Related Schemes which do not require an Authority. The HTTP and - // HTTPS schemes always require an authority. Fails if the string given is - // not a syntactically valid uri authority. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_authority(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self, bindings_string_t *maybe_authority); - // Get the headers associated with the Request. - // - // The returned `headers` resource is immutable: `set`, `append`, and - // `delete` operations will fail with `header-error.immutable`. - // - // This headers resource is a child: it must be dropped before the parent - // `outgoing-request` is dropped, or its ownership is transfered to - // another component by e.g. `outgoing-handler.handle`. - extern wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_headers(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t self); - // Construct a default `request-options` value. - extern wasi_http_0_2_0_rc_2023_12_05_types_own_request_options_t wasi_http_0_2_0_rc_2023_12_05_types_constructor_request_options(void); - // The timeout for the initial connect to the HTTP Server. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_connect_timeout(wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t self, wasi_http_0_2_0_rc_2023_12_05_types_duration_t *ret); - // Set the timeout for the initial connect to the HTTP Server. An error - // return value indicates that this timeout is not supported. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_set_connect_timeout(wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t self, wasi_http_0_2_0_rc_2023_12_05_types_duration_t *maybe_duration); - // The timeout for receiving the first byte of the Response body. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_first_byte_timeout(wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t self, wasi_http_0_2_0_rc_2023_12_05_types_duration_t *ret); - // Set the timeout for receiving the first byte of the Response body. An - // error return value indicates that this timeout is not supported. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_set_first_byte_timeout(wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t self, wasi_http_0_2_0_rc_2023_12_05_types_duration_t *maybe_duration); - // The timeout for receiving subsequent chunks of bytes in the Response - // body stream. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_between_bytes_timeout(wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t self, wasi_http_0_2_0_rc_2023_12_05_types_duration_t *ret); - // Set the timeout for receiving subsequent chunks of bytes in the Response - // body stream. An error return value indicates that this timeout is not - // supported. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_request_options_set_between_bytes_timeout(wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t self, wasi_http_0_2_0_rc_2023_12_05_types_duration_t *maybe_duration); - // Set the value of the `response-outparam` to either send a response, - // or indicate an error. - // - // This method consumes the `response-outparam` to ensure that it is - // called at most once. If it is never called, the implementation - // will respond with an error. - // - // The user may provide an `error` to `response` to allow the - // implementation determine how to respond with an HTTP error response. - extern void wasi_http_0_2_0_rc_2023_12_05_types_static_response_outparam_set(wasi_http_0_2_0_rc_2023_12_05_types_own_response_outparam_t param, wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_response_error_code_t *response); - // Returns the status code from the incoming response. - extern wasi_http_0_2_0_rc_2023_12_05_types_status_code_t wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_status(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response_t self); - // Returns the headers from the incoming response. - // - // The returned `headers` resource is immutable: `set`, `append`, and - // `delete` operations will fail with `header-error.immutable`. - // - // This headers resource is a child: it must be dropped before the parent - // `incoming-response` is dropped. - extern wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_headers(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response_t self); - // Returns the incoming body. May be called at most once. Returns error - // if called additional times. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_consume(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response_t self, wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t *ret); - // Returns the contents of the body, as a stream of bytes. - // - // Returns success on first call: the stream representing the contents - // can be retrieved at most once. Subsequent calls will return error. - // - // The returned `input-stream` resource is a child: it must be dropped - // before the parent `incoming-body` is dropped, or consumed by - // `incoming-body.finish`. - // - // This invariant ensures that the implementation can determine whether - // the user is consuming the contents of the body, waiting on the - // `future-trailers` to be ready, or neither. This allows for network - // backpressure is to be applied when the user is consuming the body, - // and for that backpressure to not inhibit delivery of the trailers if - // the user does not read the entire body. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_body_stream(wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_body_t self, wasi_http_0_2_0_rc_2023_12_05_types_own_input_stream_t *ret); - // Takes ownership of `incoming-body`, and returns a `future-trailers`. - // This function will trap if the `input-stream` child is still alive. - extern wasi_http_0_2_0_rc_2023_12_05_types_own_future_trailers_t wasi_http_0_2_0_rc_2023_12_05_types_static_incoming_body_finish(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t this_); - // Returns a pollable which becomes ready when either the trailers have - // been received, or an error has occured. When this pollable is ready, - // the `get` method will return `some`. - extern wasi_http_0_2_0_rc_2023_12_05_types_own_pollable_t wasi_http_0_2_0_rc_2023_12_05_types_method_future_trailers_subscribe(wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_trailers_t self); - // Returns the contents of the trailers, or an error which occured, - // once the future is ready. - // - // The outer `option` represents future readiness. Users can wait on this - // `option` to become `some` using the `subscribe` method. - // - // The outer `result` is used to retrieve the trailers or error at most - // once. It will be success on the first call in which the outer option - // is `some`, and error on subsequent calls. - // - // The inner `result` represents that either the HTTP Request or Response - // body, as well as any trailers, were received successfully, or that an - // error occured receiving them. The optional `trailers` indicates whether - // or not trailers were present in the body. - // - // When some `trailers` are returned by this method, the `trailers` - // resource is immutable, and a child. Use of the `set`, `append`, or - // `delete` methods will return an error, and the resource must be - // dropped before the parent `future-trailers` is dropped. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_future_trailers_get(wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_trailers_t self, wasi_http_0_2_0_rc_2023_12_05_types_result_result_option_own_trailers_error_code_void_t *ret); - // Construct an `outgoing-response`, with a default `status-code` of `200`. - // If a different `status-code` is needed, it must be set via the - // `set-status-code` method. - // - // * `headers` is the HTTP Headers for the Response. - extern wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_response_t wasi_http_0_2_0_rc_2023_12_05_types_constructor_outgoing_response(wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t headers); - // Get the HTTP Status Code for the Response. - extern wasi_http_0_2_0_rc_2023_12_05_types_status_code_t wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_status_code(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response_t self); - // Set the HTTP Status Code for the Response. Fails if the status-code - // given is not a valid http status code. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_set_status_code(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response_t self, wasi_http_0_2_0_rc_2023_12_05_types_status_code_t status_code); - // Get the headers associated with the Request. - // - // The returned `headers` resource is immutable: `set`, `append`, and - // `delete` operations will fail with `header-error.immutable`. - // - // This headers resource is a child: it must be dropped before the parent - // `outgoing-request` is dropped, or its ownership is transfered to - // another component by e.g. `outgoing-handler.handle`. - extern wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_headers(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response_t self); - // Returns the resource corresponding to the outgoing Body for this Response. - // - // Returns success on the first call: the `outgoing-body` resource for - // this `outgoing-response` can be retrieved at most once. Subsequent - // calls will return error. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_body(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response_t self, wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t *ret); - // Returns a stream for writing the body contents. - // - // The returned `output-stream` is a child resource: it must be dropped - // before the parent `outgoing-body` resource is dropped (or finished), - // otherwise the `outgoing-body` drop or `finish` will trap. - // - // Returns success on the first call: the `output-stream` resource for - // this `outgoing-body` may be retrieved at most once. Subsequent calls - // will return error. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_body_write(wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_body_t self, wasi_http_0_2_0_rc_2023_12_05_types_own_output_stream_t *ret); - // Finalize an outgoing body, optionally providing trailers. This must be - // called to signal that the response is complete. If the `outgoing-body` - // is dropped without calling `outgoing-body.finalize`, the implementation - // should treat the body as corrupted. - // - // Fails if the body's `outgoing-request` or `outgoing-response` was - // constructed with a Content-Length header, and the contents written - // to the body (via `write`) does not match the value given in the - // Content-Length. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_static_outgoing_body_finish(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t this_, wasi_http_0_2_0_rc_2023_12_05_types_own_trailers_t *maybe_trailers, wasi_http_0_2_0_rc_2023_12_05_types_error_code_t *err); - // Returns a pollable which becomes ready when either the Response has - // been received, or an error has occured. When this pollable is ready, - // the `get` method will return `some`. - extern wasi_http_0_2_0_rc_2023_12_05_types_own_pollable_t wasi_http_0_2_0_rc_2023_12_05_types_method_future_incoming_response_subscribe(wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response_t self); - // Returns the incoming HTTP Response, or an error, once one is ready. - // - // The outer `option` represents future readiness. Users can wait on this - // `option` to become `some` using the `subscribe` method. - // - // The outer `result` is used to retrieve the response or error at most - // once. It will be success on the first call in which the outer option - // is `some`, and error on subsequent calls. - // - // The inner `result` represents that either the incoming HTTP Response - // status and headers have recieved successfully, or that an error - // occured. Errors may also occur while consuming the response body, - // but those will be reported by the `incoming-body` and its - // `output-stream` child. - extern bool wasi_http_0_2_0_rc_2023_12_05_types_method_future_incoming_response_get(wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response_t self, wasi_http_0_2_0_rc_2023_12_05_types_result_result_own_incoming_response_error_code_void_t *ret); - - // Imported Functions from `wasi:http/outgoing-handler@0.2.0-rc-2023-12-05` - // This function is invoked with an outgoing HTTP Request, and it returns - // a resource `future-incoming-response` which represents an HTTP Response - // which may arrive in the future. - // - // The `options` argument accepts optional parameters for the HTTP - // protocol's transport layer. - // - // This function may return an error if the `outgoing-request` is invalid - // or not allowed to be made. Otherwise, protocol errors are reported - // through the `future-incoming-response`. - extern bool wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_handle(wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_own_outgoing_request_t request, wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_own_request_options_t *maybe_options, wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_own_future_incoming_response_t *ret, wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_error_code_t *err); - - // Exported Functions from `wasi:cli/run@0.2.0-rc-2023-12-05` - bool exports_wasi_cli_0_2_0_rc_2023_12_05_run_run(void); - - // Exported Functions from `wasi:http/incoming-handler@0.2.0-rc-2023-12-05` - void exports_wasi_http_0_2_0_rc_2023_12_05_incoming_handler_handle(exports_wasi_http_0_2_0_rc_2023_12_05_incoming_handler_own_incoming_request_t request, exports_wasi_http_0_2_0_rc_2023_12_05_incoming_handler_own_response_outparam_t response_out); - - // Helper Functions - - void bindings_tuple2_string_string_free(bindings_tuple2_string_string_t *ptr); - - void bindings_list_tuple2_string_string_free(bindings_list_tuple2_string_string_t *ptr); - - void bindings_list_string_free(bindings_list_string_t *ptr); - - void bindings_option_string_free(bindings_option_string_t *ptr); - - void wasi_cli_0_2_0_rc_2023_12_05_exit_result_void_void_free(wasi_cli_0_2_0_rc_2023_12_05_exit_result_void_void_t *ptr); - - extern void wasi_io_0_2_0_rc_2023_11_10_error_error_drop_own(wasi_io_0_2_0_rc_2023_11_10_error_own_error_t handle); - extern void wasi_io_0_2_0_rc_2023_11_10_error_error_drop_borrow(wasi_io_0_2_0_rc_2023_11_10_error_own_error_t handle); - - extern wasi_io_0_2_0_rc_2023_11_10_error_borrow_error_t wasi_io_0_2_0_rc_2023_11_10_error_borrow_error(wasi_io_0_2_0_rc_2023_11_10_error_own_error_t handle); - - extern void wasi_io_0_2_0_rc_2023_11_10_poll_pollable_drop_own(wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t handle); - extern void wasi_io_0_2_0_rc_2023_11_10_poll_pollable_drop_borrow(wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t handle); - - extern wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable_t wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable(wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t handle); - - void wasi_io_0_2_0_rc_2023_11_10_poll_list_borrow_pollable_free(wasi_io_0_2_0_rc_2023_11_10_poll_list_borrow_pollable_t *ptr); - - void bindings_list_u32_free(bindings_list_u32_t *ptr); - - void wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_free(wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t *ptr); - - extern void wasi_io_0_2_0_rc_2023_11_10_streams_input_stream_drop_own(wasi_io_0_2_0_rc_2023_11_10_streams_own_input_stream_t handle); - extern void wasi_io_0_2_0_rc_2023_11_10_streams_input_stream_drop_borrow(wasi_io_0_2_0_rc_2023_11_10_streams_own_input_stream_t handle); - - extern wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream(wasi_io_0_2_0_rc_2023_11_10_streams_own_input_stream_t handle); - - extern void wasi_io_0_2_0_rc_2023_11_10_streams_output_stream_drop_own(wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t handle); - extern void wasi_io_0_2_0_rc_2023_11_10_streams_output_stream_drop_borrow(wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t handle); - - extern wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream(wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t handle); - - void bindings_list_u8_free(bindings_list_u8_t *ptr); - - void wasi_io_0_2_0_rc_2023_11_10_streams_result_list_u8_stream_error_free(wasi_io_0_2_0_rc_2023_11_10_streams_result_list_u8_stream_error_t *ptr); - - void wasi_io_0_2_0_rc_2023_11_10_streams_result_u64_stream_error_free(wasi_io_0_2_0_rc_2023_11_10_streams_result_u64_stream_error_t *ptr); - - void wasi_io_0_2_0_rc_2023_11_10_streams_result_void_stream_error_free(wasi_io_0_2_0_rc_2023_11_10_streams_result_void_stream_error_t *ptr); - - extern void wasi_cli_0_2_0_rc_2023_12_05_terminal_input_terminal_input_drop_own(wasi_cli_0_2_0_rc_2023_12_05_terminal_input_own_terminal_input_t handle); - extern void wasi_cli_0_2_0_rc_2023_12_05_terminal_input_terminal_input_drop_borrow(wasi_cli_0_2_0_rc_2023_12_05_terminal_input_own_terminal_input_t handle); - - extern wasi_cli_0_2_0_rc_2023_12_05_terminal_input_borrow_terminal_input_t wasi_cli_0_2_0_rc_2023_12_05_terminal_input_borrow_terminal_input(wasi_cli_0_2_0_rc_2023_12_05_terminal_input_own_terminal_input_t handle); - - extern void wasi_cli_0_2_0_rc_2023_12_05_terminal_output_terminal_output_drop_own(wasi_cli_0_2_0_rc_2023_12_05_terminal_output_own_terminal_output_t handle); - extern void wasi_cli_0_2_0_rc_2023_12_05_terminal_output_terminal_output_drop_borrow(wasi_cli_0_2_0_rc_2023_12_05_terminal_output_own_terminal_output_t handle); - - extern wasi_cli_0_2_0_rc_2023_12_05_terminal_output_borrow_terminal_output_t wasi_cli_0_2_0_rc_2023_12_05_terminal_output_borrow_terminal_output(wasi_cli_0_2_0_rc_2023_12_05_terminal_output_own_terminal_output_t handle); - - void wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_option_own_terminal_input_free(wasi_cli_0_2_0_rc_2023_12_05_terminal_stdin_option_own_terminal_input_t *ptr); - - void wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_option_own_terminal_output_free(wasi_cli_0_2_0_rc_2023_12_05_terminal_stdout_option_own_terminal_output_t *ptr); - - void wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_option_own_terminal_output_free(wasi_cli_0_2_0_rc_2023_12_05_terminal_stderr_option_own_terminal_output_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_option_datetime_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_stat_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_stat_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_new_timestamp_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_new_timestamp_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_t *ptr); - - extern void wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_drop_own(wasi_filesystem_0_2_0_rc_2023_11_10_types_own_descriptor_t handle); - extern void wasi_filesystem_0_2_0_rc_2023_11_10_types_descriptor_drop_borrow(wasi_filesystem_0_2_0_rc_2023_11_10_types_own_descriptor_t handle); - - extern wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor_t wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_descriptor(wasi_filesystem_0_2_0_rc_2023_11_10_types_own_descriptor_t handle); - - extern void wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_stream_drop_own(wasi_filesystem_0_2_0_rc_2023_11_10_types_own_directory_entry_stream_t handle); - extern void wasi_filesystem_0_2_0_rc_2023_11_10_types_directory_entry_stream_drop_borrow(wasi_filesystem_0_2_0_rc_2023_11_10_types_own_directory_entry_stream_t handle); - - extern wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_directory_entry_stream_t wasi_filesystem_0_2_0_rc_2023_11_10_types_borrow_directory_entry_stream(wasi_filesystem_0_2_0_rc_2023_11_10_types_own_directory_entry_stream_t handle); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_input_stream_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_input_stream_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_output_stream_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_output_stream_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_void_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_flags_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_flags_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_type_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_type_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_tuple2_list_u8_bool_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_tuple2_list_u8_bool_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_filesize_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_filesize_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_directory_entry_stream_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_directory_entry_stream_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_stat_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_descriptor_stat_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_descriptor_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_own_descriptor_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_string_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_string_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_metadata_hash_value_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_metadata_hash_value_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_option_directory_entry_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_option_directory_entry_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_result_option_directory_entry_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_result_option_directory_entry_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_types_option_error_code_free(wasi_filesystem_0_2_0_rc_2023_11_10_types_option_error_code_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_preopens_tuple2_own_descriptor_string_free(wasi_filesystem_0_2_0_rc_2023_11_10_preopens_tuple2_own_descriptor_string_t *ptr); - - void wasi_filesystem_0_2_0_rc_2023_11_10_preopens_list_tuple2_own_descriptor_string_free(wasi_filesystem_0_2_0_rc_2023_11_10_preopens_list_tuple2_own_descriptor_string_t *ptr); - - extern void wasi_sockets_0_2_0_rc_2023_11_10_network_network_drop_own(wasi_sockets_0_2_0_rc_2023_11_10_network_own_network_t handle); - extern void wasi_sockets_0_2_0_rc_2023_11_10_network_network_drop_borrow(wasi_sockets_0_2_0_rc_2023_11_10_network_own_network_t handle); - - extern wasi_sockets_0_2_0_rc_2023_11_10_network_borrow_network_t wasi_sockets_0_2_0_rc_2023_11_10_network_borrow_network(wasi_sockets_0_2_0_rc_2023_11_10_network_own_network_t handle); - - void wasi_sockets_0_2_0_rc_2023_11_10_network_ip_address_free(wasi_sockets_0_2_0_rc_2023_11_10_network_ip_address_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_network_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_11_10_network_ip_socket_address_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_ip_socket_address_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_option_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_option_ip_socket_address_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_t *ptr); - - extern void wasi_sockets_0_2_0_rc_2023_11_10_udp_udp_socket_drop_own(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_udp_socket_t handle); - extern void wasi_sockets_0_2_0_rc_2023_11_10_udp_udp_socket_drop_borrow(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_udp_socket_t handle); - - extern wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket_t wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_udp_socket(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_udp_socket_t handle); - - extern void wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_stream_drop_own(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_incoming_datagram_stream_t handle); - extern void wasi_sockets_0_2_0_rc_2023_11_10_udp_incoming_datagram_stream_drop_borrow(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_incoming_datagram_stream_t handle); - - extern wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_incoming_datagram_stream_t wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_incoming_datagram_stream(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_incoming_datagram_stream_t handle); - - extern void wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_stream_drop_own(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_outgoing_datagram_stream_t handle); - extern void wasi_sockets_0_2_0_rc_2023_11_10_udp_outgoing_datagram_stream_drop_borrow(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_outgoing_datagram_stream_t handle); - - extern wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_outgoing_datagram_stream_t wasi_sockets_0_2_0_rc_2023_11_10_udp_borrow_outgoing_datagram_stream(wasi_sockets_0_2_0_rc_2023_11_10_udp_own_outgoing_datagram_stream_t handle); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_void_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_void_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_tuple2_own_incoming_datagram_stream_own_outgoing_datagram_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_tuple2_own_incoming_datagram_stream_own_outgoing_datagram_stream_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_ip_socket_address_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_ip_socket_address_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_bool_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_bool_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u8_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u8_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u64_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_u64_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_list_incoming_datagram_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_list_incoming_datagram_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_result_list_incoming_datagram_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_result_list_incoming_datagram_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_list_outgoing_datagram_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_list_outgoing_datagram_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_result_own_udp_socket_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_udp_create_socket_result_own_udp_socket_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_ip_socket_address_t *ptr); - - extern void wasi_sockets_0_2_0_rc_2023_11_10_tcp_tcp_socket_drop_own(wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_tcp_socket_t handle); - extern void wasi_sockets_0_2_0_rc_2023_11_10_tcp_tcp_socket_drop_borrow(wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_tcp_socket_t handle); - - extern wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket_t wasi_sockets_0_2_0_rc_2023_11_10_tcp_borrow_tcp_socket(wasi_sockets_0_2_0_rc_2023_11_10_tcp_own_tcp_socket_t handle); - - void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_void_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_tuple2_own_input_stream_own_output_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_tuple2_own_input_stream_own_output_stream_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_tuple3_own_tcp_socket_own_input_stream_own_output_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_tuple3_own_tcp_socket_own_input_stream_own_output_stream_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_ip_socket_address_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_ip_socket_address_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_bool_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_bool_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_duration_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_duration_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u32_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u32_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u8_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u8_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u64_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_result_u64_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_result_own_tcp_socket_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_tcp_create_socket_result_own_tcp_socket_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_ip_address_free(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_ip_address_t *ptr); - - extern void wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_resolve_address_stream_drop_own(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_resolve_address_stream_t handle); - extern void wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_resolve_address_stream_drop_borrow(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_resolve_address_stream_t handle); - - extern wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_resolve_address_stream_t wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_borrow_resolve_address_stream(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_own_resolve_address_stream_t handle); - - void wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_result_own_resolve_address_stream_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_result_own_resolve_address_stream_error_code_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_option_ip_address_free(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_option_ip_address_t *ptr); - - void wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_result_option_ip_address_error_code_free(wasi_sockets_0_2_0_rc_2023_11_10_ip_name_lookup_result_option_ip_address_error_code_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_method_free(wasi_http_0_2_0_rc_2023_12_05_types_method_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_scheme_free(wasi_http_0_2_0_rc_2023_12_05_types_scheme_t *ptr); - - void bindings_option_u16_free(bindings_option_u16_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_dns_error_payload_free(wasi_http_0_2_0_rc_2023_12_05_types_dns_error_payload_t *ptr); - - void bindings_option_u8_free(bindings_option_u8_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_tls_alert_received_payload_free(wasi_http_0_2_0_rc_2023_12_05_types_tls_alert_received_payload_t *ptr); - - void bindings_option_u32_free(bindings_option_u32_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_free(wasi_http_0_2_0_rc_2023_12_05_types_field_size_payload_t *ptr); - - void bindings_option_u64_free(bindings_option_u64_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_option_field_size_payload_free(wasi_http_0_2_0_rc_2023_12_05_types_option_field_size_payload_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_error_code_free(wasi_http_0_2_0_rc_2023_12_05_types_error_code_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_header_error_free(wasi_http_0_2_0_rc_2023_12_05_types_header_error_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_field_key_free(wasi_http_0_2_0_rc_2023_12_05_types_field_key_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_field_value_free(wasi_http_0_2_0_rc_2023_12_05_types_field_value_t *ptr); - - extern void wasi_http_0_2_0_rc_2023_12_05_types_fields_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t handle); - extern void wasi_http_0_2_0_rc_2023_12_05_types_fields_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t handle); - - extern wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields(wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t handle); - - extern void wasi_http_0_2_0_rc_2023_12_05_types_incoming_request_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_request_t handle); - extern void wasi_http_0_2_0_rc_2023_12_05_types_incoming_request_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_request_t handle); - - extern wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_request_t handle); - - extern void wasi_http_0_2_0_rc_2023_12_05_types_outgoing_request_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_request_t handle); - extern void wasi_http_0_2_0_rc_2023_12_05_types_outgoing_request_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_request_t handle); - - extern wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_request_t handle); - - extern void wasi_http_0_2_0_rc_2023_12_05_types_request_options_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_request_options_t handle); - extern void wasi_http_0_2_0_rc_2023_12_05_types_request_options_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_request_options_t handle); - - extern wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_request_options(wasi_http_0_2_0_rc_2023_12_05_types_own_request_options_t handle); - - extern void wasi_http_0_2_0_rc_2023_12_05_types_response_outparam_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_response_outparam_t handle); - extern void wasi_http_0_2_0_rc_2023_12_05_types_response_outparam_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_response_outparam_t handle); - - extern wasi_http_0_2_0_rc_2023_12_05_types_borrow_response_outparam_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_response_outparam(wasi_http_0_2_0_rc_2023_12_05_types_own_response_outparam_t handle); - - extern void wasi_http_0_2_0_rc_2023_12_05_types_incoming_response_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_response_t handle); - extern void wasi_http_0_2_0_rc_2023_12_05_types_incoming_response_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_response_t handle); - - extern wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_response_t handle); - - extern void wasi_http_0_2_0_rc_2023_12_05_types_incoming_body_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t handle); - extern void wasi_http_0_2_0_rc_2023_12_05_types_incoming_body_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t handle); - - extern wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_body_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_body(wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t handle); - - extern void wasi_http_0_2_0_rc_2023_12_05_types_future_trailers_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_future_trailers_t handle); - extern void wasi_http_0_2_0_rc_2023_12_05_types_future_trailers_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_future_trailers_t handle); - - extern wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_trailers_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_trailers(wasi_http_0_2_0_rc_2023_12_05_types_own_future_trailers_t handle); - - extern void wasi_http_0_2_0_rc_2023_12_05_types_outgoing_response_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_response_t handle); - extern void wasi_http_0_2_0_rc_2023_12_05_types_outgoing_response_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_response_t handle); - - extern wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_response_t handle); - - extern void wasi_http_0_2_0_rc_2023_12_05_types_outgoing_body_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t handle); - extern void wasi_http_0_2_0_rc_2023_12_05_types_outgoing_body_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t handle); - - extern wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_body_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_body(wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t handle); - - extern void wasi_http_0_2_0_rc_2023_12_05_types_future_incoming_response_drop_own(wasi_http_0_2_0_rc_2023_12_05_types_own_future_incoming_response_t handle); - extern void wasi_http_0_2_0_rc_2023_12_05_types_future_incoming_response_drop_borrow(wasi_http_0_2_0_rc_2023_12_05_types_own_future_incoming_response_t handle); - - extern wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response_t wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response(wasi_http_0_2_0_rc_2023_12_05_types_own_future_incoming_response_t handle); - - void wasi_http_0_2_0_rc_2023_12_05_types_option_error_code_free(wasi_http_0_2_0_rc_2023_12_05_types_option_error_code_t *ptr); - - void bindings_tuple2_field_key_field_value_free(bindings_tuple2_field_key_field_value_t *ptr); - - void bindings_list_tuple2_field_key_field_value_free(bindings_list_tuple2_field_key_field_value_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_result_own_fields_header_error_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_fields_header_error_t *ptr); - - void bindings_list_field_value_free(bindings_list_field_value_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_result_void_header_error_free(wasi_http_0_2_0_rc_2023_12_05_types_result_void_header_error_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_option_scheme_free(wasi_http_0_2_0_rc_2023_12_05_types_option_scheme_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_body_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_body_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_body_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_body_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_result_void_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_void_void_t *ptr); - - void bindings_option_duration_free(bindings_option_duration_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_response_error_code_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_response_error_code_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_result_own_input_stream_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_input_stream_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_option_own_trailers_free(wasi_http_0_2_0_rc_2023_12_05_types_option_own_trailers_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_result_option_own_trailers_error_code_free(wasi_http_0_2_0_rc_2023_12_05_types_result_option_own_trailers_error_code_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_result_result_option_own_trailers_error_code_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_result_option_own_trailers_error_code_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_option_result_result_option_own_trailers_error_code_void_free(wasi_http_0_2_0_rc_2023_12_05_types_option_result_result_option_own_trailers_error_code_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_result_own_output_stream_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_output_stream_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_result_void_error_code_free(wasi_http_0_2_0_rc_2023_12_05_types_result_void_error_code_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_response_error_code_free(wasi_http_0_2_0_rc_2023_12_05_types_result_own_incoming_response_error_code_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_result_result_own_incoming_response_error_code_void_free(wasi_http_0_2_0_rc_2023_12_05_types_result_result_own_incoming_response_error_code_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_types_option_result_result_own_incoming_response_error_code_void_free(wasi_http_0_2_0_rc_2023_12_05_types_option_result_result_own_incoming_response_error_code_void_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_error_code_free(wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_error_code_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_option_own_request_options_free(wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_option_own_request_options_t *ptr); - - void wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_result_own_future_incoming_response_error_code_free(wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_result_own_future_incoming_response_error_code_t *ptr); - - void exports_wasi_cli_0_2_0_rc_2023_12_05_run_result_void_void_free(exports_wasi_cli_0_2_0_rc_2023_12_05_run_result_void_void_t *ptr); - - // Transfers ownership of `s` into the string `ret` - void bindings_string_set(bindings_string_t *ret, char*s); - - // Creates a copy of the input nul-terminate string `s` and - // stores it into the component model string `ret`. - void bindings_string_dup(bindings_string_t *ret, const char*s); - - // Deallocates the string pointed to by `ret`, deallocating - // the memory behind the string. - void bindings_string_free(bindings_string_t *ret); - - #ifdef __cplusplus - } - #endif - #endif - \ No newline at end of file diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/bindings/bindings_component_type.o b/host-apis/wasi-0.2.0-rc-2023-12-05/bindings/bindings_component_type.o deleted file mode 100644 index b5788e88aa3b7bd2c79a1a674f2c76a0636c2b4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32716 zcmeHQ>ysqMQLmhtot@eDOhJM{B2m`sU=X$YRHYHoXo9|#Agqanny4`xs#od!Q7Z{P5=1xn!M&S%xA$&( zaof9n^Y)A0ty|u$n+u{+6&Y!?zh1#~$)y%-II4-oAWYI$m{vuF|7>)|aVrg?uqtYF z4?L=gY8V|+o&Nv@OR=9sgE9A@MGA-~a@6zDy-^dJ$@m~?$H9T`X{gjR9TvF5R@TAb zp`|L_kh5v?q>~%ND2&o54BDQ2P&&B^?bpB%KaQig!1bgio-tgP?R#nDb^L?zp_imF z7L+Pgx?tERdz7N6f`1i-f%dO3^D>MA%q=pr!pwNHvNLEUsTYlW#YL~%3I=`$e6M3R ziQf@e?-dZ@w}ze~pSijcgrjlF1mbxWy;q}g>OP^~B8?u=16tyhs7MKGRtJ7~B$jL9 zq?xb_Mv5A()WpToRw-g&hsP30D*!DQIR|=m7U-lOjA-p$L91>QR9OgkQ#8eTO`I*I z$4UlmP_JPIYzokD!3@YTWv|`y+kNjS4pN`C=z+*Mv)O1zVTzrcEQ#%!I9)zojXYKp zd*$txL$agS3OinRFiv`OETe8Vbk%jICZ2s4=(=MD6D&GcJ|^SQaU%qqN(exQUFJNO z6!Bm7hH{Xm+n>N5^h$LxUEGGYjdU?TrwI2ZJ$om#B=2xEI!k- zN|(&0RNEja-Ifd3mSmL_{;1~m4nN569oqjIc6^2EIo&2V@M3Y}i3<0Gp2~xOD%AVG z5kzL!)~8iKgWg=K9{MTvcn_Nj|BRvpe^s%Qg{XJ@fuH(9EJ8R#zl}$W(TEjk0?nGn ztv1>gMy<5n!@p75^J7Y&E$YgIRK*g#S*?Bg_18a(X8z~3e76MqVdz)I3iT7}zfEyv zA#O(~#Dj4MJ&{st)KsuSF@&* zQ%z|Ud4niC6ykiYjrWZodkMA&^HCz+DS$S8n5dKDLT)^^5$x?0fII=V6GPaw&=Yun z341Q=2&%1Wfa@lMIZvGdUg)HN?`raNqsz{V`6f$M9{Q;ny%hLordq?Ki}_=>v#Yaa z7hB_pB(h!1+II>7%r;b_GaenrSP<>S2rW=WpHCwaI17iVCYIF`03Aa&o`*V>4-$5=78L||_!nUuH2>9K8&V3Cdn9)c_uqiF zIE)Gp*Uk3Qx|}<1!bw)b#J0EQl2H?U@~yW@5m#a~n`qT3Wz&Rw9L6Xv4>RqJK1>>WbW19z%FJc^!o6ySdtA5Z8L)L(VRejVFzHZtW@&?g=Datc9fj3X|*a0VS* zazK9rpwG{wOK(2<6b08IV1I$*s6Hit1AqD0p)9N8p-;a^!Sfho_VG7__$!QiCMU~w zKj?i*pP}CK6x;yHZ)GUIDa5zsP<>u6j@skhM4vSjqPx3BQ@!;XeGU?fS*bJCH;pH^ zEWQI&mkeX3219N=4d68gp}WXaV~UIXdWLnq(6%PgUwjGqIewPN6m8`s);2W~KSJSi>_p zNh=rvdV_kGsV^fWeD?jW5Z}X?%Z9Q-_dN(Tp9+lINMAB6{I0O)o$o0oUYiAjMW+bo zeob7R)xR6Wa10M7a3r-$N?&r$!$lGqe8~`C@Md8+@Y5sT4<(MoMRIG_2u4yq>OKWm zDA>c!{l1{nU=L19u&sY58pfpkJ%V$r0JLE;k3FoW?79cw)TZ7wv+VyM#MN>orA+Fc zve?8bS{{EffaS!7Bphw1M;JlrIzw2UJ!Xi}XNT0g&e4(w^iP>;`bQ!D8N=;C+hSyu z1o}8+1ThOd#+UYj1e)|;i@d{kw4&7ctAe{t^NP7+8dz$6QFF+r3i{m{zK5}XzlN#|JmGLa<-phE22}qJ;Tu- z$yIYB3&t(Wt(x?+2=P;;fPa+pzphGk^n#JXDTFL42*_D~jlS$)&xyeFP$L3wJ44vK z*vQxP5NTh2lX^EOSO8CdoUQ+V3Gv@9KkZn#{wj#|+r+*RZwV;@-^#q%9|-X~a2C&) zEs-Csh2eJ*xV~v<{R&A@usUOw`{>BTSK&!s1J%DrQXqbxAP|3G6(0cpAxN-su$cf^ zGX4mpEK(m+p(;H4KPK@f?Em)CbfgXvYEl0b!EqHY;+7j6u%C(--S%$2w9rIEs5a%e z^TVR!&d+B0%G~H2R&+QW!T%}HRTUhDdr(ABRpBK>WM`rQ77i;RuI3=CiaN)Zp%?m1 zB^}EMz2B=WYW3VOVWcGi*!3O)l>?tvtF$KrYLY>A*;Q*?jIBvtts$KOmp@5pgxw4Y z#2m0Do*zC8;wT)#qebRolyDpJ0;}BCiVxw5A<~MJ3gS*^K{$IEIwlQp(rX`eI9qW= z$M=I94yaNR)@dK=PYQosZ9b{dYyMk7N?3ChxNi>t2~SEvY|uV}gcX{O?g^Q%!1~~z z$h0RZ4#`xl(nU+3d{hc{Q-dvu4mxm`G+gkT0V@$@ase36N+EB(FUZ&wQ;_kj6!JDs z2{o~%LstWYHV}!df{oYgg!65sP>x9`>$WH6p}}0A2BR8F;p|`&Ef1g9Wg2+uAerWS>rk3Z_d~i*IH&DPlMG}l|93+4U2^K;~9ICAD8Sc8IeC@bA3ubK9eK6F7uXM#Qiv2 zh(sg}8;j$xkF;gDBJ&K0O+7?9Vx!%Izla!BtRFNx2zheEV^Zq|-DowL3=bkCE)c~C z`zx`3I3BcOc)SC@o?xba3L!y!85zzI2FWxrhvmb1jgx2#(iU%XckHy(Kjbqp2eR7R z;Bl+)?3mWxh@`8SFn8SG_!gY;j4rX^AnXoWoR40ikk&veQ;CT9U=Sg3yClzSy2l!Y zwR#&wrG7TYrvFwO`6~qP5$hU<96rV{q$)$?wItvT=H!wD+eV-rIpHnpFH&5uv4LH7 zTDEJ<>*kJ}SgYMera(IP(AmS$vD5PL5HUy@rRGR3OPFfhHBJ>w(V;qbsD?aqxmQ)} zAST!hk-dn2n1Savz1J~W@(J*;7J-jS675D zA4Ov%E~KO^wg$YEleGf`@H5WW4#vr((LoDK{KA{#C~Ymk0ww91Ty7c8hAH%Sg2BK) zgyoZGs)Qr&VcUm2MV%OGZdMt#WR~@(A!? z^oOH#vd+J-MWTnuXCuF|JO;SYD2hRR9VpUtvW9<>al2mEA2RfG^q(e9KkH?H3YP=wNKNq4!rTOHCR&2 zWjCW9!{v#F%_A`13w^)S>>$i7e=$R1AK4r@My(DjfvR{0;;{e<{rG4BlfgfTe}OUk6R`wKHHQ%^)9fzdO*+88Fs_@P<5#ub-Or5G{tjHKqCVv zGxXlWprxS@;!=G0yIcn1iW4$&Kq%eez<9y<@s|XKSf|?=qN0~B-m83i0NJ%X*>#m0 zYHH4%71x}402d$_oA`7+!;Fshyy|ph73VRR$-^{P8KpW^UlM!eBiQ6h zbk3L#4r!#Jtq`#`%b;`>Q*RHY&H#DN<7~=p69B$cuGUUGPOY6_@TGHRzlD__y~q_D zQRU7%n8`~#6BWq5WZ7(_otWG15cGqob3oBx<~gGlz2~%ebV)|adT&qEKYL08R;t)=~@I6lbPuC zhWR^LW9yXxxYXdkEg#FKBn>p6?^AFA?E7=McV|w{vGAJbXxVPhB>$x@FQqCQo=_AyM)L&vdEYi~5pd*w#i28(@Z3_g)106|Q-`N-xOML)Kg#vyq2~vp6zrI)<0_7x{Eh zu*T|i7F8+;SD?TQ)i&_+So<47k*A~ub3Ahpk7A$Yd@5cfai6FCO=N~cgsr2vj}+-} z$DAcrwV$i%D5QU5ogw6ll|y6VAzVS^MP2Q3EwV1*%=Rw1j)O z^((sAWdqc3`axB%K#941S_jhO+hWs=f`Fm&JlWsflzWdsqbl?v!#;(jhlALPCvd#@ zAx>Ld1c~(ZDRu{2vck65RPgh__DU@nJ-oyJgE`y`MxL2fw>1m~@ZhTy)gIwLF5*H@ z(_R$|6gA$~|Eb2iS>qyVG$mxJ3kjSW5Zk2;epNL2_`p8y+lv}!9S)+zp?R+#Bb-5T zO?7Ru&x<2oH=3AHjYiUjprN1&$7~*d*Q}i#ziO#j(bRBN1kbjJY28H8R6}w@OK9oo z`vNx5wvk~ST|$Y2d7=Xw*fKceLvkToIHbT|mNL)LrCV~d8dSv|r8qA!PRCj2Kc^>R zp5_;m_Fv@<4*xoJ#|Zww2~GQG5>_lPD7 zp~I{)!w5aEHXnw|hahB|6=Y;XkhEPIcg%9~3F3rJ$CzIB41q@I2$jm1YNQ_OVmUTS z3&tSWB|e4fgkG$_*~lc-saBMs5_liZb0?krC^hSEqJdd zPQrwoVj7eU+%B+gRh)JX2@W`&s5*n;i#%KzplyLzj7Y} z7-jEVKi)$x`ggX^BMwO zrQRluxVrs1b3x7L+VZgV7F(zBAWe>h=P-2E=G@csBb$S~#>g!nP4UDV=Iwa?JhQo}=*9Jn$iwun`2AenKGtjDAF^@70m z-_)ngOf2|KliS5;F@DaV=y z!z;38i671|aFV+-*tSN)DpG{9S{n!7uv0rgQ8|cBdSfJ`ju4YYm;}Lja5imcCW^(h z*JMMp{BDM3l{JDjG#QZhU}&7qc|)TQJDF{pGBB>jb-*a&rrlUN!FmGGw5W2D4?U-O zGREW}onVh^4ggJufdIo~&-YF*g@(%<{gB_Mu*%=*qam42(sEYMN_UWxZmQqBh8RBUKotCgdHo+WkR<_rW;o2UTeGr_;Uf z`#5q8kSxJbn9nsGx?B^sT*T?g^py0z0uC&?96+6st^IO_J3|BH?PctUP@j}Dy^Flj zti5nX7m#NVt~++#>F;9WJOmD{glL_$V@}s1Xw#jGH7D-GU_WgL!Wr+NlF1}Cow-R( zcv597DPUHkIsW^|MT_`vnM7r-lMMiC(U7iF*#=^K*|6I{bmSs>v7D7<9uLZZXR)%Z zJ7lknb5l+az|P{+RNoi4M8xjam&%!xnfAMOQSx>H@7_4!a%WkM^`MuFP60ZV+Rv+S z3U(b6^YokoNUj6-eK-Z#e5RcOZhLp9;5wgVov;DzA7?wAH~P}m$yxZ>M_BA42OQ>t zWRs4Pm~)*yDDn%EIEwPypmwdBV%Z7gm5+oMDLcT(RW{!J%v|awzi(-e7pA*W z?&=KZ6n?Goku+$4k`3uzn+U_YO1uh$()e8njsh8U2+D1lH-2q^VI*H0L&h@dkIRK< zkEU~4~Q!1=CrtzF) zXo!LMh}`+*2zSf6Xw0hkNnDS=#t7_wOGv0|`aOZ(9 z3P7{W--$vzCB-kZ|}q-kRWO(smVSVp=16f z5esSSpRfcL;R#X8zZ$O*A>NXIo=Y)2Nm1<5`+|%F zBE*KZDYdk#;AsODQ1az+U7@QhM3FlvG-$3q)uLE@7e+LT^UxF^G*oOUlJInjVo_Wz zqhU{ikk|fw7saCHT7D2GZ?ArKKZt`$?+?Dn_ZaH~Tjaa;9*cZSbcH+>;k>Co=%b2! zQ4?+<^3e`{eM4sP=S9A%T6bRLJ1_E`7y063JTLN9uZw@tDFB-n`F31(aEMoi`{zZz zE?Z0hoQR z7+2Txx)c4G*FE!1 z`1y4w`8$;4clPJkotTV^{Thdno9wQV`E@6nC%9f!UYjUIM}MwCmScf=bl-UeyV$?v z?vgLfuRD=hwlUw6W_7C+VNPWZC~r>E{D;fKZB zNch>zdq}v^DZtS$OW_j*Q=n01#Pv7$d~*>2-W%qY8}EMI3BKgvAd^Ae58}F$Cx1I$ zGTDCeOIsO!IDPRW?aLG|z9BMwrKDmVKJGC+49wFXFv{+Eso_Qfwd43cs|CL4%3StR zueq1KSjrxE*~?2c+AX}|&mRWF*M9K5{N**uZoRKogxFZYXX5*~4A|>L?L@r&NPMD+ zFWPs;Z9h(E1wZ);0NiD8FsZEKvO#>@6kh@5Pkq*J?%n#(-fj7i5gg*Wfi^$9yLVH3 pbdkTT3!Ih4O~N+{uHCO(?tI@+`9BFM - -using std::optional; -using std::string_view; -using std::tuple; -using std::unique_ptr; -using std::vector; - -// The host interface makes the assumption regularly that uint32_t is sufficient space to store a -// pointer. -static_assert(sizeof(uint32_t) == sizeof(void *)); - -typedef wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_request_t incoming_request_t; -typedef wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_request_t borrow_incoming_request_t; -typedef wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_response_t incoming_response_t; -typedef wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request_t borrow_outgoing_request_t; - -typedef wasi_http_0_2_0_rc_2023_12_05_types_own_future_incoming_response_t - future_incoming_response_t; -typedef wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response_t - borrow_future_incoming_response_t; - -typedef wasi_http_0_2_0_rc_2023_12_05_types_own_incoming_body_t incoming_body_t; -typedef wasi_http_0_2_0_rc_2023_12_05_types_own_outgoing_body_t outgoing_body_t; - -using field_key = wasi_http_0_2_0_rc_2023_12_05_types_field_key_t; -using field_value = wasi_http_0_2_0_rc_2023_12_05_types_field_value_t; - -typedef wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_body_t borrow_incoming_body_t; -typedef wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_body_t borrow_outgoing_body_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t own_pollable_t; -typedef wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable_t borrow_pollable_t; -typedef wasi_io_0_2_0_rc_2023_11_10_poll_list_borrow_pollable_t list_borrow_pollable_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_streams_own_input_stream_t own_input_stream_t; -typedef wasi_io_0_2_0_rc_2023_11_10_streams_borrow_input_stream_t borrow_input_stream_t; - -typedef wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t own_output_stream_t; - -namespace { - -/// This is the type contract for using the Own and Borrow templates. -template struct HandleOps {}; - -/// A convenience wrapper for constructing a borrow. As we only create borrows of things we already -/// own, this wrapper will never explicitly drop borrows. -template class Borrow final { - static constexpr const typename HandleOps::borrow invalid{std::numeric_limits::max()}; - HandleOps::borrow handle{Borrow::invalid}; - -public: - Borrow() = default; - - // Construct a borrow from an owned handle. - Borrow(HandleOps::own handle) : handle{HandleOps::borrow_owned(handle)} {} - - // Construct a borrow from a raw `Handle` value. - Borrow(host_api::Handle handle) : Borrow{typename HandleOps::own{handle}} {} - - // Convenience wrapper for constructing a borrow of a HandleState. - Borrow(host_api::HandleState *state) : Borrow{typename HandleOps::own{state->handle}} {} - - bool valid() const { return this->handle.__handle != Borrow::invalid.__handle; } - - operator bool() const { return this->valid(); } - - operator typename HandleOps::borrow() const { return this->handle; } -}; - -template <> struct HandleOps { - using own = wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t; - using borrow = wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields_t; - - static constexpr const auto borrow_owned = wasi_http_0_2_0_rc_2023_12_05_types_borrow_fields; -}; - -struct OutputStream {}; - -template <> struct HandleOps { - using own = wasi_io_0_2_0_rc_2023_11_10_streams_own_output_stream_t; - using borrow = wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream_t; - - static constexpr const auto borrow_owned = - wasi_io_0_2_0_rc_2023_11_10_streams_borrow_output_stream; -}; - -struct Pollable {}; - -template <> struct HandleOps { - using own = wasi_io_0_2_0_rc_2023_11_10_poll_own_pollable_t; - using borrow = wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable_t; - - static constexpr const auto borrow_owned = wasi_io_0_2_0_rc_2023_11_10_poll_borrow_pollable; -}; - -} // namespace - -size_t api::AsyncTask::select(std::vector &tasks) { - auto count = tasks.size(); - vector> handles; - for (const auto task : tasks) { - handles.emplace_back(task->id()); - } - auto list = list_borrow_pollable_t{ - reinterpret_cast::borrow *>(handles.data()), count}; - bindings_list_u32_t result{nullptr, 0}; - wasi_io_0_2_0_rc_2023_11_10_poll_poll(&list, &result); - MOZ_ASSERT(result.len > 0); - const auto ready_index = result.ptr[0]; - free(result.ptr); - - return ready_index; -} - -namespace host_api { - -HostString::HostString(const char *c_str) { - len = strlen(c_str); - ptr = JS::UniqueChars(static_cast(malloc(len + 1))); - std::memcpy(ptr.get(), c_str, len); - ptr[len] = '\0'; -} - -namespace { - -template HostString to_host_string(T str) { - return {JS::UniqueChars(reinterpret_cast(str.ptr)), str.len}; -} - -auto bindings_string_to_host_string = to_host_string; - -template T from_string_view(std::string_view str) { - return T{ - .ptr = (uint8_t *)str.data(), - .len = str.size(), - }; -} - -auto string_view_to_world_string = from_string_view; - -HostString scheme_to_string(const wasi_http_0_2_0_rc_2023_12_05_types_scheme_t scheme) { - if (scheme.tag == WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_SCHEME_HTTP) { - return {"http:"}; - } - if (scheme.tag == WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_SCHEME_HTTPS) { - return {"https:"}; - } - return to_host_string(scheme.val.other); -} - -} // namespace - -Result Random::get_bytes(size_t num_bytes) { - Result res; - - bindings_list_u8_t list{}; - wasi_random_0_2_0_rc_2023_11_10_random_get_random_bytes(num_bytes, &list); - auto ret = HostBytes{ - std::unique_ptr{list.ptr}, - list.len, - }; - res.emplace(std::move(ret)); - - return res; -} - -Result Random::get_u32() { - return Result::ok(wasi_random_0_2_0_rc_2023_11_10_random_get_random_u64()); -} - -uint64_t MonotonicClock::now() { return wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_now(); } - -uint64_t MonotonicClock::resolution() { - return wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_resolution(); -} - -int32_t MonotonicClock::subscribe(const uint64_t when, const bool absolute) { - if (absolute) { - return wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_subscribe_instant(when).__handle; - } else { - return wasi_clocks_0_2_0_rc_2023_11_10_monotonic_clock_subscribe_duration(when).__handle; - } -} - -void MonotonicClock::unsubscribe(const int32_t handle_id) { - wasi_io_0_2_0_rc_2023_11_10_poll_pollable_drop_own(own_pollable_t{handle_id}); -} - -HttpHeaders::HttpHeaders() { - this->handle_state_ = - new HandleState(wasi_http_0_2_0_rc_2023_12_05_types_constructor_fields().__handle); -} -HttpHeaders::HttpHeaders(Handle handle) { handle_state_ = new HandleState(handle); } - -// TODO: make this a factory function -HttpHeaders::HttpHeaders(const vector>> &entries) { - std::vector pairs; - - for (const auto &[name, values] : entries) { - for (const auto &value : values) { - pairs.emplace_back(from_string_view(name), from_string_view(value)); - } - } - - bindings_list_tuple2_field_key_field_value_t tuples{pairs.data(), entries.size()}; - - wasi_http_0_2_0_rc_2023_12_05_types_own_fields_t ret; - wasi_http_0_2_0_rc_2023_12_05_types_header_error_t err; - wasi_http_0_2_0_rc_2023_12_05_types_static_fields_from_list(&tuples, &ret, &err); - // TODO: handle `err` - - this->handle_state_ = new HandleState(ret.__handle); -} - -HttpHeaders::HttpHeaders(const HttpHeaders &headers) { - Borrow borrow(headers.handle_state_); - auto handle = wasi_http_0_2_0_rc_2023_12_05_types_method_fields_clone(borrow); - this->handle_state_ = new HandleState(handle.__handle); -} - -Result>> HttpHeaders::entries() const { - Result>> res; - MOZ_ASSERT(valid()); - - bindings_list_tuple2_field_key_field_value_t entries; - Borrow borrow(this->handle_state_); - wasi_http_0_2_0_rc_2023_12_05_types_method_fields_entries(borrow, &entries); - - vector> entries_vec; - for (int i = 0; i < entries.len; i++) { - auto key = entries.ptr[i].f0; - auto value = entries.ptr[i].f1; - entries_vec.emplace_back(to_host_string(key), to_host_string(value)); - } - // Free the outer list, but not the entries themselves. - free(entries.ptr); - res.emplace(std::move(entries_vec)); - - return res; -} - -Result> HttpHeaders::names() const { - Result> res; - MOZ_ASSERT(valid()); - - bindings_list_tuple2_field_key_field_value_t entries; - Borrow borrow(this->handle_state_); - wasi_http_0_2_0_rc_2023_12_05_types_method_fields_entries(borrow, &entries); - - vector names; - for (int i = 0; i < entries.len; i++) { - names.emplace_back(bindings_string_to_host_string(entries.ptr[i].f0)); - } - // Free the outer list, but not the entries themselves. - free(entries.ptr); - res.emplace(std::move(names)); - - return res; -} - -Result>> HttpHeaders::get(string_view name) const { - Result>> res; - MOZ_ASSERT(valid()); - - bindings_list_field_value_t values; - auto hdr = string_view_to_world_string(name); - Borrow borrow(this->handle_state_); - wasi_http_0_2_0_rc_2023_12_05_types_method_fields_get(borrow, &hdr, &values); - - if (values.len > 0) { - std::vector names; - for (int i = 0; i < values.len; i++) { - names.emplace_back(to_host_string(values.ptr[i])); - } - // Free the outer list, but not the values themselves. - free(values.ptr); - res.emplace(std::move(names)); - } else { - res.emplace(std::nullopt); - } - - return res; -} - -Result HttpHeaders::set(string_view name, string_view value) { - MOZ_ASSERT(valid()); - auto hdr = from_string_view(name); - auto val = from_string_view(value); - bindings_list_field_value_t host_values{&val, 1}; - Borrow borrow(this->handle_state_); - - wasi_http_0_2_0_rc_2023_12_05_types_header_error_t err; - wasi_http_0_2_0_rc_2023_12_05_types_method_fields_set(borrow, &hdr, &host_values, &err); - - // TODO: handle `err` - - return {}; -} - -Result HttpHeaders::append(string_view name, string_view value) { - MOZ_ASSERT(valid()); - auto hdr = from_string_view(name); - auto val = from_string_view(value); - Borrow borrow(this->handle_state_); - - wasi_http_0_2_0_rc_2023_12_05_types_header_error_t err; - wasi_http_0_2_0_rc_2023_12_05_types_method_fields_append(borrow, &hdr, &val, &err); - - // TODO: handle `err` - - return {}; -} - -Result HttpHeaders::remove(string_view name) { - MOZ_ASSERT(valid()); - auto hdr = string_view_to_world_string(name); - Borrow borrow(this->handle_state_); - - wasi_http_0_2_0_rc_2023_12_05_types_header_error_t err; - wasi_http_0_2_0_rc_2023_12_05_types_method_fields_delete(borrow, &hdr, &err); - - // TODO: handle `err` - - return {}; -} - -// TODO: convert to `Result` -string_view HttpRequestResponseBase::url() { - if (_url) { - return string_view(*_url); - } - - auto borrow = borrow_incoming_request_t{handle_state_->handle}; - - wasi_http_0_2_0_rc_2023_12_05_types_scheme_t scheme; - bool success; - success = wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_scheme(borrow, &scheme); - MOZ_RELEASE_ASSERT(success); - - bindings_string_t authority; - success = - wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_authority(borrow, &authority); - MOZ_RELEASE_ASSERT(success); - - bindings_string_t path; - success = - wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_path_with_query(borrow, &path); - MOZ_RELEASE_ASSERT(success); - - HostString scheme_str = scheme_to_string(scheme); - _url = new std::string(scheme_str.ptr.release(), scheme_str.len); - _url->append(string_view(bindings_string_to_host_string(authority))); - _url->append(string_view(bindings_string_to_host_string(path))); - - return string_view(*_url); -} - -bool write_to_outgoing_body(Borrow borrow, const uint8_t *ptr, const size_t len) { - // The write call doesn't mutate the buffer; the cast is just for the - // generated bindings. - bindings_list_u8_t list{const_cast(ptr), len}; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t err; - // TODO: proper error handling. - return wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_write(borrow, &list, &err); -} - -class OutgoingBodyHandleState final : HandleState { - Handle stream_handle_; - PollableHandle pollable_handle_; - - friend HttpOutgoingBody; - -public: - explicit OutgoingBodyHandleState(const Handle handle) - : HandleState(handle), pollable_handle_(INVALID_POLLABLE_HANDLE) { - const borrow_outgoing_body_t borrow = {handle}; - own_output_stream_t stream{}; - if (!wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_body_write(borrow, &stream)) { - MOZ_ASSERT_UNREACHABLE("Getting a body's stream should never fail"); - } - stream_handle_ = stream.__handle; - } -}; - -HttpOutgoingBody::HttpOutgoingBody(Handle handle) : Pollable() { - handle_state_ = new OutgoingBodyHandleState(handle); -} -Result HttpOutgoingBody::capacity() { - if (!valid()) { - // TODO: proper error handling for all 154 error codes. - return Result::err(154); - } - - auto *state = static_cast(this->handle_state_); - Borrow borrow(state->stream_handle_); - uint64_t capacity = 0; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t err; - if (!wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_check_write(borrow, &capacity, - &err)) { - return Result::err(154); - } - return Result::ok(capacity); -} - -Result HttpOutgoingBody::write(const uint8_t *bytes, size_t len) { - auto res = capacity(); - if (res.is_err()) { - // TODO: proper error handling for all 154 error codes. - return Result::err(154); - } - auto capacity = res.unwrap(); - auto bytes_to_write = std::min(len, static_cast(capacity)); - - auto *state = static_cast(this->handle_state_); - Borrow borrow(state->stream_handle_); - if (!write_to_outgoing_body(borrow, bytes, bytes_to_write)) { - return Result::err(154); - } - - return Result::ok(bytes_to_write); -} - -Result HttpOutgoingBody::write_all(const uint8_t *bytes, size_t len) { - if (!valid()) { - // TODO: proper error handling for all 154 error codes. - return Result::err({}); - } - - auto *state = static_cast(handle_state_); - Borrow borrow(state->stream_handle_); - - while (len > 0) { - auto capacity_res = capacity(); - if (capacity_res.is_err()) { - // TODO: proper error handling for all 154 error codes. - return Result::err(154); - } - auto capacity = capacity_res.unwrap(); - auto bytes_to_write = std::min(len, static_cast(capacity)); - if (!write_to_outgoing_body(borrow, bytes, len)) { - return Result::err(154); - } - - bytes += bytes_to_write; - len -= bytes_to_write; - } - - return {}; -} - -class BodyAppendTask final : public api::AsyncTask { - enum class State { - BlockedOnBoth, - BlockedOnIncoming, - BlockedOnOutgoing, - Ready, - Done, - }; - - HttpIncomingBody *incoming_body_; - HttpOutgoingBody *outgoing_body_; - PollableHandle incoming_pollable_; - PollableHandle outgoing_pollable_; - State state_; - - void set_state(const State state) { - MOZ_ASSERT(state_ != State::Done); - state_ = state; - } - -public: - explicit BodyAppendTask(HttpIncomingBody *incoming_body, HttpOutgoingBody *outgoing_body) - : incoming_body_(incoming_body), outgoing_body_(outgoing_body) { - auto res = incoming_body_->subscribe(); - MOZ_ASSERT(!res.is_err()); - incoming_pollable_ = res.unwrap(); - - res = outgoing_body_->subscribe(); - MOZ_ASSERT(!res.is_err()); - outgoing_pollable_ = res.unwrap(); - - state_ = State::BlockedOnBoth; - } - - [[nodiscard]] bool run(api::Engine *engine) override { - // If run is called while we're blocked on the incoming stream, that means that stream's - // pollable has resolved, so the stream must be ready. - if (state_ == State::BlockedOnBoth || state_ == State::BlockedOnIncoming) { - auto res = incoming_body_->read(0); - MOZ_ASSERT(!res.is_err()); - auto [bytes, done] = std::move(res.unwrap()); - if (done) { - set_state(State::Done); - return true; - } - set_state(State::BlockedOnOutgoing); - } - - uint64_t capacity = 0; - if (state_ == State::BlockedOnOutgoing) { - auto res = outgoing_body_->capacity(); - if (res.is_err()) { - return false; - } - capacity = res.unwrap(); - if (capacity > 0) { - set_state(State::Ready); - } else { - engine->queue_async_task(this); - return true; - } - } - - MOZ_ASSERT(state_ == State::Ready); - - // TODO: reuse a buffer for this loop - do { - auto res = incoming_body_->read(capacity); - if (res.is_err()) { - // TODO: proper error handling. - return false; - } - auto [done, bytes] = std::move(res.unwrap()); - if (bytes.len == 0 && !done) { - set_state(State::BlockedOnIncoming); - engine->queue_async_task(this); - return true; - } - - auto offset = 0; - while (bytes.len - offset > 0) { - // TODO: remove double checking of write-readiness - // TODO: make this async by storing the remaining chunk in the task and marking it as - // being blocked on write - auto write_res = outgoing_body_->write(bytes.ptr.get() + offset, bytes.len - offset); - if (write_res.is_err()) { - // TODO: proper error handling. - return false; - } - offset += write_res.unwrap(); - } - - if (done) { - set_state(State::Done); - return true; - } - - auto capacity_res = outgoing_body_->capacity(); - if (capacity_res.is_err()) { - // TODO: proper error handling. - return false; - } - capacity = capacity_res.unwrap(); - } while (capacity > 0); - - set_state(State::BlockedOnOutgoing); - engine->queue_async_task(this); - return true; - } - - [[nodiscard]] bool cancel(api::Engine *engine) override { - MOZ_ASSERT_UNREACHABLE("BodyAppendTask's semantics don't allow for cancellation"); - return true; - } - - [[nodiscard]] int32_t id() override { - if (state_ == State::BlockedOnBoth || state_ == State::BlockedOnIncoming) { - return incoming_pollable_; - } - - MOZ_ASSERT(state_ == State::BlockedOnOutgoing, - "BodyAppendTask should only be queued if it's not known to be ready"); - return outgoing_pollable_; - } - - void trace(JSTracer *trc) override { - // Nothing to trace. - } -}; - -Result HttpOutgoingBody::append(api::Engine *engine, HttpIncomingBody *other) { - MOZ_ASSERT(valid()); - engine->queue_async_task(new BodyAppendTask(other, this)); - return {}; -} - -Result HttpOutgoingBody::close() { - MOZ_ASSERT(valid()); - - auto state = static_cast(handle_state_); - // A blocking flush is required here to ensure that all buffered contents are - // actually written before finishing the body. - Borrow borrow{state->stream_handle_}; - - { - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t err; - bool success = - wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_blocking_flush(borrow, &err); - MOZ_RELEASE_ASSERT(success); - // TODO: handle `err` - } - - if (state->pollable_handle_ != INVALID_POLLABLE_HANDLE) { - wasi_io_0_2_0_rc_2023_11_10_poll_pollable_drop_own(own_pollable_t{state->pollable_handle_}); - } - wasi_io_0_2_0_rc_2023_11_10_streams_output_stream_drop_own({state->stream_handle_}); - - { - wasi_http_0_2_0_rc_2023_12_05_types_error_code_t err; - wasi_http_0_2_0_rc_2023_12_05_types_static_outgoing_body_finish({state->handle}, nullptr, &err); - // TODO: handle `err` - } - - delete handle_state_; - handle_state_ = nullptr; - - return {}; -} -Result HttpOutgoingBody::subscribe() { - auto state = static_cast(handle_state_); - if (state->pollable_handle_ == INVALID_POLLABLE_HANDLE) { - Borrow borrow(state->stream_handle_); - state->pollable_handle_ = - wasi_io_0_2_0_rc_2023_11_10_streams_method_output_stream_subscribe(borrow).__handle; - } - return Result::ok(state->pollable_handle_); -} - -void HttpOutgoingBody::unsubscribe() { - auto state = static_cast(handle_state_); - if (state->pollable_handle_ == INVALID_POLLABLE_HANDLE) { - return; - } - wasi_io_0_2_0_rc_2023_11_10_poll_pollable_drop_own(own_pollable_t{state->pollable_handle_}); - state->pollable_handle_ = INVALID_POLLABLE_HANDLE; -} - -static const char *http_method_names[9] = {"GET", "HEAD", "POST", "PUT", "DELETE", - "CONNECT", "OPTIONS", "TRACE", "PATCH"}; - -wasi_http_0_2_0_rc_2023_12_05_types_method_t http_method_to_host(string_view method_str) { - - if (method_str.empty()) { - return wasi_http_0_2_0_rc_2023_12_05_types_method_t{ - WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_GET}; - } - - auto method = method_str.begin(); - for (uint8_t i = 0; i < WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_OTHER; i++) { - auto name = http_method_names[i]; - if (strcasecmp(method, name) == 0) { - return wasi_http_0_2_0_rc_2023_12_05_types_method_t{i}; - } - } - - auto val = bindings_string_t{reinterpret_cast(const_cast(method)), - method_str.length()}; - return wasi_http_0_2_0_rc_2023_12_05_types_method_t{ - WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_OTHER, {val}}; -} - -HttpOutgoingRequest::HttpOutgoingRequest(HandleState *state) { this->handle_state_ = state; } - -HttpOutgoingRequest *HttpOutgoingRequest::make(string_view method_str, optional url_str, - HttpHeaders *headers) { - bindings_string_t path_with_query; - wasi_http_0_2_0_rc_2023_12_05_types_scheme_t scheme; - bindings_string_t authority; - - bindings_string_t *maybe_path_with_query = nullptr; - wasi_http_0_2_0_rc_2023_12_05_types_scheme_t *maybe_scheme = nullptr; - bindings_string_t *maybe_authority = nullptr; - - if (url_str) { - jsurl::SpecString val = url_str.value(); - jsurl::JSUrl *url = new_jsurl(&val); - jsurl::SpecSlice protocol = jsurl::protocol(url); - if (std::memcmp(protocol.data, "http:", protocol.len) == 0) { - scheme.tag = WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_SCHEME_HTTP; - } else if (std::memcmp(protocol.data, "https:", protocol.len) == 0) { - scheme.tag = WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_SCHEME_HTTPS; - } else { - scheme.tag = WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_SCHEME_OTHER; - scheme.val = {const_cast(protocol.data), protocol.len - 1}; - } - maybe_scheme = &scheme; - - jsurl::SpecSlice authority_slice = jsurl::authority(url); - authority = {const_cast(authority_slice.data), authority_slice.len}; - maybe_authority = &authority; - - jsurl::SpecSlice path_with_query_slice = jsurl::path_with_query(url); - path_with_query = {const_cast(path_with_query_slice.data), - path_with_query_slice.len}; - maybe_path_with_query = &path_with_query; - } - - auto handle = wasi_http_0_2_0_rc_2023_12_05_types_constructor_outgoing_request( - {headers->handle_state_->handle}); - { - auto borrow = wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request(handle); - - // TODO: error handling on result - auto method = http_method_to_host(method_str); - wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_method(borrow, &method); - - // TODO: error handling on result - wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_scheme(borrow, maybe_scheme); - - // TODO: error handling on result - wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_authority(borrow, - maybe_authority); - - // TODO: error handling on result - wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_set_path_with_query( - borrow, maybe_path_with_query); - } - - auto *state = new HandleState(handle.__handle); - auto *resp = new HttpOutgoingRequest(state); - - resp->headers_ = headers; - - return resp; -} - -Result HttpOutgoingRequest::method() { - MOZ_ASSERT(valid()); - MOZ_ASSERT(headers_); - return Result::ok(method_); -} - -Result HttpOutgoingRequest::headers() { - MOZ_ASSERT(valid()); - MOZ_ASSERT(headers_); - return Result::ok(headers_); -} - -Result HttpOutgoingRequest::body() { - typedef Result Res; - MOZ_ASSERT(valid()); - if (!this->body_) { - outgoing_body_t body; - if (!wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_request_body( - wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_request({handle_state_->handle}), - &body)) { - return Res::err(154); - } - this->body_ = new HttpOutgoingBody(body.__handle); - } - return Res::ok(body_); -} - -Result HttpOutgoingRequest::send() { - MOZ_ASSERT(valid()); - future_incoming_response_t ret; - wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_error_code_t err; - wasi_http_0_2_0_rc_2023_12_05_outgoing_handler_handle({handle_state_->handle}, nullptr, &ret, - &err); - auto res = new FutureHttpIncomingResponse(ret.__handle); - return Result::ok(res); -} - -class IncomingBodyHandleState final : HandleState { - Handle stream_handle_; - PollableHandle pollable_handle_; - - friend HttpIncomingBody; - -public: - explicit IncomingBodyHandleState(const Handle handle) - : HandleState(handle), pollable_handle_(INVALID_POLLABLE_HANDLE) { - const borrow_incoming_body_t borrow = {handle}; - own_input_stream_t stream{}; - if (!wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_body_stream(borrow, &stream)) { - MOZ_ASSERT_UNREACHABLE("Getting a body's stream should never fail"); - } - stream_handle_ = stream.__handle; - } -}; - -HttpIncomingBody::HttpIncomingBody(const Handle handle) : Pollable() { - handle_state_ = new IncomingBodyHandleState(handle); -} - -Result HttpIncomingBody::read(uint32_t chunk_size) { - typedef Result Res; - - bindings_list_u8_t ret{}; - wasi_io_0_2_0_rc_2023_11_10_streams_stream_error_t err{}; - auto borrow = borrow_input_stream_t( - {static_cast(handle_state_)->stream_handle_}); - bool success = - wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_read(borrow, chunk_size, &ret, &err); - if (!success) { - if (err.tag == WASI_IO_0_2_0_RC_2023_11_10_STREAMS_STREAM_ERROR_CLOSED) { - return Res::ok(ReadResult(true, nullptr, 0)); - } - return Res::err(154); - } - return Res::ok(ReadResult(false, unique_ptr(ret.ptr), ret.len)); -} - -// TODO: implement -Result HttpIncomingBody::close() { return {}; } - -Result HttpIncomingBody::subscribe() { - auto borrow = borrow_input_stream_t( - {static_cast(handle_state_)->stream_handle_}); - auto pollable = wasi_io_0_2_0_rc_2023_11_10_streams_method_input_stream_subscribe(borrow); - return Result::ok(pollable.__handle); -} -void HttpIncomingBody::unsubscribe() { - auto state = static_cast(handle_state_); - if (state->pollable_handle_ == INVALID_POLLABLE_HANDLE) { - return; - } - wasi_io_0_2_0_rc_2023_11_10_poll_pollable_drop_own(own_pollable_t{state->pollable_handle_}); - state->pollable_handle_ = INVALID_POLLABLE_HANDLE; -} - -FutureHttpIncomingResponse::FutureHttpIncomingResponse(Handle handle) { - handle_state_ = new HandleState(handle); -} - -Result> FutureHttpIncomingResponse::maybe_response() { - typedef Result> Res; - wasi_http_0_2_0_rc_2023_12_05_types_result_result_own_incoming_response_error_code_void_t res; - auto borrow = - wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response({handle_state_->handle}); - if (!wasi_http_0_2_0_rc_2023_12_05_types_method_future_incoming_response_get(borrow, &res)) { - return Res::ok(std::nullopt); - } - - MOZ_ASSERT(!res.is_err, - "FutureHttpIncomingResponse::poll must not be called again after succeeding once"); - - auto [is_err, val] = res.val.ok; - if (is_err) { - return Res::err(154); - } - - return Res::ok(new HttpIncomingResponse(val.ok.__handle)); -} - -Result FutureHttpIncomingResponse::subscribe() { - auto borrow = - wasi_http_0_2_0_rc_2023_12_05_types_borrow_future_incoming_response({handle_state_->handle}); - auto pollable = - wasi_http_0_2_0_rc_2023_12_05_types_method_future_incoming_response_subscribe(borrow); - return Result::ok(pollable.__handle); -} -void FutureHttpIncomingResponse::unsubscribe() { - // TODO: implement -} - -Result HttpIncomingResponse::status() { - if (status_ == UNSET_STATUS) { - if (!valid()) { - return Result::err(154); - } - auto borrow = - wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response_t({handle_state_->handle}); - status_ = wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_status(borrow); - } - return Result::ok(status_); -} - -HttpIncomingResponse::HttpIncomingResponse(Handle handle) { - handle_state_ = new HandleState(handle); -} - -Result HttpIncomingResponse::headers() { - if (!headers_) { - if (!valid()) { - return Result::err(154); - } - auto res = wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_headers( - wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response({handle_state_->handle})); - headers_ = new HttpHeaders(res.__handle); - } - - return Result::ok(headers_); -} - -Result HttpIncomingResponse::body() { - if (!body_) { - if (!valid()) { - return Result::err(154); - } - incoming_body_t body; - if (!wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_response_consume( - wasi_http_0_2_0_rc_2023_12_05_types_borrow_incoming_response({handle_state_->handle}), - &body)) { - return Result::err(154); - } - body_ = new HttpIncomingBody(body.__handle); - } - return Result::ok(body_); -} - -HttpOutgoingResponse::HttpOutgoingResponse(HandleState *state) { this->handle_state_ = state; } - -HttpOutgoingResponse *HttpOutgoingResponse::make(const uint16_t status, HttpHeaders *headers) { - wasi_http_0_2_0_rc_2023_12_05_types_own_headers_t owned{headers->handle_state_->handle}; - auto handle = wasi_http_0_2_0_rc_2023_12_05_types_constructor_outgoing_response(owned); - auto borrow = wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response(handle); - - auto *state = new HandleState(handle.__handle); - auto *resp = new HttpOutgoingResponse(state); - - // Set the status - if (status != 200) { - // TODO: handle success result - wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_set_status_code(borrow, status); - } - - // Freshen the headers handle to point to an immutable version of the outgoing headers. - headers->handle_state_->handle = - wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_headers(borrow).__handle; - - resp->status_ = status; - resp->headers_ = headers; - - return resp; -} - -Result HttpOutgoingResponse::headers() { - if (!valid()) { - return Result::err(154); - } - return Result::ok(headers_); -} - -Result HttpOutgoingResponse::body() { - typedef Result Res; - MOZ_ASSERT(valid()); - if (!this->body_) { - outgoing_body_t body; - if (!wasi_http_0_2_0_rc_2023_12_05_types_method_outgoing_response_body( - wasi_http_0_2_0_rc_2023_12_05_types_borrow_outgoing_response({handle_state_->handle}), - &body)) { - return Res::err(154); - } - this->body_ = new HttpOutgoingBody(body.__handle); - } - return Res::ok(this->body_); -} -Result HttpOutgoingResponse::status() { return Result::ok(status_); } - -Result HttpOutgoingResponse::send(ResponseOutparam out_param) { - // Drop the headers that we eagerly grab in the factory function - wasi_http_0_2_0_rc_2023_12_05_types_fields_drop_own({this->headers_->handle_state_->handle}); - - wasi_http_0_2_0_rc_2023_12_05_types_result_own_outgoing_response_error_code_t result; - - result.is_err = false; - result.val.ok = {this->handle_state_->handle}; - - wasi_http_0_2_0_rc_2023_12_05_types_static_response_outparam_set({out_param}, &result); - - return {}; -} - -HttpIncomingRequest::HttpIncomingRequest(Handle handle) { handle_state_ = new HandleState(handle); } - -Result HttpIncomingRequest::method() { - if (method_.empty()) { - if (!valid()) { - return Result::err(154); - } - } - wasi_http_0_2_0_rc_2023_12_05_types_method_t method; - wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_method( - borrow_incoming_request_t(handle_state_->handle), &method); - if (method.tag != WASI_HTTP_0_2_0_RC_2023_12_05_TYPES_METHOD_OTHER) { - method_ = std::string(http_method_names[method.tag], strlen(http_method_names[method.tag])); - } else { - method_ = std::string(reinterpret_cast(method.val.other.ptr), method.val.other.len); - bindings_string_free(&method.val.other); - } - return Result::ok(method_); -} - -Result HttpIncomingRequest::headers() { - if (!headers_) { - if (!valid()) { - return Result::err(154); - } - borrow_incoming_request_t borrow(handle_state_->handle); - auto res = wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_headers(borrow); - headers_ = new HttpHeaders(res.__handle); - } - - return Result::ok(headers_); -} - -Result HttpIncomingRequest::body() { - if (!body_) { - if (!valid()) { - return Result::err(154); - } - incoming_body_t body; - if (!wasi_http_0_2_0_rc_2023_12_05_types_method_incoming_request_consume( - borrow_incoming_request_t(handle_state_->handle), &body)) { - return Result::err(154); - } - body_ = new HttpIncomingBody(body.__handle); - } - return Result::ok(body_); -} - -} // namespace host_api diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/host_call.cpp b/host-apis/wasi-0.2.0-rc-2023-12-05/host_call.cpp deleted file mode 100644 index b4536140..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/host_call.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "host_api.h" - -namespace host_api { - -/* Returns false if an exception is set on `cx` and the caller should - immediately return to propagate the exception. */ -void handle_api_error(JSContext *cx, uint8_t err, int line, const char *func) { - JS_ReportErrorUTF8(cx, "%s: An error occurred while using the host API.\n", func); -} - -} // namespace host_api diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/include/exports.h b/host-apis/wasi-0.2.0-rc-2023-12-05/include/exports.h deleted file mode 100644 index 90a9b105..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/include/exports.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef WASI_PREVIEW2_EXPORTS -#define WASI_PREVIEW2_EXPORTS - -#define exports_wasi_http_incoming_handler \ - exports_wasi_http_0_2_0_rc_2023_12_05_incoming_handler_handle -#define exports_wasi_http_incoming_request \ - exports_wasi_http_0_2_0_rc_2023_12_05_incoming_handler_own_incoming_request_t -#define exports_wasi_http_response_outparam \ - exports_wasi_http_0_2_0_rc_2023_12_05_incoming_handler_own_response_outparam_t - -#define exports_wasi_cli_run_run exports_wasi_cli_0_2_0_rc_2023_12_05_run_run - -#endif diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/preview1-adapter-debug/wasi_snapshot_preview1.wasm b/host-apis/wasi-0.2.0-rc-2023-12-05/preview1-adapter-debug/wasi_snapshot_preview1.wasm deleted file mode 100755 index 1cf881e6ae98c8e3d5c617f8e031f94121ca6ead..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2468019 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

uKAAkdD3PFc+rz|&k8V9g~!G&gkx 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 z

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

8OP8EPH9C0`;t3fhZEl$sB3Ge|G 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ℑ-}~OBqm^@zD)NKxByWlFB~`@y5lzk^ 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

xxI?L9RC2dV)l%&fNP>3i|^ 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 z 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

vPw*o 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�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

S-bI3{7TRPKO%BZys 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%0DV$yFD?0uOaTZ07gD#$A=aMZi^00`kJ@`a>QI5f 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 D0NJ?L diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/preview1-adapter-release/wasi_snapshot_preview1.wasm b/host-apis/wasi-0.2.0-rc-2023-12-05/preview1-adapter-release/wasi_snapshot_preview1.wasm deleted file mode 100755 index f74b47c367cc1136c1d1a318833e8016a37205f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98729 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 diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/command-extended.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/command-extended.wit deleted file mode 100644 index 16f01bc2..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/command-extended.wit +++ /dev/null @@ -1,6 +0,0 @@ -// All of the same imports and exports available in the wasi:cli/command world -// with addition of HTTP proxy related imports: -world command-extended { - include wasi:cli/command@0.2.0-rc-2023-12-05; - import wasi:http/outgoing-handler@0.2.0-rc-2023-12-05; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/command.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/command.wit deleted file mode 100644 index cc82ae5d..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/command.wit +++ /dev/null @@ -1,7 +0,0 @@ -package wasi:cli@0.2.0-rc-2023-12-05; - -world command { - include imports; - - export run; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/environment.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/environment.wit deleted file mode 100644 index 70065233..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/environment.wit +++ /dev/null @@ -1,18 +0,0 @@ -interface environment { - /// Get the POSIX-style environment variables. - /// - /// Each environment variable is provided as a pair of string variable names - /// and string value. - /// - /// Morally, these are a value import, but until value imports are available - /// in the component model, this import function should return the same - /// values each time it is called. - get-environment: func() -> list>; - - /// Get the POSIX-style arguments to the program. - get-arguments: func() -> list; - - /// Return a path that programs should use as their initial current working - /// directory, interpreting `.` as shorthand for this. - initial-cwd: func() -> option; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/exit.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/exit.wit deleted file mode 100644 index d0c2b82a..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/exit.wit +++ /dev/null @@ -1,4 +0,0 @@ -interface exit { - /// Exit the current instance and any linked instances. - exit: func(status: result); -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/imports.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/imports.wit deleted file mode 100644 index 9965ea35..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/imports.wit +++ /dev/null @@ -1,20 +0,0 @@ -package wasi:cli@0.2.0-rc-2023-12-05; - -world imports { - include wasi:clocks/imports@0.2.0-rc-2023-11-10; - include wasi:filesystem/imports@0.2.0-rc-2023-11-10; - include wasi:sockets/imports@0.2.0-rc-2023-11-10; - include wasi:random/imports@0.2.0-rc-2023-11-10; - include wasi:io/imports@0.2.0-rc-2023-11-10; - - import environment; - import exit; - import stdin; - import stdout; - import stderr; - import terminal-input; - import terminal-output; - import terminal-stdin; - import terminal-stdout; - import terminal-stderr; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/run.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/run.wit deleted file mode 100644 index a70ee8c0..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/run.wit +++ /dev/null @@ -1,4 +0,0 @@ -interface run { - /// Run the program. - run: func() -> result; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/stdio.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/stdio.wit deleted file mode 100644 index 1b653b6e..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/stdio.wit +++ /dev/null @@ -1,17 +0,0 @@ -interface stdin { - use wasi:io/streams@0.2.0-rc-2023-11-10.{input-stream}; - - get-stdin: func() -> input-stream; -} - -interface stdout { - use wasi:io/streams@0.2.0-rc-2023-11-10.{output-stream}; - - get-stdout: func() -> output-stream; -} - -interface stderr { - use wasi:io/streams@0.2.0-rc-2023-11-10.{output-stream}; - - get-stderr: func() -> output-stream; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/terminal.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/terminal.wit deleted file mode 100644 index 47495769..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/cli/terminal.wit +++ /dev/null @@ -1,47 +0,0 @@ -interface terminal-input { - /// The input side of a terminal. - resource terminal-input; - - // In the future, this may include functions for disabling echoing, - // disabling input buffering so that keyboard events are sent through - // immediately, querying supported features, and so on. -} - -interface terminal-output { - /// The output side of a terminal. - resource terminal-output; - - // In the future, this may include functions for querying the terminal - // size, being notified of terminal size changes, querying supported - // features, and so on. -} - -/// An interface providing an optional `terminal-input` for stdin as a -/// link-time authority. -interface terminal-stdin { - use terminal-input.{terminal-input}; - - /// If stdin is connected to a terminal, return a `terminal-input` handle - /// allowing further interaction with it. - get-terminal-stdin: func() -> option; -} - -/// An interface providing an optional `terminal-output` for stdout as a -/// link-time authority. -interface terminal-stdout { - use terminal-output.{terminal-output}; - - /// If stdout is connected to a terminal, return a `terminal-output` handle - /// allowing further interaction with it. - get-terminal-stdout: func() -> option; -} - -/// An interface providing an optional `terminal-output` for stderr as a -/// link-time authority. -interface terminal-stderr { - use terminal-output.{terminal-output}; - - /// If stderr is connected to a terminal, return a `terminal-output` handle - /// allowing further interaction with it. - get-terminal-stderr: func() -> option; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/clocks/monotonic-clock.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/clocks/monotonic-clock.wit deleted file mode 100644 index 09ef32c3..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/clocks/monotonic-clock.wit +++ /dev/null @@ -1,45 +0,0 @@ -package wasi:clocks@0.2.0-rc-2023-11-10; -/// WASI Monotonic Clock is a clock API intended to let users measure elapsed -/// time. -/// -/// It is intended to be portable at least between Unix-family platforms and -/// Windows. -/// -/// A monotonic clock is a clock which has an unspecified initial value, and -/// successive reads of the clock will produce non-decreasing values. -/// -/// It is intended for measuring elapsed time. -interface monotonic-clock { - use wasi:io/poll@0.2.0-rc-2023-11-10.{pollable}; - - /// An instant in time, in nanoseconds. An instant is relative to an - /// unspecified initial value, and can only be compared to instances from - /// the same monotonic-clock. - type instant = u64; - - /// A duration of time, in nanoseconds. - type duration = u64; - - /// Read the current value of the clock. - /// - /// The clock is monotonic, therefore calling this function repeatedly will - /// produce a sequence of non-decreasing values. - now: func() -> instant; - - /// Query the resolution of the clock. Returns the duration of time - /// corresponding to a clock tick. - resolution: func() -> duration; - - /// Create a `pollable` which will resolve once the specified instant - /// occured. - subscribe-instant: func( - when: instant, - ) -> pollable; - - /// Create a `pollable` which will resolve once the given duration has - /// elapsed, starting at the time at which this function was called. - /// occured. - subscribe-duration: func( - when: duration, - ) -> pollable; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/clocks/wall-clock.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/clocks/wall-clock.wit deleted file mode 100644 index 8abb9a0c..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/clocks/wall-clock.wit +++ /dev/null @@ -1,42 +0,0 @@ -package wasi:clocks@0.2.0-rc-2023-11-10; -/// WASI Wall Clock is a clock API intended to let users query the current -/// time. The name "wall" makes an analogy to a "clock on the wall", which -/// is not necessarily monotonic as it may be reset. -/// -/// It is intended to be portable at least between Unix-family platforms and -/// Windows. -/// -/// A wall clock is a clock which measures the date and time according to -/// some external reference. -/// -/// External references may be reset, so this clock is not necessarily -/// monotonic, making it unsuitable for measuring elapsed time. -/// -/// It is intended for reporting the current date and time for humans. -interface wall-clock { - /// A time and date in seconds plus nanoseconds. - record datetime { - seconds: u64, - nanoseconds: u32, - } - - /// Read the current value of the clock. - /// - /// This clock is not monotonic, therefore calling this function repeatedly - /// will not necessarily produce a sequence of non-decreasing values. - /// - /// The returned timestamps represent the number of seconds since - /// 1970-01-01T00:00:00Z, also known as [POSIX's Seconds Since the Epoch], - /// also known as [Unix Time]. - /// - /// The nanoseconds field of the output is always less than 1000000000. - /// - /// [POSIX's Seconds Since the Epoch]: https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap04.html#tag_21_04_16 - /// [Unix Time]: https://en.wikipedia.org/wiki/Unix_time - now: func() -> datetime; - - /// Query the resolution of the clock. - /// - /// The nanoseconds field of the output is always less than 1000000000. - resolution: func() -> datetime; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/clocks/world.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/clocks/world.wit deleted file mode 100644 index 8fa080f0..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/clocks/world.wit +++ /dev/null @@ -1,6 +0,0 @@ -package wasi:clocks@0.2.0-rc-2023-11-10; - -world imports { - import monotonic-clock; - import wall-clock; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/filesystem/preopens.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/filesystem/preopens.wit deleted file mode 100644 index 95ec6784..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/filesystem/preopens.wit +++ /dev/null @@ -1,8 +0,0 @@ -package wasi:filesystem@0.2.0-rc-2023-11-10; - -interface preopens { - use types.{descriptor}; - - /// Return the set of preopened directories, and their path. - get-directories: func() -> list>; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/filesystem/types.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/filesystem/types.wit deleted file mode 100644 index 059722ab..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/filesystem/types.wit +++ /dev/null @@ -1,634 +0,0 @@ -package wasi:filesystem@0.2.0-rc-2023-11-10; -/// WASI filesystem is a filesystem API primarily intended to let users run WASI -/// programs that access their files on their existing filesystems, without -/// significant overhead. -/// -/// It is intended to be roughly portable between Unix-family platforms and -/// Windows, though it does not hide many of the major differences. -/// -/// Paths are passed as interface-type `string`s, meaning they must consist of -/// a sequence of Unicode Scalar Values (USVs). Some filesystems may contain -/// paths which are not accessible by this API. -/// -/// The directory separator in WASI is always the forward-slash (`/`). -/// -/// All paths in WASI are relative paths, and are interpreted relative to a -/// `descriptor` referring to a base directory. If a `path` argument to any WASI -/// function starts with `/`, or if any step of resolving a `path`, including -/// `..` and symbolic link steps, reaches a directory outside of the base -/// directory, or reaches a symlink to an absolute or rooted path in the -/// underlying filesystem, the function fails with `error-code::not-permitted`. -/// -/// For more information about WASI path resolution and sandboxing, see -/// [WASI filesystem path resolution]. -/// -/// [WASI filesystem path resolution]: https://github.com/WebAssembly/wasi-filesystem/blob/main/path-resolution.md -interface types { - use wasi:io/streams@0.2.0-rc-2023-11-10.{input-stream, output-stream, error}; - use wasi:clocks/wall-clock@0.2.0-rc-2023-11-10.{datetime}; - - /// File size or length of a region within a file. - type filesize = u64; - - /// The type of a filesystem object referenced by a descriptor. - /// - /// Note: This was called `filetype` in earlier versions of WASI. - enum descriptor-type { - /// The type of the descriptor or file is unknown or is different from - /// any of the other types specified. - unknown, - /// The descriptor refers to a block device inode. - block-device, - /// The descriptor refers to a character device inode. - character-device, - /// The descriptor refers to a directory inode. - directory, - /// The descriptor refers to a named pipe. - fifo, - /// The file refers to a symbolic link inode. - symbolic-link, - /// The descriptor refers to a regular file inode. - regular-file, - /// The descriptor refers to a socket. - socket, - } - - /// Descriptor flags. - /// - /// Note: This was called `fdflags` in earlier versions of WASI. - flags descriptor-flags { - /// Read mode: Data can be read. - read, - /// Write mode: Data can be written to. - write, - /// Request that writes be performed according to synchronized I/O file - /// integrity completion. The data stored in the file and the file's - /// metadata are synchronized. This is similar to `O_SYNC` in POSIX. - /// - /// The precise semantics of this operation have not yet been defined for - /// WASI. At this time, it should be interpreted as a request, and not a - /// requirement. - file-integrity-sync, - /// Request that writes be performed according to synchronized I/O data - /// integrity completion. Only the data stored in the file is - /// synchronized. This is similar to `O_DSYNC` in POSIX. - /// - /// The precise semantics of this operation have not yet been defined for - /// WASI. At this time, it should be interpreted as a request, and not a - /// requirement. - data-integrity-sync, - /// Requests that reads be performed at the same level of integrety - /// requested for writes. This is similar to `O_RSYNC` in POSIX. - /// - /// The precise semantics of this operation have not yet been defined for - /// WASI. At this time, it should be interpreted as a request, and not a - /// requirement. - requested-write-sync, - /// Mutating directories mode: Directory contents may be mutated. - /// - /// When this flag is unset on a descriptor, operations using the - /// descriptor which would create, rename, delete, modify the data or - /// metadata of filesystem objects, or obtain another handle which - /// would permit any of those, shall fail with `error-code::read-only` if - /// they would otherwise succeed. - /// - /// This may only be set on directories. - mutate-directory, - } - - /// File attributes. - /// - /// Note: This was called `filestat` in earlier versions of WASI. - record descriptor-stat { - /// File type. - %type: descriptor-type, - /// Number of hard links to the file. - link-count: link-count, - /// For regular files, the file size in bytes. For symbolic links, the - /// length in bytes of the pathname contained in the symbolic link. - size: filesize, - /// Last data access timestamp. - /// - /// If the `option` is none, the platform doesn't maintain an access - /// timestamp for this file. - data-access-timestamp: option, - /// Last data modification timestamp. - /// - /// If the `option` is none, the platform doesn't maintain a - /// modification timestamp for this file. - data-modification-timestamp: option, - /// Last file status-change timestamp. - /// - /// If the `option` is none, the platform doesn't maintain a - /// status-change timestamp for this file. - status-change-timestamp: option, - } - - /// Flags determining the method of how paths are resolved. - flags path-flags { - /// As long as the resolved path corresponds to a symbolic link, it is - /// expanded. - symlink-follow, - } - - /// Open flags used by `open-at`. - flags open-flags { - /// Create file if it does not exist, similar to `O_CREAT` in POSIX. - create, - /// Fail if not a directory, similar to `O_DIRECTORY` in POSIX. - directory, - /// Fail if file already exists, similar to `O_EXCL` in POSIX. - exclusive, - /// Truncate file to size 0, similar to `O_TRUNC` in POSIX. - truncate, - } - - /// Number of hard links to an inode. - type link-count = u64; - - /// When setting a timestamp, this gives the value to set it to. - variant new-timestamp { - /// Leave the timestamp set to its previous value. - no-change, - /// Set the timestamp to the current time of the system clock associated - /// with the filesystem. - now, - /// Set the timestamp to the given value. - timestamp(datetime), - } - - /// A directory entry. - record directory-entry { - /// The type of the file referred to by this directory entry. - %type: descriptor-type, - - /// The name of the object. - name: string, - } - - /// Error codes returned by functions, similar to `errno` in POSIX. - /// Not all of these error codes are returned by the functions provided by this - /// API; some are used in higher-level library layers, and others are provided - /// merely for alignment with POSIX. - enum error-code { - /// Permission denied, similar to `EACCES` in POSIX. - access, - /// Resource unavailable, or operation would block, similar to `EAGAIN` and `EWOULDBLOCK` in POSIX. - would-block, - /// Connection already in progress, similar to `EALREADY` in POSIX. - already, - /// Bad descriptor, similar to `EBADF` in POSIX. - bad-descriptor, - /// Device or resource busy, similar to `EBUSY` in POSIX. - busy, - /// Resource deadlock would occur, similar to `EDEADLK` in POSIX. - deadlock, - /// Storage quota exceeded, similar to `EDQUOT` in POSIX. - quota, - /// File exists, similar to `EEXIST` in POSIX. - exist, - /// File too large, similar to `EFBIG` in POSIX. - file-too-large, - /// Illegal byte sequence, similar to `EILSEQ` in POSIX. - illegal-byte-sequence, - /// Operation in progress, similar to `EINPROGRESS` in POSIX. - in-progress, - /// Interrupted function, similar to `EINTR` in POSIX. - interrupted, - /// Invalid argument, similar to `EINVAL` in POSIX. - invalid, - /// I/O error, similar to `EIO` in POSIX. - io, - /// Is a directory, similar to `EISDIR` in POSIX. - is-directory, - /// Too many levels of symbolic links, similar to `ELOOP` in POSIX. - loop, - /// Too many links, similar to `EMLINK` in POSIX. - too-many-links, - /// Message too large, similar to `EMSGSIZE` in POSIX. - message-size, - /// Filename too long, similar to `ENAMETOOLONG` in POSIX. - name-too-long, - /// No such device, similar to `ENODEV` in POSIX. - no-device, - /// No such file or directory, similar to `ENOENT` in POSIX. - no-entry, - /// No locks available, similar to `ENOLCK` in POSIX. - no-lock, - /// Not enough space, similar to `ENOMEM` in POSIX. - insufficient-memory, - /// No space left on device, similar to `ENOSPC` in POSIX. - insufficient-space, - /// Not a directory or a symbolic link to a directory, similar to `ENOTDIR` in POSIX. - not-directory, - /// Directory not empty, similar to `ENOTEMPTY` in POSIX. - not-empty, - /// State not recoverable, similar to `ENOTRECOVERABLE` in POSIX. - not-recoverable, - /// Not supported, similar to `ENOTSUP` and `ENOSYS` in POSIX. - unsupported, - /// Inappropriate I/O control operation, similar to `ENOTTY` in POSIX. - no-tty, - /// No such device or address, similar to `ENXIO` in POSIX. - no-such-device, - /// Value too large to be stored in data type, similar to `EOVERFLOW` in POSIX. - overflow, - /// Operation not permitted, similar to `EPERM` in POSIX. - not-permitted, - /// Broken pipe, similar to `EPIPE` in POSIX. - pipe, - /// Read-only file system, similar to `EROFS` in POSIX. - read-only, - /// Invalid seek, similar to `ESPIPE` in POSIX. - invalid-seek, - /// Text file busy, similar to `ETXTBSY` in POSIX. - text-file-busy, - /// Cross-device link, similar to `EXDEV` in POSIX. - cross-device, - } - - /// File or memory access pattern advisory information. - enum advice { - /// The application has no advice to give on its behavior with respect - /// to the specified data. - normal, - /// The application expects to access the specified data sequentially - /// from lower offsets to higher offsets. - sequential, - /// The application expects to access the specified data in a random - /// order. - random, - /// The application expects to access the specified data in the near - /// future. - will-need, - /// The application expects that it will not access the specified data - /// in the near future. - dont-need, - /// The application expects to access the specified data once and then - /// not reuse it thereafter. - no-reuse, - } - - /// A 128-bit hash value, split into parts because wasm doesn't have a - /// 128-bit integer type. - record metadata-hash-value { - /// 64 bits of a 128-bit hash value. - lower: u64, - /// Another 64 bits of a 128-bit hash value. - upper: u64, - } - - /// A descriptor is a reference to a filesystem object, which may be a file, - /// directory, named pipe, special file, or other object on which filesystem - /// calls may be made. - resource descriptor { - /// Return a stream for reading from a file, if available. - /// - /// May fail with an error-code describing why the file cannot be read. - /// - /// Multiple read, write, and append streams may be active on the same open - /// file and they do not interfere with each other. - /// - /// Note: This allows using `read-stream`, which is similar to `read` in POSIX. - read-via-stream: func( - /// The offset within the file at which to start reading. - offset: filesize, - ) -> result; - - /// Return a stream for writing to a file, if available. - /// - /// May fail with an error-code describing why the file cannot be written. - /// - /// Note: This allows using `write-stream`, which is similar to `write` in - /// POSIX. - write-via-stream: func( - /// The offset within the file at which to start writing. - offset: filesize, - ) -> result; - - /// Return a stream for appending to a file, if available. - /// - /// May fail with an error-code describing why the file cannot be appended. - /// - /// Note: This allows using `write-stream`, which is similar to `write` with - /// `O_APPEND` in in POSIX. - append-via-stream: func() -> result; - - /// Provide file advisory information on a descriptor. - /// - /// This is similar to `posix_fadvise` in POSIX. - advise: func( - /// The offset within the file to which the advisory applies. - offset: filesize, - /// The length of the region to which the advisory applies. - length: filesize, - /// The advice. - advice: advice - ) -> result<_, error-code>; - - /// Synchronize the data of a file to disk. - /// - /// This function succeeds with no effect if the file descriptor is not - /// opened for writing. - /// - /// Note: This is similar to `fdatasync` in POSIX. - sync-data: func() -> result<_, error-code>; - - /// Get flags associated with a descriptor. - /// - /// Note: This returns similar flags to `fcntl(fd, F_GETFL)` in POSIX. - /// - /// Note: This returns the value that was the `fs_flags` value returned - /// from `fdstat_get` in earlier versions of WASI. - get-flags: func() -> result; - - /// Get the dynamic type of a descriptor. - /// - /// Note: This returns the same value as the `type` field of the `fd-stat` - /// returned by `stat`, `stat-at` and similar. - /// - /// Note: This returns similar flags to the `st_mode & S_IFMT` value provided - /// by `fstat` in POSIX. - /// - /// Note: This returns the value that was the `fs_filetype` value returned - /// from `fdstat_get` in earlier versions of WASI. - get-type: func() -> result; - - /// Adjust the size of an open file. If this increases the file's size, the - /// extra bytes are filled with zeros. - /// - /// Note: This was called `fd_filestat_set_size` in earlier versions of WASI. - set-size: func(size: filesize) -> result<_, error-code>; - - /// Adjust the timestamps of an open file or directory. - /// - /// Note: This is similar to `futimens` in POSIX. - /// - /// Note: This was called `fd_filestat_set_times` in earlier versions of WASI. - set-times: func( - /// The desired values of the data access timestamp. - data-access-timestamp: new-timestamp, - /// The desired values of the data modification timestamp. - data-modification-timestamp: new-timestamp, - ) -> result<_, error-code>; - - /// Read from a descriptor, without using and updating the descriptor's offset. - /// - /// This function returns a list of bytes containing the data that was - /// read, along with a bool which, when true, indicates that the end of the - /// file was reached. The returned list will contain up to `length` bytes; it - /// may return fewer than requested, if the end of the file is reached or - /// if the I/O operation is interrupted. - /// - /// In the future, this may change to return a `stream`. - /// - /// Note: This is similar to `pread` in POSIX. - read: func( - /// The maximum number of bytes to read. - length: filesize, - /// The offset within the file at which to read. - offset: filesize, - ) -> result, bool>, error-code>; - - /// Write to a descriptor, without using and updating the descriptor's offset. - /// - /// It is valid to write past the end of a file; the file is extended to the - /// extent of the write, with bytes between the previous end and the start of - /// the write set to zero. - /// - /// In the future, this may change to take a `stream`. - /// - /// Note: This is similar to `pwrite` in POSIX. - write: func( - /// Data to write - buffer: list, - /// The offset within the file at which to write. - offset: filesize, - ) -> result; - - /// Read directory entries from a directory. - /// - /// On filesystems where directories contain entries referring to themselves - /// and their parents, often named `.` and `..` respectively, these entries - /// are omitted. - /// - /// This always returns a new stream which starts at the beginning of the - /// directory. Multiple streams may be active on the same directory, and they - /// do not interfere with each other. - read-directory: func() -> result; - - /// Synchronize the data and metadata of a file to disk. - /// - /// This function succeeds with no effect if the file descriptor is not - /// opened for writing. - /// - /// Note: This is similar to `fsync` in POSIX. - sync: func() -> result<_, error-code>; - - /// Create a directory. - /// - /// Note: This is similar to `mkdirat` in POSIX. - create-directory-at: func( - /// The relative path at which to create the directory. - path: string, - ) -> result<_, error-code>; - - /// Return the attributes of an open file or directory. - /// - /// Note: This is similar to `fstat` in POSIX, except that it does not return - /// device and inode information. For testing whether two descriptors refer to - /// the same underlying filesystem object, use `is-same-object`. To obtain - /// additional data that can be used do determine whether a file has been - /// modified, use `metadata-hash`. - /// - /// Note: This was called `fd_filestat_get` in earlier versions of WASI. - stat: func() -> result; - - /// Return the attributes of a file or directory. - /// - /// Note: This is similar to `fstatat` in POSIX, except that it does not - /// return device and inode information. See the `stat` description for a - /// discussion of alternatives. - /// - /// Note: This was called `path_filestat_get` in earlier versions of WASI. - stat-at: func( - /// Flags determining the method of how the path is resolved. - path-flags: path-flags, - /// The relative path of the file or directory to inspect. - path: string, - ) -> result; - - /// Adjust the timestamps of a file or directory. - /// - /// Note: This is similar to `utimensat` in POSIX. - /// - /// Note: This was called `path_filestat_set_times` in earlier versions of - /// WASI. - set-times-at: func( - /// Flags determining the method of how the path is resolved. - path-flags: path-flags, - /// The relative path of the file or directory to operate on. - path: string, - /// The desired values of the data access timestamp. - data-access-timestamp: new-timestamp, - /// The desired values of the data modification timestamp. - data-modification-timestamp: new-timestamp, - ) -> result<_, error-code>; - - /// Create a hard link. - /// - /// Note: This is similar to `linkat` in POSIX. - link-at: func( - /// Flags determining the method of how the path is resolved. - old-path-flags: path-flags, - /// The relative source path from which to link. - old-path: string, - /// The base directory for `new-path`. - new-descriptor: borrow, - /// The relative destination path at which to create the hard link. - new-path: string, - ) -> result<_, error-code>; - - /// Open a file or directory. - /// - /// The returned descriptor is not guaranteed to be the lowest-numbered - /// descriptor not currently open/ it is randomized to prevent applications - /// from depending on making assumptions about indexes, since this is - /// error-prone in multi-threaded contexts. The returned descriptor is - /// guaranteed to be less than 2**31. - /// - /// If `flags` contains `descriptor-flags::mutate-directory`, and the base - /// descriptor doesn't have `descriptor-flags::mutate-directory` set, - /// `open-at` fails with `error-code::read-only`. - /// - /// If `flags` contains `write` or `mutate-directory`, or `open-flags` - /// contains `truncate` or `create`, and the base descriptor doesn't have - /// `descriptor-flags::mutate-directory` set, `open-at` fails with - /// `error-code::read-only`. - /// - /// Note: This is similar to `openat` in POSIX. - open-at: func( - /// Flags determining the method of how the path is resolved. - path-flags: path-flags, - /// The relative path of the object to open. - path: string, - /// The method by which to open the file. - open-flags: open-flags, - /// Flags to use for the resulting descriptor. - %flags: descriptor-flags, - ) -> result; - - /// Read the contents of a symbolic link. - /// - /// If the contents contain an absolute or rooted path in the underlying - /// filesystem, this function fails with `error-code::not-permitted`. - /// - /// Note: This is similar to `readlinkat` in POSIX. - readlink-at: func( - /// The relative path of the symbolic link from which to read. - path: string, - ) -> result; - - /// Remove a directory. - /// - /// Return `error-code::not-empty` if the directory is not empty. - /// - /// Note: This is similar to `unlinkat(fd, path, AT_REMOVEDIR)` in POSIX. - remove-directory-at: func( - /// The relative path to a directory to remove. - path: string, - ) -> result<_, error-code>; - - /// Rename a filesystem object. - /// - /// Note: This is similar to `renameat` in POSIX. - rename-at: func( - /// The relative source path of the file or directory to rename. - old-path: string, - /// The base directory for `new-path`. - new-descriptor: borrow, - /// The relative destination path to which to rename the file or directory. - new-path: string, - ) -> result<_, error-code>; - - /// Create a symbolic link (also known as a "symlink"). - /// - /// If `old-path` starts with `/`, the function fails with - /// `error-code::not-permitted`. - /// - /// Note: This is similar to `symlinkat` in POSIX. - symlink-at: func( - /// The contents of the symbolic link. - old-path: string, - /// The relative destination path at which to create the symbolic link. - new-path: string, - ) -> result<_, error-code>; - - /// Unlink a filesystem object that is not a directory. - /// - /// Return `error-code::is-directory` if the path refers to a directory. - /// Note: This is similar to `unlinkat(fd, path, 0)` in POSIX. - unlink-file-at: func( - /// The relative path to a file to unlink. - path: string, - ) -> result<_, error-code>; - - /// Test whether two descriptors refer to the same filesystem object. - /// - /// In POSIX, this corresponds to testing whether the two descriptors have the - /// same device (`st_dev`) and inode (`st_ino` or `d_ino`) numbers. - /// wasi-filesystem does not expose device and inode numbers, so this function - /// may be used instead. - is-same-object: func(other: borrow) -> bool; - - /// Return a hash of the metadata associated with a filesystem object referred - /// to by a descriptor. - /// - /// This returns a hash of the last-modification timestamp and file size, and - /// may also include the inode number, device number, birth timestamp, and - /// other metadata fields that may change when the file is modified or - /// replaced. It may also include a secret value chosen by the - /// implementation and not otherwise exposed. - /// - /// Implementations are encourated to provide the following properties: - /// - /// - If the file is not modified or replaced, the computed hash value should - /// usually not change. - /// - If the object is modified or replaced, the computed hash value should - /// usually change. - /// - The inputs to the hash should not be easily computable from the - /// computed hash. - /// - /// However, none of these is required. - metadata-hash: func() -> result; - - /// Return a hash of the metadata associated with a filesystem object referred - /// to by a directory descriptor and a relative path. - /// - /// This performs the same hash computation as `metadata-hash`. - metadata-hash-at: func( - /// Flags determining the method of how the path is resolved. - path-flags: path-flags, - /// The relative path of the file or directory to inspect. - path: string, - ) -> result; - } - - /// A stream of directory entries. - resource directory-entry-stream { - /// Read a single directory entry from a `directory-entry-stream`. - read-directory-entry: func() -> result, error-code>; - } - - /// Attempts to extract a filesystem-related `error-code` from the stream - /// `error` provided. - /// - /// Stream operations which return `stream-error::last-operation-failed` - /// have a payload with more information about the operation that failed. - /// This payload can be passed through to this function to see if there's - /// filesystem-related information about the error to return. - /// - /// Note that this function is fallible because not all stream-related - /// errors are filesystem-related errors. - filesystem-error-code: func(err: borrow) -> option; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/filesystem/world.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/filesystem/world.wit deleted file mode 100644 index 285e0bae..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/filesystem/world.wit +++ /dev/null @@ -1,6 +0,0 @@ -package wasi:filesystem@0.2.0-rc-2023-11-10; - -world imports { - import types; - import preopens; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/http/handler.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/http/handler.wit deleted file mode 100644 index a34a0649..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/http/handler.wit +++ /dev/null @@ -1,43 +0,0 @@ -/// This interface defines a handler of incoming HTTP Requests. It should -/// be exported by components which can respond to HTTP Requests. -interface incoming-handler { - use types.{incoming-request, response-outparam}; - - /// This function is invoked with an incoming HTTP Request, and a resource - /// `response-outparam` which provides the capability to reply with an HTTP - /// Response. The response is sent by calling the `response-outparam.set` - /// method, which allows execution to continue after the response has been - /// sent. This enables both streaming to the response body, and performing other - /// work. - /// - /// The implementor of this function must write a response to the - /// `response-outparam` before returning, or else the caller will respond - /// with an error on its behalf. - handle: func( - request: incoming-request, - response-out: response-outparam - ); -} - -/// This interface defines a handler of outgoing HTTP Requests. It should be -/// imported by components which wish to make HTTP Requests. -interface outgoing-handler { - use types.{ - outgoing-request, request-options, future-incoming-response, error-code - }; - - /// This function is invoked with an outgoing HTTP Request, and it returns - /// a resource `future-incoming-response` which represents an HTTP Response - /// which may arrive in the future. - /// - /// The `options` argument accepts optional parameters for the HTTP - /// protocol's transport layer. - /// - /// This function may return an error if the `outgoing-request` is invalid - /// or not allowed to be made. Otherwise, protocol errors are reported - /// through the `future-incoming-response`. - handle: func( - request: outgoing-request, - options: option - ) -> result; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/http/proxy.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/http/proxy.wit deleted file mode 100644 index 0f466c93..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/http/proxy.wit +++ /dev/null @@ -1,32 +0,0 @@ -package wasi:http@0.2.0-rc-2023-12-05; - -/// The `wasi:http/proxy` world captures a widely-implementable intersection of -/// hosts that includes HTTP forward and reverse proxies. Components targeting -/// this world may concurrently stream in and out any number of incoming and -/// outgoing HTTP requests. -world proxy { - /// HTTP proxies have access to time and randomness. - include wasi:clocks/imports@0.2.0-rc-2023-11-10; - import wasi:random/random@0.2.0-rc-2023-11-10; - - /// Proxies have standard output and error streams which are expected to - /// terminate in a developer-facing console provided by the host. - import wasi:cli/stdout@0.2.0-rc-2023-12-05; - import wasi:cli/stderr@0.2.0-rc-2023-12-05; - - /// TODO: this is a temporary workaround until component tooling is able to - /// gracefully handle the absence of stdin. Hosts must return an eof stream - /// for this import, which is what wasi-libc + tooling will do automatically - /// when this import is properly removed. - import wasi:cli/stdin@0.2.0-rc-2023-12-05; - - /// This is the default handler to use when user code simply wants to make an - /// HTTP request (e.g., via `fetch()`). - import outgoing-handler; - - /// The host delivers incoming HTTP requests to a component by calling the - /// `handle` function of this exported interface. A host may arbitrarily reuse - /// or not reuse component instance when delivering incoming HTTP requests and - /// thus a component must be able to handle 0..N calls to `handle`. - export incoming-handler; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/http/types.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/http/types.wit deleted file mode 100644 index 0f698e76..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/http/types.wit +++ /dev/null @@ -1,570 +0,0 @@ -/// This interface defines all of the types and methods for implementing -/// HTTP Requests and Responses, both incoming and outgoing, as well as -/// their headers, trailers, and bodies. -interface types { - use wasi:clocks/monotonic-clock@0.2.0-rc-2023-11-10.{duration}; - use wasi:io/streams@0.2.0-rc-2023-11-10.{input-stream, output-stream}; - use wasi:io/error@0.2.0-rc-2023-11-10.{error as io-error}; - use wasi:io/poll@0.2.0-rc-2023-11-10.{pollable}; - - /// This type corresponds to HTTP standard Methods. - variant method { - get, - head, - post, - put, - delete, - connect, - options, - trace, - patch, - other(string) - } - - /// This type corresponds to HTTP standard Related Schemes. - variant scheme { - HTTP, - HTTPS, - other(string) - } - - /// These cases are inspired by the IANA HTTP Proxy Error Types: - /// https://www.iana.org/assignments/http-proxy-status/http-proxy-status.xhtml#table-http-proxy-error-types - variant error-code { - DNS-timeout, - DNS-error(DNS-error-payload), - destination-not-found, - destination-unavailable, - destination-IP-prohibited, - destination-IP-unroutable, - connection-refused, - connection-terminated, - connection-timeout, - connection-read-timeout, - connection-write-timeout, - connection-limit-reached, - TLS-protocol-error, - TLS-certificate-error, - TLS-alert-received(TLS-alert-received-payload), - HTTP-request-denied, - HTTP-request-length-required, - HTTP-request-body-size(option), - HTTP-request-method-invalid, - HTTP-request-URI-invalid, - HTTP-request-URI-too-long, - HTTP-request-header-section-size(option), - HTTP-request-header-size(option), - HTTP-request-trailer-section-size(option), - HTTP-request-trailer-size(field-size-payload), - HTTP-response-incomplete, - HTTP-response-header-section-size(option), - HTTP-response-header-size(field-size-payload), - HTTP-response-body-size(option), - HTTP-response-trailer-section-size(option), - HTTP-response-trailer-size(field-size-payload), - HTTP-response-transfer-coding(option), - HTTP-response-content-coding(option), - HTTP-response-timeout, - HTTP-upgrade-failed, - HTTP-protocol-error, - loop-detected, - configuration-error, - /// This is a catch-all error for anything that doesn't fit cleanly into a - /// more specific case. It also includes an optional string for an - /// unstructured description of the error. Users should not depend on the - /// string for diagnosing errors, as it's not required to be consistent - /// between implementations. - internal-error(option) - } - - /// Defines the case payload type for `DNS-error` above: - record DNS-error-payload { - rcode: option, - info-code: option - } - - /// Defines the case payload type for `TLS-alert-received` above: - record TLS-alert-received-payload { - alert-id: option, - alert-message: option - } - - /// Defines the case payload type for `HTTP-response-{header,trailer}-size` above: - record field-size-payload { - field-name: option, - field-size: option - } - - /// Attempts to extract a http-related `error` from the wasi:io `error` - /// provided. - /// - /// Stream operations which return - /// `wasi:io/stream/stream-error::last-operation-failed` have a payload of - /// type `wasi:io/error/error` with more information about the operation - /// that failed. This payload can be passed through to this function to see - /// if there's http-related information about the error to return. - /// - /// Note that this function is fallible because not all io-errors are - /// http-related errors. - http-error-code: func(err: borrow) -> option; - - /// This type enumerates the different kinds of errors that may occur when - /// setting or appending to a `fields` resource. - variant header-error { - /// This error indicates that a `field-key` or `field-value` was - /// syntactically invalid when used with an operation that sets headers in a - /// `fields`. - invalid-syntax, - - /// This error indicates that a forbidden `field-key` was used when trying - /// to set a header in a `fields`. - forbidden, - - /// This error indicates that the operation on the `fields` was not - /// permitted because the fields are immutable. - immutable, - } - - /// Field keys are always strings. - type field-key = string; - - /// Field values should always be ASCII strings. However, in - /// reality, HTTP implementations often have to interpret malformed values, - /// so they are provided as a list of bytes. - type field-value = list; - - /// This following block defines the `fields` resource which corresponds to - /// HTTP standard Fields. Fields are a common representation used for both - /// Headers and Trailers. - /// - /// A `fields` may be mutable or immutable. A `fields` created using the - /// constructor, `from-list`, or `clone` will be mutable, but a `fields` - /// resource given by other means (including, but not limited to, - /// `incoming-request.headers`, `outgoing-request.headers`) might be be - /// immutable. In an immutable fields, the `set`, `append`, and `delete` - /// operations will fail with `header-error.immutable`. - resource fields { - - /// Construct an empty HTTP Fields. - /// - /// The resulting `fields` is mutable. - constructor(); - - /// Construct an HTTP Fields. - /// - /// The resulting `fields` is mutable. - /// - /// The list represents each key-value pair in the Fields. Keys - /// which have multiple values are represented by multiple entries in this - /// list with the same key. - /// - /// The tuple is a pair of the field key, represented as a string, and - /// Value, represented as a list of bytes. In a valid Fields, all keys - /// and values are valid UTF-8 strings. However, values are not always - /// well-formed, so they are represented as a raw list of bytes. - /// - /// An error result will be returned if any header or value was - /// syntactically invalid, or if a header was forbidden. - from-list: static func( - entries: list> - ) -> result; - - /// Get all of the values corresponding to a key. If the key is not present - /// in this `fields`, an empty list is returned. However, if the key is - /// present but empty, this is represented by a list with one or more - /// empty field-values present. - get: func(name: field-key) -> list; - - /// Returns `true` when the key is present in this `fields`. If the key is - /// syntactically invalid, `false` is returned. - has: func(name: field-key) -> bool; - - /// Set all of the values for a key. Clears any existing values for that - /// key, if they have been set. - /// - /// Fails with `header-error.immutable` if the `fields` are immutable. - set: func(name: field-key, value: list) -> result<_, header-error>; - - /// Delete all values for a key. Does nothing if no values for the key - /// exist. - /// - /// Fails with `header-error.immutable` if the `fields` are immutable. - delete: func(name: field-key) -> result<_, header-error>; - - /// Append a value for a key. Does not change or delete any existing - /// values for that key. - /// - /// Fails with `header-error.immutable` if the `fields` are immutable. - append: func(name: field-key, value: field-value) -> result<_, header-error>; - - /// Retrieve the full set of keys and values in the Fields. Like the - /// constructor, the list represents each key-value pair. - /// - /// The outer list represents each key-value pair in the Fields. Keys - /// which have multiple values are represented by multiple entries in this - /// list with the same key. - entries: func() -> list>; - - /// Make a deep copy of the Fields. Equivelant in behavior to calling the - /// `fields` constructor on the return value of `entries`. The resulting - /// `fields` is mutable. - clone: func() -> fields; - } - - /// Headers is an alias for Fields. - type headers = fields; - - /// Trailers is an alias for Fields. - type trailers = fields; - - /// Represents an incoming HTTP Request. - resource incoming-request { - - /// Returns the method of the incoming request. - method: func() -> method; - - /// Returns the path with query parameters from the request, as a string. - path-with-query: func() -> option; - - /// Returns the protocol scheme from the request. - scheme: func() -> option; - - /// Returns the authority from the request, if it was present. - authority: func() -> option; - - /// Get the `headers` associated with the request. - /// - /// The returned `headers` resource is immutable: `set`, `append`, and - /// `delete` operations will fail with `header-error.immutable`. - /// - /// The `headers` returned are a child resource: it must be dropped before - /// the parent `incoming-request` is dropped. Dropping this - /// `incoming-request` before all children are dropped will trap. - headers: func() -> headers; - - /// Gives the `incoming-body` associated with this request. Will only - /// return success at most once, and subsequent calls will return error. - consume: func() -> result; - } - - /// Represents an outgoing HTTP Request. - resource outgoing-request { - - /// Construct a new `outgoing-request` with a default `method` of `GET`, and - /// `none` values for `path-with-query`, `scheme`, and `authority`. - /// - /// * `headers` is the HTTP Headers for the Request. - /// - /// It is possible to construct, or manipulate with the accessor functions - /// below, an `outgoing-request` with an invalid combination of `scheme` - /// and `authority`, or `headers` which are not permitted to be sent. - /// It is the obligation of the `outgoing-handler.handle` implementation - /// to reject invalid constructions of `outgoing-request`. - constructor( - headers: headers - ); - - /// Returns the resource corresponding to the outgoing Body for this - /// Request. - /// - /// Returns success on the first call: the `outgoing-body` resource for - /// this `outgoing-request` can be retrieved at most once. Subsequent - /// calls will return error. - body: func() -> result; - - /// Get the Method for the Request. - method: func() -> method; - /// Set the Method for the Request. Fails if the string present in a - /// `method.other` argument is not a syntactically valid method. - set-method: func(method: method) -> result; - - /// Get the combination of the HTTP Path and Query for the Request. - /// When `none`, this represents an empty Path and empty Query. - path-with-query: func() -> option; - /// Set the combination of the HTTP Path and Query for the Request. - /// When `none`, this represents an empty Path and empty Query. Fails is the - /// string given is not a syntactically valid path and query uri component. - set-path-with-query: func(path-with-query: option) -> result; - - /// Get the HTTP Related Scheme for the Request. When `none`, the - /// implementation may choose an appropriate default scheme. - scheme: func() -> option; - /// Set the HTTP Related Scheme for the Request. When `none`, the - /// implementation may choose an appropriate default scheme. Fails if the - /// string given is not a syntactically valid uri scheme. - set-scheme: func(scheme: option) -> result; - - /// Get the HTTP Authority for the Request. A value of `none` may be used - /// with Related Schemes which do not require an Authority. The HTTP and - /// HTTPS schemes always require an authority. - authority: func() -> option; - /// Set the HTTP Authority for the Request. A value of `none` may be used - /// with Related Schemes which do not require an Authority. The HTTP and - /// HTTPS schemes always require an authority. Fails if the string given is - /// not a syntactically valid uri authority. - set-authority: func(authority: option) -> result; - - /// Get the headers associated with the Request. - /// - /// The returned `headers` resource is immutable: `set`, `append`, and - /// `delete` operations will fail with `header-error.immutable`. - /// - /// This headers resource is a child: it must be dropped before the parent - /// `outgoing-request` is dropped, or its ownership is transfered to - /// another component by e.g. `outgoing-handler.handle`. - headers: func() -> headers; - } - - /// Parameters for making an HTTP Request. Each of these parameters is - /// currently an optional timeout applicable to the transport layer of the - /// HTTP protocol. - /// - /// These timeouts are separate from any the user may use to bound a - /// blocking call to `wasi:io/poll.poll`. - resource request-options { - /// Construct a default `request-options` value. - constructor(); - - /// The timeout for the initial connect to the HTTP Server. - connect-timeout: func() -> option; - - /// Set the timeout for the initial connect to the HTTP Server. An error - /// return value indicates that this timeout is not supported. - set-connect-timeout: func(duration: option) -> result; - - /// The timeout for receiving the first byte of the Response body. - first-byte-timeout: func() -> option; - - /// Set the timeout for receiving the first byte of the Response body. An - /// error return value indicates that this timeout is not supported. - set-first-byte-timeout: func(duration: option) -> result; - - /// The timeout for receiving subsequent chunks of bytes in the Response - /// body stream. - between-bytes-timeout: func() -> option; - - /// Set the timeout for receiving subsequent chunks of bytes in the Response - /// body stream. An error return value indicates that this timeout is not - /// supported. - set-between-bytes-timeout: func(duration: option) -> result; - } - - /// Represents the ability to send an HTTP Response. - /// - /// This resource is used by the `wasi:http/incoming-handler` interface to - /// allow a Response to be sent corresponding to the Request provided as the - /// other argument to `incoming-handler.handle`. - resource response-outparam { - - /// Set the value of the `response-outparam` to either send a response, - /// or indicate an error. - /// - /// This method consumes the `response-outparam` to ensure that it is - /// called at most once. If it is never called, the implementation - /// will respond with an error. - /// - /// The user may provide an `error` to `response` to allow the - /// implementation determine how to respond with an HTTP error response. - set: static func( - param: response-outparam, - response: result, - ); - } - - /// This type corresponds to the HTTP standard Status Code. - type status-code = u16; - - /// Represents an incoming HTTP Response. - resource incoming-response { - - /// Returns the status code from the incoming response. - status: func() -> status-code; - - /// Returns the headers from the incoming response. - /// - /// The returned `headers` resource is immutable: `set`, `append`, and - /// `delete` operations will fail with `header-error.immutable`. - /// - /// This headers resource is a child: it must be dropped before the parent - /// `incoming-response` is dropped. - headers: func() -> headers; - - /// Returns the incoming body. May be called at most once. Returns error - /// if called additional times. - consume: func() -> result; - } - - /// Represents an incoming HTTP Request or Response's Body. - /// - /// A body has both its contents - a stream of bytes - and a (possibly - /// empty) set of trailers, indicating that the full contents of the - /// body have been received. This resource represents the contents as - /// an `input-stream` and the delivery of trailers as a `future-trailers`, - /// and ensures that the user of this interface may only be consuming either - /// the body contents or waiting on trailers at any given time. - resource incoming-body { - - /// Returns the contents of the body, as a stream of bytes. - /// - /// Returns success on first call: the stream representing the contents - /// can be retrieved at most once. Subsequent calls will return error. - /// - /// The returned `input-stream` resource is a child: it must be dropped - /// before the parent `incoming-body` is dropped, or consumed by - /// `incoming-body.finish`. - /// - /// This invariant ensures that the implementation can determine whether - /// the user is consuming the contents of the body, waiting on the - /// `future-trailers` to be ready, or neither. This allows for network - /// backpressure is to be applied when the user is consuming the body, - /// and for that backpressure to not inhibit delivery of the trailers if - /// the user does not read the entire body. - %stream: func() -> result; - - /// Takes ownership of `incoming-body`, and returns a `future-trailers`. - /// This function will trap if the `input-stream` child is still alive. - finish: static func(this: incoming-body) -> future-trailers; - } - - /// Represents a future which may eventaully return trailers, or an error. - /// - /// In the case that the incoming HTTP Request or Response did not have any - /// trailers, this future will resolve to the empty set of trailers once the - /// complete Request or Response body has been received. - resource future-trailers { - - /// Returns a pollable which becomes ready when either the trailers have - /// been received, or an error has occured. When this pollable is ready, - /// the `get` method will return `some`. - subscribe: func() -> pollable; - - /// Returns the contents of the trailers, or an error which occured, - /// once the future is ready. - /// - /// The outer `option` represents future readiness. Users can wait on this - /// `option` to become `some` using the `subscribe` method. - /// - /// The outer `result` is used to retrieve the trailers or error at most - /// once. It will be success on the first call in which the outer option - /// is `some`, and error on subsequent calls. - /// - /// The inner `result` represents that either the HTTP Request or Response - /// body, as well as any trailers, were received successfully, or that an - /// error occured receiving them. The optional `trailers` indicates whether - /// or not trailers were present in the body. - /// - /// When some `trailers` are returned by this method, the `trailers` - /// resource is immutable, and a child. Use of the `set`, `append`, or - /// `delete` methods will return an error, and the resource must be - /// dropped before the parent `future-trailers` is dropped. - get: func() -> option, error-code>>>; - } - - /// Represents an outgoing HTTP Response. - resource outgoing-response { - - /// Construct an `outgoing-response`, with a default `status-code` of `200`. - /// If a different `status-code` is needed, it must be set via the - /// `set-status-code` method. - /// - /// * `headers` is the HTTP Headers for the Response. - constructor(headers: headers); - - /// Get the HTTP Status Code for the Response. - status-code: func() -> status-code; - - /// Set the HTTP Status Code for the Response. Fails if the status-code - /// given is not a valid http status code. - set-status-code: func(status-code: status-code) -> result; - - /// Get the headers associated with the Request. - /// - /// The returned `headers` resource is immutable: `set`, `append`, and - /// `delete` operations will fail with `header-error.immutable`. - /// - /// This headers resource is a child: it must be dropped before the parent - /// `outgoing-request` is dropped, or its ownership is transfered to - /// another component by e.g. `outgoing-handler.handle`. - headers: func() -> headers; - - /// Returns the resource corresponding to the outgoing Body for this Response. - /// - /// Returns success on the first call: the `outgoing-body` resource for - /// this `outgoing-response` can be retrieved at most once. Subsequent - /// calls will return error. - body: func() -> result; - } - - /// Represents an outgoing HTTP Request or Response's Body. - /// - /// A body has both its contents - a stream of bytes - and a (possibly - /// empty) set of trailers, inducating the full contents of the body - /// have been sent. This resource represents the contents as an - /// `output-stream` child resource, and the completion of the body (with - /// optional trailers) with a static function that consumes the - /// `outgoing-body` resource, and ensures that the user of this interface - /// may not write to the body contents after the body has been finished. - /// - /// If the user code drops this resource, as opposed to calling the static - /// method `finish`, the implementation should treat the body as incomplete, - /// and that an error has occured. The implementation should propogate this - /// error to the HTTP protocol by whatever means it has available, - /// including: corrupting the body on the wire, aborting the associated - /// Request, or sending a late status code for the Response. - resource outgoing-body { - - /// Returns a stream for writing the body contents. - /// - /// The returned `output-stream` is a child resource: it must be dropped - /// before the parent `outgoing-body` resource is dropped (or finished), - /// otherwise the `outgoing-body` drop or `finish` will trap. - /// - /// Returns success on the first call: the `output-stream` resource for - /// this `outgoing-body` may be retrieved at most once. Subsequent calls - /// will return error. - write: func() -> result; - - /// Finalize an outgoing body, optionally providing trailers. This must be - /// called to signal that the response is complete. If the `outgoing-body` - /// is dropped without calling `outgoing-body.finalize`, the implementation - /// should treat the body as corrupted. - /// - /// Fails if the body's `outgoing-request` or `outgoing-response` was - /// constructed with a Content-Length header, and the contents written - /// to the body (via `write`) does not match the value given in the - /// Content-Length. - finish: static func( - this: outgoing-body, - trailers: option - ) -> result<_, error-code>; - } - - /// Represents a future which may eventaully return an incoming HTTP - /// Response, or an error. - /// - /// This resource is returned by the `wasi:http/outgoing-handler` interface to - /// provide the HTTP Response corresponding to the sent Request. - resource future-incoming-response { - /// Returns a pollable which becomes ready when either the Response has - /// been received, or an error has occured. When this pollable is ready, - /// the `get` method will return `some`. - subscribe: func() -> pollable; - - /// Returns the incoming HTTP Response, or an error, once one is ready. - /// - /// The outer `option` represents future readiness. Users can wait on this - /// `option` to become `some` using the `subscribe` method. - /// - /// The outer `result` is used to retrieve the response or error at most - /// once. It will be success on the first call in which the outer option - /// is `some`, and error on subsequent calls. - /// - /// The inner `result` represents that either the incoming HTTP Response - /// status and headers have recieved successfully, or that an error - /// occured. Errors may also occur while consuming the response body, - /// but those will be reported by the `incoming-body` and its - /// `output-stream` child. - get: func() -> option>>; - - } -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/error.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/error.wit deleted file mode 100644 index 31918acb..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/error.wit +++ /dev/null @@ -1,34 +0,0 @@ -package wasi:io@0.2.0-rc-2023-11-10; - - -interface error { - /// A resource which represents some error information. - /// - /// The only method provided by this resource is `to-debug-string`, - /// which provides some human-readable information about the error. - /// - /// In the `wasi:io` package, this resource is returned through the - /// `wasi:io/streams/stream-error` type. - /// - /// To provide more specific error information, other interfaces may - /// provide functions to further "downcast" this error into more specific - /// error information. For example, `error`s returned in streams derived - /// from filesystem types to be described using the filesystem's own - /// error-code type, using the function - /// `wasi:filesystem/types/filesystem-error-code`, which takes a parameter - /// `borrow` and returns - /// `option`. - /// - /// The set of functions which can "downcast" an `error` into a more - /// concrete type is open. - resource error { - /// Returns a string that is suitable to assist humans in debugging - /// this error. - /// - /// WARNING: The returned string should not be consumed mechanically! - /// It may change across platforms, hosts, or other implementation - /// details. Parsing this string is a major platform-compatibility - /// hazard. - to-debug-string: func() -> string; - } -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/poll.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/poll.wit deleted file mode 100644 index bddde3c1..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/poll.wit +++ /dev/null @@ -1,41 +0,0 @@ -package wasi:io@0.2.0-rc-2023-11-10; - -/// A poll API intended to let users wait for I/O events on multiple handles -/// at once. -interface poll { - /// `pollable` epresents a single I/O event which may be ready, or not. - resource pollable { - - /// Return the readiness of a pollable. This function never blocks. - /// - /// Returns `true` when the pollable is ready, and `false` otherwise. - ready: func() -> bool; - - /// `block` returns immediately if the pollable is ready, and otherwise - /// blocks until ready. - /// - /// This function is equivalent to calling `poll.poll` on a list - /// containing only this pollable. - block: func(); - } - - /// Poll for completion on a set of pollables. - /// - /// This function takes a list of pollables, which identify I/O sources of - /// interest, and waits until one or more of the events is ready for I/O. - /// - /// The result `list` contains one or more indices of handles in the - /// argument list that is ready for I/O. - /// - /// If the list contains more elements than can be indexed with a `u32` - /// value, this function traps. - /// - /// A timeout can be implemented by adding a pollable from the - /// wasi-clocks API to the list. - /// - /// This function does not return a `result`; polling in itself does not - /// do any I/O so it doesn't fail. If any of the I/O sources identified by - /// the pollables has an error, it is indicated by marking the source as - /// being reaedy for I/O. - poll: func(in: list>) -> list; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/streams.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/streams.wit deleted file mode 100644 index e7e1b689..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/streams.wit +++ /dev/null @@ -1,251 +0,0 @@ -package wasi:io@0.2.0-rc-2023-11-10; - -/// WASI I/O is an I/O abstraction API which is currently focused on providing -/// stream types. -/// -/// In the future, the component model is expected to add built-in stream types; -/// when it does, they are expected to subsume this API. -interface streams { - use error.{error}; - use poll.{pollable}; - - /// An error for input-stream and output-stream operations. - variant stream-error { - /// The last operation (a write or flush) failed before completion. - /// - /// More information is available in the `error` payload. - last-operation-failed(error), - /// The stream is closed: no more input will be accepted by the - /// stream. A closed output-stream will return this error on all - /// future operations. - closed - } - - /// An input bytestream. - /// - /// `input-stream`s are *non-blocking* to the extent practical on underlying - /// platforms. I/O operations always return promptly; if fewer bytes are - /// promptly available than requested, they return the number of bytes promptly - /// available, which could even be zero. To wait for data to be available, - /// use the `subscribe` function to obtain a `pollable` which can be polled - /// for using `wasi:io/poll`. - resource input-stream { - /// Perform a non-blocking read from the stream. - /// - /// This function returns a list of bytes containing the read data, - /// when successful. The returned list will contain up to `len` bytes; - /// it may return fewer than requested, but not more. The list is - /// empty when no bytes are available for reading at this time. The - /// pollable given by `subscribe` will be ready when more bytes are - /// available. - /// - /// This function fails with a `stream-error` when the operation - /// encounters an error, giving `last-operation-failed`, or when the - /// stream is closed, giving `closed`. - /// - /// When the caller gives a `len` of 0, it represents a request to - /// read 0 bytes. If the stream is still open, this call should - /// succeed and return an empty list, or otherwise fail with `closed`. - /// - /// The `len` parameter is a `u64`, which could represent a list of u8 which - /// is not possible to allocate in wasm32, or not desirable to allocate as - /// as a return value by the callee. The callee may return a list of bytes - /// less than `len` in size while more bytes are available for reading. - read: func( - /// The maximum number of bytes to read - len: u64 - ) -> result, stream-error>; - - /// Read bytes from a stream, after blocking until at least one byte can - /// be read. Except for blocking, behavior is identical to `read`. - blocking-read: func( - /// The maximum number of bytes to read - len: u64 - ) -> result, stream-error>; - - /// Skip bytes from a stream. Returns number of bytes skipped. - /// - /// Behaves identical to `read`, except instead of returning a list - /// of bytes, returns the number of bytes consumed from the stream. - skip: func( - /// The maximum number of bytes to skip. - len: u64, - ) -> result; - - /// Skip bytes from a stream, after blocking until at least one byte - /// can be skipped. Except for blocking behavior, identical to `skip`. - blocking-skip: func( - /// The maximum number of bytes to skip. - len: u64, - ) -> result; - - /// Create a `pollable` which will resolve once either the specified stream - /// has bytes available to read or the other end of the stream has been - /// closed. - /// The created `pollable` is a child resource of the `input-stream`. - /// Implementations may trap if the `input-stream` is dropped before - /// all derived `pollable`s created with this function are dropped. - subscribe: func() -> pollable; - } - - - /// An output bytestream. - /// - /// `output-stream`s are *non-blocking* to the extent practical on - /// underlying platforms. Except where specified otherwise, I/O operations also - /// always return promptly, after the number of bytes that can be written - /// promptly, which could even be zero. To wait for the stream to be ready to - /// accept data, the `subscribe` function to obtain a `pollable` which can be - /// polled for using `wasi:io/poll`. - resource output-stream { - /// Check readiness for writing. This function never blocks. - /// - /// Returns the number of bytes permitted for the next call to `write`, - /// or an error. Calling `write` with more bytes than this function has - /// permitted will trap. - /// - /// When this function returns 0 bytes, the `subscribe` pollable will - /// become ready when this function will report at least 1 byte, or an - /// error. - check-write: func() -> result; - - /// Perform a write. This function never blocks. - /// - /// Precondition: check-write gave permit of Ok(n) and contents has a - /// length of less than or equal to n. Otherwise, this function will trap. - /// - /// returns Err(closed) without writing if the stream has closed since - /// the last call to check-write provided a permit. - write: func( - contents: list - ) -> result<_, stream-error>; - - /// Perform a write of up to 4096 bytes, and then flush the stream. Block - /// until all of these operations are complete, or an error occurs. - /// - /// This is a convenience wrapper around the use of `check-write`, - /// `subscribe`, `write`, and `flush`, and is implemented with the - /// following pseudo-code: - /// - /// ```text - /// let pollable = this.subscribe(); - /// while !contents.is_empty() { - /// // Wait for the stream to become writable - /// poll-one(pollable); - /// let Ok(n) = this.check-write(); // eliding error handling - /// let len = min(n, contents.len()); - /// let (chunk, rest) = contents.split_at(len); - /// this.write(chunk ); // eliding error handling - /// contents = rest; - /// } - /// this.flush(); - /// // Wait for completion of `flush` - /// poll-one(pollable); - /// // Check for any errors that arose during `flush` - /// let _ = this.check-write(); // eliding error handling - /// ``` - blocking-write-and-flush: func( - contents: list - ) -> result<_, stream-error>; - - /// Request to flush buffered output. This function never blocks. - /// - /// This tells the output-stream that the caller intends any buffered - /// output to be flushed. the output which is expected to be flushed - /// is all that has been passed to `write` prior to this call. - /// - /// Upon calling this function, the `output-stream` will not accept any - /// writes (`check-write` will return `ok(0)`) until the flush has - /// completed. The `subscribe` pollable will become ready when the - /// flush has completed and the stream can accept more writes. - flush: func() -> result<_, stream-error>; - - /// Request to flush buffered output, and block until flush completes - /// and stream is ready for writing again. - blocking-flush: func() -> result<_, stream-error>; - - /// Create a `pollable` which will resolve once the output-stream - /// is ready for more writing, or an error has occured. When this - /// pollable is ready, `check-write` will return `ok(n)` with n>0, or an - /// error. - /// - /// If the stream is closed, this pollable is always ready immediately. - /// - /// The created `pollable` is a child resource of the `output-stream`. - /// Implementations may trap if the `output-stream` is dropped before - /// all derived `pollable`s created with this function are dropped. - subscribe: func() -> pollable; - - /// Write zeroes to a stream. - /// - /// this should be used precisely like `write` with the exact same - /// preconditions (must use check-write first), but instead of - /// passing a list of bytes, you simply pass the number of zero-bytes - /// that should be written. - write-zeroes: func( - /// The number of zero-bytes to write - len: u64 - ) -> result<_, stream-error>; - - /// Perform a write of up to 4096 zeroes, and then flush the stream. - /// Block until all of these operations are complete, or an error - /// occurs. - /// - /// This is a convenience wrapper around the use of `check-write`, - /// `subscribe`, `write-zeroes`, and `flush`, and is implemented with - /// the following pseudo-code: - /// - /// ```text - /// let pollable = this.subscribe(); - /// while num_zeroes != 0 { - /// // Wait for the stream to become writable - /// poll-one(pollable); - /// let Ok(n) = this.check-write(); // eliding error handling - /// let len = min(n, num_zeroes); - /// this.write-zeroes(len); // eliding error handling - /// num_zeroes -= len; - /// } - /// this.flush(); - /// // Wait for completion of `flush` - /// poll-one(pollable); - /// // Check for any errors that arose during `flush` - /// let _ = this.check-write(); // eliding error handling - /// ``` - blocking-write-zeroes-and-flush: func( - /// The number of zero-bytes to write - len: u64 - ) -> result<_, stream-error>; - - /// Read from one stream and write to another. - /// - /// The behavior of splice is equivelant to: - /// 1. calling `check-write` on the `output-stream` - /// 2. calling `read` on the `input-stream` with the smaller of the - /// `check-write` permitted length and the `len` provided to `splice` - /// 3. calling `write` on the `output-stream` with that read data. - /// - /// Any error reported by the call to `check-write`, `read`, or - /// `write` ends the splice and reports that error. - /// - /// This function returns the number of bytes transferred; it may be less - /// than `len`. - splice: func( - /// The stream to read from - src: borrow, - /// The number of bytes to splice - len: u64, - ) -> result; - - /// Read from one stream and write to another, with blocking. - /// - /// This is similar to `splice`, except that it blocks until the - /// `output-stream` is ready for writing, and the `input-stream` - /// is ready for reading, before performing the `splice`. - blocking-splice: func( - /// The stream to read from - src: borrow, - /// The number of bytes to splice - len: u64, - ) -> result; - } -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/world.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/world.wit deleted file mode 100644 index 8243da2e..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/io/world.wit +++ /dev/null @@ -1,6 +0,0 @@ -package wasi:io@0.2.0-rc-2023-11-10; - -world imports { - import streams; - import poll; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/insecure-seed.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/insecure-seed.wit deleted file mode 100644 index f76e87da..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/insecure-seed.wit +++ /dev/null @@ -1,25 +0,0 @@ -package wasi:random@0.2.0-rc-2023-11-10; -/// The insecure-seed interface for seeding hash-map DoS resistance. -/// -/// It is intended to be portable at least between Unix-family platforms and -/// Windows. -interface insecure-seed { - /// Return a 128-bit value that may contain a pseudo-random value. - /// - /// The returned value is not required to be computed from a CSPRNG, and may - /// even be entirely deterministic. Host implementations are encouraged to - /// provide pseudo-random values to any program exposed to - /// attacker-controlled content, to enable DoS protection built into many - /// languages' hash-map implementations. - /// - /// This function is intended to only be called once, by a source language - /// to initialize Denial Of Service (DoS) protection in its hash-map - /// implementation. - /// - /// # Expected future evolution - /// - /// This will likely be changed to a value import, to prevent it from being - /// called multiple times and potentially used for purposes other than DoS - /// protection. - insecure-seed: func() -> tuple; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/insecure.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/insecure.wit deleted file mode 100644 index ec7b9973..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/insecure.wit +++ /dev/null @@ -1,22 +0,0 @@ -package wasi:random@0.2.0-rc-2023-11-10; -/// The insecure interface for insecure pseudo-random numbers. -/// -/// It is intended to be portable at least between Unix-family platforms and -/// Windows. -interface insecure { - /// Return `len` insecure pseudo-random bytes. - /// - /// This function is not cryptographically secure. Do not use it for - /// anything related to security. - /// - /// There are no requirements on the values of the returned bytes, however - /// implementations are encouraged to return evenly distributed values with - /// a long period. - get-insecure-random-bytes: func(len: u64) -> list; - - /// Return an insecure pseudo-random `u64` value. - /// - /// This function returns the same type of pseudo-random data as - /// `get-insecure-random-bytes`, represented as a `u64`. - get-insecure-random-u64: func() -> u64; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/random.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/random.wit deleted file mode 100644 index 7a7dfa27..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/random.wit +++ /dev/null @@ -1,26 +0,0 @@ -package wasi:random@0.2.0-rc-2023-11-10; -/// WASI Random is a random data API. -/// -/// It is intended to be portable at least between Unix-family platforms and -/// Windows. -interface random { - /// Return `len` cryptographically-secure random or pseudo-random bytes. - /// - /// This function must produce data at least as cryptographically secure and - /// fast as an adequately seeded cryptographically-secure pseudo-random - /// number generator (CSPRNG). It must not block, from the perspective of - /// the calling program, under any circumstances, including on the first - /// request and on requests for numbers of bytes. The returned data must - /// always be unpredictable. - /// - /// This function must always return fresh data. Deterministic environments - /// must omit this function, rather than implementing it with deterministic - /// data. - get-random-bytes: func(len: u64) -> list; - - /// Return a cryptographically-secure random or pseudo-random `u64` value. - /// - /// This function returns the same type of data as `get-random-bytes`, - /// represented as a `u64`. - get-random-u64: func() -> u64; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/world.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/world.wit deleted file mode 100644 index 49e5743b..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/random/world.wit +++ /dev/null @@ -1,7 +0,0 @@ -package wasi:random@0.2.0-rc-2023-11-10; - -world imports { - import random; - import insecure; - import insecure-seed; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/instance-network.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/instance-network.wit deleted file mode 100644 index e455d0ff..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/instance-network.wit +++ /dev/null @@ -1,9 +0,0 @@ - -/// This interface provides a value-export of the default network handle.. -interface instance-network { - use network.{network}; - - /// Get a handle to the default network. - instance-network: func() -> network; - -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/ip-name-lookup.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/ip-name-lookup.wit deleted file mode 100644 index 931ccf7e..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/ip-name-lookup.wit +++ /dev/null @@ -1,51 +0,0 @@ - -interface ip-name-lookup { - use wasi:io/poll@0.2.0-rc-2023-11-10.{pollable}; - use network.{network, error-code, ip-address}; - - - /// Resolve an internet host name to a list of IP addresses. - /// - /// Unicode domain names are automatically converted to ASCII using IDNA encoding. - /// If the input is an IP address string, the address is parsed and returned - /// as-is without making any external requests. - /// - /// See the wasi-socket proposal README.md for a comparison with getaddrinfo. - /// - /// This function never blocks. It either immediately fails or immediately - /// returns successfully with a `resolve-address-stream` that can be used - /// to (asynchronously) fetch the results. - /// - /// # Typical errors - /// - `invalid-argument`: `name` is a syntactically invalid domain name or IP address. - /// - /// # References: - /// - - /// - - /// - - /// - - resolve-addresses: func(network: borrow, name: string) -> result; - - resource resolve-address-stream { - /// Returns the next address from the resolver. - /// - /// This function should be called multiple times. On each call, it will - /// return the next address in connection order preference. If all - /// addresses have been exhausted, this function returns `none`. - /// - /// This function never returns IPv4-mapped IPv6 addresses. - /// - /// # Typical errors - /// - `name-unresolvable`: Name does not exist or has no suitable associated IP addresses. (EAI_NONAME, EAI_NODATA, EAI_ADDRFAMILY) - /// - `temporary-resolver-failure`: A temporary failure in name resolution occurred. (EAI_AGAIN) - /// - `permanent-resolver-failure`: A permanent failure in name resolution occurred. (EAI_FAIL) - /// - `would-block`: A result is not available yet. (EWOULDBLOCK, EAGAIN) - resolve-next-address: func() -> result, error-code>; - - /// Create a `pollable` which will resolve once the stream is ready for I/O. - /// - /// Note: this function is here for WASI Preview2 only. - /// It's planned to be removed when `future` is natively supported in Preview3. - subscribe: func() -> pollable; - } -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/network.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/network.wit deleted file mode 100644 index 6bb07cd6..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/network.wit +++ /dev/null @@ -1,147 +0,0 @@ - -interface network { - /// An opaque resource that represents access to (a subset of) the network. - /// This enables context-based security for networking. - /// There is no need for this to map 1:1 to a physical network interface. - resource network; - - /// Error codes. - /// - /// In theory, every API can return any error code. - /// In practice, API's typically only return the errors documented per API - /// combined with a couple of errors that are always possible: - /// - `unknown` - /// - `access-denied` - /// - `not-supported` - /// - `out-of-memory` - /// - `concurrency-conflict` - /// - /// See each individual API for what the POSIX equivalents are. They sometimes differ per API. - enum error-code { - // ### GENERAL ERRORS ### - - /// Unknown error - unknown, - - /// Access denied. - /// - /// POSIX equivalent: EACCES, EPERM - access-denied, - - /// The operation is not supported. - /// - /// POSIX equivalent: EOPNOTSUPP - not-supported, - - /// One of the arguments is invalid. - /// - /// POSIX equivalent: EINVAL - invalid-argument, - - /// Not enough memory to complete the operation. - /// - /// POSIX equivalent: ENOMEM, ENOBUFS, EAI_MEMORY - out-of-memory, - - /// The operation timed out before it could finish completely. - timeout, - - /// This operation is incompatible with another asynchronous operation that is already in progress. - /// - /// POSIX equivalent: EALREADY - concurrency-conflict, - - /// Trying to finish an asynchronous operation that: - /// - has not been started yet, or: - /// - was already finished by a previous `finish-*` call. - /// - /// Note: this is scheduled to be removed when `future`s are natively supported. - not-in-progress, - - /// The operation has been aborted because it could not be completed immediately. - /// - /// Note: this is scheduled to be removed when `future`s are natively supported. - would-block, - - - - // ### TCP & UDP SOCKET ERRORS ### - - /// The operation is not valid in the socket's current state. - invalid-state, - - /// A new socket resource could not be created because of a system limit. - new-socket-limit, - - /// A bind operation failed because the provided address is not an address that the `network` can bind to. - address-not-bindable, - - /// A bind operation failed because the provided address is already in use or because there are no ephemeral ports available. - address-in-use, - - /// The remote address is not reachable - remote-unreachable, - - - // ### TCP SOCKET ERRORS ### - - /// The connection was forcefully rejected - connection-refused, - - /// The connection was reset. - connection-reset, - - /// A connection was aborted. - connection-aborted, - - - // ### UDP SOCKET ERRORS ### - datagram-too-large, - - - // ### NAME LOOKUP ERRORS ### - - /// Name does not exist or has no suitable associated IP addresses. - name-unresolvable, - - /// A temporary failure in name resolution occurred. - temporary-resolver-failure, - - /// A permanent failure in name resolution occurred. - permanent-resolver-failure, - } - - enum ip-address-family { - /// Similar to `AF_INET` in POSIX. - ipv4, - - /// Similar to `AF_INET6` in POSIX. - ipv6, - } - - type ipv4-address = tuple; - type ipv6-address = tuple; - - variant ip-address { - ipv4(ipv4-address), - ipv6(ipv6-address), - } - - record ipv4-socket-address { - port: u16, // sin_port - address: ipv4-address, // sin_addr - } - - record ipv6-socket-address { - port: u16, // sin6_port - flow-info: u32, // sin6_flowinfo - address: ipv6-address, // sin6_addr - scope-id: u32, // sin6_scope_id - } - - variant ip-socket-address { - ipv4(ipv4-socket-address), - ipv6(ipv6-socket-address), - } - -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/tcp-create-socket.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/tcp-create-socket.wit deleted file mode 100644 index 768a07c8..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/tcp-create-socket.wit +++ /dev/null @@ -1,26 +0,0 @@ - -interface tcp-create-socket { - use network.{network, error-code, ip-address-family}; - use tcp.{tcp-socket}; - - /// Create a new TCP socket. - /// - /// Similar to `socket(AF_INET or AF_INET6, SOCK_STREAM, IPPROTO_TCP)` in POSIX. - /// - /// This function does not require a network capability handle. This is considered to be safe because - /// at time of creation, the socket is not bound to any `network` yet. Up to the moment `bind`/`listen`/`connect` - /// is called, the socket is effectively an in-memory configuration object, unable to communicate with the outside world. - /// - /// All sockets are non-blocking. Use the wasi-poll interface to block on asynchronous operations. - /// - /// # Typical errors - /// - `not-supported`: The specified `address-family` is not supported. (EAFNOSUPPORT) - /// - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) - /// - /// # References - /// - - /// - - /// - - /// - - create-tcp-socket: func(address-family: ip-address-family) -> result; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/tcp.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/tcp.wit deleted file mode 100644 index 976b272c..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/tcp.wit +++ /dev/null @@ -1,326 +0,0 @@ - -interface tcp { - use wasi:io/streams@0.2.0-rc-2023-11-10.{input-stream, output-stream}; - use wasi:io/poll@0.2.0-rc-2023-11-10.{pollable}; - use wasi:clocks/monotonic-clock@0.2.0-rc-2023-11-10.{duration}; - use network.{network, error-code, ip-socket-address, ip-address-family}; - - enum shutdown-type { - /// Similar to `SHUT_RD` in POSIX. - receive, - - /// Similar to `SHUT_WR` in POSIX. - send, - - /// Similar to `SHUT_RDWR` in POSIX. - both, - } - - - /// A TCP socket handle. - resource tcp-socket { - /// Bind the socket to a specific network on the provided IP address and port. - /// - /// If the IP address is zero (`0.0.0.0` in IPv4, `::` in IPv6), it is left to the implementation to decide which - /// network interface(s) to bind to. - /// If the TCP/UDP port is zero, the socket will be bound to a random free port. - /// - /// When a socket is not explicitly bound, the first invocation to a listen or connect operation will - /// implicitly bind the socket. - /// - /// Unlike in POSIX, this function is async. This enables interactive WASI hosts to inject permission prompts. - /// - /// # Typical `start` errors - /// - `invalid-argument`: The `local-address` has the wrong address family. (EAFNOSUPPORT, EFAULT on Windows) - /// - `invalid-argument`: `local-address` is not a unicast address. (EINVAL) - /// - `invalid-argument`: `local-address` is an IPv4-mapped IPv6 address, but the socket has `ipv6-only` enabled. (EINVAL) - /// - `invalid-state`: The socket is already bound. (EINVAL) - /// - /// # Typical `finish` errors - /// - `address-in-use`: No ephemeral ports available. (EADDRINUSE, ENOBUFS on Windows) - /// - `address-in-use`: Address is already in use. (EADDRINUSE) - /// - `address-not-bindable`: `local-address` is not an address that the `network` can bind to. (EADDRNOTAVAIL) - /// - `not-in-progress`: A `bind` operation is not in progress. - /// - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - /// - /// # Implementors note - /// When binding to a non-zero port, this bind operation shouldn't be affected by the TIME_WAIT - /// state of a recently closed socket on the same local address (i.e. the SO_REUSEADDR socket - /// option should be set implicitly on platforms that require it). - /// - /// # References - /// - - /// - - /// - - /// - - start-bind: func(network: borrow, local-address: ip-socket-address) -> result<_, error-code>; - finish-bind: func() -> result<_, error-code>; - - /// Connect to a remote endpoint. - /// - /// On success: - /// - the socket is transitioned into the Connection state - /// - a pair of streams is returned that can be used to read & write to the connection - /// - /// POSIX mentions: - /// > If connect() fails, the state of the socket is unspecified. Conforming applications should - /// > close the file descriptor and create a new socket before attempting to reconnect. - /// - /// WASI prescribes the following behavior: - /// - If `connect` fails because an input/state validation error, the socket should remain usable. - /// - If a connection was actually attempted but failed, the socket should become unusable for further network communication. - /// Besides `drop`, any method after such a failure may return an error. - /// - /// # Typical `start` errors - /// - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) - /// - `invalid-argument`: `remote-address` is not a unicast address. (EINVAL, ENETUNREACH on Linux, EAFNOSUPPORT on MacOS) - /// - `invalid-argument`: `remote-address` is an IPv4-mapped IPv6 address, but the socket has `ipv6-only` enabled. (EINVAL, EADDRNOTAVAIL on Illumos) - /// - `invalid-argument`: `remote-address` is a non-IPv4-mapped IPv6 address, but the socket was bound to a specific IPv4-mapped IPv6 address. (or vice versa) - /// - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EADDRNOTAVAIL on Windows) - /// - `invalid-argument`: The port in `remote-address` is set to 0. (EADDRNOTAVAIL on Windows) - /// - `invalid-argument`: The socket is already attached to a different network. The `network` passed to `connect` must be identical to the one passed to `bind`. - /// - `invalid-state`: The socket is already in the Connection state. (EISCONN) - /// - `invalid-state`: The socket is already in the Listener state. (EOPNOTSUPP, EINVAL on Windows) - /// - /// # Typical `finish` errors - /// - `timeout`: Connection timed out. (ETIMEDOUT) - /// - `connection-refused`: The connection was forcefully rejected. (ECONNREFUSED) - /// - `connection-reset`: The connection was reset. (ECONNRESET) - /// - `connection-aborted`: The connection was aborted. (ECONNABORTED) - /// - `remote-unreachable`: The remote address is not reachable. (EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN, ENONET) - /// - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE, EADDRNOTAVAIL on Linux, EAGAIN on BSD) - /// - `not-in-progress`: A `connect` operation is not in progress. - /// - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - /// - /// # References - /// - - /// - - /// - - /// - - start-connect: func(network: borrow, remote-address: ip-socket-address) -> result<_, error-code>; - finish-connect: func() -> result, error-code>; - - /// Start listening for new connections. - /// - /// Transitions the socket into the Listener state. - /// - /// Unlike POSIX: - /// - this function is async. This enables interactive WASI hosts to inject permission prompts. - /// - the socket must already be explicitly bound. - /// - /// # Typical `start` errors - /// - `invalid-state`: The socket is not bound to any local address. (EDESTADDRREQ) - /// - `invalid-state`: The socket is already in the Connection state. (EISCONN, EINVAL on BSD) - /// - `invalid-state`: The socket is already in the Listener state. - /// - /// # Typical `finish` errors - /// - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE) - /// - `not-in-progress`: A `listen` operation is not in progress. - /// - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - /// - /// # References - /// - - /// - - /// - - /// - - start-listen: func() -> result<_, error-code>; - finish-listen: func() -> result<_, error-code>; - - /// Accept a new client socket. - /// - /// The returned socket is bound and in the Connection state. The following properties are inherited from the listener socket: - /// - `address-family` - /// - `ipv6-only` - /// - `keep-alive-enabled` - /// - `keep-alive-idle-time` - /// - `keep-alive-interval` - /// - `keep-alive-count` - /// - `hop-limit` - /// - `receive-buffer-size` - /// - `send-buffer-size` - /// - /// On success, this function returns the newly accepted client socket along with - /// a pair of streams that can be used to read & write to the connection. - /// - /// # Typical errors - /// - `invalid-state`: Socket is not in the Listener state. (EINVAL) - /// - `would-block`: No pending connections at the moment. (EWOULDBLOCK, EAGAIN) - /// - `connection-aborted`: An incoming connection was pending, but was terminated by the client before this listener could accept it. (ECONNABORTED) - /// - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) - /// - /// # References - /// - - /// - - /// - - /// - - accept: func() -> result, error-code>; - - /// Get the bound local address. - /// - /// POSIX mentions: - /// > If the socket has not been bound to a local name, the value - /// > stored in the object pointed to by `address` is unspecified. - /// - /// WASI is stricter and requires `local-address` to return `invalid-state` when the socket hasn't been bound yet. - /// - /// # Typical errors - /// - `invalid-state`: The socket is not bound to any local address. - /// - /// # References - /// - - /// - - /// - - /// - - local-address: func() -> result; - - /// Get the remote address. - /// - /// # Typical errors - /// - `invalid-state`: The socket is not connected to a remote address. (ENOTCONN) - /// - /// # References - /// - - /// - - /// - - /// - - remote-address: func() -> result; - - /// Whether the socket is listening for new connections. - /// - /// Equivalent to the SO_ACCEPTCONN socket option. - is-listening: func() -> bool; - - /// Whether this is a IPv4 or IPv6 socket. - /// - /// Equivalent to the SO_DOMAIN socket option. - address-family: func() -> ip-address-family; - - /// Whether IPv4 compatibility (dual-stack) mode is disabled or not. - /// - /// Equivalent to the IPV6_V6ONLY socket option. - /// - /// # Typical errors - /// - `invalid-state`: (set) The socket is already bound. - /// - `not-supported`: (get/set) `this` socket is an IPv4 socket. - /// - `not-supported`: (set) Host does not support dual-stack sockets. (Implementations are not required to.) - ipv6-only: func() -> result; - set-ipv6-only: func(value: bool) -> result<_, error-code>; - - /// Hints the desired listen queue size. Implementations are free to ignore this. - /// - /// If the provided value is 0, an `invalid-argument` error is returned. - /// Any other value will never cause an error, but it might be silently clamped and/or rounded. - /// - /// # Typical errors - /// - `not-supported`: (set) The platform does not support changing the backlog size after the initial listen. - /// - `invalid-argument`: (set) The provided value was 0. - /// - `invalid-state`: (set) The socket is already in the Connection state. - set-listen-backlog-size: func(value: u64) -> result<_, error-code>; - - /// Enables or disables keepalive. - /// - /// The keepalive behavior can be adjusted using: - /// - `keep-alive-idle-time` - /// - `keep-alive-interval` - /// - `keep-alive-count` - /// These properties can be configured while `keep-alive-enabled` is false, but only come into effect when `keep-alive-enabled` is true. - /// - /// Equivalent to the SO_KEEPALIVE socket option. - keep-alive-enabled: func() -> result; - set-keep-alive-enabled: func(value: bool) -> result<_, error-code>; - - /// Amount of time the connection has to be idle before TCP starts sending keepalive packets. - /// - /// If the provided value is 0, an `invalid-argument` error is returned. - /// Any other value will never cause an error, but it might be silently clamped and/or rounded. - /// I.e. after setting a value, reading the same setting back may return a different value. - /// - /// Equivalent to the TCP_KEEPIDLE socket option. (TCP_KEEPALIVE on MacOS) - /// - /// # Typical errors - /// - `invalid-argument`: (set) The provided value was 0. - keep-alive-idle-time: func() -> result; - set-keep-alive-idle-time: func(value: duration) -> result<_, error-code>; - - /// The time between keepalive packets. - /// - /// If the provided value is 0, an `invalid-argument` error is returned. - /// Any other value will never cause an error, but it might be silently clamped and/or rounded. - /// I.e. after setting a value, reading the same setting back may return a different value. - /// - /// Equivalent to the TCP_KEEPINTVL socket option. - /// - /// # Typical errors - /// - `invalid-argument`: (set) The provided value was 0. - keep-alive-interval: func() -> result; - set-keep-alive-interval: func(value: duration) -> result<_, error-code>; - - /// The maximum amount of keepalive packets TCP should send before aborting the connection. - /// - /// If the provided value is 0, an `invalid-argument` error is returned. - /// Any other value will never cause an error, but it might be silently clamped and/or rounded. - /// I.e. after setting a value, reading the same setting back may return a different value. - /// - /// Equivalent to the TCP_KEEPCNT socket option. - /// - /// # Typical errors - /// - `invalid-argument`: (set) The provided value was 0. - keep-alive-count: func() -> result; - set-keep-alive-count: func(value: u32) -> result<_, error-code>; - - /// Equivalent to the IP_TTL & IPV6_UNICAST_HOPS socket options. - /// - /// If the provided value is 0, an `invalid-argument` error is returned. - /// - /// # Typical errors - /// - `invalid-argument`: (set) The TTL value must be 1 or higher. - /// - `invalid-state`: (set) The socket is already in the Connection state. - /// - `invalid-state`: (set) The socket is already in the Listener state. - hop-limit: func() -> result; - set-hop-limit: func(value: u8) -> result<_, error-code>; - - /// The kernel buffer space reserved for sends/receives on this socket. - /// - /// If the provided value is 0, an `invalid-argument` error is returned. - /// Any other value will never cause an error, but it might be silently clamped and/or rounded. - /// I.e. after setting a value, reading the same setting back may return a different value. - /// - /// Equivalent to the SO_RCVBUF and SO_SNDBUF socket options. - /// - /// # Typical errors - /// - `invalid-argument`: (set) The provided value was 0. - /// - `invalid-state`: (set) The socket is already in the Connection state. - /// - `invalid-state`: (set) The socket is already in the Listener state. - receive-buffer-size: func() -> result; - set-receive-buffer-size: func(value: u64) -> result<_, error-code>; - send-buffer-size: func() -> result; - set-send-buffer-size: func(value: u64) -> result<_, error-code>; - - /// Create a `pollable` which will resolve once the socket is ready for I/O. - /// - /// Note: this function is here for WASI Preview2 only. - /// It's planned to be removed when `future` is natively supported in Preview3. - subscribe: func() -> pollable; - - /// Initiate a graceful shutdown. - /// - /// - receive: the socket is not expecting to receive any more data from the peer. All subsequent read - /// operations on the `input-stream` associated with this socket will return an End Of Stream indication. - /// Any data still in the receive queue at time of calling `shutdown` will be discarded. - /// - send: the socket is not expecting to send any more data to the peer. All subsequent write - /// operations on the `output-stream` associated with this socket will return an error. - /// - both: same effect as receive & send combined. - /// - /// The shutdown function does not close (drop) the socket. - /// - /// # Typical errors - /// - `invalid-state`: The socket is not in the Connection state. (ENOTCONN) - /// - /// # References - /// - - /// - - /// - - /// - - shutdown: func(shutdown-type: shutdown-type) -> result<_, error-code>; - } -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/udp-create-socket.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/udp-create-socket.wit deleted file mode 100644 index cc58234d..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/udp-create-socket.wit +++ /dev/null @@ -1,26 +0,0 @@ - -interface udp-create-socket { - use network.{network, error-code, ip-address-family}; - use udp.{udp-socket}; - - /// Create a new UDP socket. - /// - /// Similar to `socket(AF_INET or AF_INET6, SOCK_DGRAM, IPPROTO_UDP)` in POSIX. - /// - /// This function does not require a network capability handle. This is considered to be safe because - /// at time of creation, the socket is not bound to any `network` yet. Up to the moment `bind` is called, - /// the socket is effectively an in-memory configuration object, unable to communicate with the outside world. - /// - /// All sockets are non-blocking. Use the wasi-poll interface to block on asynchronous operations. - /// - /// # Typical errors - /// - `not-supported`: The specified `address-family` is not supported. (EAFNOSUPPORT) - /// - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) - /// - /// # References: - /// - - /// - - /// - - /// - - create-udp-socket: func(address-family: ip-address-family) -> result; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/udp.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/udp.wit deleted file mode 100644 index c8dafadf..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/udp.wit +++ /dev/null @@ -1,277 +0,0 @@ - -interface udp { - use wasi:io/poll@0.2.0-rc-2023-11-10.{pollable}; - use network.{network, error-code, ip-socket-address, ip-address-family}; - - /// A received datagram. - record incoming-datagram { - /// The payload. - /// - /// Theoretical max size: ~64 KiB. In practice, typically less than 1500 bytes. - data: list, - - /// The source address. - /// - /// This field is guaranteed to match the remote address the stream was initialized with, if any. - /// - /// Equivalent to the `src_addr` out parameter of `recvfrom`. - remote-address: ip-socket-address, - } - - /// A datagram to be sent out. - record outgoing-datagram { - /// The payload. - data: list, - - /// The destination address. - /// - /// The requirements on this field depend on how the stream was initialized: - /// - with a remote address: this field must be None or match the stream's remote address exactly. - /// - without a remote address: this field is required. - /// - /// If this value is None, the send operation is equivalent to `send` in POSIX. Otherwise it is equivalent to `sendto`. - remote-address: option, - } - - - - /// A UDP socket handle. - resource udp-socket { - /// Bind the socket to a specific network on the provided IP address and port. - /// - /// If the IP address is zero (`0.0.0.0` in IPv4, `::` in IPv6), it is left to the implementation to decide which - /// network interface(s) to bind to. - /// If the port is zero, the socket will be bound to a random free port. - /// - /// Unlike in POSIX, this function is async. This enables interactive WASI hosts to inject permission prompts. - /// - /// # Typical `start` errors - /// - `invalid-argument`: The `local-address` has the wrong address family. (EAFNOSUPPORT, EFAULT on Windows) - /// - `invalid-state`: The socket is already bound. (EINVAL) - /// - /// # Typical `finish` errors - /// - `address-in-use`: No ephemeral ports available. (EADDRINUSE, ENOBUFS on Windows) - /// - `address-in-use`: Address is already in use. (EADDRINUSE) - /// - `address-not-bindable`: `local-address` is not an address that the `network` can bind to. (EADDRNOTAVAIL) - /// - `not-in-progress`: A `bind` operation is not in progress. - /// - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) - /// - /// # References - /// - - /// - - /// - - /// - - start-bind: func(network: borrow, local-address: ip-socket-address) -> result<_, error-code>; - finish-bind: func() -> result<_, error-code>; - - /// Set up inbound & outbound communication channels, optionally to a specific peer. - /// - /// This function only changes the local socket configuration and does not generate any network traffic. - /// On success, the `remote-address` of the socket is updated. The `local-address` may be updated as well, - /// based on the best network path to `remote-address`. - /// - /// When a `remote-address` is provided, the returned streams are limited to communicating with that specific peer: - /// - `send` can only be used to send to this destination. - /// - `receive` will only return datagrams sent from the provided `remote-address`. - /// - /// This method may be called multiple times on the same socket to change its association, but - /// only the most recently returned pair of streams will be operational. Implementations may trap if - /// the streams returned by a previous invocation haven't been dropped yet before calling `stream` again. - /// - /// The POSIX equivalent in pseudo-code is: - /// ```text - /// if (was previously connected) { - /// connect(s, AF_UNSPEC) - /// } - /// if (remote_address is Some) { - /// connect(s, remote_address) - /// } - /// ``` - /// - /// Unlike in POSIX, the socket must already be explicitly bound. - /// - /// # Typical errors - /// - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) - /// - `invalid-argument`: `remote-address` is a non-IPv4-mapped IPv6 address, but the socket was bound to a specific IPv4-mapped IPv6 address. (or vice versa) - /// - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EDESTADDRREQ, EADDRNOTAVAIL) - /// - `invalid-argument`: The port in `remote-address` is set to 0. (EDESTADDRREQ, EADDRNOTAVAIL) - /// - `invalid-state`: The socket is not bound. - /// - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE, EADDRNOTAVAIL on Linux, EAGAIN on BSD) - /// - `remote-unreachable`: The remote address is not reachable. (ECONNRESET, ENETRESET, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN, ENONET) - /// - `connection-refused`: The connection was refused. (ECONNREFUSED) - /// - /// # References - /// - - /// - - /// - - /// - - %stream: func(remote-address: option) -> result, error-code>; - - /// Get the current bound address. - /// - /// POSIX mentions: - /// > If the socket has not been bound to a local name, the value - /// > stored in the object pointed to by `address` is unspecified. - /// - /// WASI is stricter and requires `local-address` to return `invalid-state` when the socket hasn't been bound yet. - /// - /// # Typical errors - /// - `invalid-state`: The socket is not bound to any local address. - /// - /// # References - /// - - /// - - /// - - /// - - local-address: func() -> result; - - /// Get the address the socket is currently streaming to. - /// - /// # Typical errors - /// - `invalid-state`: The socket is not streaming to a specific remote address. (ENOTCONN) - /// - /// # References - /// - - /// - - /// - - /// - - remote-address: func() -> result; - - /// Whether this is a IPv4 or IPv6 socket. - /// - /// Equivalent to the SO_DOMAIN socket option. - address-family: func() -> ip-address-family; - - /// Whether IPv4 compatibility (dual-stack) mode is disabled or not. - /// - /// Equivalent to the IPV6_V6ONLY socket option. - /// - /// # Typical errors - /// - `not-supported`: (get/set) `this` socket is an IPv4 socket. - /// - `invalid-state`: (set) The socket is already bound. - /// - `not-supported`: (set) Host does not support dual-stack sockets. (Implementations are not required to.) - ipv6-only: func() -> result; - set-ipv6-only: func(value: bool) -> result<_, error-code>; - - /// Equivalent to the IP_TTL & IPV6_UNICAST_HOPS socket options. - /// - /// If the provided value is 0, an `invalid-argument` error is returned. - /// - /// # Typical errors - /// - `invalid-argument`: (set) The TTL value must be 1 or higher. - unicast-hop-limit: func() -> result; - set-unicast-hop-limit: func(value: u8) -> result<_, error-code>; - - /// The kernel buffer space reserved for sends/receives on this socket. - /// - /// If the provided value is 0, an `invalid-argument` error is returned. - /// Any other value will never cause an error, but it might be silently clamped and/or rounded. - /// I.e. after setting a value, reading the same setting back may return a different value. - /// - /// Equivalent to the SO_RCVBUF and SO_SNDBUF socket options. - /// - /// # Typical errors - /// - `invalid-argument`: (set) The provided value was 0. - receive-buffer-size: func() -> result; - set-receive-buffer-size: func(value: u64) -> result<_, error-code>; - send-buffer-size: func() -> result; - set-send-buffer-size: func(value: u64) -> result<_, error-code>; - - /// Create a `pollable` which will resolve once the socket is ready for I/O. - /// - /// Note: this function is here for WASI Preview2 only. - /// It's planned to be removed when `future` is natively supported in Preview3. - subscribe: func() -> pollable; - } - - resource incoming-datagram-stream { - /// Receive messages on the socket. - /// - /// This function attempts to receive up to `max-results` datagrams on the socket without blocking. - /// The returned list may contain fewer elements than requested, but never more. - /// - /// This function returns successfully with an empty list when either: - /// - `max-results` is 0, or: - /// - `max-results` is greater than 0, but no results are immediately available. - /// This function never returns `error(would-block)`. - /// - /// # Typical errors - /// - `remote-unreachable`: The remote address is not reachable. (ECONNRESET, ENETRESET on Windows, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN, ENONET) - /// - `connection-refused`: The connection was refused. (ECONNREFUSED) - /// - /// # References - /// - - /// - - /// - - /// - - /// - - /// - - /// - - /// - - receive: func(max-results: u64) -> result, error-code>; - - /// Create a `pollable` which will resolve once the stream is ready to receive again. - /// - /// Note: this function is here for WASI Preview2 only. - /// It's planned to be removed when `future` is natively supported in Preview3. - subscribe: func() -> pollable; - } - - resource outgoing-datagram-stream { - /// Check readiness for sending. This function never blocks. - /// - /// Returns the number of datagrams permitted for the next call to `send`, - /// or an error. Calling `send` with more datagrams than this function has - /// permitted will trap. - /// - /// When this function returns ok(0), the `subscribe` pollable will - /// become ready when this function will report at least ok(1), or an - /// error. - /// - /// Never returns `would-block`. - check-send: func() -> result; - - /// Send messages on the socket. - /// - /// This function attempts to send all provided `datagrams` on the socket without blocking and - /// returns how many messages were actually sent (or queued for sending). This function never - /// returns `error(would-block)`. If none of the datagrams were able to be sent, `ok(0)` is returned. - /// - /// This function semantically behaves the same as iterating the `datagrams` list and sequentially - /// sending each individual datagram until either the end of the list has been reached or the first error occurred. - /// If at least one datagram has been sent successfully, this function never returns an error. - /// - /// If the input list is empty, the function returns `ok(0)`. - /// - /// Each call to `send` must be permitted by a preceding `check-send`. Implementations must trap if - /// either `check-send` was not called or `datagrams` contains more items than `check-send` permitted. - /// - /// # Typical errors - /// - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) - /// - `invalid-argument`: `remote-address` is a non-IPv4-mapped IPv6 address, but the socket was bound to a specific IPv4-mapped IPv6 address. (or vice versa) - /// - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EDESTADDRREQ, EADDRNOTAVAIL) - /// - `invalid-argument`: The port in `remote-address` is set to 0. (EDESTADDRREQ, EADDRNOTAVAIL) - /// - `invalid-argument`: The socket is in "connected" mode and `remote-address` is `some` value that does not match the address passed to `stream`. (EISCONN) - /// - `invalid-argument`: The socket is not "connected" and no value for `remote-address` was provided. (EDESTADDRREQ) - /// - `remote-unreachable`: The remote address is not reachable. (ECONNRESET, ENETRESET on Windows, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN, ENONET) - /// - `connection-refused`: The connection was refused. (ECONNREFUSED) - /// - `datagram-too-large`: The datagram is too large. (EMSGSIZE) - /// - /// # References - /// - - /// - - /// - - /// - - /// - - /// - - /// - - /// - - send: func(datagrams: list) -> result; - - /// Create a `pollable` which will resolve once the stream is ready to send again. - /// - /// Note: this function is here for WASI Preview2 only. - /// It's planned to be removed when `future` is natively supported in Preview3. - subscribe: func() -> pollable; - } -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/world.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/world.wit deleted file mode 100644 index 49ad8d3d..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/deps/sockets/world.wit +++ /dev/null @@ -1,11 +0,0 @@ -package wasi:sockets@0.2.0-rc-2023-11-10; - -world imports { - import instance-network; - import network; - import udp; - import udp-create-socket; - import tcp; - import tcp-create-socket; - import ip-name-lookup; -} diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/main.wit b/host-apis/wasi-0.2.0-rc-2023-12-05/wit/main.wit deleted file mode 100644 index 013d6efa..00000000 --- a/host-apis/wasi-0.2.0-rc-2023-12-05/wit/main.wit +++ /dev/null @@ -1,6 +0,0 @@ -package local:bindings; - -world bindings { - include wasi:cli/command@0.2.0-rc-2023-12-05; - include wasi:http/proxy@0.2.0-rc-2023-12-05; -} From 4d8746f7d55e1bd0120a8fac491ffa8b0a0a458b Mon Sep 17 00:00:00 2001 From: Till Schneidereit Date: Sat, 22 Jun 2024 18:21:32 +0200 Subject: [PATCH 11/28] Modularize definition and use of typed errors (#67) This introduces support for adding typed error definitions in a modular way, such that extensions can define their own typed errors. This support is then also used in a few places, though more work can be done there. --- builtins/web/dom-exception.cpp | 3 +- builtins/web/dom-exception.h | 2 +- builtins/web/fetch/fetch-errors.h | 21 +++++++++++++ builtins/web/fetch/fetch_event.cpp | 23 +++++++------- builtins/web/fetch/headers.cpp | 21 ++++++------- builtins/web/fetch/request-response.cpp | 42 +++++++++---------------- builtins/web/fetch/request-response.h | 3 +- builtins/web/url.cpp | 10 +++--- cmake/builtins.cmake | 5 +-- include/builtin.h | 12 ++----- include/error-numbers.msg | 6 +--- include/errors.h | 22 +++++++++++++ include/extension-api.h | 6 ++++ runtime/builtin.cpp | 20 ++++++++++++ runtime/sequence.hpp | 24 +++++--------- 15 files changed, 127 insertions(+), 93 deletions(-) create mode 100644 builtins/web/fetch/fetch-errors.h create mode 100644 include/errors.h diff --git a/builtins/web/dom-exception.cpp b/builtins/web/dom-exception.cpp index 63b9b916..13d07948 100644 --- a/builtins/web/dom-exception.cpp +++ b/builtins/web/dom-exception.cpp @@ -185,11 +185,12 @@ JSObject *DOMException::create(JSContext *cx, std::string_view message, std::str return instance; } -void DOMException::raise(JSContext *cx, std::string_view message, std::string_view name) { +bool DOMException::raise(JSContext *cx, std::string_view message, std::string_view name) { JS::RootedObject errorObj(cx); errorObj.set(DOMException::create(cx, message, name)); JS::RootedValue er(cx, JS::ObjectValue(*errorObj)); JS_SetPendingException(cx, er); + return false; } // constructor(optional DOMString message = "", optional DOMString name = "Error"); diff --git a/builtins/web/dom-exception.h b/builtins/web/dom-exception.h index e0d17402..342ec8e9 100644 --- a/builtins/web/dom-exception.h +++ b/builtins/web/dom-exception.h @@ -24,7 +24,7 @@ class DOMException : public BuiltinImpl { static bool init_class(JSContext *cx, JS::HandleObject global); static bool constructor(JSContext *cx, unsigned argc, JS::Value *vp); static JSObject *create(JSContext *cx, std::string_view message, std::string_view name); - static void raise(JSContext *cx, std::string_view message, std::string_view name); + static bool raise(JSContext *cx, std::string_view message, std::string_view name); }; bool install(api::Engine *engine); diff --git a/builtins/web/fetch/fetch-errors.h b/builtins/web/fetch/fetch-errors.h new file mode 100644 index 00000000..2c818582 --- /dev/null +++ b/builtins/web/fetch/fetch-errors.h @@ -0,0 +1,21 @@ +#ifndef FETCH_ERRORS_H +#define FETCH_ERRORS_H + +namespace FetchErrors { +DEF_ERR(FetchNetworkError, JSEXN_TYPEERR, "NetworkError when attempting to fetch resource", 0) +DEF_ERR(InvalidRespondWithArg, JSEXN_TYPEERR, "FetchEvent#respondWith must be called with a Response " + "object or a Promise resolving to a Response object as " + "the first argument", 0) +DEF_ERR(InvalidCtorInitArg, JSEXN_TYPEERR, "{0} constructor: |init| parameter can't be converted to a dictionary", 1) +DEF_ERR(NonBodyRequestWithBody, JSEXN_TYPEERR, "Request constructor: HEAD or GET Request cannot have a body", 0) +DEF_ERR(NonBodyResponseWithBody, JSEXN_TYPEERR, "Response with status {0} cannot have body", 1) +DEF_ERR(BodyStreamUnusable, JSEXN_TYPEERR, "Can't use a ReadableStream that's locked or has ever been read from or canceled", 0) +DEF_ERR(InvalidStatus, JSEXN_TYPEERR, "Response constructor: invalid status {0}", 1) +DEF_ERR(InvalidStreamChunk, JSEXN_TYPEERR, "ReadableStream used as a Request or Response body must produce Uint8Array values", 0) +DEF_ERR(EmptyHeaderName, JSEXN_TYPEERR, "{0}: Header name can't be empty", 1) +DEF_ERR(InvalidHeaderName, JSEXN_TYPEERR, "{0}: Invalid header name \"{1}\"", 2) +DEF_ERR(InvalidHeaderValue, JSEXN_TYPEERR, "{0}: Invalid header value \"{1}\"", 2) +DEF_ERR(HeadersCloningFailed, JSEXN_ERR, "Failed to clone headers", 0) +}; // namespace FetchErrors + +#endif // FETCH_ERRORS_H diff --git a/builtins/web/fetch/fetch_event.cpp b/builtins/web/fetch/fetch_event.cpp index 91e0712b..afcf9e81 100644 --- a/builtins/web/fetch/fetch_event.cpp +++ b/builtins/web/fetch/fetch_event.cpp @@ -5,7 +5,7 @@ #include "encode.h" #include "request-response.h" -#include "bindings.h" +#include "../dom-exception.h" #include #include @@ -225,9 +225,7 @@ bool response_promise_then_handler(JSContext *cx, JS::HandleObject event, JS::Ha // of a Promise wrapping it, so either the value is a Response, or we have to // bail. if (!Response::is_instance(args.get(0))) { - JS_ReportErrorUTF8(cx, "FetchEvent#respondWith must be called with a Response " - "object or a Promise resolving to a Response object as " - "the first argument"); + api::throw_error(cx, FetchErrors::InvalidRespondWithArg); JS::RootedObject rejection(cx, PromiseRejectedWithPendingError(cx)); if (!rejection) return false; @@ -275,15 +273,16 @@ bool FetchEvent::respondWith(JSContext *cx, unsigned argc, JS::Value *vp) { // Step 2 if (!is_dispatching(self)) { - JS_ReportErrorUTF8(cx, "FetchEvent#respondWith must be called synchronously from " - "within a FetchEvent handler"); - return false; + return dom_exception::DOMException::raise(cx, + "FetchEvent#respondWith must be called synchronously from within a FetchEvent handler", + "InvalidStateError"); } // Step 3 if (state(self) != State::unhandled) { - JS_ReportErrorUTF8(cx, "FetchEvent#respondWith can't be called twice on the same event"); - return false; + return dom_exception::DOMException::raise(cx, + "FetchEvent#respondWith can't be called twice on the same event", + "InvalidStateError"); } // Step 4 @@ -352,8 +351,10 @@ bool FetchEvent::waitUntil(JSContext *cx, unsigned argc, JS::Value *vp) { // Step 2 if (!is_active(self)) { - JS_ReportErrorUTF8(cx, "FetchEvent#waitUntil called on inactive event"); - return false; + return dom_exception::DOMException::raise( + cx, + "waitUntil called on a FetchEvent that isn't active anymore", + "InvalidStateError"); } // Steps 3-4 diff --git a/builtins/web/fetch/headers.cpp b/builtins/web/fetch/headers.cpp index 632a2f7b..98001031 100644 --- a/builtins/web/fetch/headers.cpp +++ b/builtins/web/fetch/headers.cpp @@ -1,6 +1,7 @@ #include "headers.h" #include "encode.h" #include "decode.h" +#include "fetch-errors.h" #include "sequence.hpp" #include "js/Conversions.h" @@ -81,7 +82,7 @@ host_api::HostString normalize_header_name(JSContext *cx, HandleValue name_val, } if (name.len == 0) { - JS_ReportErrorASCII(cx, "%s: Header name can't be empty", fun_name); + api::throw_error(cx, FetchErrors::EmptyHeaderName, fun_name); return nullptr; } @@ -89,7 +90,7 @@ host_api::HostString normalize_header_name(JSContext *cx, HandleValue name_val, for (size_t i = 0; i < name.len; i++) { const unsigned char ch = name_chars[i]; if (ch > 127 || !VALID_NAME_CHARS[ch]) { - JS_ReportErrorUTF8(cx, "%s: Invalid header name '%s'", fun_name, name_chars); + api::throw_error(cx, FetchErrors::InvalidHeaderName, fun_name, name_chars); return nullptr; } @@ -153,7 +154,7 @@ host_api::HostString normalize_header_value(JSContext *cx, HandleValue value_val for (size_t i = start; i < end; i++) { unsigned char ch = value_chars[i]; if (ch == '\r' || ch == '\n' || ch == '\0') { - JS_ReportErrorUTF8(cx, "%s: Invalid header value '%s'", fun_name, value_chars); + api::throw_error(cx, FetchErrors::InvalidHeaderValue, fun_name, value_chars); return nullptr; } } @@ -353,8 +354,7 @@ static bool switch_mode(JSContext* cx, HandleObject self, const Headers::Mode mo auto handle = host_api::HttpHeaders::FromEntries(Headers::guard(self), string_entries); if (handle.is_err()) { - JS_ReportErrorASCII(cx, "Failed to clone headers"); - return false; + return api::throw_error(cx, FetchErrors::HeadersCloningFailed); } SetReservedSlot(self, static_cast(Headers::Slots::Handle), PrivateValue(handle.unwrap())); @@ -419,8 +419,7 @@ bool prepare_for_entries_modification(JSContext* cx, JS::HandleObject self) { if (!handle->is_writable()) { auto new_handle = handle->clone(Headers::guard(self)); if (!new_handle) { - JS_ReportErrorASCII(cx, "Failed to clone headers"); - return false; + return api::throw_error(cx, FetchErrors::HeadersCloningFailed); } delete handle; SetReservedSlot(self, static_cast(Headers::Slots::Handle), PrivateValue(new_handle)); @@ -569,7 +568,7 @@ JSObject *Headers::init_entries(JSContext *cx, HandleObject self, HandleValue in } if (!consumed) { - core::report_sequence_or_record_arg_error(cx, "Headers", ""); + api::throw_error(cx, api::Errors::InvalidSequence, "Headers", ""); return nullptr; } @@ -792,9 +791,7 @@ bool Headers::forEach(JSContext *cx, unsigned argc, JS::Value *vp) { HEADERS_ITERATION_METHOD(1) if (!args[0].isObject() || !JS::IsCallable(&args[0].toObject())) { - JS_ReportErrorASCII(cx, "Failed to execute 'forEach' on 'Headers': " - "parameter 1 is not of type 'Function'"); - return false; + return api::throw_error(cx, api::Errors::ForEachCallback, "Headers"); } JS::RootedValueArray<3> newArgs(cx); @@ -939,7 +936,7 @@ unique_ptr Headers::handle_clone(JSContext* cx, HandleObj auto handle = unique_ptr(get_handle(self)->clone(guard(self))); if (!handle) { - JS_ReportErrorASCII(cx, "Failed to clone headers"); + api::throw_error(cx, FetchErrors::HeadersCloningFailed); return nullptr; } return handle; diff --git a/builtins/web/fetch/request-response.cpp b/builtins/web/fetch/request-response.cpp index 8bc34acc..70bad5b8 100644 --- a/builtins/web/fetch/request-response.cpp +++ b/builtins/web/fetch/request-response.cpp @@ -232,8 +232,7 @@ bool RequestOrResponse::mark_body_used(JSContext *cx, JS::HandleObject obj) { // it's a disturbed ReadableStream. To improve error reporting, we clear // the current exception and throw a better one. JS_ClearPendingException(cx); - JS_ReportErrorLatin1(cx, "The ReadableStream body is already locked and can't be consumed"); - return false; + return api::throw_error(cx, FetchErrors::BodyStreamUnusable); } } @@ -296,9 +295,7 @@ bool RequestOrResponse::extract_body(JSContext *cx, JS::HandleObject self, if (body_obj && JS::IsReadableStream(body_obj)) { if (RequestOrResponse::body_unusable(cx, body_obj)) { - JS_ReportErrorLatin1(cx, "Can't use a ReadableStream that's locked or has ever been " - "read from or canceled as a Request or Response body."); - return false; + return api::throw_error(cx, FetchErrors::BodyStreamUnusable); } JS_SetReservedSlot(self, static_cast(RequestOrResponse::Slots::BodyStream), body_val); @@ -676,7 +673,7 @@ bool RequestOrResponse::content_stream_read_then_handler(JSContext *cx, JS::Hand // The read operation can return anything since this stream comes from the guest // If it is not a UInt8Array -- reject with a TypeError if (!val.isObject() || !JS_IsUint8Array(&val.toObject())) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_RESPONSE_VALUE_NOT_UINT8ARRAY); + api::throw_error(cx, FetchErrors::InvalidStreamChunk); JS::RootedObject result_promise(cx); result_promise = &JS::GetReservedSlot(self, static_cast(Slots::BodyAllPromise)).toObject(); @@ -748,8 +745,7 @@ bool RequestOrResponse::consume_content_stream_for_bodyAll(JSContext *cx, JS::Ha } MOZ_ASSERT(JS::IsReadableStream(stream)); if (RequestOrResponse::body_unusable(cx, stream)) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, - JSMSG_RESPONSE_BODY_DISTURBED_OR_LOCKED); + api::throw_error(cx, FetchErrors::BodyStreamUnusable); JS::RootedObject result_promise(cx); result_promise = &JS::GetReservedSlot(self, static_cast(Slots::BodyAllPromise)).toObject(); @@ -813,8 +809,7 @@ template bool RequestOrResponse::bodyAll(JSContext *cx, JS::CallArgs args, JS::HandleObject self) { // TODO: mark body as consumed when operating on stream, too. if (body_used(self)) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, - JSMSG_RESPONSE_BODY_DISTURBED_OR_LOCKED); + api::throw_error(cx, FetchErrors::BodyStreamUnusable); return ReturnPromiseRejectedWithPendingError(cx, args); } @@ -939,8 +934,7 @@ bool reader_for_outgoing_body_then_handler(JSContext *cx, JS::HandleObject body_ if (Request::is_instance(body_owner)) { JS::RootedObject response_promise(cx, Request::response_promise(body_owner)); - // TODO: this should be a TypeError, but I'm not sure how to make that work - JS_ReportErrorUTF8(cx, "TypeError"); + api::throw_error(cx, FetchErrors::InvalidStreamChunk); return RejectPromiseWithPendingError(cx, response_promise); } @@ -1018,9 +1012,7 @@ bool RequestOrResponse::maybe_stream_body(JSContext *cx, JS::HandleObject body_o } if (body_unusable(cx, stream)) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, - JSMSG_RESPONSE_BODY_DISTURBED_OR_LOCKED); - return false; + return api::throw_error(cx, FetchErrors::BodyStreamUnusable); } // If the body stream is backed by an HTTP body handle, we can directly pipe @@ -1514,8 +1506,7 @@ bool Request::initialize(JSContext *cx, JS::HandleObject request, JS::HandleValu return false; } } else if (!init_val.isNullOrUndefined()) { - JS_ReportErrorLatin1(cx, "Request constructor: |init| parameter can't be converted to " - "a dictionary"); + api::throw_error(cx, FetchErrors::InvalidCtorInitArg, "Request"); return false; } @@ -1677,7 +1668,7 @@ bool Request::initialize(JSContext *cx, JS::HandleObject request, JS::HandleValu // non-null, and `request`’s method is ``GET`` or ``HEAD``, then throw a // TypeError. if ((input_has_body || !body_val.isNullOrUndefined()) && is_get_or_head) { - JS_ReportErrorLatin1(cx, "Request constructor: HEAD or GET Request cannot have a body."); + api::throw_error(cx, FetchErrors::NonBodyRequestWithBody); return false; } @@ -1744,7 +1735,7 @@ bool Request::initialize(JSContext *cx, JS::HandleObject request, JS::HandleValu // Throw an error if the input request's body isn't usable. if (RequestOrResponse::body_used(input_request) || (inputBody && RequestOrResponse::body_unusable(cx, inputBody))) { - JS_ReportErrorLatin1(cx, "Request constructor: the input request's body isn't usable."); + api::throw_error(cx, FetchErrors::BodyStreamUnusable); return false; } @@ -2370,16 +2361,14 @@ bool Response::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { } } else if (!init_val.isNullOrUndefined()) { - JS_ReportErrorLatin1(cx, "Response constructor: |init| parameter can't be converted to " - "a dictionary"); - return false; + return api::throw_error(cx, FetchErrors::InvalidCtorInitArg, "Response"); } // 1. If `init`["status"] is not in the range 200 to 599, inclusive, then // `throw` a ``RangeError``. if (status < 200 || status > 599) { - JS_ReportErrorLatin1(cx, "Response constructor: invalid status %u", status); - return false; + auto status_str = std::to_string(status); + return api::throw_error(cx, FetchErrors::InvalidStatus, status_str.c_str()); } // 2. If `init`["statusText"] does not match the `reason-phrase` token @@ -2433,9 +2422,8 @@ bool Response::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { // 1. If `init`["status"] is a `null body status`, then `throw` a // ``TypeError``. if (status == 204 || status == 205 || status == 304) { - JS_ReportErrorLatin1(cx, "Response constructor: Response body is given " - "with a null body status."); - return false; + auto status_str = std::to_string(status); + return api::throw_error(cx, FetchErrors::NonBodyResponseWithBody, status_str.c_str()); } // 2. Let `Content-Type` be null. diff --git a/builtins/web/fetch/request-response.h b/builtins/web/fetch/request-response.h index 79bb2732..50653b97 100644 --- a/builtins/web/fetch/request-response.h +++ b/builtins/web/fetch/request-response.h @@ -3,6 +3,7 @@ #include "headers.h" #include "host_api.h" +#include "fetch-errors.h" namespace builtins { namespace web { @@ -236,7 +237,7 @@ class ResponseFutureTask final : public api::AsyncTask { auto res = future_->maybe_response(); if (res.is_err()) { - JS_ReportErrorUTF8(cx, "NetworkError when attempting to fetch resource."); + api::throw_error(cx, FetchErrors::FetchNetworkError); return RejectPromiseWithPendingError(cx, response_promise); } diff --git a/builtins/web/url.cpp b/builtins/web/url.cpp index 01ea261f..e5e96b23 100644 --- a/builtins/web/url.cpp +++ b/builtins/web/url.cpp @@ -336,9 +336,7 @@ bool URLSearchParams::forEach(JSContext *cx, unsigned argc, JS::Value *vp) { const auto params = get_params(self); if (!args[0].isObject() || !JS::IsCallable(&args[0].toObject())) { - JS_ReportErrorASCII(cx, "Failed to execute 'forEach' on 'URLSearchParams': " - "parameter 1 is not of type 'Function'"); - return false; + return api::throw_error(cx, api::Errors::ForEachCallback, "URLSearchParams"); } JS::HandleValue callback = args[0]; @@ -612,6 +610,8 @@ bool URL::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { return true; } +DEF_ERR(InvalidURLError, JSEXN_TYPEERR, "URL constructor: {0} is not a valid URL.", 1); + JSObject *URL::create(JSContext *cx, JS::HandleObject self, jsurl::SpecString url_str, const jsurl::JSUrl *base) { jsurl::JSUrl *url; @@ -622,7 +622,7 @@ JSObject *URL::create(JSContext *cx, JS::HandleObject self, jsurl::SpecString ur } if (!url) { - JS_ReportErrorUTF8(cx, "URL constructor: %s is not a valid URL.", (char *)url_str.data); + api::throw_error(cx, InvalidURLError, (char *)url_str.data); return nullptr; } @@ -666,7 +666,7 @@ JSObject *URL::create(JSContext *cx, JS::HandleObject self, JS::HandleValue url_ base = jsurl::new_jsurl(&str); if (!base) { - JS_ReportErrorUTF8(cx, "URL constructor: %s is not a valid URL.", (char *)str.data); + api::throw_error(cx, InvalidURLError, (char *)str.data); return nullptr; } } diff --git a/cmake/builtins.cmake b/cmake/builtins.cmake index 2d5ef420..ea597f1a 100644 --- a/cmake/builtins.cmake +++ b/cmake/builtins.cmake @@ -78,10 +78,7 @@ add_builtin( SRC builtins/web/fetch/fetch_event.cpp DEPENDENCIES - host_api - INCLUDE_DIRS - runtime - ${HOST_API}/bindings/) + host_api) add_builtin( builtins::web::crypto diff --git a/include/builtin.h b/include/builtin.h index 814c4889..b2cdb408 100644 --- a/include/builtin.h +++ b/include/builtin.h @@ -114,20 +114,12 @@ const JSErrorFormatString *GetErrorMessage(void *userRef, unsigned errorNumber); #define REQUEST_HANDLER_ONLY(name) \ if (isWizening()) { \ - JS_ReportErrorUTF8(cx, \ - "%s can only be used during request handling, " \ - "not during initialization", \ - name); \ - return false; \ + return api::throw_error(cx, api::Errors::RequestHandlerOnly, name); \ } #define INIT_ONLY(name) \ if (hasWizeningFinished()) { \ - JS_ReportErrorUTF8(cx, \ - "%s can only be used during initialization, " \ - "not during request handling", \ - name); \ - return false; \ + return api::throw_error(cx, api::Errors::InitializationOnly, name); \ } inline bool ThrowIfNotConstructing(JSContext *cx, const CallArgs &args, const char *builtinName) { diff --git a/include/error-numbers.msg b/include/error-numbers.msg index 58be33e6..63440f1e 100644 --- a/include/error-numbers.msg +++ b/include/error-numbers.msg @@ -47,20 +47,16 @@ MSG_DEF(JSMSG_INCOMPATIBLE_INSTANCE, 2, JSEXN_TYPEERR, MSG_DEF(JSMSG_INVALID_BUFFER_ARG, 2, JSEXN_TYPEERR, "{0} must be of type ArrayBuffer or ArrayBufferView but got \"{1}\"") MSG_DEF(JSMSG_INVALID_COMPRESSION_FORMAT, 1, JSEXN_TYPEERR, "'format' has to be \"deflate\", \"deflate-raw\", or \"gzip\", but got \"{0}\"") MSG_DEF(JSMSG_DECOMPRESSING_ERROR, 0, JSEXN_TYPEERR, "DecompressionStream transform: error decompressing chunk") -MSG_DEF(JSMSG_READABLE_STREAM_LOCKED_OR_DISTRUBED, 0, JSEXN_TYPEERR, "Can't use a ReadableStream that's locked or has ever been read from or canceled") -MSG_DEF(JSMSG_RESPONSE_VALUE_NOT_UINT8ARRAY, 0, JSEXN_TYPEERR, "Can't convert value to Uint8Array while consuming Body") -MSG_DEF(JSMSG_RESPONSE_BODY_DISTURBED_OR_LOCKED, 0, JSEXN_TYPEERR, "Response body object should not be disturbed or locked") MSG_DEF(JSMSG_INVALID_CHARACTER_ERROR, 0, JSEXN_ERR, "String contains an invalid character") MSG_DEF(JSMSG_SUBTLE_CRYPTO_ERROR, 1, JSEXN_ERR, "{0}") MSG_DEF(JSMSG_SUBTLE_CRYPTO_INVALID_JWK_KTY_VALUE, 1, JSEXN_ERR, "The JWK 'kty' member was not '{0}'") MSG_DEF(JSMSG_SUBTLE_CRYPTO_INVALID_KEY_USAGES_VALUE, 0, JSEXN_TYPEERR, "Invalid keyUsages argument") MSG_DEF(JSMSG_RESPONSE_REDIRECT_INVALID_URI, 0, JSEXN_TYPEERR, "Response.redirect: url parameter is not a valid URL.") MSG_DEF(JSMSG_RESPONSE_REDIRECT_INVALID_STATUS, 0, JSEXN_RANGEERR, "Response.redirect: Invalid redirect status code.") -MSG_DEF(JSMSG_RESPONSE_NULL_BODY_STATUS_WITH_BODY, 0, JSEXN_TYPEERR, "Response with null body status cannot have body") MSG_DEF(JSMSG_RESPONSE_JSON_INVALID_VALUE, 0, JSEXN_TYPEERR, "Redirect.json: The data is not JSON serializable") MSG_DEF(JSMSG_TEXT_DECODER_INVALID_ENCODING, 1, JSEXN_RANGEERR, "TextDecoder constructor: The given encoding '{0}' is not supported.") MSG_DEF(JSMSG_TEXT_DECODER_DECODING_FAILED, 0, JSEXN_TYPEERR, "TextDecoder.decode: Decoding failed.") MSG_DEF(JSMSG_TEXT_DECODER_OPTIONS_NOT_DICTIONARY, 0, JSEXN_TYPEERR, "TextDecoder constructor: options argument can't be converted to a dictionary.") MSG_DEF(JSMSG_TEXT_DECODER_DECODE_OPTIONS_NOT_DICTIONARY, 0, JSEXN_TYPEERR, "TextDecoder.decode: options argument can't be converted to a dictionary.") MSG_DEF(JSMSG_TEXT_ENCODER_ENCODEINTO_INVALID_ARRAY, 0, JSEXN_TYPEERR, "TextEncoder.encodeInto: Argument 2 does not implement interface Uint8Array.") -//clang-format on \ No newline at end of file +//clang-format on diff --git a/include/errors.h b/include/errors.h new file mode 100644 index 00000000..c2fca44a --- /dev/null +++ b/include/errors.h @@ -0,0 +1,22 @@ +#ifndef CORE_ERRORS_H +#define CORE_ERRORS_H + +bool throw_error(JSContext* cx, const JSErrorFormatString &error, + const char* arg1 = nullptr, + const char* arg2 = nullptr, + const char* arg3 = nullptr, + const char* arg4 = nullptr); + +namespace Errors { +DEF_ERR(InvalidSequence, JSEXN_TYPEERR, "Failed to construct {0} object. If defined, the first " + "argument must be either a [ ['name', 'value'], ... ] sequence, " + "or a { 'name' : 'value', ... } record{1}.", 2) +DEF_ERR(ForEachCallback, JSEXN_TYPEERR, "Failed to execute 'forEach' on '{0}': " + "parameter 1 is not of type 'Function'", 1) +DEF_ERR(RequestHandlerOnly, JSEXN_TYPEERR, "{0} can only be used during request handling, " \ + "not during initialization", 1) +DEF_ERR(InitializationOnly, JSEXN_TYPEERR, "{0} can only be used during request handling, " + "not during initialization", 1) +}; // namespace Errors + +#endif // CORE_ERRORS_H diff --git a/include/extension-api.h b/include/extension-api.h index 4f5360f2..2cfdba2e 100644 --- a/include/extension-api.h +++ b/include/extension-api.h @@ -27,12 +27,18 @@ using JS::PersistentRootedVector; typedef int32_t PollableHandle; constexpr PollableHandle INVALID_POLLABLE_HANDLE = -1; +#define DEF_ERR(name, exception, format, count) \ +static constexpr JSErrorFormatString name = { #name, format, count, exception }; + namespace api { +#include "errors.h" + class AsyncTask; class Engine { + public: Engine(); JSContext *cx(); diff --git a/runtime/builtin.cpp b/runtime/builtin.cpp index 7d1c03cd..3e5b63c0 100644 --- a/runtime/builtin.cpp +++ b/runtime/builtin.cpp @@ -1,5 +1,25 @@ #include "builtin.h" +static const JSErrorFormatString *GetErrorMessageFromRef(void *userRef, unsigned errorNumber) { + auto error = static_cast(userRef); + + JS::ConstUTF8CharsZ(error->format, strlen(error->format)); + return error; +} + +bool api::throw_error(JSContext* cx, const JSErrorFormatString &error, + const char* arg1, const char* arg2, const char* arg3, const char* arg4) { + const char** args = nullptr; + const char* list[4] = { arg1, arg2, arg3, arg4 }; + if (arg1) { + args = list; + } + + JS_ReportErrorNumberUTF8Array(cx, GetErrorMessageFromRef, + const_cast(&error), 0, args); + return false; +} + const JSErrorFormatString *GetErrorMessage(void *userRef, unsigned errorNumber) { if (errorNumber > 0 && errorNumber < JSErrNum_Limit) { return &js_ErrorFormatString[errorNumber]; diff --git a/runtime/sequence.hpp b/runtime/sequence.hpp index b88611b6..82cb9394 100644 --- a/runtime/sequence.hpp +++ b/runtime/sequence.hpp @@ -4,23 +4,15 @@ // TODO: remove these once the warnings are fixed #pragma clang diagnostic push #pragma clang diagnostic ignored "-Winvalid-offsetof" +#include "js/ForOfIterator.h" #include "jsapi.h" #include "jsfriendapi.h" -#include "js/ForOfIterator.h" + +#include #pragma clang diagnostic pop namespace core { -inline bool report_sequence_or_record_arg_error(JSContext *cx, const char *name, - const char *alt_text) { - JS_ReportErrorUTF8(cx, - "Failed to construct %s object. If defined, the first " - "argument must be either a [ ['name', 'value'], ... ] sequence, " - "or a { 'name' : 'value', ... } record%s.", - name, alt_text); - return false; -} - /** * Extract pairs from the given value if it is either a * sequence or a record. @@ -57,14 +49,14 @@ bool maybe_consume_sequence_or_record(JSContext *cx, JS::HandleValue initv, JS:: break; if (!entry.isObject()) - return report_sequence_or_record_arg_error(cx, ctor_name, alt_text); + return api::throw_error(cx, api::Errors::InvalidSequence, ctor_name, alt_text); JS::ForOfIterator entr_iter(cx); if (!entr_iter.init(entry, JS::ForOfIterator::AllowNonIterable)) return false; if (!entr_iter.valueIsIterable()) - return report_sequence_or_record_arg_error(cx, ctor_name, alt_text); + return api::throw_error(cx, api::Errors::InvalidSequence, ctor_name, alt_text); { bool done; @@ -73,19 +65,19 @@ bool maybe_consume_sequence_or_record(JSContext *cx, JS::HandleValue initv, JS:: if (!entr_iter.next(&key, &done)) return false; if (done) - return report_sequence_or_record_arg_error(cx, ctor_name, alt_text); + return api::throw_error(cx, api::Errors::InvalidSequence, ctor_name, alt_text); // Extract value. if (!entr_iter.next(&value, &done)) return false; if (done) - return report_sequence_or_record_arg_error(cx, ctor_name, alt_text); + return api::throw_error(cx, api::Errors::InvalidSequence, ctor_name, alt_text); // Ensure that there aren't any further entries. if (!entr_iter.next(&entry, &done)) return false; if (!done) - return report_sequence_or_record_arg_error(cx, ctor_name, alt_text); + return api::throw_error(cx, api::Errors::InvalidSequence, ctor_name, alt_text); if (!apply(cx, target, key, value, ctor_name)) return false; From 4f708952e90eeb42736c9e59e4db8d8600e7ed80 Mon Sep 17 00:00:00 2001 From: Till Schneidereit Date: Mon, 24 Jun 2024 19:24:47 +0200 Subject: [PATCH 12/28] Change all error reporting to use `api::throw_error` (#73) * Change all error reporting to use `api::throw_error` I went through the existing errors with a pretty fine comb and cleaned things up where it makes sense, instead of just moving things over mechanically. As a result, a few more WPT tests pass, and in general things are a bunch cleaner now, I think. * Address review comments * Fix test expectations --- builtins/web/base64.cpp | 15 +- builtins/web/crypto/crypto-algorithm.cpp | 39 +++-- builtins/web/crypto/crypto-key.cpp | 75 +++------ builtins/web/crypto/crypto-key.h | 7 +- builtins/web/crypto/crypto.cpp | 15 +- builtins/web/crypto/crypto.h | 3 +- builtins/web/crypto/json-web-key.cpp | 62 +++++--- builtins/web/crypto/subtle-crypto.cpp | 42 ++--- builtins/web/crypto/subtle-crypto.h | 3 +- builtins/web/dom-exception.cpp | 15 +- builtins/web/fetch/fetch-errors.h | 6 +- builtins/web/fetch/request-response.cpp | 43 +++--- builtins/web/global_self.cpp | 3 +- builtins/web/performance.cpp | 5 - builtins/web/performance.h | 4 +- builtins/web/queue-microtask.cpp | 4 +- builtins/web/streams/compression-stream.cpp | 12 +- builtins/web/streams/decompression-stream.cpp | 14 +- builtins/web/streams/native-stream-source.cpp | 5 +- builtins/web/streams/stream-errors.h | 18 +++ .../transform-stream-default-controller.cpp | 4 +- builtins/web/streams/transform-stream.cpp | 49 +++--- builtins/web/structured-clone.cpp | 5 +- builtins/web/text-codec/text-codec-errors.h | 10 ++ builtins/web/text-codec/text-decoder.cpp | 60 +++---- builtins/web/text-codec/text-encoder.cpp | 43 +++--- builtins/web/timers.cpp | 5 +- builtins/web/worker-location.cpp | 5 - builtins/web/worker-location.h | 4 +- include/builtin.h | 31 ++-- include/error-numbers.msg | 62 -------- include/errors.h | 7 +- include/extension-api.h | 5 - runtime/builtin.cpp | 11 +- tests/integration/assert.js | 5 +- tests/integration/crypto/crypto.js | 146 ++++++------------ tests/integration/timers/timers.js | 8 +- tests/wpt-harness/wpt_builtins.cpp | 5 +- 38 files changed, 324 insertions(+), 531 deletions(-) create mode 100644 builtins/web/streams/stream-errors.h create mode 100644 builtins/web/text-codec/text-codec-errors.h delete mode 100644 include/error-numbers.msg diff --git a/builtins/web/base64.cpp b/builtins/web/base64.cpp index 956ad575..0f4579b6 100644 --- a/builtins/web/base64.cpp +++ b/builtins/web/base64.cpp @@ -1,6 +1,8 @@ #include "base64.h" #include "mozilla/Try.h" +DEF_ERR(InvalidCharacterError, JSEXN_RANGEERR, "String contains an invalid character", 0) + namespace builtins { namespace web { namespace base64 { @@ -12,7 +14,7 @@ JS::Result convertJSValueToByteString(JSContext *cx, JS::Handle(JS::Error()); } } @@ -27,7 +29,7 @@ JS::Result convertJSValueToByteString(JSContext *cx, JS::Handle(JS::Error()); } @@ -35,7 +37,7 @@ JS::Result convertJSValueToByteString(JSContext *cx, JS::Handle 255) { // Reset the nogc guard, since otherwise we can't throw errors. nogc.reset(); - JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_INVALID_CHARACTER_ERROR); + api::throw_error(cx, InvalidCharacterError); return JS::Result(JS::Error()); } } @@ -307,8 +309,7 @@ bool atob(JSContext *cx, unsigned argc, Value *vp) { // 2. If decodedData is failure, then throw an "InvalidCharacterError" // DOMException. if (decoded_result.isErr()) { - JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_INVALID_CHARACTER_ERROR); - return false; + return api::throw_error(cx, InvalidCharacterError); } auto decoded = decoded_result.unwrap(); RootedString decodedData(cx, JS_NewStringCopyN(cx, decoded.c_str(), decoded.length())); @@ -415,9 +416,7 @@ bool btoa(JSContext *cx, unsigned argc, Value *vp) { JSString *str = JS_NewStringCopyN(cx, result.c_str(), result.length()); if (!str) { - JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_INVALID_CHARACTER_ERROR); - - return false; + return api::throw_error(cx, InvalidCharacterError); } out.setString(str); diff --git a/builtins/web/crypto/crypto-algorithm.cpp b/builtins/web/crypto/crypto-algorithm.cpp index f4959549..353fe1ff 100644 --- a/builtins/web/crypto/crypto-algorithm.cpp +++ b/builtins/web/crypto/crypto-algorithm.cpp @@ -10,6 +10,7 @@ #include "../base64.h" #include "../dom-exception.h" #include "crypto-algorithm.h" + #include "crypto-key-ec-components.h" #include "crypto-key-rsa-components.h" #include "encode.h" @@ -895,12 +896,10 @@ JSObject *CryptoAlgorithmECDSA_Sign_Verify::sign(JSContext *cx, JS::HandleObject // 7. Return the result of creating an ArrayBuffer containing result. JS::RootedObject buffer(cx, JS::NewArrayBufferWithContents(cx, resultSize, result.get(), JS::NewArrayBufferOutOfMemory::CallerMustFreeMemory)); if (!buffer) { - // We can be here is the array buffer was too large -- if that was the case then a - // JSMSG_BAD_ARRAY_LENGTH will have been created. No other failure scenarios in this path will - // create a JS exception and so we need to create one. + // We can be here if the array buffer was too large -- if that was the case then a + // JSMSG_BAD_ARRAY_LENGTH will have been created. Otherwise we're probably out of memory. if (!JS_IsExceptionPending(cx)) { - // TODO Rename error to InternalError - JS_ReportErrorLatin1(cx, "InternalError"); + js::ReportOutOfMemory(cx); } return nullptr; } @@ -1049,12 +1048,10 @@ JSObject *CryptoAlgorithmRSASSA_PKCS1_v1_5_Sign_Verify::sign(JSContext *cx, JS:: // containing the bytes of signature. JS::RootedObject buffer(cx, JS::NewArrayBufferWithContents(cx, signature_length, signature.get(), JS::NewArrayBufferOutOfMemory::CallerMustFreeMemory)); if (!buffer) { - // We can be here is the array buffer was too large -- if that was the case then a - // JSMSG_BAD_ARRAY_LENGTH will have been created. No other failure scenarios in this path will - // create a JS exception and so we need to create one. + // We can be here if the array buffer was too large -- if that was the case then a + // JSMSG_BAD_ARRAY_LENGTH will have been created. Otherwise we're probably out of memory. if (!JS_IsExceptionPending(cx)) { - // TODO Rename error to InternalError - JS_ReportErrorLatin1(cx, "InternalError"); + js::ReportOutOfMemory(cx); } return nullptr; } @@ -1201,8 +1198,8 @@ JSObject *CryptoAlgorithmHMAC_Import::importKey(JSContext *cx, CryptoKeyFormat f // 2. If usages contains an entry which is not "sign" or "verify", then throw a SyntaxError. if (!usages.canOnlySignOrVerify()) { - // TODO Rename error to SyntaxError - JS_ReportErrorLatin1(cx, "HMAC keys only support 'sign' and 'verify' operations"); + DOMException::raise(cx, "HMAC keys only support 'sign' and 'verify' operations", + "SyntaxError"); return nullptr; } @@ -1231,7 +1228,7 @@ JSObject *CryptoAlgorithmHMAC_Import::importKey(JSContext *cx, CryptoKeyFormat f // 6.3 Throw a DataError. auto jwk = std::get(keyData); if (!jwk) { - JS_ReportErrorLatin1(cx, "Supplied format is not a JSONWebKey"); + DOMException::raise(cx, "Supplied keyData is not a JSONWebKey", "DataError"); return nullptr; } // 6.4 If the kty field of jwk is not "oct", then throw a DataError. @@ -1451,7 +1448,7 @@ JSObject *CryptoAlgorithmECDSA_Import::importKey(JSContext *cx, CryptoKeyFormat // Throw a DataError. auto jwk = std::get(keyData); if (!jwk) { - JS_ReportErrorLatin1(cx, "Supplied format is not a JSONWebKey"); + DOMException::raise(cx, "Supplied keyData is not a JSONWebKey", "DataError"); return nullptr; } // 2.2. If the "d" field is present and usages contains a value which is not "sign", @@ -1709,7 +1706,7 @@ JSObject *CryptoAlgorithmRSASSA_PKCS1_v1_5_Import::importKey(JSContext *cx, Cryp // Throw a DataError. auto jwk = std::get(keyData); if (!jwk) { - JS_ReportErrorLatin1(cx, "Supplied format is not a JSONWebKey"); + DOMException::raise(cx, "Supplied keyData is not a JSONWebKey", "DataError"); return nullptr; } @@ -1726,10 +1723,9 @@ JSObject *CryptoAlgorithmRSASSA_PKCS1_v1_5_Import::importKey(JSContext *cx, Cryp isUsagesAllowed = usages.canOnlyVerify(); } if (!isUsagesAllowed) { - // TODO Rename error to SyntaxError - JS_ReportErrorLatin1(cx, - "The JWK 'key_ops' member was inconsistent with that specified by the " - "Web Crypto call. The JWK usage must be a superset of those requested"); + DOMException::raise(cx, + "The JWK 'key_ops' member was inconsistent with that specified by the " + "Web Crypto call. The JWK usage must be a superset of those requested", "DataError"); return nullptr; } @@ -1805,8 +1801,9 @@ JSObject *CryptoAlgorithmRSASSA_PKCS1_v1_5_Import::importKey(JSContext *cx, Cryp } } if (!isMatched) { - JS_ReportErrorLatin1( - cx, "The JWK 'alg' member was inconsistent with that specified by the Web Crypto call"); + DOMException::raise(cx, + "The JWK 'alg' member was inconsistent with that specified by the Web Crypto call", + "DataError"); return nullptr; } diff --git a/builtins/web/crypto/crypto-key.cpp b/builtins/web/crypto/crypto-key.cpp index 82e0c3ad..57dc66e1 100644 --- a/builtins/web/crypto/crypto-key.cpp +++ b/builtins/web/crypto/crypto-key.cpp @@ -65,8 +65,7 @@ CryptoKeyUsages CryptoKeyUsages::from(std::vector key_usages) { return CryptoKeyUsages(mask); } -JS::Result CryptoKeyUsages::from(JSContext *cx, JS::HandleValue key_usages, - std::string_view error_message) { +JS::Result CryptoKeyUsages::from(JSContext *cx, JS::HandleValue key_usages) { bool key_usages_is_array; if (!JS::IsArrayObject(cx, key_usages, &key_usages_is_array)) { return JS::Result(JS::Error()); @@ -75,28 +74,20 @@ JS::Result CryptoKeyUsages::from(JSContext *cx, JS::HandleValue if (!key_usages_is_array) { // TODO: This should check if the JS::HandleValue is iterable and if so, should convert it into // a JS Array - JS_ReportErrorASCII(cx, "The provided value cannot be converted to a sequence"); + api::throw_error(cx, api::Errors::TypeError, "crypto.subtle.importKey", + "keyUsages", "be a sequence"); return JS::Result(JS::Error()); } - uint32_t key_usages_length; JS::RootedObject array(cx, &key_usages.toObject()); - if (!array) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_SUBTLE_CRYPTO_ERROR, - error_message.data()); - return JS::Result(JS::Error()); - } + uint32_t key_usages_length; if (!JS::GetArrayLength(cx, array, &key_usages_length)) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_SUBTLE_CRYPTO_ERROR, - error_message.data()); return JS::Result(JS::Error()); } uint8_t mask = 0; for (uint32_t index = 0; index < key_usages_length; index++) { JS::RootedValue val(cx); if (!JS_GetElement(cx, array, index, &val)) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_SUBTLE_CRYPTO_ERROR, - error_message.data()); return JS::Result(JS::Error()); } @@ -124,8 +115,11 @@ JS::Result CryptoKeyUsages::from(JSContext *cx, JS::HandleValue } else if (usage == "unwrapKey") { mask |= unwrap_key_flag; } else { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_SUBTLE_CRYPTO_ERROR, - error_message.data()); + api::throw_error(cx, api::Errors::TypeError, + "crypto.subtle.importKey", + "each value in the 'keyUsages' list", + "be one of 'encrypt', 'decrypt', 'sign', 'verify', 'deriveKey', 'deriveBits', " + "'wrapKey', or 'unwrapKey'"); return JS::Result(JS::Error()); } } @@ -135,14 +129,9 @@ JS::Result CryptoKeyUsages::from(JSContext *cx, JS::HandleValue bool CryptoKey::algorithm_get(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(0); - // TODO: Should we move this into the METHOD_HEADER macro? - // CryptoKey.prototype passes the receiver check in the above macro but is not actually an - // instance of CryptoKey. We check if `self` is `CryptoKey.prototype` and if it is, we throw a JS - // Error. + // TODO: Change this class so that its prototype isn't an instance of the class if (self == proto_obj.get()) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INCOMPATIBLE_INSTANCE, __func__, - CryptoKey::class_.name); - return false; + return api::throw_error(cx, api::Errors::WrongReceiver, "algorithm get", "CryptoKey"); } auto algorithm = &JS::GetReservedSlot(self, Slots::Algorithm).toObject(); @@ -158,14 +147,9 @@ bool CryptoKey::algorithm_get(JSContext *cx, unsigned argc, JS::Value *vp) { bool CryptoKey::extractable_get(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(0); - // TODO: Should we move this into the METHOD_HEADER macro? - // CryptoKey.prototype passes the receiver check in the above macro but is not actually an - // instance of CryptoKey. We check if `self` is `CryptoKey.prototype` and if it is, we throw a JS - // Error. + // TODO: Change this class so that its prototype isn't an instance of the class if (self == proto_obj.get()) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INVALID_INTERFACE, - "extractable get", "CryptoKey"); - return false; + return api::throw_error(cx, api::Errors::WrongReceiver, "extractable get", "CryptoKey"); } auto extractable = JS::GetReservedSlot(self, Slots::Extractable).toBoolean(); @@ -177,15 +161,11 @@ bool CryptoKey::extractable_get(JSContext *cx, unsigned argc, JS::Value *vp) { bool CryptoKey::type_get(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(0) - // TODO: Should we move this into the METHOD_HEADER macro? - // CryptoKey.prototype passes the receiver check in the above macro but is not actually an - // instance of CryptoKey. We check if `self` is `CryptoKey.prototype` and if it is, we throw a JS - // Error. + // TODO: Change this class so that its prototype isn't an instance of the class if (self == proto_obj.get()) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INVALID_INTERFACE, "type get", - "CryptoKey"); - return false; + return api::throw_error(cx, api::Errors::WrongReceiver, "type get", "CryptoKey"); } + auto type = static_cast(JS::GetReservedSlot(self, Slots::Type).toInt32()); // We store the type internally as a CryptoKeyType variant and need to @@ -225,14 +205,9 @@ bool CryptoKey::type_get(JSContext *cx, unsigned argc, JS::Value *vp) { bool CryptoKey::usages_get(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(0); - // TODO: Should we move this into the METHOD_HEADER macro? - // CryptoKey.prototype passes the receiver check in the above macro but is not actually an - // instance of CryptoKey. We check if `self` is `CryptoKey.prototype` and if it is, we throw a JS - // Error. + // TODO: Change this class so that its prototype isn't an instance of the class if (self == proto_obj.get()) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INVALID_INTERFACE, "usages get", - "CryptoKey"); - return false; + return api::throw_error(cx, api::Errors::WrongReceiver, "usages get", "CryptoKey"); } // If the JS Array has already been created previously, return it. @@ -330,14 +305,6 @@ const JSPropertySpec CryptoKey::properties[] = { JS_STRING_SYM_PS(toStringTag, "CryptoKey", JSPROP_READONLY), JS_PS_END}; -// There is no directly exposed constructor in the CryptoKey interface -// https://w3c.github.io/webcrypto/#cryptokey-interface We throw a JS Error if the application -// attempts to call the CryptoKey constructor directly -bool CryptoKey::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_ILLEGAL_CTOR); - return false; -} - bool CryptoKey::init_class(JSContext *cx, JS::HandleObject global) { return BuiltinImpl::init_class_impl(cx, global); } @@ -665,11 +632,9 @@ JSObject *CryptoKey::createRSA(JSContext *cx, CryptoAlgorithmRSASSA_PKCS1_v1_5_I // if the call was not successful, we need to free `p` before exiting from the function. if (!buffer) { // We can be here if the array buffer was too large -- if that was the case then a - // JSMSG_BAD_ARRAY_LENGTH will have been created. No other failure scenarios in this path will - // create a JS exception and so we need to create one. + // JSMSG_BAD_ARRAY_LENGTH will have been created. Otherwise we're probably out of memory. if (!JS_IsExceptionPending(cx)) { - // TODO Rename error to InternalError - JS_ReportErrorLatin1(cx, "InternalError"); + js::ReportOutOfMemory(cx); } return nullptr; } diff --git a/builtins/web/crypto/crypto-key.h b/builtins/web/crypto/crypto-key.h index 0036bfbb..44375271 100644 --- a/builtins/web/crypto/crypto-key.h +++ b/builtins/web/crypto/crypto-key.h @@ -37,8 +37,7 @@ class CryptoKeyUsages { CryptoKeyUsages(bool encrypt, bool decrypt, bool sign, bool verify, bool derive_key, bool derive_bits, bool wrap_key, bool unwrap_key); static CryptoKeyUsages from(std::vector key_usages); - static JS::Result from(JSContext *cx, JS::HandleValue key_usages, - std::string_view error_message); + static JS::Result from(JSContext *cx, JS::HandleValue key_usages); uint8_t toInt() { return this->mask; }; @@ -65,7 +64,7 @@ class CryptoKeyUsages { bool canOnlyUnwrapKey() { return this->mask == unwrap_key_flag; }; }; -class CryptoKey : public BuiltinImpl { +class CryptoKey : public BuiltinNoConstructor { public: static const int ctor_length = 0; static constexpr const char *class_name = "CryptoKey"; @@ -118,7 +117,7 @@ class CryptoKey : public BuiltinImpl { static const JSPropertySpec static_properties[]; static const JSFunctionSpec methods[]; static const JSPropertySpec properties[]; - static bool constructor(JSContext *cx, unsigned argc, JS::Value *vp); + static bool init_class(JSContext *cx, JS::HandleObject global); static JSObject *createHMAC(JSContext *cx, CryptoAlgorithmHMAC_Import *algorithm, diff --git a/builtins/web/crypto/crypto.cpp b/builtins/web/crypto/crypto.cpp index 3504f9bb..83f87551 100644 --- a/builtins/web/crypto/crypto.cpp +++ b/builtins/web/crypto/crypto.cpp @@ -185,11 +185,9 @@ JS::PersistentRooted Crypto::subtle; JS::PersistentRooted crypto; bool Crypto::subtle_get(JSContext *cx, unsigned argc, JS::Value *vp) { - METHOD_HEADER(0); + METHOD_HEADER_WITH_NAME(0, "subtle get"); if (self != crypto.get()) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INVALID_INTERFACE, "subtle get", - "Crypto"); - return false; + return api::throw_error(cx, api::Errors::WrongReceiver, "subtle get", "Crypto"); } args.rval().setObject(*subtle); @@ -212,19 +210,12 @@ const JSPropertySpec Crypto::properties[] = { JS_PSG("subtle", subtle_get, JSPROP_ENUMERATE), JS_STRING_SYM_PS(toStringTag, "Crypto", JSPROP_READONLY), JS_PS_END}; -bool Crypto::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_ILLEGAL_CTOR); - return false; -} - bool crypto_get(JSContext *cx, unsigned argc, JS::Value *vp) { JS::CallArgs args = CallArgsFromVp(argc, vp); JS::RootedObject global(cx, JS::CurrentGlobalOrNull(cx)); auto thisv = args.thisv(); if (thisv != JS::UndefinedHandleValue && thisv != JS::ObjectValue(*global)) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INVALID_INTERFACE, "crypto get", - "Window"); - return false; + return api::throw_error(cx, api::Errors::WrongReceiver, "crypto get", "Window"); } args.rval().setObject(*crypto); return true; diff --git a/builtins/web/crypto/crypto.h b/builtins/web/crypto/crypto.h index e1784998..0e2c1963 100644 --- a/builtins/web/crypto/crypto.h +++ b/builtins/web/crypto/crypto.h @@ -7,7 +7,7 @@ namespace builtins { namespace web { namespace crypto { -class Crypto : public BuiltinImpl { +class Crypto : public BuiltinNoConstructor { private: public: static constexpr const char *class_name = "Crypto"; @@ -25,7 +25,6 @@ class Crypto : public BuiltinImpl { static bool get_random_values(JSContext *cx, unsigned argc, JS::Value *vp); static bool random_uuid(JSContext *cx, unsigned argc, JS::Value *vp); - static bool constructor(JSContext *cx, unsigned argc, JS::Value *vp); static bool init_class(JSContext *cx, JS::HandleObject global); }; diff --git a/builtins/web/crypto/json-web-key.cpp b/builtins/web/crypto/json-web-key.cpp index 2b43b7b5..f663d59a 100644 --- a/builtins/web/crypto/json-web-key.cpp +++ b/builtins/web/crypto/json-web-key.cpp @@ -12,10 +12,13 @@ #include "jsfriendapi.h" #pragma clang diagnostic pop +#include "../dom-exception.h" #include "builtin.h" #include "encode.h" #include "json-web-key.h" +#include + namespace builtins { namespace web { namespace crypto { @@ -46,7 +49,8 @@ extractStringPropertyFromObject(JSContext *cx, JS::HandleObject object, std::str std::unique_ptr JsonWebKey::parse(JSContext *cx, JS::HandleValue value, std::string_view required_kty_value) { if (!value.isObject()) { - JS_ReportErrorLatin1(cx, "The provided value is not of type JsonWebKey"); + api::throw_error(cx, api::Errors::TypeError, "crypto.subtle.importKey", + "keyData", "be a JSONWebKey"); return nullptr; } JS::RootedObject object(cx, &value.toObject()); @@ -58,13 +62,15 @@ std::unique_ptr JsonWebKey::parse(JSContext *cx, JS::HandleValue val } auto kty_option = kty_result.unwrap(); if (!kty_option.has_value()) { - JS_ReportErrorASCII(cx, "The required JWK member 'kty' was missing"); + api::throw_error(cx, api::Errors::TypeError, "crypto.subtle.importKey", + "keyData", "be a JSONWebKey"); return nullptr; } auto kty = kty_option.value(); if (kty != required_kty_value) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, - JSMSG_SUBTLE_CRYPTO_INVALID_JWK_KTY_VALUE, required_kty_value.data()); + auto message = fmt::format("crypto.subtle.importkey: The JWK member 'kty' was not '{}'", + required_kty_value); + dom_exception::DOMException::raise(cx, message, "DataError"); return nullptr; } @@ -198,10 +204,10 @@ std::unique_ptr JsonWebKey::parse(JSContext *cx, JS::HandleValue val return nullptr; } if (!key_ops_is_array) { - // TODO: Check if key_ops_val is iterable via Symbol.iterator and if so, convert to a JS - // Array - JS_ReportErrorASCII(cx, "Failed to read the 'key_ops' property from 'JsonWebKey': The " - "provided value cannot be converted to a sequence"); + // TODO: Check if key_ops_val is iterable via Symbol.iterator and if so, convert to a JS Array + dom_exception::DOMException::raise(cx, + "crypto.subtle.importkey: The JWK member 'key_ops' was not a sequence", + "DataError"); return nullptr; } uint32_t length; @@ -235,16 +241,21 @@ std::unique_ptr JsonWebKey::parse(JSContext *cx, JS::HandleValue val std::string op(op_chars.begin(), op_chars.len); if (op != "encrypt" && op != "decrypt" && op != "sign" && op != "verify" && - op != "deriveKey" && op != "deriveBits" && op != "wrapKey" && op != "unwrapKey") { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, - JSMSG_SUBTLE_CRYPTO_INVALID_KEY_USAGES_VALUE); + op != "deriveKey" && op != "deriveBits" && op != "wrapKey" && op != "unwrapKey") { + dom_exception::DOMException::raise(cx, + "crypto.subtle.importKey parameter 'keyData': " + "each value in the 'key_ops' list must be one of 'encrypt', 'decrypt', " + "'sign', 'verify', 'deriveKey', 'deriveBits', 'wrapKey', or 'unwrapKey'", + "DataError"); return nullptr; } // No duplicates allowed if (std::find(key_ops.begin(), key_ops.end(), op) != key_ops.end()) { - JS_ReportErrorASCII( - cx, "The 'key_ops' member of the JWK dictionary contains duplicate usages"); + dom_exception::DOMException::raise(cx, + "crypto.subtle.importKey parameter 'keyData': " + "'key_ops' list must not contain duplicate entries", + "DataError"); return nullptr; } @@ -271,8 +282,9 @@ std::unique_ptr JsonWebKey::parse(JSContext *cx, JS::HandleValue val } if (!oth_is_array) { // TODO: Check if oth_val is iterable via Symbol.iterator and if so, convert to a JS Array - JS_ReportErrorASCII(cx, "Failed to read the 'oth' property from 'JsonWebKey': The provided " - "value cannot be converted to a sequence"); + dom_exception::DOMException::raise(cx, + "crypto.subtle.importkey: The JWK member 'oth' was not a sequence", + "DataError"); return nullptr; } uint32_t length; @@ -299,8 +311,9 @@ std::unique_ptr JsonWebKey::parse(JSContext *cx, JS::HandleValue val } if (!info_val.isObject()) { - JS_ReportErrorASCII(cx, "Failed to read the 'oth' property from 'JsonWebKey': The " - "provided value is not of type 'RsaOtherPrimesInfo'"); + api::throw_error(cx, api::Errors::TypeError, + "crypto.subtle.importKey parameter 'keyData'", + "'oth' list", "be an RsaOtherPrimesInfo object"); return nullptr; } JS::RootedObject info_obj(cx, &info_val.toObject()); @@ -311,8 +324,9 @@ std::unique_ptr JsonWebKey::parse(JSContext *cx, JS::HandleValue val } auto r_chars = core::encode(cx, info_val); if (!r_chars) { - JS_ReportErrorASCII(cx, "Failed to read the 'oth' property from 'JsonWebKey': The " - "provided value is not of type 'RsaOtherPrimesInfo'"); + api::throw_error(cx, api::Errors::TypeError, + "crypto.subtle.importKey parameter 'keyData'", + "'oth' list", "be an RsaOtherPrimesInfo object"); return nullptr; } std::string r(r_chars.begin(), r_chars.len); @@ -322,8 +336,9 @@ std::unique_ptr JsonWebKey::parse(JSContext *cx, JS::HandleValue val } auto d_chars = core::encode(cx, info_val); if (!d_chars) { - JS_ReportErrorASCII(cx, "Failed to read the 'oth' property from 'JsonWebKey': The " - "provided value is not of type 'RsaOtherPrimesInfo'"); + api::throw_error(cx, api::Errors::TypeError, + "crypto.subtle.importKey parameter 'keyData'", + "'oth' list", "be an RsaOtherPrimesInfo object"); return nullptr; } std::string d(d_chars.begin(), d_chars.len); @@ -334,8 +349,9 @@ std::unique_ptr JsonWebKey::parse(JSContext *cx, JS::HandleValue val } auto t_chars = core::encode(cx, info_val); if (!t_chars) { - JS_ReportErrorASCII(cx, "Failed to read the 'oth' property from 'JsonWebKey': The " - "provided value is not of type 'RsaOtherPrimesInfo'"); + api::throw_error(cx, api::Errors::TypeError, + "crypto.subtle.importKey parameter 'keyData'", + "'oth' list", "be an RsaOtherPrimesInfo object"); return nullptr; } std::string t(t_chars.begin(), t_chars.len); diff --git a/builtins/web/crypto/subtle-crypto.cpp b/builtins/web/crypto/subtle-crypto.cpp index f85e67de..b98955c0 100644 --- a/builtins/web/crypto/subtle-crypto.cpp +++ b/builtins/web/crypto/subtle-crypto.cpp @@ -89,7 +89,7 @@ bool SubtleCrypto::importKey(JSContext *cx, unsigned argc, JS::Value *vp) { auto format_arg = args.get(0); // Convert into a String following https://tc39.es/ecma262/#sec-tostring auto format_chars = core::encode(cx, format_arg); - if (!format_chars || format_chars.len == 0) { + if (!format_chars.ptr) { return ReturnPromiseRejectedWithPendingError(cx, args); } std::string_view format_string = format_chars; @@ -102,9 +102,10 @@ bool SubtleCrypto::importKey(JSContext *cx, unsigned argc, JS::Value *vp) { } else if (format_string == "raw") { format = CryptoKeyFormat::Raw; } else { - // TODO: Change to a SyntaxError instance - JS_ReportErrorLatin1(cx, "Provided format parameter is not supported. Supported formats are: " - "'spki', 'pkcs8', 'jwk', and 'raw'"); + DOMException::raise(cx, + "crypto.subtle.importkey: Provided format parameter is not supported. " + "Supported formats are: 'spki', 'pkcs8', 'jwk', and 'raw'", + "NotSupportedError"); return ReturnPromiseRejectedWithPendingError(cx, args); } } @@ -115,8 +116,7 @@ bool SubtleCrypto::importKey(JSContext *cx, unsigned argc, JS::Value *vp) { { auto usages_arg = args.get(4); - std::string_view error_message("SubtleCrypto.importKey: Invalid keyUsages argument"); - auto keyUsageMaskResult = CryptoKeyUsages::from(cx, usages_arg, error_message); + auto keyUsageMaskResult = CryptoKeyUsages::from(cx, usages_arg); if (keyUsageMaskResult.isErr()) { return ReturnPromiseRejectedWithPendingError(cx, args); } @@ -134,7 +134,6 @@ bool SubtleCrypto::importKey(JSContext *cx, unsigned argc, JS::Value *vp) { // 5. Let promise be a new Promise. JS::RootedObject promise(cx, JS::NewPromiseObject(cx, nullptr)); if (!promise) { - JS_ReportErrorASCII(cx, "InternalError"); return ReturnPromiseRejectedWithPendingError(cx, args); } @@ -184,20 +183,17 @@ bool SubtleCrypto::sign(JSContext *cx, unsigned argc, JS::Value *vp) { // respectively. auto algorithm = args.get(0); auto key_arg = args.get(1); - if (!key_arg.isObject()) { - JS_ReportErrorLatin1(cx, "parameter 2 is not of type 'CryptoKey'"); + if (!CryptoKey::is_instance(key_arg)) { + api::throw_error(cx, api::Errors::TypeError, "crypto.subtle.sign", "key", + "be a CryptoKey object"); return ReturnPromiseRejectedWithPendingError(cx, args); } JS::RootedObject key(cx, &key_arg.toObject()); - if (!CryptoKey::is_instance(key)) { - JS_ReportErrorLatin1(cx, "parameter 2 is not of type 'CryptoKey'"); - return ReturnPromiseRejectedWithPendingError(cx, args); - } // 2. Let data be the result of getting a copy of the bytes held by the data parameter passed to // the sign() method. std::optional> dataOptional = - value_to_buffer(cx, args.get(2), "SubtleCrypto.sign: data"); + value_to_buffer(cx, args.get(2), "crypto.subtle.sign: data"); if (!dataOptional.has_value()) { // value_to_buffer would have already created a JS exception so we don't need to create one // ourselves. @@ -280,18 +276,13 @@ bool SubtleCrypto::verify(JSContext *cx, unsigned argc, JS::Value *vp) { // respectively. auto algorithm = args.get(0); auto key_arg = args.get(1); - if (!key_arg.isObject()) { - JS_ReportErrorLatin1(cx, "parameter 2 is not of type 'CryptoKey'"); + if (!CryptoKey::is_instance(key_arg)) { + api::throw_error(cx, api::Errors::TypeError, "crypto.subtle.verify", "key", + "be a CryptoKey object"); return ReturnPromiseRejectedWithPendingError(cx, args); } JS::RootedObject key(cx, &key_arg.toObject()); - if (!CryptoKey::is_instance(key)) { - JS_ReportErrorASCII( - cx, "SubtleCrypto.verify: key (argument 2) does not implement interface CryptoKey"); - return ReturnPromiseRejectedWithPendingError(cx, args); - } - // 2. Let signature be the result of getting a copy of the bytes held by the signature // parameter passed to the verify() method. std::optional> signature = @@ -373,12 +364,7 @@ const JSFunctionSpec SubtleCrypto::methods[] = { const JSPropertySpec SubtleCrypto::properties[] = { JS_STRING_SYM_PS(toStringTag, "SubtleCrypto", JSPROP_READONLY), JS_PS_END}; -bool SubtleCrypto::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_ILLEGAL_CTOR); - return false; -} - bool SubtleCrypto::init_class(JSContext *cx, JS::HandleObject global) { - return BuiltinImpl::init_class_impl(cx, global); + return init_class_impl(cx, global); } } // namespace builtins::web::crypto diff --git a/builtins/web/crypto/subtle-crypto.h b/builtins/web/crypto/subtle-crypto.h index 1f211308..54cfe17d 100644 --- a/builtins/web/crypto/subtle-crypto.h +++ b/builtins/web/crypto/subtle-crypto.h @@ -22,7 +22,7 @@ enum class Operations : uint8_t { GetKeyLength }; -class SubtleCrypto : public BuiltinImpl { +class SubtleCrypto : public BuiltinNoConstructor { private: public: static constexpr const char *class_name = "SubtleCrypto"; @@ -38,7 +38,6 @@ class SubtleCrypto : public BuiltinImpl { static bool sign(JSContext *cx, unsigned argc, JS::Value *vp); static bool verify(JSContext *cx, unsigned argc, JS::Value *vp); - static bool constructor(JSContext *cx, unsigned argc, JS::Value *vp); static bool init_class(JSContext *cx, JS::HandleObject global); }; diff --git a/builtins/web/dom-exception.cpp b/builtins/web/dom-exception.cpp index 13d07948..37ea9def 100644 --- a/builtins/web/dom-exception.cpp +++ b/builtins/web/dom-exception.cpp @@ -7,10 +7,9 @@ namespace builtins::web::dom_exception { bool DOMException::name_get(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(0); + // TODO: Change this class so that its prototype isn't an instance of the class if (self == proto_obj) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INVALID_INTERFACE, "name get", - "DOMException"); - return false; + return api::throw_error(cx, api::Errors::WrongReceiver, "name get", "DOMException"); } args.rval().setString(JS::GetReservedSlot(self, Slots::Name).toString()); return true; @@ -18,10 +17,9 @@ bool DOMException::name_get(JSContext *cx, unsigned argc, JS::Value *vp) { bool DOMException::message_get(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(0); + // TODO: Change this class so that its prototype isn't an instance of the class if (self == proto_obj) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INVALID_INTERFACE, "name get", - "DOMException"); - return false; + return api::throw_error(cx, api::Errors::WrongReceiver, "message get", "DOMException"); } args.rval().setString(JS::GetReservedSlot(self, Slots::Message).toString()); return true; @@ -29,10 +27,9 @@ bool DOMException::message_get(JSContext *cx, unsigned argc, JS::Value *vp) { bool DOMException::code_get(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(0); + // TODO: Change this class so that its prototype isn't an instance of the class if (self == proto_obj) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INVALID_INTERFACE, "name get", - "DOMException"); - return false; + return api::throw_error(cx, api::Errors::WrongReceiver, "code get", "DOMException"); } JS::RootedString name_string(cx, JS::GetReservedSlot(self, Slots::Name).toString()); auto chars = core::encode(cx, name_string); diff --git a/builtins/web/fetch/fetch-errors.h b/builtins/web/fetch/fetch-errors.h index 2c818582..96a13ec0 100644 --- a/builtins/web/fetch/fetch-errors.h +++ b/builtins/web/fetch/fetch-errors.h @@ -6,11 +6,11 @@ DEF_ERR(FetchNetworkError, JSEXN_TYPEERR, "NetworkError when attempting to fetch DEF_ERR(InvalidRespondWithArg, JSEXN_TYPEERR, "FetchEvent#respondWith must be called with a Response " "object or a Promise resolving to a Response object as " "the first argument", 0) -DEF_ERR(InvalidCtorInitArg, JSEXN_TYPEERR, "{0} constructor: |init| parameter can't be converted to a dictionary", 1) +DEF_ERR(InvalidInitArg, JSEXN_TYPEERR, "{0}: |init| parameter can't be converted to a dictionary", 1) DEF_ERR(NonBodyRequestWithBody, JSEXN_TYPEERR, "Request constructor: HEAD or GET Request cannot have a body", 0) -DEF_ERR(NonBodyResponseWithBody, JSEXN_TYPEERR, "Response with status {0} cannot have body", 1) +DEF_ERR(NonBodyResponseWithBody, JSEXN_TYPEERR, "Response constructor: response with status {0} cannot have a body", 1) DEF_ERR(BodyStreamUnusable, JSEXN_TYPEERR, "Can't use a ReadableStream that's locked or has ever been read from or canceled", 0) -DEF_ERR(InvalidStatus, JSEXN_TYPEERR, "Response constructor: invalid status {0}", 1) +DEF_ERR(InvalidStatus, JSEXN_RANGEERR, "{0}: invalid status {1}", 2) DEF_ERR(InvalidStreamChunk, JSEXN_TYPEERR, "ReadableStream used as a Request or Response body must produce Uint8Array values", 0) DEF_ERR(EmptyHeaderName, JSEXN_TYPEERR, "{0}: Header name can't be empty", 1) DEF_ERR(InvalidHeaderName, JSEXN_TYPEERR, "{0}: Invalid header name \"{1}\"", 2) diff --git a/builtins/web/fetch/request-response.cpp b/builtins/web/fetch/request-response.cpp index 70bad5b8..8c45e58d 100644 --- a/builtins/web/fetch/request-response.cpp +++ b/builtins/web/fetch/request-response.cpp @@ -1196,12 +1196,11 @@ JSString *GET_atom; // auto hasBody = RequestOrResponse::has_body(self); // if (hasBody) { -// if (RequestOrResponse::body_used(self)) { -// JS_ReportErrorLatin1(cx, "Request.prototype.clone: the request's body isn't usable."); -// return false; +// if (RequestOrResponse::body_unusable(self)) { +// return api::throw_error(cx, FetchErrors::BodyStreamUnusable); // } -// // Here we get the current requests body stream and call ReadableStream.prototype.tee to +// // Here we get the current request's body stream and call ReadableStream.prototype.tee to // return // // two versions of the stream. Once we get the two streams, we create a new request handle // and @@ -1250,9 +1249,7 @@ JSString *GET_atom; // } // body_stream.set(&body1_val.toObject()); // if (RequestOrResponse::body_unusable(cx, body_stream)) { -// JS_ReportErrorLatin1(cx, "Can't use a ReadableStream that's locked or has ever been " -// "read from or canceled as a Request body."); -// return false; +// return api::throw_error(cx, FetchErrors::BodyStreamUnusable); // } // JS::SetReservedSlot(requestInstance, static_cast(Slots::Body), @@ -1506,7 +1503,7 @@ bool Request::initialize(JSContext *cx, JS::HandleObject request, JS::HandleValu return false; } } else if (!init_val.isNullOrUndefined()) { - api::throw_error(cx, FetchErrors::InvalidCtorInitArg, "Request"); + api::throw_error(cx, FetchErrors::InvalidInitArg, "Request constructor"); return false; } @@ -2090,9 +2087,7 @@ bool Response::redirect(JSContext *cx, unsigned argc, Value *vp) { } auto parsedURL = new_jsurl_with_base(&url_str, url::URL::url(worker_location::WorkerLocation::url)); if (!parsedURL) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, - JSMSG_RESPONSE_REDIRECT_INVALID_URI); - return false; + return api::throw_error(cx, api::Errors::TypeError, "Response.redirect", "url", "be a valid URL"); } // 3. If status is not a redirect status, then throw a RangeError. @@ -2107,9 +2102,9 @@ bool Response::redirect(JSContext *cx, unsigned argc, Value *vp) { } } if (status != 301 && status != 302 && status != 303 && status != 307 && status != 308) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, - JSMSG_RESPONSE_REDIRECT_INVALID_STATUS); - return false; + auto status_str = std::to_string(status); + return api::throw_error(cx, FetchErrors::InvalidStatus, "Response.redirect", + status_str.c_str()); } // 4. Let responseObject be the result of creating a Response object, given a new response, @@ -2167,8 +2162,7 @@ bool Response::redirect(JSContext *cx, unsigned argc, Value *vp) { // return false; // } // if (!callbackCalled) { -// JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_RESPONSE_JSON_INVALID_VALUE); -// return false; +// return api::throw_error(cx, api::Errors::WrongType, "Response.json", "data", "be a valid JSON value"); // } // // 2. Let body be the result of extracting bytes. @@ -2194,9 +2188,9 @@ bool Response::redirect(JSContext *cx, unsigned argc, Value *vp) { // } // if (status == 204 || status == 205 || status == 304) { -// JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, -// JSMSG_RESPONSE_NULL_BODY_STATUS_WITH_BODY); -// return false; +// auto status_str = std::to_string(status); +// return api::throw_error(cx, FetchErrors::NonBodyResponseWithBody, "Response.json", +// status_str.c_str()); // } // if (!statusText_val.isUndefined() && !(statusText = JS::ToString(cx, statusText_val))) { @@ -2204,9 +2198,7 @@ bool Response::redirect(JSContext *cx, unsigned argc, Value *vp) { // } // } else if (!init_val.isNullOrUndefined()) { -// JS_ReportErrorLatin1(cx, "Response constructor: |init| parameter can't be converted to " -// "a dictionary"); -// return false; +// return api::throw_error(cx, FetchErrors::InvalidInitArg, "Response.json"); // } // auto response_handle_res = host_api::HttpResp::make(); @@ -2361,14 +2353,14 @@ bool Response::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { } } else if (!init_val.isNullOrUndefined()) { - return api::throw_error(cx, FetchErrors::InvalidCtorInitArg, "Response"); + return api::throw_error(cx, FetchErrors::InvalidInitArg, "Response constructor"); } // 1. If `init`["status"] is not in the range 200 to 599, inclusive, then // `throw` a ``RangeError``. if (status < 200 || status > 599) { auto status_str = std::to_string(status); - return api::throw_error(cx, FetchErrors::InvalidStatus, status_str.c_str()); + return api::throw_error(cx, FetchErrors::InvalidStatus, "Response constructor", status_str.c_str()); } // 2. If `init`["statusText"] does not match the `reason-phrase` token @@ -2423,7 +2415,8 @@ bool Response::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { // ``TypeError``. if (status == 204 || status == 205 || status == 304) { auto status_str = std::to_string(status); - return api::throw_error(cx, FetchErrors::NonBodyResponseWithBody, status_str.c_str()); + return api::throw_error(cx, FetchErrors::NonBodyResponseWithBody, "Response constructor", + status_str.c_str()); } // 2. Let `Content-Type` be null. diff --git a/builtins/web/global_self.cpp b/builtins/web/global_self.cpp index f9898c81..2977e89a 100644 --- a/builtins/web/global_self.cpp +++ b/builtins/web/global_self.cpp @@ -14,8 +14,7 @@ bool self_set(JSContext *cx, unsigned argc, Value *vp) { RootedObject global(cx, JS::CurrentGlobalOrNull(cx)); if (args.thisv() != ObjectValue(*global)) { - JS_ReportErrorLatin1(cx, "globalThis.self setter can only be called on the global object"); - return false; + return api::throw_error(cx, api::Errors::WrongReceiver, "set self", "globalThis"); } if (!JS_DefineProperty(cx, global, "self", args[0], JSPROP_ENUMERATE)) { diff --git a/builtins/web/performance.cpp b/builtins/web/performance.cpp index 315ef65f..af2ff336 100644 --- a/builtins/web/performance.cpp +++ b/builtins/web/performance.cpp @@ -57,11 +57,6 @@ bool Performance::create(JSContext *cx, JS::HandleObject global) { return JS_DefineFunctions(cx, performance, methods); } -bool Performance::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { - JS_ReportErrorUTF8(cx, "%s can't be instantiated directly", class_name); - return false; -} - bool Performance::init_class(JSContext *cx, JS::HandleObject global) { return init_class_impl(cx, global); } diff --git a/builtins/web/performance.h b/builtins/web/performance.h index dd6d549f..59670aeb 100644 --- a/builtins/web/performance.h +++ b/builtins/web/performance.h @@ -7,8 +7,7 @@ namespace builtins { namespace web { namespace performance { -class Performance : public BuiltinImpl { -private: +class Performance : public BuiltinNoConstructor { public: static constexpr const char *class_name = "Performance"; static const int ctor_length = 0; @@ -23,7 +22,6 @@ class Performance : public BuiltinImpl { static bool timeOrigin_get(JSContext *cx, unsigned argc, JS::Value *vp); static bool create(JSContext *cx, JS::HandleObject global); - static bool constructor(JSContext *cx, unsigned argc, JS::Value *vp); static bool init_class(JSContext *cx, JS::HandleObject global); }; diff --git a/builtins/web/queue-microtask.cpp b/builtins/web/queue-microtask.cpp index d388eb63..5d923c0b 100644 --- a/builtins/web/queue-microtask.cpp +++ b/builtins/web/queue-microtask.cpp @@ -15,8 +15,8 @@ bool queueMicrotask(JSContext *cx, unsigned argc, Value *vp) { } if (!args[0].isObject() || !JS::IsCallable(&args[0].toObject())) { - JS_ReportErrorLatin1(cx, "queueMicrotask: Argument 1 is not a function"); - return false; + return api::throw_error(cx, api::Errors::TypeError, "queueMicrotask", "first argument", + "be a function"); } RootedObject callback(cx, &args[0].toObject()); diff --git a/builtins/web/streams/compression-stream.cpp b/builtins/web/streams/compression-stream.cpp index 90fc3281..4f2a5642 100644 --- a/builtins/web/streams/compression-stream.cpp +++ b/builtins/web/streams/compression-stream.cpp @@ -9,6 +9,7 @@ #include "compression-stream.h" #include "encode.h" +#include "stream-errors.h" #include "transform-stream-default-controller.h" #include "transform-stream.h" @@ -116,8 +117,7 @@ bool deflate_chunk(JSContext *cx, JS::HandleObject self, JS::HandleValue chunk, zstream->next_out = buffer; int err = deflate(zstream, finished ? Z_FINISH : Z_NO_FLUSH); if (!((finished && err == Z_STREAM_END) || err == Z_OK)) { - JS_ReportErrorASCII(cx, "CompressionStream transform: error compressing chunk"); - return false; + return api::throw_error(cx, StreamErrors::CompressingChunkFailed); } size_t bytes = BUFFER_SIZE - zstream->avail_out; @@ -274,7 +274,7 @@ JSObject *create(JSContext *cx, JS::HandleObject stream, Format format) { int err = deflateInit2(zstream, COMPRESSION_LEVEL, Z_DEFLATED, window_bits, 8, Z_DEFAULT_STRATEGY); if (err != Z_OK) { - JS_ReportErrorASCII(cx, "Error initializing compression stream"); + api::throw_error(cx, StreamErrors::StreamInitializationFailed, "compression"); return nullptr; } @@ -304,11 +304,7 @@ bool CompressionStream::constructor(JSContext *cx, unsigned argc, JS::Value *vp) } else if (!strcmp(format_chars.begin(), "gzip")) { format = Format::GZIP; } else { - JS_ReportErrorUTF8(cx, - "'format' has to be \"deflate\" or \"gzip\", " - "but got \"%s\"", - format_chars.begin()); - return false; + return api::throw_error(cx, StreamErrors::InvalidCompressionFormat, format_chars.begin()); } JS::RootedObject compressionStreamInstance(cx, JS_NewObjectForConstructor(cx, &class_, args)); diff --git a/builtins/web/streams/decompression-stream.cpp b/builtins/web/streams/decompression-stream.cpp index 6b33346f..7db7d6c2 100644 --- a/builtins/web/streams/decompression-stream.cpp +++ b/builtins/web/streams/decompression-stream.cpp @@ -12,6 +12,8 @@ #include "transform-stream-default-controller.h" #include "transform-stream.h" +#include "stream-errors.h" + namespace builtins { namespace web { namespace streams { @@ -84,8 +86,7 @@ bool inflate_chunk(JSContext *cx, JS::HandleObject self, JS::HandleValue chunk, // Step 2 of flush: // 2. If the end of the compressed input has not been reached, then throw a TypeError. if (zstream->avail_in != 0) { - JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_DECOMPRESSING_ERROR); - return false; + return api::throw_error(cx, StreamErrors::DecompressingChunkFailed); } // This just sets up step 3. The actual decompression happens in the `do` loop // below. @@ -118,8 +119,6 @@ bool inflate_chunk(JSContext *cx, JS::HandleObject self, JS::HandleValue chunk, int err = inflate(zstream, finished ? Z_FINISH : Z_NO_FLUSH); if (err != Z_OK && err != Z_STREAM_END && err != Z_BUF_ERROR) { - JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_DECOMPRESSING_ERROR); - return false; } size_t bytes = BUFFER_SIZE - zstream->avail_out; @@ -278,7 +277,7 @@ JSObject *create(JSContext *cx, JS::HandleObject stream, Format format) { int err = inflateInit2(zstream, window_bits); if (err != Z_OK) { - JS_ReportErrorASCII(cx, "Error initializing decompression stream"); + api::throw_error(cx, StreamErrors::StreamInitializationFailed, "decompression"); return nullptr; } @@ -308,9 +307,8 @@ bool DecompressionStream::constructor(JSContext *cx, unsigned argc, JS::Value *v } else if (!strcmp(format_chars.begin(), "gzip")) { format = Format::GZIP; } else { - JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_INVALID_COMPRESSION_FORMAT, - format_chars.begin()); - return false; + return api::throw_error(cx, api::Errors::TypeError, "DecompressionStream constructor", + "format", "be 'deflate', 'deflate-raw', or 'gzip'"); } JS::RootedObject decompressionStreamInstance(cx, JS_NewObjectForConstructor(cx, &class_, args)); diff --git a/builtins/web/streams/native-stream-source.cpp b/builtins/web/streams/native-stream-source.cpp index fb8b56c4..875c2ece 100644 --- a/builtins/web/streams/native-stream-source.cpp +++ b/builtins/web/streams/native-stream-source.cpp @@ -10,6 +10,8 @@ #include "native-stream-sink.h" #include "native-stream-source.h" +#include "stream-errors.h" + // A JS class to use as the underlying source for native readable streams, used // for Request/Response bodies and TransformStream. namespace builtins { @@ -87,8 +89,7 @@ bool NativeStreamSource::lock_stream(JSContext *cx, JS::HandleObject stream) { bool locked; JS::ReadableStreamIsLocked(cx, stream, &locked); if (locked) { - JS_ReportErrorLatin1(cx, "Can't lock an already locked ReadableStream"); - return false; + return api::throw_error(cx, StreamErrors::StreamAlreadyLocked); } JS::RootedObject self(cx, get_stream_source(cx, stream)); diff --git a/builtins/web/streams/stream-errors.h b/builtins/web/streams/stream-errors.h new file mode 100644 index 00000000..5e31e125 --- /dev/null +++ b/builtins/web/streams/stream-errors.h @@ -0,0 +1,18 @@ +#ifndef STREAM_ERRORS_H +#define STREAM_ERRORS_H + +namespace StreamErrors { +DEF_ERR(CompressingChunkFailed, JSEXN_TYPEERR, "CompressionStream transform: error compressing chunk", 0) +DEF_ERR(DecompressingChunkFailed, JSEXN_TYPEERR, "DecompressionStream transform: error decompressing chunk", 0) +DEF_ERR(StreamInitializationFailed, JSEXN_ERR, "Error initializing {0} stream", 1) +DEF_ERR(StreamAlreadyLocked, JSEXN_TYPEERR, "Can't lock an already locked ReadableStream", 0) +DEF_ERR(PipeThroughFromLockedStream, JSEXN_TYPEERR, "pipeThrough called on a ReadableStream that's already locked", 0) +DEF_ERR(PipeThroughToLockedStream, JSEXN_TYPEERR, "The writable end of the transform object passed to pipeThrough " + "is already locked", 0) +DEF_ERR(PipeThroughWrongArg, JSEXN_TYPEERR, "pipeThrough called on a ReadableStream that's already locked", 0) +DEF_ERR(TransformStreamTerminated, JSEXN_TYPEERR, "The TransformStream has been terminated", 0) +DEF_ERR(InvalidCompressionFormat, JSEXN_TYPEERR, "'format' has to be \"deflate\", \"deflate-raw\", or \"gzip\", " + "but got \"{0}\"", 1) +}; // namespace StreamErrors + +#endif // STREAM_ERRORS_H diff --git a/builtins/web/streams/transform-stream-default-controller.cpp b/builtins/web/streams/transform-stream-default-controller.cpp index 5dd0dc6b..48c9d8a3 100644 --- a/builtins/web/streams/transform-stream-default-controller.cpp +++ b/builtins/web/streams/transform-stream-default-controller.cpp @@ -10,6 +10,8 @@ #include "transform-stream-default-controller.h" #include "transform-stream.h" +#include "stream-errors.h" + /** * Implementation of the WHATWG TransformStream builtin. * @@ -269,8 +271,8 @@ bool TransformStreamDefaultController::Terminate(JSContext *cx, JS::HandleObject // allow us to create a proper error object with the right stack and all // without actually throwing it. So we do that and then immediately clear the // pending exception. + api::throw_error(cx, StreamErrors::TransformStreamTerminated); JS::RootedValue error(cx); - JS_ReportErrorLatin1(cx, "The TransformStream has been terminated"); if (!JS_GetPendingException(cx, &error)) { return false; } diff --git a/builtins/web/streams/transform-stream.cpp b/builtins/web/streams/transform-stream.cpp index 53409e1d..73884e28 100644 --- a/builtins/web/streams/transform-stream.cpp +++ b/builtins/web/streams/transform-stream.cpp @@ -14,6 +14,8 @@ #include "transform-stream-default-controller.h" #include "transform-stream.h" +#include "stream-errors.h" + namespace ReadableStream_additions { using namespace builtins::web::streams; @@ -26,9 +28,7 @@ bool is_instance(JS::Value val) { return val.isObject() && is_instance(&val.toOb bool check_receiver(JSContext *cx, JS::HandleValue receiver, const char *method_name) { if (!is_instance(receiver)) { - JS_ReportErrorUTF8(cx, "Method %s called on receiver that's not an instance of ReadableStream", - method_name); - return false; + return api::throw_error(cx, api::Errors::WrongReceiver, method_name, "ReadableStream"); } return true; }; @@ -66,16 +66,13 @@ bool pipeThrough(JSContext *cx, JS::HandleObject source_readable, JS::HandleObje return false; } if (locked) { - JS_ReportErrorLatin1(cx, "pipeThrough called on a ReadableStream that's already locked"); - return false; + return api::throw_error(cx, StreamErrors::PipeThroughFromLockedStream); } // 2. If ! IsWritableStreamLocked(transform["writable"]) is true, throw a // TypeError exception. if (JS::WritableStreamIsLocked(cx, target_writable)) { - JS_ReportErrorLatin1(cx, "The writable end of the transform object passed to pipeThrough " - " passed to pipeThrough is already locked"); - return false; + return api::throw_error(cx, StreamErrors::PipeThroughToLockedStream); } // 3. Let signal be options["signal"] if it exists, or undefined otherwise. @@ -117,8 +114,8 @@ bool pipeThrough(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(1) if (!args[0].isObject()) { - JS_ReportErrorLatin1(cx, "First argument to pipeThrough must be an object"); - return false; + return api::throw_error(cx, api::Errors::TypeError, "ReadableStream.pipeThrough", + "transformStream parameter", "be an object"); } JS::RootedObject transform(cx, &args[0].toObject()); @@ -129,9 +126,9 @@ bool pipeThrough(JSContext *cx, unsigned argc, JS::Value *vp) { if (!JS_GetProperty(cx, transform, "readable", &val)) return false; if (!val.isObject() || !JS::IsReadableStream(&val.toObject())) { - JS_ReportErrorLatin1(cx, "First argument to pipeThrough must be an object with a " - "|readable| property that is an instance of ReadableStream"); - return false; + return api::throw_error(cx, api::Errors::TypeError, "ReadableStream.pipeThrough", + "transformStream parameter", + "be an object with a |readable| property that is an instance of ReadableStream"); } readable = &val.toObject(); @@ -139,9 +136,9 @@ bool pipeThrough(JSContext *cx, unsigned argc, JS::Value *vp) { if (!JS_GetProperty(cx, transform, "writable", &val)) return false; if (!val.isObject() || !JS::IsWritableStream(&val.toObject())) { - JS_ReportErrorLatin1(cx, "First argument to pipeThrough must be an object with a " - "|writable| property that is an instance of WritableStream"); - return false; + return api::throw_error(cx, api::Errors::TypeError, "ReadableStream.pipeThrough", + "transformStream parameter", + "be an object with a |writable| property that is an instance of WritableStream"); } writable = &val.toObject(); @@ -201,8 +198,8 @@ bool ExtractFunction(JSContext *cx, JS::HandleObject obj, const char *name, } if (!val.isObject() || !JS::IsCallable(&val.toObject())) { - JS_ReportErrorLatin1(cx, "%s should be a function", name); - return false; + return api::throw_error(cx, api::Errors::TypeError, "TransformStream constructor", + name, "be a function"); } func.set(&val.toObject()); @@ -217,8 +214,8 @@ bool ExtractStrategy(JSContext *cx, JS::HandleValue strategy, double default_hwm } if (!strategy.isObject()) { - JS_ReportErrorLatin1(cx, "Strategy passed to TransformStream constructor must be an object"); - return false; + return api::throw_error(cx, api::Errors::TypeError, "TransformStream constructor", + "strategy", "be an object"); } JS::RootedObject strategy_obj(cx, &strategy.toObject()); @@ -235,8 +232,8 @@ bool ExtractStrategy(JSContext *cx, JS::HandleValue strategy, double default_hwm return false; } if (std::isnan(*hwm) || *hwm < 0) { - JS_ReportErrorLatin1(cx, "Invalid value for highWaterMark: %f", *hwm); - return false; + return api::throw_error(cx, api::Errors::TypeError, "TransformStream constructor", + "highWaterMark", "be a number >= 0"); } } @@ -442,8 +439,8 @@ bool TransformStream::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { return false; } if (found) { - JS_ReportErrorLatin1(cx, "transformer.readableType is reserved for future use"); - return false; + return api::throw_error(cx, api::Errors::TypeError, "TransformStream constructor", + "transformer.readableType", "not be used: it's reserved for future use"); } // 4. If transformerDict["writableType"] [exists], throw a `[RangeError]` @@ -452,8 +449,8 @@ bool TransformStream::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { return false; } if (found) { - JS_ReportErrorLatin1(cx, "transformer.writableType is reserved for future use"); - return false; + return api::throw_error(cx, api::Errors::TypeError, "TransformStream constructor", + "transformer.writableType", "not be used: it's reserved for future use"); } } diff --git a/builtins/web/structured-clone.cpp b/builtins/web/structured-clone.cpp index 9b69fc8b..fc6c2c15 100644 --- a/builtins/web/structured-clone.cpp +++ b/builtins/web/structured-clone.cpp @@ -1,5 +1,7 @@ #include "structured-clone.h" +#include "dom-exception.h" + namespace builtins { namespace web { namespace structured_clone { @@ -56,8 +58,7 @@ JSObject *ReadStructuredClone(JSContext *cx, JSStructuredCloneReader *r, bool WriteStructuredClone(JSContext *cx, JSStructuredCloneWriter *w, JS::HandleObject obj, bool *sameProcessScopeRequired, void *closure) { if (!url::URLSearchParams::is_instance(obj)) { - JS_ReportErrorLatin1(cx, "The object could not be cloned"); - return false; + return dom_exception::DOMException::raise(cx, "The object could not be cloned", "DataCloneError"); } auto slice = url::URLSearchParams::serialize(cx, obj); diff --git a/builtins/web/text-codec/text-codec-errors.h b/builtins/web/text-codec/text-codec-errors.h new file mode 100644 index 00000000..9d8256d6 --- /dev/null +++ b/builtins/web/text-codec/text-codec-errors.h @@ -0,0 +1,10 @@ +#ifndef TEXT_CODEC_ERRORS_H +#define TEXT_CODEC_ERRORS_H + +namespace TextCodecErrors { +DEF_ERR(FetchNetworkError, JSEXN_TYPEERR, "NetworkError when attempting to fetch resource", 0) +DEF_ERR(InvalidEncoding, JSEXN_RANGEERR, "TextDecoder constructor: The given encoding is not supported.", 0) +DEF_ERR(DecodingFailed, JSEXN_TYPEERR, "TextDecoder.decode: Decoding failed.", 0) +}; + +#endif // TEXT_CODEC_ERRORS_H diff --git a/builtins/web/text-codec/text-decoder.cpp b/builtins/web/text-codec/text-decoder.cpp index c43f416c..226db896 100644 --- a/builtins/web/text-codec/text-decoder.cpp +++ b/builtins/web/text-codec/text-decoder.cpp @@ -2,6 +2,8 @@ #include "encode.h" #include "rust-encoding.h" +#include "text-codec-errors.h" + namespace builtins { namespace web { namespace text_codec { @@ -9,6 +11,11 @@ namespace text_codec { bool TextDecoder::decode(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(0); + // TODO: Change this class so that its prototype isn't an instance of the class + if (self == proto_obj) { + return api::throw_error(cx, api::Errors::WrongReceiver, "decode", "TextDecoder"); + } + auto source_value = args.get(0); std::optional> src; @@ -25,9 +32,8 @@ bool TextDecoder::decode(JSContext *cx, unsigned argc, JS::Value *vp) { if (args.hasDefined(1)) { auto options_value = args.get(1); if (!options_value.isObject()) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, - JSMSG_TEXT_DECODER_DECODE_OPTIONS_NOT_DICTIONARY); - return false; + return api::throw_error(cx, api::Errors::TypeError, "TextDecoder.decode", + "options", "be an object or undefined"); } JS::RootedObject options(cx, &options_value.toObject()); JS::RootedValue stream_value(cx); @@ -57,8 +63,7 @@ bool TextDecoder::decode(JSContext *cx, unsigned argc, JS::Value *vp) { result = jsencoding::decoder_decode_to_utf16_without_replacement(decoder, src->data(), &srcLen, dest.get(), &destLen, !stream); if (result != 0) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_TEXT_DECODER_DECODING_FAILED); - return false; + return api::throw_error(cx, TextCodecErrors::DecodingFailed); } } else { bool hadReplacements; @@ -83,8 +88,7 @@ bool TextDecoder::decode(JSContext *cx, unsigned argc, JS::Value *vp) { JS::RootedString str(cx, JS_NewUCStringCopyN(cx, reinterpret_cast(dest.get()), destLen)); if (!str) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_TEXT_DECODER_DECODING_FAILED); - return false; + return api::throw_error(cx, TextCodecErrors::DecodingFailed); } args.rval().setString(str); @@ -93,15 +97,9 @@ bool TextDecoder::decode(JSContext *cx, unsigned argc, JS::Value *vp) { bool TextDecoder::encoding_get(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(0); - - JS::RootedObject result(cx); - if (!JS_GetPrototype(cx, self, &result)) { - return false; - } - if (result != TextDecoder::proto_obj) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INVALID_INTERFACE, "encoding get", - "TextDecoder"); - return false; + // TODO: Change this class so that its prototype isn't an instance of the class + if (self == proto_obj) { + return api::throw_error(cx, api::Errors::WrongReceiver, "encoding get", "TextDecoder"); } auto encoding = reinterpret_cast( @@ -131,14 +129,9 @@ bool TextDecoder::encoding_get(JSContext *cx, unsigned argc, JS::Value *vp) { bool TextDecoder::fatal_get(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(0); - JS::RootedObject result(cx); - if (!JS_GetPrototype(cx, self, &result)) { - return false; - } - if (result != TextDecoder::proto_obj) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INVALID_INTERFACE, "fatal get", - "TextDecoder"); - return false; + // TODO: Change this class so that its prototype isn't an instance of the class + if (self == proto_obj) { + return api::throw_error(cx, api::Errors::WrongReceiver, "fatal get", "TextDecoder"); } auto fatal = @@ -151,14 +144,9 @@ bool TextDecoder::fatal_get(JSContext *cx, unsigned argc, JS::Value *vp) { bool TextDecoder::ignoreBOM_get(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(0); - JS::RootedObject result(cx); - if (!JS_GetPrototype(cx, self, &result)) { - return false; - } - if (result != TextDecoder::proto_obj) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INVALID_INTERFACE, - "ignoreBOM get", "TextDecoder"); - return false; + // TODO: Change this class so that its prototype isn't an instance of the class + if (self == proto_obj) { + return api::throw_error(cx, api::Errors::WrongReceiver, "ignoreBOM get", "TextDecoder"); } auto ignoreBOM = @@ -212,8 +200,7 @@ bool TextDecoder::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { reinterpret_cast(label_chars.begin()), label_chars.len)); } if (!encoding) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_TEXT_DECODER_INVALID_ENCODING); - return false; + return api::throw_error(cx, TextCodecErrors::InvalidEncoding); } bool fatal = false; bool ignoreBOM = false; @@ -232,9 +219,8 @@ bool TextDecoder::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { } ignoreBOM = JS::ToBoolean(ignoreBOM_value); } else if (!options_val.isNull()) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, - JSMSG_TEXT_DECODER_OPTIONS_NOT_DICTIONARY); - return false; + return api::throw_error(cx, api::Errors::TypeError, "TextDecoder constructor", + "options", "be an object or undefined"); } } JS::RootedObject self(cx, JS_NewObjectForConstructor(cx, &class_, args)); diff --git a/builtins/web/text-codec/text-encoder.cpp b/builtins/web/text-codec/text-encoder.cpp index 56e1b010..541dfd99 100644 --- a/builtins/web/text-codec/text-encoder.cpp +++ b/builtins/web/text-codec/text-encoder.cpp @@ -18,6 +18,11 @@ namespace text_codec { bool TextEncoder::encode(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(0); + // TODO: Change this class so that its prototype isn't an instance of the class + if (self == proto_obj) { + return api::throw_error(cx, api::Errors::WrongReceiver, "encode", "TextEncoder"); + } + // Default to empty string if no input is given. if (args.get(0).isUndefined()) { JS::RootedObject byte_array(cx, JS_NewUint8Array(cx, 0)); @@ -52,6 +57,11 @@ bool TextEncoder::encode(JSContext *cx, unsigned argc, JS::Value *vp) { bool TextEncoder::encodeInto(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(2); + // TODO: Change this class so that its prototype isn't an instance of the class + if (self == proto_obj) { + return api::throw_error(cx, api::Errors::WrongReceiver, "encodeInto", "TextEncoder"); + } + auto source = JS::ToString(cx, args.get(0)); if (!source) { return false; @@ -59,29 +69,19 @@ bool TextEncoder::encodeInto(JSContext *cx, unsigned argc, JS::Value *vp) { auto destination_value = args.get(1); if (!destination_value.isObject()) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, - JSMSG_TEXT_ENCODER_ENCODEINTO_INVALID_ARRAY); - return false; + return api::throw_error(cx, api::Errors::TypeError, "TextEncoder.encodeInto", + "destination", "be a Uint8Array"); } JS::RootedObject destination(cx, &destination_value.toObject()); - if (!JS_IsArrayBufferViewObject(destination)) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, - JSMSG_TEXT_ENCODER_ENCODEINTO_INVALID_ARRAY); - return false; - } - if (JS::IsLargeArrayBufferView(destination)) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, - JSMSG_TEXT_ENCODER_ENCODEINTO_INVALID_ARRAY); - return false; - } uint8_t *data; bool is_shared; size_t len = 0; + // JS_GetObjectAsUint8Array returns nullptr without throwing if the object is not + // a Uint8Array, so we don't need to do explicit checks before calling it. if (!JS_GetObjectAsUint8Array(destination, &len, &is_shared, &data)) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, - JSMSG_TEXT_ENCODER_ENCODEINTO_INVALID_ARRAY); - return false; + return api::throw_error(cx, api::Errors::TypeError, "TextEncoder.encodeInto", + "destination", "be a Uint8Array"); } auto span = AsWritableChars(mozilla::Span(data, len)); auto maybe = JS_EncodeStringToUTF8BufferPartial(cx, source, span); @@ -114,14 +114,9 @@ bool TextEncoder::encodeInto(JSContext *cx, unsigned argc, JS::Value *vp) { bool TextEncoder::encoding_get(JSContext *cx, unsigned argc, JS::Value *vp) { METHOD_HEADER(0); - JS::RootedObject result(cx); - if (!JS_GetPrototype(cx, self, &result)) { - return false; - } - if (result != TextEncoder::proto_obj) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INVALID_INTERFACE, "encoding get", - "TextEncoder"); - return false; + // TODO: Change this class so that its prototype isn't an instance of the class + if (self == proto_obj) { + return api::throw_error(cx, api::Errors::WrongReceiver, "encoding get", "TextEncoder"); } JS::RootedString str(cx, JS_NewStringCopyN(cx, "utf-8", 5)); diff --git a/builtins/web/timers.cpp b/builtins/web/timers.cpp index bb80c16c..a4659127 100644 --- a/builtins/web/timers.cpp +++ b/builtins/web/timers.cpp @@ -131,9 +131,8 @@ template bool setTimeout_or_interval(JSContext *cx, const unsigned } if (!(args[0].isObject() && JS::IsCallable(&args[0].toObject()))) { - JS_ReportErrorASCII(cx, "First argument to %s must be a function", - repeat ? "setInterval" : "setTimeout"); - return false; + return api::throw_error(cx, api::Errors::TypeError, repeat ? "setInterval" : "setTimeout", + "first argument", "be a function"); } const RootedObject handler(cx, &args[0].toObject()); diff --git a/builtins/web/worker-location.cpp b/builtins/web/worker-location.cpp index 2edbbf5b..b713a4d9 100644 --- a/builtins/web/worker-location.cpp +++ b/builtins/web/worker-location.cpp @@ -64,11 +64,6 @@ const JSPropertySpec WorkerLocation::properties[] = { JS_STRING_SYM_PS(toStringTag, "Location", JSPROP_READONLY), JS_PS_END}; -bool WorkerLocation::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { - JS_ReportErrorLatin1(cx, "Illegal constructor WorkerLocation"); - return false; -} - bool WorkerLocation::init_class(JSContext *cx, JS::HandleObject global) { if (!init_class_impl(cx, global)) { return false; diff --git a/builtins/web/worker-location.h b/builtins/web/worker-location.h index 4debb7b7..4c1d33b9 100644 --- a/builtins/web/worker-location.h +++ b/builtins/web/worker-location.h @@ -7,7 +7,7 @@ namespace builtins { namespace web { namespace worker_location { -class WorkerLocation : public BuiltinImpl { +class WorkerLocation : public BuiltinNoConstructor { private: public: static constexpr const char *class_name = "WorkerLocation"; @@ -21,8 +21,6 @@ class WorkerLocation : public BuiltinImpl { static JS::PersistentRooted url; static bool toString(JSContext *cx, unsigned argc, JS::Value *vp); - static bool constructor(JSContext *cx, unsigned argc, JS::Value *vp); - static bool init_class(JSContext *cx, JS::HandleObject global); }; diff --git a/include/builtin.h b/include/builtin.h index b2cdb408..a7842a93 100644 --- a/include/builtin.h +++ b/include/builtin.h @@ -49,27 +49,18 @@ using JS::PersistentRooted; std::optional> value_to_buffer(JSContext *cx, HandleValue val, const char *val_desc); -enum JSErrNum { -#define MSG_DEF(name, count, exception, format) name, -#include "error-numbers.msg" -#undef MSG_DEF - JSErrNum_Limit -}; +#define DEF_ERR(name, exception, format, count) \ +static constexpr JSErrorFormatString name = { #name, format, count, exception }; + +namespace api { +#include "errors.h" +} bool hasWizeningFinished(); bool isWizening(); void markWizeningAsFinished(); -const JSErrorFormatString js_ErrorFormatString[JSErrNum_Limit] = { -#define MSG_DEF(name, count, exception, format) {#name, format, count, exception}, -#include "error-numbers.msg" - -#undef MSG_DEF -}; - -const JSErrorFormatString *GetErrorMessage(void *userRef, unsigned errorNumber); - #define DBG(...) \ printf("%s#%d: ", __func__, __LINE__); \ printf(__VA_ARGS__); \ @@ -127,8 +118,7 @@ inline bool ThrowIfNotConstructing(JSContext *cx, const CallArgs &args, const ch return true; } - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_BUILTIN_CTOR_NO_NEW, builtinName); - return false; + return api::throw_error(cx, api::Errors::CtorCalledWithoutNew, builtinName); } namespace builtins { @@ -170,9 +160,7 @@ template class BuiltinImpl { static bool check_receiver(JSContext *cx, HandleValue receiver, const char *method_name) { if (!Impl::is_instance(receiver)) { - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INCOMPATIBLE_INSTANCE, - method_name, Impl::class_.name); - return false; + return api::throw_error(cx, api::Errors::WrongReceiver, method_name, Impl::class_name); } return true; @@ -196,8 +184,7 @@ template class BuiltinNoConstructor : public BuiltinImpl { static bool constructor(JSContext *cx, [[maybe_unused]] unsigned argc, [[maybe_unused]] Value *vp) { - JS_ReportErrorUTF8(cx, "%s can't be instantiated directly", Impl::class_name); - return false; + return api::throw_error(cx, api::Errors::NoCtorBuiltin, Impl::class_name); } static bool init_class(JSContext *cx, HandleObject global) { diff --git a/include/error-numbers.msg b/include/error-numbers.msg deleted file mode 100644 index 63440f1e..00000000 --- a/include/error-numbers.msg +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Our own version of spidermonkey/js/friend/ErrorNumbers.msg - * where we can add our own custom error messages for use within the runtime - */ - -/* - * This is our JavaScript error message file. - * - * The format for each JS error message is: - * - * MSG_DEF(, , , - * ) - * - * where ; - * is a legal C identifer that will be used in the - * JS engine source. - * - * is an integer literal specifying the total number of - * replaceable arguments in the following format string. - * - * is an enum JSExnType value, defined in js/ErrorReport.h. - * - * is a string literal, optionally containing sequences - * {X} where X is an integer representing the argument number that will - * be replaced with a string value when the error is reported. - * - * e.g. - * - * MSG_DEF(JSMSG_NOT_A_SUBSPECIES, 2, JSEXN_TYPEERROR, - * "{0} is not a member of the {1} family") - * - * can be used: - * - * JS_ReportErrorNumberASCII(JSMSG_NOT_A_SUBSPECIES, "Rhino", "Monkey"); - * - * to report: - * - * "TypeError: Rhino is not a member of the Monkey family" - */ - -// clang-format off -MSG_DEF(JSMSG_BUILTIN_NOT_AN_ERROR, 0, JSEXN_ERR, "") -MSG_DEF(JSMSG_BUILTIN_CTOR_NO_NEW, 1, JSEXN_TYPEERR, "calling a builtin {0} constructor without new is forbidden") -MSG_DEF(JSMSG_ILLEGAL_CTOR, 0, JSEXN_TYPEERR, "Illegal constructor") -MSG_DEF(JSMSG_INVALID_INTERFACE, 2, JSEXN_TYPEERR, "'{0}' called on an object that does not implement interface {1}") -MSG_DEF(JSMSG_INCOMPATIBLE_INSTANCE, 2, JSEXN_TYPEERR, "Method {0} called on receiver that's not an instance of {1}") -MSG_DEF(JSMSG_INVALID_BUFFER_ARG, 2, JSEXN_TYPEERR, "{0} must be of type ArrayBuffer or ArrayBufferView but got \"{1}\"") -MSG_DEF(JSMSG_INVALID_COMPRESSION_FORMAT, 1, JSEXN_TYPEERR, "'format' has to be \"deflate\", \"deflate-raw\", or \"gzip\", but got \"{0}\"") -MSG_DEF(JSMSG_DECOMPRESSING_ERROR, 0, JSEXN_TYPEERR, "DecompressionStream transform: error decompressing chunk") -MSG_DEF(JSMSG_INVALID_CHARACTER_ERROR, 0, JSEXN_ERR, "String contains an invalid character") -MSG_DEF(JSMSG_SUBTLE_CRYPTO_ERROR, 1, JSEXN_ERR, "{0}") -MSG_DEF(JSMSG_SUBTLE_CRYPTO_INVALID_JWK_KTY_VALUE, 1, JSEXN_ERR, "The JWK 'kty' member was not '{0}'") -MSG_DEF(JSMSG_SUBTLE_CRYPTO_INVALID_KEY_USAGES_VALUE, 0, JSEXN_TYPEERR, "Invalid keyUsages argument") -MSG_DEF(JSMSG_RESPONSE_REDIRECT_INVALID_URI, 0, JSEXN_TYPEERR, "Response.redirect: url parameter is not a valid URL.") -MSG_DEF(JSMSG_RESPONSE_REDIRECT_INVALID_STATUS, 0, JSEXN_RANGEERR, "Response.redirect: Invalid redirect status code.") -MSG_DEF(JSMSG_RESPONSE_JSON_INVALID_VALUE, 0, JSEXN_TYPEERR, "Redirect.json: The data is not JSON serializable") -MSG_DEF(JSMSG_TEXT_DECODER_INVALID_ENCODING, 1, JSEXN_RANGEERR, "TextDecoder constructor: The given encoding '{0}' is not supported.") -MSG_DEF(JSMSG_TEXT_DECODER_DECODING_FAILED, 0, JSEXN_TYPEERR, "TextDecoder.decode: Decoding failed.") -MSG_DEF(JSMSG_TEXT_DECODER_OPTIONS_NOT_DICTIONARY, 0, JSEXN_TYPEERR, "TextDecoder constructor: options argument can't be converted to a dictionary.") -MSG_DEF(JSMSG_TEXT_DECODER_DECODE_OPTIONS_NOT_DICTIONARY, 0, JSEXN_TYPEERR, "TextDecoder.decode: options argument can't be converted to a dictionary.") -MSG_DEF(JSMSG_TEXT_ENCODER_ENCODEINTO_INVALID_ARRAY, 0, JSEXN_TYPEERR, "TextEncoder.encodeInto: Argument 2 does not implement interface Uint8Array.") -//clang-format on diff --git a/include/errors.h b/include/errors.h index c2fca44a..15ceec9e 100644 --- a/include/errors.h +++ b/include/errors.h @@ -8,12 +8,17 @@ bool throw_error(JSContext* cx, const JSErrorFormatString &error, const char* arg4 = nullptr); namespace Errors { +DEF_ERR(WrongReceiver, JSEXN_TYPEERR, "Method '{0}' called on receiver that's not an instance of {1}", 2) +DEF_ERR(NoCtorBuiltin, JSEXN_TYPEERR, "{0} builtin can't be instantiated directly", 1) +DEF_ERR(TypeError, JSEXN_TYPEERR, "{0}: {1} must {2}", 3) +DEF_ERR(CtorCalledWithoutNew, JSEXN_TYPEERR, "calling a builtin {0} constructor without new is forbidden", 1) DEF_ERR(InvalidSequence, JSEXN_TYPEERR, "Failed to construct {0} object. If defined, the first " "argument must be either a [ ['name', 'value'], ... ] sequence, " "or a { 'name' : 'value', ... } record{1}.", 2) +DEF_ERR(InvalidBuffer, JSEXN_TYPEERR, "{0} must be of type ArrayBuffer or ArrayBufferView", 1) DEF_ERR(ForEachCallback, JSEXN_TYPEERR, "Failed to execute 'forEach' on '{0}': " "parameter 1 is not of type 'Function'", 1) -DEF_ERR(RequestHandlerOnly, JSEXN_TYPEERR, "{0} can only be used during request handling, " \ +DEF_ERR(RequestHandlerOnly, JSEXN_TYPEERR, "{0} can only be used during request handling, " "not during initialization", 1) DEF_ERR(InitializationOnly, JSEXN_TYPEERR, "{0} can only be used during request handling, " "not during initialization", 1) diff --git a/include/extension-api.h b/include/extension-api.h index 2cfdba2e..f18f993b 100644 --- a/include/extension-api.h +++ b/include/extension-api.h @@ -27,13 +27,8 @@ using JS::PersistentRootedVector; typedef int32_t PollableHandle; constexpr PollableHandle INVALID_POLLABLE_HANDLE = -1; -#define DEF_ERR(name, exception, format, count) \ -static constexpr JSErrorFormatString name = { #name, format, count, exception }; - namespace api { -#include "errors.h" - class AsyncTask; class Engine { diff --git a/runtime/builtin.cpp b/runtime/builtin.cpp index 3e5b63c0..ea092543 100644 --- a/runtime/builtin.cpp +++ b/runtime/builtin.cpp @@ -20,20 +20,11 @@ bool api::throw_error(JSContext* cx, const JSErrorFormatString &error, return false; } -const JSErrorFormatString *GetErrorMessage(void *userRef, unsigned errorNumber) { - if (errorNumber > 0 && errorNumber < JSErrNum_Limit) { - return &js_ErrorFormatString[errorNumber]; - } - - return nullptr; -} - std::optional> value_to_buffer(JSContext *cx, JS::HandleValue val, const char *val_desc) { if (!val.isObject() || !(JS_IsArrayBufferViewObject(&val.toObject()) || JS::IsArrayBufferObject(&val.toObject()))) { - JS_ReportErrorNumberUTF8(cx, GetErrorMessage, nullptr, JSMSG_INVALID_BUFFER_ARG, val_desc, - val.type()); + api::throw_error(cx, api::Errors::InvalidBuffer, val_desc); return std::nullopt; } diff --git a/tests/integration/assert.js b/tests/integration/assert.js index 64534f83..f0c71f41 100644 --- a/tests/integration/assert.js +++ b/tests/integration/assert.js @@ -70,7 +70,7 @@ export function throws(func, errorClass, errorMessage) { throw new AssertionError(`Expected \`${func.toString()}\` to throw, but it didn't`); } -export async function rejects(asyncFunc, errorClass, errorMessage) { +export async function rejects(asyncFunc, errorClass, errorMessage, errorName) { try { await asyncFunc(); } catch (err) { @@ -78,6 +78,9 @@ export async function rejects(asyncFunc, errorClass, errorMessage) { if (!(err instanceof errorClass)) { throw new AssertionError(`not expected error instance calling \`${asyncFunc.toString()}\``, errorMessage, err.name + ': ' + err.message, errorClass.name); } + if (errorClass === DOMException && errorName && err.name !== errorName) { + throw new AssertionError(`expected error name ${errorName} but got ${err.name} when calling \`${asyncFunc.toString()}\``); + } } if (errorMessage) { if (err.message !== errorMessage) { diff --git a/tests/integration/crypto/crypto.js b/tests/integration/crypto/crypto.js index 28967285..f2fc9835 100644 --- a/tests/integration/crypto/crypto.js +++ b/tests/integration/crypto/crypto.js @@ -103,8 +103,7 @@ export const handler = serveTest(async (t) => { () => { new crypto.subtle.importKey(); }, - TypeError, - "crypto.subtle.importKey is not a constructor" + TypeError ); }); await t.test("subtle.importKey.called-with-wrong-this", async () => { @@ -120,8 +119,7 @@ export const handler = serveTest(async (t) => { publicRsaJsonWebKeyData.key_ops ); }, - TypeError, - "Method SubtleCrypto.importKey called on receiver that's not an instance of SubtleCrypto" + TypeError ); }); await t.test("subtle.importKey.called-with-no-arguments", async () => { @@ -129,8 +127,7 @@ export const handler = serveTest(async (t) => { async () => { await crypto.subtle.importKey(); }, - TypeError, - "SubtleCrypto.importKey: At least 5 arguments required, but only 0 passed" + TypeError ); }); @@ -164,7 +161,7 @@ export const handler = serveTest(async (t) => { } ); await t.test( - "subtle.importKey.first-parameter-non-existant-format", + "subtle.importKey.first-parameter-non-existent-format", async () => { const publicRsaJsonWebKeyData = createPublicRsaJsonWebKeyData(); await rejects( @@ -177,8 +174,7 @@ export const handler = serveTest(async (t) => { publicRsaJsonWebKeyData.key_ops ); }, - Error, - "Provided format parameter is not supported. Supported formats are: 'spki', 'pkcs8', 'jwk', and 'raw'" + DOMException, null, "NotSupportedError" ); } ); @@ -200,8 +196,7 @@ export const handler = serveTest(async (t) => { publicRsaJsonWebKeyData.key_ops ); }, - Error, - "The provided value is not of type JsonWebKey" + TypeError ); } ); @@ -222,8 +217,7 @@ export const handler = serveTest(async (t) => { publicRsaJsonWebKeyData.key_ops ); }, - DOMException, - "Data provided to an operation does not meet requirements" + DOMException, null, "DataError" ); } ); @@ -270,8 +264,7 @@ export const handler = serveTest(async (t) => { publicRsaJsonWebKeyData.key_ops ); }, - Error, - "The JWK member 'e' could not be base64url decoded or contained padding" + DOMException, null, "DataError" ); } ); @@ -290,8 +283,7 @@ export const handler = serveTest(async (t) => { publicRsaJsonWebKeyData.key_ops ); }, - Error, - "The required JWK member 'kty' was missing" + TypeError ); } ); @@ -310,8 +302,7 @@ export const handler = serveTest(async (t) => { publicRsaJsonWebKeyData.key_ops ); }, - Error, - "The JWK 'kty' member was not 'RSA'" + DOMException, null, "DataError" ); } ); @@ -346,8 +337,7 @@ export const handler = serveTest(async (t) => { key_ops ); }, - Error, - "Failed to read the 'key_ops' property from 'JsonWebKey': The provided value cannot be converted to a sequence" + DOMException, null, "DataError" ); } ); @@ -383,8 +373,7 @@ export const handler = serveTest(async (t) => { key_ops ); }, - Error, - "The 'key_ops' member of the JWK dictionary contains duplicate usages" + DOMException, null, "DataError" ); } ); @@ -404,8 +393,7 @@ export const handler = serveTest(async (t) => { key_ops ); }, - TypeError, - "Invalid keyUsages argument" + DOMException, null, "DataError" ); } ); @@ -456,8 +444,7 @@ export const handler = serveTest(async (t) => { publicRsaJsonWebKeyData.key_ops ); }, - Error, - "Data provided to an operation does not meet requirements" + DOMException, null, "DataError" ); } ); @@ -504,8 +491,7 @@ export const handler = serveTest(async (t) => { publicRsaJsonWebKeyData.key_ops ); }, - Error, - "The JWK member 'n' could not be base64url decoded or contained padding" + DOMException, null, "DataError" ); } ); @@ -531,8 +517,7 @@ export const handler = serveTest(async (t) => { publicEcdsaJsonWebKeyData.key_ops ); }, - DOMException, - "Data provided to an operation does not meet requirements" + DOMException, null, "DataError" ); } ); @@ -579,8 +564,7 @@ export const handler = serveTest(async (t) => { publicEcdsaJsonWebKeyData.key_ops ); }, - Error, - "The JWK member 'x' could not be base64url decoded or contained padding" + DOMException, null, "DataError" ); } ); @@ -599,8 +583,7 @@ export const handler = serveTest(async (t) => { publicEcdsaJsonWebKeyData.key_ops ); }, - DOMException, - "Data provided to an operation does not meet requirements" + DOMException, null, "DataError" ); } ); @@ -647,8 +630,7 @@ export const handler = serveTest(async (t) => { publicEcdsaJsonWebKeyData.key_ops ); }, - Error, - "The JWK member 'y' could not be base64url decoded or contained padding" + DOMException, null, "DataError" ); } ); @@ -667,8 +649,7 @@ export const handler = serveTest(async (t) => { publicEcdsaJsonWebKeyData.key_ops ); }, - Error, - "The required JWK member 'kty' was missing" + TypeError ); } ); @@ -687,8 +668,7 @@ export const handler = serveTest(async (t) => { publicEcdsaJsonWebKeyData.key_ops ); }, - Error, - "The JWK 'kty' member was not 'EC'" + DOMException, null, "DataError" ); } ); @@ -723,8 +703,7 @@ export const handler = serveTest(async (t) => { key_ops ); }, - Error, - "Failed to read the 'key_ops' property from 'JsonWebKey': The provided value cannot be converted to a sequence" + DOMException, null, "DataError" ); } ); @@ -760,8 +739,7 @@ export const handler = serveTest(async (t) => { key_ops ); }, - Error, - "The 'key_ops' member of the JWK dictionary contains duplicate usages" + DOMException, null, "DataError" ); } ); @@ -781,8 +759,7 @@ export const handler = serveTest(async (t) => { key_ops ); }, - TypeError, - "Invalid keyUsages argument" + DOMException, null, "DataError" ); } ); @@ -863,8 +840,7 @@ export const handler = serveTest(async (t) => { privateEcdsaJsonWebKeyData.key_ops ); }, - Error, - "The JWK member 'd' could not be base64url decoded or contained padding" + DOMException, null, "DataError" ); } ); @@ -888,8 +864,7 @@ export const handler = serveTest(async (t) => { publicRsaJsonWebKeyData.key_ops ); }, - Error, - "Algorithm: Unrecognized name" + DOMException, null, "NotSupportedError" ); }); await t.test( @@ -936,8 +911,7 @@ export const handler = serveTest(async (t) => { publicRsaJsonWebKeyData.key_ops ); }, - Error, - "Algorithm: Unrecognized name" + DOMException, null, "NotSupportedError" ); } ); @@ -985,8 +959,7 @@ export const handler = serveTest(async (t) => { publicRsaJsonWebKeyData.key_ops ); }, - Error, - "The JWK 'alg' member was inconsistent with that specified by the Web Crypto call" + DOMException, null, "DataError" ); } ); @@ -1006,8 +979,7 @@ export const handler = serveTest(async (t) => { undefined ); }, - Error, - "The provided value cannot be converted to a sequence" + TypeError ); }); await t.test("subtle.importKey.fifth-parameter-invalid", async () => { @@ -1022,8 +994,7 @@ export const handler = serveTest(async (t) => { ["jake"] ); }, - Error, - "SubtleCrypto.importKey: Invalid keyUsages argument" + TypeError ); }); await t.test( @@ -1057,8 +1028,7 @@ export const handler = serveTest(async (t) => { ["sign"] ); }, - Error, - "The JWK 'key_ops' member was inconsistent with that specified by the Web Crypto call. The JWK usage must be a superset of those requested" + DOMException, null, "DataError" ); } ); @@ -1244,8 +1214,7 @@ export const handler = serveTest(async (t) => { () => { new crypto.subtle.digest(); }, - TypeError, - "crypto.subtle.digest is not a constructor" + TypeError ); }); await t.test("subtle.digest.called-with-wrong-this", async () => { @@ -1254,7 +1223,6 @@ export const handler = serveTest(async (t) => { await crypto.subtle.digest.call(undefined); }, TypeError, - "Method SubtleCrypto.digest called on receiver that's not an instance of SubtleCrypto" ); }); await t.test("subtle.digest.called-with-no-arguments", async () => { @@ -1263,7 +1231,6 @@ export const handler = serveTest(async (t) => { await crypto.subtle.digest(); }, TypeError, - "SubtleCrypto.digest: At least 2 arguments required, but only 0 passed" ); }); @@ -1294,14 +1261,13 @@ export const handler = serveTest(async (t) => { } ); await t.test( - "subtle.digest.first-parameter-non-existant-format", + "subtle.digest.first-parameter-non-existent-format", async () => { await rejects( async () => { await crypto.subtle.digest("jake", data); }, - Error, - "Algorithm: Unrecognized name" + DOMException, null, "NotSupportedError" ); } ); @@ -1313,8 +1279,7 @@ export const handler = serveTest(async (t) => { async () => { await crypto.subtle.digest("sha-1", undefined); }, - Error, - 'SubtleCrypto.digest: data must be of type ArrayBuffer or ArrayBufferView but got ""' + TypeError, ); }); } @@ -1412,8 +1377,7 @@ export const handler = serveTest(async (t) => { () => { new crypto.subtle.sign(); }, - TypeError, - "crypto.subtle.sign is not a constructor" + TypeError ); }); await t.test("subtle.sign.called-with-wrong-this", async () => { @@ -1428,7 +1392,6 @@ export const handler = serveTest(async (t) => { ); }, TypeError, - "Method SubtleCrypto.sign called on receiver that's not an instance of SubtleCrypto" ); }); await t.test("subtle.sign.called-with-no-arguments", async () => { @@ -1437,7 +1400,6 @@ export const handler = serveTest(async (t) => { await crypto.subtle.sign(); }, TypeError, - "SubtleCrypto.sign: At least 3 arguments required, but only 0 passed" ); }); // first-parameter @@ -1476,7 +1438,7 @@ export const handler = serveTest(async (t) => { } ); await t.test( - "subtle.sign.first-parameter-non-existant-algorithm", + "subtle.sign.first-parameter-non-existent-algorithm", async () => { const privateRsaJsonWebKeyData = createPrivateRsaJsonWebKeyData(); await rejects( @@ -1490,8 +1452,7 @@ export const handler = serveTest(async (t) => { ); await crypto.subtle.sign("jake", key, data); }, - Error, - "Algorithm: Unrecognized name" + DOMException, null, "NotSupportedError" ); } ); @@ -1507,8 +1468,7 @@ export const handler = serveTest(async (t) => { data ); }, - Error, - "parameter 2 is not of type 'CryptoKey'" + TypeError ); }); await t.test("subtle.sign.second-parameter-invalid-usages", async () => { @@ -1524,8 +1484,7 @@ export const handler = serveTest(async (t) => { ); await crypto.subtle.sign(createRsaJsonWebKeyAlgorithm(), key, data); }, - Error, - "CryptoKey doesn't support signing" + DOMException, null, "InvalidAccessError" ); }); } @@ -1548,8 +1507,7 @@ export const handler = serveTest(async (t) => { undefined ); }, - Error, - 'SubtleCrypto.sign: data must be of type ArrayBuffer or ArrayBufferView but got ""' + TypeError ); }); } @@ -1666,8 +1624,7 @@ export const handler = serveTest(async (t) => { () => { new crypto.subtle.verify(); }, - TypeError, - "crypto.subtle.verify is not a constructor" + TypeError ); }); await t.test("subtle.verify.called-with-wrong-this", async () => { @@ -1690,7 +1647,6 @@ export const handler = serveTest(async (t) => { ); }, TypeError, - "Method SubtleCrypto.verify called on receiver that's not an instance of SubtleCrypto" ); }); await t.test("subtle.verify.called-with-no-arguments", async () => { @@ -1699,7 +1655,6 @@ export const handler = serveTest(async (t) => { await crypto.subtle.verify(); }, TypeError, - "SubtleCrypto.verify: At least 4 arguments required, but only 0 passed" ); }); // first-parameter @@ -1739,7 +1694,7 @@ export const handler = serveTest(async (t) => { } ); await t.test( - "subtle.verify.first-parameter-non-existant-algorithm", + "subtle.verify.first-parameter-non-existent-algorithm", async () => { const publicRsaJsonWebKeyData = createPublicRsaJsonWebKeyData(); await rejects( @@ -1758,8 +1713,7 @@ export const handler = serveTest(async (t) => { new Uint8Array() ); }, - Error, - "Algorithm: Unrecognized name" + DOMException, null, "NotSupportedError" ); } ); @@ -1778,8 +1732,7 @@ export const handler = serveTest(async (t) => { new Uint8Array() ); }, - Error, - "parameter 2 is not of type 'CryptoKey'" + TypeError ); } ); @@ -1803,8 +1756,7 @@ export const handler = serveTest(async (t) => { new Uint8Array() ); }, - Error, - "CryptoKey doesn't support verification" + DOMException, null, "InvalidAccessError" ); } ); @@ -1829,8 +1781,7 @@ export const handler = serveTest(async (t) => { new Uint8Array() ); }, - Error, - 'SubtleCrypto.verify: signature (argument 3) must be of type ArrayBuffer or ArrayBufferView but got ""' + TypeError ); }); } @@ -1856,8 +1807,7 @@ export const handler = serveTest(async (t) => { undefined ); }, - Error, - 'SubtleCrypto.verify: data (argument 4) must be of type ArrayBuffer or ArrayBufferView but got ""' + TypeError ); } ); diff --git a/tests/integration/timers/timers.js b/tests/integration/timers/timers.js index c46fb72a..0017282b 100644 --- a/tests/integration/timers/timers.js +++ b/tests/integration/timers/timers.js @@ -144,10 +144,8 @@ export const handler = serveTest(async (t) => { throws( () => { setInterval(type); - // TODO: Make a TypeError }, - Error, - `First argument to setInterval must be a function` + TypeError ); } }); @@ -299,10 +297,8 @@ export const handler = serveTest(async (t) => { throws( () => { setTimeout(type); - // TODO: Make a TypeError }, - Error, - `First argument to setTimeout must be a function` + TypeError, ); } }); diff --git a/tests/wpt-harness/wpt_builtins.cpp b/tests/wpt-harness/wpt_builtins.cpp index d62566b9..ce708243 100644 --- a/tests/wpt-harness/wpt_builtins.cpp +++ b/tests/wpt-harness/wpt_builtins.cpp @@ -10,9 +10,8 @@ static bool baseURL_set(JSContext *cx, unsigned argc, JS::Value *vp) { if (args.get(0).isNullOrUndefined()) { WorkerLocation::url.set(nullptr); } else if (!builtins::web::url::URL::is_instance(args.get(0))) { - JS_ReportErrorUTF8(cx, "Invalid value assigned to baseURL, must be an instance of " - "URL, null, or undefined"); - return false; + return api::throw_error(cx, api::Errors::TypeError, "baseURL setter", "value", + "be a URL object, null, or undefined"); } WorkerLocation::url.set(&args.get(0).toObject()); From 562e6b58cbd86849aead7cee91ed2141c333aeb4 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Tue, 25 Jun 2024 12:32:05 +0200 Subject: [PATCH 13/28] add builtin includes to error headers (#75) --- builtins/web/base64.cpp | 1 + builtins/web/fetch/fetch-errors.h | 2 ++ builtins/web/streams/stream-errors.h | 2 ++ builtins/web/text-codec/text-codec-errors.h | 2 ++ 4 files changed, 7 insertions(+) diff --git a/builtins/web/base64.cpp b/builtins/web/base64.cpp index 0f4579b6..49757fe1 100644 --- a/builtins/web/base64.cpp +++ b/builtins/web/base64.cpp @@ -1,5 +1,6 @@ #include "base64.h" #include "mozilla/Try.h" +#include "builtin.h" DEF_ERR(InvalidCharacterError, JSEXN_RANGEERR, "String contains an invalid character", 0) diff --git a/builtins/web/fetch/fetch-errors.h b/builtins/web/fetch/fetch-errors.h index 96a13ec0..b74403a0 100644 --- a/builtins/web/fetch/fetch-errors.h +++ b/builtins/web/fetch/fetch-errors.h @@ -1,6 +1,8 @@ #ifndef FETCH_ERRORS_H #define FETCH_ERRORS_H +#include "builtin.h" + namespace FetchErrors { DEF_ERR(FetchNetworkError, JSEXN_TYPEERR, "NetworkError when attempting to fetch resource", 0) DEF_ERR(InvalidRespondWithArg, JSEXN_TYPEERR, "FetchEvent#respondWith must be called with a Response " diff --git a/builtins/web/streams/stream-errors.h b/builtins/web/streams/stream-errors.h index 5e31e125..85c8b40a 100644 --- a/builtins/web/streams/stream-errors.h +++ b/builtins/web/streams/stream-errors.h @@ -1,6 +1,8 @@ #ifndef STREAM_ERRORS_H #define STREAM_ERRORS_H +#include "builtin.h" + namespace StreamErrors { DEF_ERR(CompressingChunkFailed, JSEXN_TYPEERR, "CompressionStream transform: error compressing chunk", 0) DEF_ERR(DecompressingChunkFailed, JSEXN_TYPEERR, "DecompressionStream transform: error decompressing chunk", 0) diff --git a/builtins/web/text-codec/text-codec-errors.h b/builtins/web/text-codec/text-codec-errors.h index 9d8256d6..a5a8b6a9 100644 --- a/builtins/web/text-codec/text-codec-errors.h +++ b/builtins/web/text-codec/text-codec-errors.h @@ -1,6 +1,8 @@ #ifndef TEXT_CODEC_ERRORS_H #define TEXT_CODEC_ERRORS_H +#include "builtin.h" + namespace TextCodecErrors { DEF_ERR(FetchNetworkError, JSEXN_TYPEERR, "NetworkError when attempting to fetch resource", 0) DEF_ERR(InvalidEncoding, JSEXN_RANGEERR, "TextDecoder constructor: The given encoding is not supported.", 0) From af6c533c82d741c3996f79c2cb0755761b2c475c Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Tue, 25 Jun 2024 22:10:26 +0200 Subject: [PATCH 14/28] feat: allow direct base64 call against HandleValue (#69) --- builtins/web/base64.cpp | 10 +++++----- builtins/web/base64.h | 3 ++- builtins/web/crypto/crypto-algorithm.cpp | 4 ++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/builtins/web/base64.cpp b/builtins/web/base64.cpp index 49757fe1..76106543 100644 --- a/builtins/web/base64.cpp +++ b/builtins/web/base64.cpp @@ -8,7 +8,7 @@ namespace builtins { namespace web { namespace base64 { -JS::Result convertJSValueToByteString(JSContext *cx, JS::Handle v) { +JS::Result valueToJSByteString(JSContext *cx, JS::Handle v) { JS::RootedString s(cx); if (v.isString()) { s = v.toString(); @@ -57,10 +57,10 @@ JS::Result convertJSValueToByteString(JSContext *cx, JS::Handle convertJSValueToByteString(JSContext *cx, std::string v) { +JS::Result stringToJSByteString(JSContext *cx, std::string v) { JS::RootedValue s(cx); s.setString(JS_NewStringCopyN(cx, v.c_str(), v.length())); - return convertJSValueToByteString(cx, s); + return valueToJSByteString(cx, s); } // Maps an encoded character to a value in the Base64 alphabet, per @@ -298,7 +298,7 @@ bool atob(JSContext *cx, unsigned argc, Value *vp) { if (!args.requireAtLeast(cx, "atob", 1)) { return false; } - auto dataResult = convertJSValueToByteString(cx, args.get(0)); + auto dataResult = valueToJSByteString(cx, args.get(0)); if (dataResult.isErr()) { return false; } @@ -407,7 +407,7 @@ bool btoa(JSContext *cx, unsigned argc, Value *vp) { // Note: We do not check if data contains any character whose code point is // greater than U+00FF before calling convertJSValueToByteString as // convertJSValueToByteString does the same check - auto byteStringResult = convertJSValueToByteString(cx, data); + auto byteStringResult = valueToJSByteString(cx, data); if (byteStringResult.isErr()) { return false; } diff --git a/builtins/web/base64.h b/builtins/web/base64.h index d72eb498..ece79139 100644 --- a/builtins/web/base64.h +++ b/builtins/web/base64.h @@ -17,7 +17,8 @@ extern const char base64URLEncodeTable[65]; std::string forgivingBase64Encode(std::string_view data, const char *encodeTable); JS::Result forgivingBase64Decode(std::string_view data, const uint8_t *decodeTable); -JS::Result convertJSValueToByteString(JSContext *cx, std::string v); +JS::Result valueToJSByteString(JSContext *cx, HandleValue v); +JS::Result stringToJSByteString(JSContext *cx, std::string v); } // namespace base64 } // namespace web diff --git a/builtins/web/crypto/crypto-algorithm.cpp b/builtins/web/crypto/crypto-algorithm.cpp index 353fe1ff..4ecb1e41 100644 --- a/builtins/web/crypto/crypto-algorithm.cpp +++ b/builtins/web/crypto/crypto-algorithm.cpp @@ -167,7 +167,7 @@ std::unique_ptr createRSAPublicKeyFromJWK(JSContext *cx, if (modulus.starts_with('0')) { modulus = modulus.erase(0, 1); } - auto dataResult = base64::convertJSValueToByteString(cx, jwk->e.value()); + auto dataResult = base64::stringToJSByteString(cx, jwk->e.value()); if (dataResult.isErr()) { DOMException::raise(cx, "Data provided to an operation does not meet requirements", "DataError"); @@ -259,7 +259,7 @@ std::unique_ptr createRSAPrivateKeyFromJWK(JSContext *cx if (modulus.starts_with('0')) { modulus = modulus.erase(0, 1); } - auto dataResult = base64::convertJSValueToByteString(cx, jwk->e.value()); + auto dataResult = base64::stringToJSByteString(cx, jwk->e.value()); if (dataResult.isErr()) { DOMException::raise(cx, "Data provided to an operation does not meet requirements", "DataError"); From d7c63482392bcde2882503f77d4ad75f85f36d50 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Wed, 26 Jun 2024 17:23:46 +0200 Subject: [PATCH 15/28] fix: support non-unique handles for timers (#71) --- builtins/web/timers.cpp | 47 +++++++++++++++++++++++++++-------------- include/extension-api.h | 2 +- runtime/engine.cpp | 4 ++-- runtime/event_loop.cpp | 7 +++--- runtime/event_loop.h | 2 +- 5 files changed, 38 insertions(+), 24 deletions(-) diff --git a/builtins/web/timers.cpp b/builtins/web/timers.cpp index a4659127..ee57e38f 100644 --- a/builtins/web/timers.cpp +++ b/builtins/web/timers.cpp @@ -12,14 +12,27 @@ #define S_TO_NS(s) ((s) * 1000000000) #define NS_TO_MS(ns) ((ns) / 1000000) +namespace { + +class TimersMap { +public: + std::map timers_ = {}; + int32_t next_timer_id = 1; + void trace(JSTracer *trc) { + for (auto& [id, timer] : timers_) { + timer->trace(trc); + } + } +}; + +} + +static PersistentRooted> TIMERS_MAP; static api::Engine *ENGINE; class TimerTask final : public api::AsyncTask { using TimerArgumentsVector = std::vector>; - static std::map timer_ids_; - static int32_t next_timer_id; - int32_t timer_id_; int64_t delay_; int64_t deadline_; @@ -40,8 +53,8 @@ class TimerTask final : public api::AsyncTask { } handle_ = host_api::MonotonicClock::subscribe(deadline_, true); - timer_id_ = next_timer_id++; - timer_ids_.emplace(timer_id_, handle_); + timer_id_ = TIMERS_MAP->next_timer_id++; + TIMERS_MAP->timers_.emplace(timer_id_, this); } [[nodiscard]] bool run(api::Engine *engine) override { @@ -68,17 +81,21 @@ class TimerTask final : public api::AsyncTask { host_api::MonotonicClock::unsubscribe(handle_); } - if (repeat_ && timer_ids_.contains(timer_id_)) { - deadline_ = host_api::MonotonicClock::now() + delay_; - handle_ = host_api::MonotonicClock::subscribe(deadline_, true); - engine->queue_async_task(this); + if (TIMERS_MAP->timers_.contains(timer_id_)) { + if (repeat_) { + deadline_ = host_api::MonotonicClock::now() + delay_; + handle_ = host_api::MonotonicClock::subscribe(deadline_, true); + engine->queue_async_task(this); + } else { + TIMERS_MAP->timers_.erase(timer_id_); + } } return true; } [[nodiscard]] bool cancel(api::Engine *engine) override { - if (!timer_ids_.contains(timer_id_)) { + if (!TIMERS_MAP->timers_.contains(timer_id_)) { return false; } @@ -103,19 +120,16 @@ class TimerTask final : public api::AsyncTask { } static bool clear(int32_t timer_id) { - if (!timer_ids_.contains(timer_id)) { + if (!TIMERS_MAP->timers_.contains(timer_id)) { return false; } - ENGINE->cancel_async_task(timer_ids_[timer_id]); - timer_ids_.erase(timer_id); + ENGINE->cancel_async_task(TIMERS_MAP->timers_[timer_id]); + TIMERS_MAP->timers_.erase(timer_id); return true; } }; -std::map TimerTask::timer_ids_ = {}; -int32_t TimerTask::next_timer_id = 1; - namespace builtins::web::timers { /** @@ -193,6 +207,7 @@ constexpr JSFunctionSpec methods[] = { bool install(api::Engine *engine) { ENGINE = engine; + TIMERS_MAP.init(engine->cx(), js::MakeUnique()); return JS_DefineFunctions(engine->cx(), engine->global(), methods); } diff --git a/include/extension-api.h b/include/extension-api.h index f18f993b..91c8d65e 100644 --- a/include/extension-api.h +++ b/include/extension-api.h @@ -109,7 +109,7 @@ class Engine { bool has_pending_async_tasks(); void queue_async_task(AsyncTask *task); - bool cancel_async_task(int32_t id); + bool cancel_async_task(AsyncTask *task); void abort(const char *reason); diff --git a/runtime/engine.cpp b/runtime/engine.cpp index a61c7192..fb77d103 100644 --- a/runtime/engine.cpp +++ b/runtime/engine.cpp @@ -506,6 +506,6 @@ bool api::Engine::debug_logging_enabled() { return ::debug_logging_enabled(); } bool api::Engine::has_pending_async_tasks() { return core::EventLoop::has_pending_async_tasks(); } void api::Engine::queue_async_task(AsyncTask *task) { core::EventLoop::queue_async_task(task); } -bool api::Engine::cancel_async_task(int32_t id) { - return core::EventLoop::cancel_async_task(this, id); +bool api::Engine::cancel_async_task(AsyncTask *task) { + return core::EventLoop::cancel_async_task(this, task); } diff --git a/runtime/event_loop.cpp b/runtime/event_loop.cpp index 6e95cbb1..bf3393bd 100644 --- a/runtime/event_loop.cpp +++ b/runtime/event_loop.cpp @@ -28,13 +28,12 @@ void EventLoop::queue_async_task(api::AsyncTask *task) { queue.get().tasks.emplace_back(task); } -bool EventLoop::cancel_async_task(api::Engine *engine, const int32_t id) { +bool EventLoop::cancel_async_task(api::Engine *engine, api::AsyncTask *task) { const auto tasks = &queue.get().tasks; for (auto it = tasks->begin(); it != tasks->end(); ++it) { - const auto task = *it; - if (task->id() == id) { - task->cancel(engine); + if (*it == task) { tasks->erase(it); + task->cancel(engine); return true; } } diff --git a/runtime/event_loop.h b/runtime/event_loop.h index 5f145c5a..40b3696d 100644 --- a/runtime/event_loop.h +++ b/runtime/event_loop.h @@ -46,7 +46,7 @@ class EventLoop { /** * Remove a queued async task. */ - static bool cancel_async_task(api::Engine *engine, int32_t id); + static bool cancel_async_task(api::Engine *engine, api::AsyncTask *task); }; } // namespace core From eb85b8f740bfd062380ff60b9ae8ab4a5306cedd Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Wed, 29 May 2024 15:38:45 -0700 Subject: [PATCH 16/28] feat: single-tick non-tracking event loop runner --- builtins/web/fetch/request-response.cpp | 4 ---- host-apis/wasi-0.2.0/host_api.cpp | 12 ++++++++++ include/extension-api.h | 5 ++++ runtime/event_loop.cpp | 31 ++++++++++++++++++------- 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/builtins/web/fetch/request-response.cpp b/builtins/web/fetch/request-response.cpp index 8c45e58d..548e5ad6 100644 --- a/builtins/web/fetch/request-response.cpp +++ b/builtins/web/fetch/request-response.cpp @@ -990,10 +990,6 @@ bool reader_for_outgoing_body_catch_handler(JSContext *cx, JS::HandleObject body // `responseDone`. (Note that even though we encountered an error, // `responseDone` is the right state: `respondedWithError` is for when sending // a response at all failed.) - // TODO(TS): investigate why this is disabled. - // if (Response::is_instance(body_owner)) { - // FetchEvent::set_state(FetchEvent::instance(), FetchEvent::State::responseDone); - // } return finish_outgoing_body_streaming(cx, body_owner); } diff --git a/host-apis/wasi-0.2.0/host_api.cpp b/host-apis/wasi-0.2.0/host_api.cpp index 4e6410b2..b9ef6644 100644 --- a/host-apis/wasi-0.2.0/host_api.cpp +++ b/host-apis/wasi-0.2.0/host_api.cpp @@ -263,6 +263,18 @@ size_t api::AsyncTask::select(std::vector &tasks) { return ready_index; } +std::optional api::AsyncTask::ready(std::vector &tasks) { + auto count = tasks.size(); + for (size_t idx = 0; idx < count; ++idx) { + auto task = tasks.at(idx); + WASIHandle::Borrowed poll = { task->id() }; + if (wasi_io_0_2_0_poll_method_pollable_ready(poll)) { + return idx; + } + } + return std::nullopt; +} + namespace host_api { HostString::HostString(const char *c_str) { diff --git a/include/extension-api.h b/include/extension-api.h index 91c8d65e..7cfddd08 100644 --- a/include/extension-api.h +++ b/include/extension-api.h @@ -149,6 +149,11 @@ class AsyncTask { * Select for the next available ready task, providing the oldest ready first. */ static size_t select(std::vector &handles); + + /** + * Non-blocking check for a ready task, providing the oldest ready first, if any. + */ + static std::optional ready(std::vector &handles); }; } // namespace api diff --git a/runtime/event_loop.cpp b/runtime/event_loop.cpp index bf3393bd..bfd3914a 100644 --- a/runtime/event_loop.cpp +++ b/runtime/event_loop.cpp @@ -61,7 +61,7 @@ bool EventLoop::run_event_loop(api::Engine *engine, double total_compute) { queue.get().event_loop_running = true; JSContext *cx = engine->cx(); - while (true) { + do { // Run a microtask checkpoint js::RunJobs(cx); @@ -69,24 +69,34 @@ bool EventLoop::run_event_loop(api::Engine *engine, double total_compute) { exit_event_loop(); return false; } - // if there is no interest in the event loop at all, just run one tick - if (interest_complete()) { - exit_event_loop(); - return true; - } const auto tasks = &queue.get().tasks; size_t tasks_size = tasks->size(); + if (tasks_size == 0) { + if (interest_complete()) { + break; + } exit_event_loop(); - MOZ_ASSERT(!interest_complete()); fprintf(stderr, "event loop error - both task and job queues are empty, but expected " "operations did not resolve"); return false; } + size_t task_idx; + // Select the next task to run according to event-loop semantics of oldest-first. - size_t task_idx = api::AsyncTask::select(*tasks); + if (interest_complete()) { + // Perform a non-blocking select in the case of there being no event loop interest + // (we are thus only performing a "single tick", but must still progress work that is ready) + std::optional maybe_task_idx = api::AsyncTask::ready(*tasks); + if (!maybe_task_idx.has_value()) { + break; + } + task_idx = maybe_task_idx.value(); + } else { + task_idx = api::AsyncTask::select(*tasks); + } auto task = tasks->at(task_idx); tasks->erase(tasks->begin() + task_idx); @@ -95,7 +105,10 @@ bool EventLoop::run_event_loop(api::Engine *engine, double total_compute) { exit_event_loop(); return false; } - } + } while (!interest_complete()); + + exit_event_loop(); + return true; } void EventLoop::init(JSContext *cx) { queue.init(cx); } From fa1247bf553470ff04ed9e9f45a0c17b426c7f7d Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Thu, 11 Jul 2024 18:46:15 +0200 Subject: [PATCH 17/28] fix: wasm32-wasi install for toolchain (#76) --- cmake/init-corrosion.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/init-corrosion.cmake b/cmake/init-corrosion.cmake index a73fd84a..05fac229 100644 --- a/cmake/init-corrosion.cmake +++ b/cmake/init-corrosion.cmake @@ -9,7 +9,7 @@ set(Rust_CARGO_TARGET_LINK_NATIVE_LIBS "") file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/rust-toolchain.toml" Rust_TOOLCHAIN REGEX "^channel ?=") string(REGEX MATCH "[0-9.]+" Rust_TOOLCHAIN "${Rust_TOOLCHAIN}") execute_process(COMMAND rustup toolchain install ${Rust_TOOLCHAIN}) -execute_process(COMMAND rustup target add wasm32-wasi) +execute_process(COMMAND rustup target add --toolchain ${Rust_TOOLCHAIN} wasm32-wasi) CPMAddPackage("gh:corrosion-rs/corrosion#be76480232216a64f65e3b1d9794d68cbac6c690") string(TOLOWER ${Rust_CARGO_HOST_ARCH} HOST_ARCH) From 9f4f9b5b44b8ee7e87ad1d011fafc81017ae9eeb Mon Sep 17 00:00:00 2001 From: Jake Champion Date: Tue, 16 Jul 2024 16:31:22 +0100 Subject: [PATCH 18/28] Update to SpiderMonkey v127.0.2 (#77) * Update to SpiderMonkey v127.0.2 This commit comes from https://github.com/bytecodealliance/spidermonkey-wasi-embedding/pull/13 * Update main.yml * always use link-time-optimisations for rust-url dependency --- .github/workflows/main.yml | 6 +++--- cmake/spidermonkey.cmake | 2 +- crates/rust-url/Cargo.toml | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5c2b3f22..20064bac 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,10 +28,10 @@ jobs: with: submodules: recursive - - name: Install Rust 1.68.2 + - name: Install Rust 1.77.1 run: | - rustup toolchain install 1.68.2 - rustup target add wasm32-wasi --toolchain 1.68.2 + rustup toolchain install 1.77.1 + rustup target add wasm32-wasi --toolchain 1.77.1 - uses: actions/setup-node@v2 with: diff --git a/cmake/spidermonkey.cmake b/cmake/spidermonkey.cmake index 8d7b0d12..475a358a 100644 --- a/cmake/spidermonkey.cmake +++ b/cmake/spidermonkey.cmake @@ -1,4 +1,4 @@ -set(SM_REV 702095ed0ba2316b4f2905bbd597d0b2fa23951e) +set(SM_REV ffbf1c4641440e74174199def6558c710b3ac323) if (CMAKE_BUILD_TYPE STREQUAL "Debug") set(SM_BUILD_TYPE debug) diff --git a/crates/rust-url/Cargo.toml b/crates/rust-url/Cargo.toml index c8361f3e..6d1ecf90 100644 --- a/crates/rust-url/Cargo.toml +++ b/crates/rust-url/Cargo.toml @@ -14,4 +14,5 @@ lto = true panic = 'abort' [profile.dev] +lto = true panic = 'abort' From 2a4c3f55e62643adef398247e56b569205f7a5cc Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Fri, 19 Jul 2024 17:00:42 +0200 Subject: [PATCH 19/28] fix: encodings in header values (#79) --- builtins/web/fetch/headers.cpp | 2 +- tests/integration/handlers.js | 1 + tests/integration/headers/headers.js | 9 +++++++++ tests/tests.cmake | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 tests/integration/headers/headers.js diff --git a/builtins/web/fetch/headers.cpp b/builtins/web/fetch/headers.cpp index 98001031..c682bc0a 100644 --- a/builtins/web/fetch/headers.cpp +++ b/builtins/web/fetch/headers.cpp @@ -189,7 +189,7 @@ bool retrieve_value_for_header_from_handle(JSContext *cx, JS::HandleObject self, RootedString res_str(cx); RootedString val_str(cx); for (auto &str : values.value()) { - val_str = JS_NewStringCopyUTF8N(cx, JS::UTF8Chars(str.ptr.get(), str.len)); + val_str = JS_NewStringCopyN(cx, reinterpret_cast(str.ptr.get()), str.len); if (!val_str) { return false; } diff --git a/tests/integration/handlers.js b/tests/integration/handlers.js index 0964ab35..fbc0bfdf 100644 --- a/tests/integration/handlers.js +++ b/tests/integration/handlers.js @@ -2,3 +2,4 @@ export { handler as btoa } from './btoa/btoa.js'; export { handler as performance } from './performance/performance.js'; export { handler as crypto } from './crypto/crypto.js'; export { handler as timers } from './timers/timers.js'; +export { handler as headers } from './headers/headers.js'; diff --git a/tests/integration/headers/headers.js b/tests/integration/headers/headers.js new file mode 100644 index 00000000..bccc8293 --- /dev/null +++ b/tests/integration/headers/headers.js @@ -0,0 +1,9 @@ +import { serveTest } from '../test-server.js'; +import { strictEqual } from '../assert.js'; + +export const handler = serveTest(async (t) => { + await t.test('non-ascii-latin1-field-value', async () => { + const response = await fetch("https://http-me.glitch.me/meow?header=cat:é"); + strictEqual(response.headers.get('cat'), "é"); + }); +}); diff --git a/tests/tests.cmake b/tests/tests.cmake index 04d21644..477e5070 100644 --- a/tests/tests.cmake +++ b/tests/tests.cmake @@ -38,4 +38,5 @@ test_e2e(tla-runtime-resolve) test_integration(btoa) test_integration(performance) test_integration(crypto) +test_integration(headers) test_integration(timers) From 4af47a706275bbf26348d68db9fc96a0ddf9e000 Mon Sep 17 00:00:00 2001 From: Jake Champion Date: Wed, 24 Jul 2024 14:48:04 +0100 Subject: [PATCH 20/28] Update openssl url to new location (#82) it looks like openssl broke their links when they launched their new website? https://www.openssl.org/source/openssl-3.0.7.tar.gz 404s and is now at https://openssl.org/source/old/3.0/openssl-3.0.7.tar.gz --- cmake/openssl.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/openssl.cmake b/cmake/openssl.cmake index 8dc41620..e7d6732e 100644 --- a/cmake/openssl.cmake +++ b/cmake/openssl.cmake @@ -7,7 +7,7 @@ include(ExternalProject) ExternalProject_Add( OpenSSL SOURCE_DIR ${OPENSSL_SOURCE_DIR} - URL https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz + URL https://openssl.org/source/old/3.0/openssl-${OPENSSL_VERSION}.tar.gz URL_HASH SHA256=83049d042a260e696f62406ac5c08bf706fd84383f945cf21bd61e9ed95c396e USES_TERMINAL_DOWNLOAD TRUE PATCH_COMMAND From 102ffbe0e9110e051634caf39ef32f8472e34525 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Wed, 24 Jul 2024 20:26:49 +0200 Subject: [PATCH 21/28] fix: headers refactoring and state transition invariants (#80) --- builtins/web/fetch/headers.cpp | 51 +++++++++++++--------------------- builtins/web/fetch/headers.h | 2 +- 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/builtins/web/fetch/headers.cpp b/builtins/web/fetch/headers.cpp index c682bc0a..064f82fd 100644 --- a/builtins/web/fetch/headers.cpp +++ b/builtins/web/fetch/headers.cpp @@ -283,18 +283,12 @@ static bool switch_mode(JSContext* cx, HandleObject self, const Headers::Mode mo } if (current_mode == Headers::Mode::Uninitialized) { - if (mode == Headers::Mode::ContentOnly) { - RootedObject map(cx, JS::NewMapObject(cx)); - if (!map) { - return false; - } - SetReservedSlot(self, static_cast(Headers::Slots::Entries), ObjectValue(*map)); - } else { - MOZ_ASSERT(mode == Headers::Mode::HostOnly); - auto handle = new host_api::HttpHeaders(Headers::guard(self)); - SetReservedSlot(self, static_cast(Headers::Slots::Handle), PrivateValue(handle)); + MOZ_ASSERT(mode == Headers::Mode::ContentOnly); + RootedObject map(cx, JS::NewMapObject(cx)); + if (!map) { + return false; } - + SetReservedSlot(self, static_cast(Headers::Slots::Entries), ObjectValue(*map)); SetReservedSlot(self, static_cast(Headers::Slots::Mode), JS::Int32Value(static_cast(mode))); return true; } @@ -403,8 +397,6 @@ static bool switch_mode(JSContext* cx, HandleObject self, const Headers::Mode mo auto handle = get_handle(self); delete handle; SetReservedSlot(self, static_cast(Headers::Slots::Handle), PrivateValue(nullptr)); - SetReservedSlot(self, static_cast(Headers::Slots::Mode), - JS::Int32Value(static_cast(Headers::Mode::CachedInContent))); } SetReservedSlot(self, static_cast(Headers::Slots::Mode), @@ -519,14 +511,6 @@ bool Headers::append_header_value(JSContext *cx, JS::HandleObject self, JS::Hand return true; } -void init_from_handle(JSObject* self, host_api::HttpHeadersReadOnly* handle) { - MOZ_ASSERT(Headers::is_instance(self)); - MOZ_ASSERT(Headers::mode(self) == Headers::Mode::Uninitialized); - SetReservedSlot(self, static_cast(Headers::Slots::Mode), - JS::Int32Value(static_cast(Headers::Mode::HostOnly))); - SetReservedSlot(self, static_cast(Headers::Slots::Handle), PrivateValue(handle)); -} - JSObject *Headers::create(JSContext *cx, host_api::HttpHeadersGuard guard) { JSObject* self = JS_NewObjectWithGivenProto(cx, &class_, proto_obj); if (!self) { @@ -546,7 +530,10 @@ JSObject *Headers::create(JSContext *cx, host_api::HttpHeadersReadOnly *handle, return nullptr; } - init_from_handle(self, handle); + MOZ_ASSERT(Headers::mode(self) == Headers::Mode::Uninitialized); + SetReservedSlot(self, static_cast(Headers::Slots::Mode), + JS::Int32Value(static_cast(Headers::Mode::HostOnly))); + SetReservedSlot(self, static_cast(Headers::Slots::Handle), PrivateValue(handle)); return self; } @@ -555,24 +542,28 @@ JSObject *Headers::create(JSContext *cx, HandleValue init_headers, host_api::Htt if (!self) { return nullptr; } - return init_entries(cx, self, init_headers); + if (!init_entries(cx, self, init_headers)) { + return nullptr; + } + MOZ_ASSERT(mode(self) == Headers::Mode::ContentOnly || mode(self) == Headers::Mode::Uninitialized); + return self; } -JSObject *Headers::init_entries(JSContext *cx, HandleObject self, HandleValue initv) { +bool Headers::init_entries(JSContext *cx, HandleObject self, HandleValue initv) { // TODO: check if initv is a Headers instance and clone its handle if so. // TODO: But note: forbidden headers have to be applied correctly. bool consumed = false; if (!core::maybe_consume_sequence_or_record(cx, initv, self, &consumed, "Headers")) { - return nullptr; + return false; } if (!consumed) { api::throw_error(cx, api::Errors::InvalidSequence, "Headers", ""); - return nullptr; + return false; } - return self; + return true; } bool Headers::get(JSContext *cx, unsigned argc, JS::Value *vp) { @@ -879,12 +870,10 @@ bool Headers::constructor(JSContext *cx, unsigned argc, JS::Value *vp) { } SetReservedSlot(headersInstance, static_cast(Slots::Guard), JS::Int32Value(static_cast(host_api::HttpHeadersGuard::None))); - JS::RootedObject headers(cx, init_entries(cx, headersInstance, headersInit)); - if (!headers) { + if (!init_entries(cx, headersInstance, headersInit)) { return false; } - - args.rval().setObject(*headers); + args.rval().setObject(*headersInstance); return true; } diff --git a/builtins/web/fetch/headers.h b/builtins/web/fetch/headers.h index ab4fd10c..3beba950 100644 --- a/builtins/web/fetch/headers.h +++ b/builtins/web/fetch/headers.h @@ -111,7 +111,7 @@ class Headers final : public BuiltinImpl { static JSObject *create(JSContext *cx, host_api::HttpHeadersReadOnly *handle, host_api::HttpHeadersGuard guard); - static JSObject *init_entries(JSContext *cx, HandleObject self, HandleValue init_headers); + static bool init_entries(JSContext *cx, HandleObject self, HandleValue init_headers); /// Returns a Map object containing the headers. /// From cc351f231f6f884b157defde60656fd039cf5cbc Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Thu, 25 Jul 2024 19:17:01 +0200 Subject: [PATCH 22/28] ci: run WPT tests on CI (#81) --- .github/workflows/main.yml | 36 +- .gitmodules | 0 README.md | 28 +- cmake/wasmtime.cmake | 3 +- deps/wpt-hosts | 62 + .../WebCryptoAPI/getRandomValues.any.js.json | 3 + .../WebCryptoAPI/idlharness.https.any.js.json | 6 +- .../ec_importKey.https.any.js.json | 342 + ...on-constructor-error.tentative.any.js.json | 11 + ...compression-large-flush-output.any.js.json | 11 + .../compression-stream.tentative.any.js.json | 2 +- ...ression-buffersource.tentative.any.js.json | 9 + ...ession-corrupt-input.tentative.any.js.json | 4 +- .../console/console-log-symbol.any.js.json | 5 + .../encoding/api-invalid-label.any.js.json | 10266 +++++++- .../api-replacement-encodings.any.js.json | 20 + .../encoding/encodeInto.any.js.json | 6 + .../encoding/idlharness.any.js.json | 6 +- .../textdecoder-fatal-single-byte.any.js.json | 21506 ++++++++++++++++ .../encoding/textdecoder-labels.any.js.json | 668 + .../fetch/api/abort/general.any.js.json | 161 + .../fetch/api/abort/request.any.js.json | 56 + .../basic/header-value-null-byte.any.js.json | 2 +- .../fetch/api/basic/integrity.sub.any.js.json | 2 +- .../fetch/api/basic/keepalive.any.js.json | 20 + .../api/basic/mode-same-origin.any.js.json | 26 + .../request-forbidden-headers.any.js.json | 3 - .../fetch/api/basic/request-head.any.js.json | 2 +- .../request-headers-nonascii.any.js.json | 2 +- .../api/basic/request-headers.any.js.json | 3 + .../api/basic/request-upload.any.js.json | 13 +- .../api/basic/request-upload.h2.any.js.json | 35 - .../api/basic/response-null-body.any.js.json | 35 + .../fetch/api/basic/status.h2.any.js.json | 23 + .../fetch/api/body/cloned-any.js.json | 17 + .../fetch/api/body/formdata.any.js.json | 11 + .../api/headers/header-setcookie.any.js.json | 74 + .../header-values-normalize.any.js.json | 6 +- .../api/headers/header-values.any.js.json | 6 +- .../api/headers/headers-basic.any.js.json | 2 +- .../api/headers/headers-errors.any.js.json | 28 +- .../api/headers/headers-no-cors.any.js.json | 83 + ...direct-back-to-original-origin.any.js.json | 8 + .../api/redirect/redirect-count.any.js.json | 32 + .../redirect-empty-location.any.js.json | 8 + .../redirect/redirect-keepalive.any.js.json | 20 + .../redirect-keepalive.https.any.js.json | 5 + ...rect-location-escape.tentative.any.js.json | 17 + .../redirect/redirect-location.any.js.json | 167 + .../api/redirect/redirect-method.any.js.json | 47 + .../api/redirect/redirect-mode.any.js.json | 185 + .../api/redirect/redirect-origin.any.js.json | 122 + .../redirect-referrer-override.any.js.json | 386 + .../redirect/redirect-referrer.any.js.json | 98 + .../api/redirect/redirect-schemes.any.js.json | 20 + .../redirect/redirect-to-dataurl.any.js.json | 17 + .../redirect/redirect-upload.h2.any.js.json | 17 + ...constructor-init-body-override.any.js.json | 5 + .../api/request/request-consume.any.js.json | 21 + .../api/request/request-error.any.js.json | 2 +- .../api/request/request-headers.any.js.json | 3 - .../request/request-init-priority.any.js.json | 26 + .../request/request-init-stream.any.js.json | 12 +- .../api/request/request-structure.any.js.json | 2 +- .../response/response-blob-realm.any.js.json | 5 + .../response-error-from-stream.any.js.json | 6 + .../api/response/response-error.any.js.json | 16 +- .../response/response-from-stream.any.js.json | 6 +- .../response-headers-guard.any.js.json | 5 + .../response-static-error.any.js.json | 3 - .../response/response-static-json.any.js.json | 22 +- .../response-stream-bad-chunk.any.js.json | 20 + .../response-stream-disturbed-2.any.js.json | 12 +- .../response-stream-disturbed-3.any.js.json | 12 +- .../fetch/data-urls/base64.any.js.json | 245 + .../fetch/data-urls/processing.any.js.json | 221 + .../structured-clone.any.js.json | 14 +- .../streams/idlharness.any.js.json | 689 + .../piping/general-addition.any.js.json | 5 + .../enqueue-with-detached-buffer.any.js.json | 5 + .../non-transferable-buffers.any.js.json | 14 + .../read-min.any.js.json | 74 + .../async-iterator.any.js.json | 125 + .../readable-streams/cancel.any.js.json | 3 + .../streams/readable-streams/from.any.js.json | 119 + .../owning-type-message-port.any.js.json | 8 + .../owning-type-video-frame.any.js.json | 17 + .../readable-streams/owning-type.any.js.json | 17 + .../transform-streams/cancel.any.js.json | 23 + .../transform-streams/errors.any.js.json | 7 +- .../transform-streams/flush.any.js.json | 3 + .../transform-streams/general.any.js.json | 5 +- .../reentrant-strategies.any.js.json | 2 +- .../transform-streams/terminate.any.js.json | 8 +- .../expectations/url/historical.any.js.json | 23 + .../url/url-constructor.any.js.json | 610 +- .../expectations/url/url-origin.any.js.json | 15 +- .../expectations/url/url-setters.any.js.json | 18 +- .../url/url-statics-canparse.any.js.json | 23 + .../url/url-statics-parse.any.js.json | 26 + .../urlsearchparams-constructor.any.js.json | 2 +- .../url/urlsearchparams-delete.any.js.json | 5 +- .../url/urlsearchparams-has.any.js.json | 3 + .../url/urlsearchparams-size.any.js.json | 14 + tests/wpt-harness/run-wpt.mjs | 17 +- tests/wpt-harness/tests.json | 69 +- tests/wpt-harness/wpt.cmake | 22 +- 107 files changed, 36930 insertions(+), 452 deletions(-) create mode 100644 .gitmodules create mode 100644 deps/wpt-hosts create mode 100644 tests/wpt-harness/expectations/compression/compression-constructor-error.tentative.any.js.json create mode 100644 tests/wpt-harness/expectations/compression/compression-large-flush-output.any.js.json create mode 100644 tests/wpt-harness/expectations/console/console-log-symbol.any.js.json create mode 100644 tests/wpt-harness/expectations/encoding/api-replacement-encodings.any.js.json create mode 100644 tests/wpt-harness/expectations/encoding/textdecoder-fatal-single-byte.any.js.json create mode 100644 tests/wpt-harness/expectations/encoding/textdecoder-labels.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/abort/general.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/abort/request.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/basic/keepalive.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/basic/mode-same-origin.any.js.json delete mode 100644 tests/wpt-harness/expectations/fetch/api/basic/request-upload.h2.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/basic/response-null-body.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/basic/status.h2.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/body/cloned-any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/body/formdata.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/headers/header-setcookie.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/headers/headers-no-cors.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-back-to-original-origin.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-count.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-empty-location.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-keepalive.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-keepalive.https.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-location-escape.tentative.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-location.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-method.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-mode.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-origin.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-referrer-override.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-referrer.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-schemes.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-to-dataurl.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/redirect/redirect-upload.h2.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/request/request-constructor-init-body-override.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/request/request-init-priority.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/response/response-blob-realm.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/response/response-headers-guard.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/api/response/response-stream-bad-chunk.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/data-urls/base64.any.js.json create mode 100644 tests/wpt-harness/expectations/fetch/data-urls/processing.any.js.json create mode 100644 tests/wpt-harness/expectations/streams/idlharness.any.js.json create mode 100644 tests/wpt-harness/expectations/streams/piping/general-addition.any.js.json create mode 100644 tests/wpt-harness/expectations/streams/readable-byte-streams/enqueue-with-detached-buffer.any.js.json create mode 100644 tests/wpt-harness/expectations/streams/readable-byte-streams/non-transferable-buffers.any.js.json create mode 100644 tests/wpt-harness/expectations/streams/readable-byte-streams/read-min.any.js.json create mode 100644 tests/wpt-harness/expectations/streams/readable-streams/async-iterator.any.js.json create mode 100644 tests/wpt-harness/expectations/streams/readable-streams/from.any.js.json create mode 100644 tests/wpt-harness/expectations/streams/readable-streams/owning-type-message-port.any.js.json create mode 100644 tests/wpt-harness/expectations/streams/readable-streams/owning-type-video-frame.any.js.json create mode 100644 tests/wpt-harness/expectations/streams/readable-streams/owning-type.any.js.json create mode 100644 tests/wpt-harness/expectations/streams/transform-streams/cancel.any.js.json create mode 100644 tests/wpt-harness/expectations/url/historical.any.js.json create mode 100644 tests/wpt-harness/expectations/url/url-statics-canparse.any.js.json create mode 100644 tests/wpt-harness/expectations/url/url-statics-parse.any.js.json create mode 100644 tests/wpt-harness/expectations/url/urlsearchparams-size.any.js.json diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 20064bac..f923475e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -25,8 +25,6 @@ jobs: runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - with: - submodules: recursive - name: Install Rust 1.77.1 run: | @@ -45,3 +43,37 @@ jobs: - name: StarlingMonkey E2E & Integration Tests run: | CTEST_OUTPUT_ON_FAILURE=1 ctest --test-dir cmake-build-debug -j4 + + wpt: + name: Web Platform Tests + strategy: + matrix: + build: [release] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Install Rust 1.77.1 + run: | + rustup toolchain install 1.77.1 + rustup target add wasm32-wasi --toolchain 1.77.1 + + - uses: actions/setup-node@v2 + with: + node-version: 'lts/*' + + - name: Build StarlingMonkey WPT + run: | + cmake -S . -B cmake-build-${{ matrix.build }} -DENABLE_WPT:BOOL=ON -DCMAKE_BUILD_TYPE=${{ matrix.build == 'release' && 'Release' || 'Debug' }} + cmake --build cmake-build-${{ matrix.build }} --parallel 4 --target wpt-runtime + + - name: Prepare WPT hosts + run: | + cat deps/wpt-hosts | sudo tee -a /etc/hosts + + - name: StarlingMonkey WPT Test + env: + CTEST_OUTPUT_ON_FAILURE: 1 + run: ctest -R wpt --test-dir cmake-build-${{ matrix.build }} --verbose diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..e69de29b diff --git a/README.md b/README.md index 4decfb3d..5929d292 100644 --- a/README.md +++ b/README.md @@ -73,33 +73,41 @@ cd cmake-build-release ./componentize.sh ../tests/smoke.js ``` +## Web Platform Tests -## Thorough testing with the Web Platform Tests suite +To run the [Web Platform Tests](https://web-platform-tests.org/) suite, the WPT runner requires `Node.js` to be installed, and during build configuration the option `ENABLE_WPT:BOOL=ON` must be set. -StarlingMonkey includes a test runner for the [Web Platform Tests](https://web-platform-tests.org/) suite. The test runner is built as part of the `starling.wasm` runtime, and can be run using the `wpt-test` target. +```bash +cmake -S . -B cmake-build-debug -DENABLE_WPT:BOOL=ON -DCMAKE_BUILD_TYPE=Debug +cmake --build cmake-build-debug --parallel 8 --target wpt-runtime +cd cmake-build-debug +ctest -R wpt --verbose # Note: some of the tests run fairly slowly in debug builds, so be patient +``` + +The Web Platform Tests checkout can also be customized by setting the `WPT_ROOT=[path to your WPT checkout]` environment variable to the cmake command. -### Requirements +WPT tests can be filtered with the `WPT_FILTER=string` variable, for example: -The WPT runner requires `Node.js` to be installed, and during build configuration the option `ENABLE_WPT:BOOL=ON` must be set. +```bash +WPT_FILTER=fetch ctest -R wpt -v +``` -When running the test, `WPT_ROOT` must be set to the path of a checkout of the WPT suite at revision `1014eae5e66f8f334610d5a1521756f7a2fb769f`: +Custom flags can also be passed to the test runner via `WPT_FLAGS="..."`, for example to update expectations use: ```bash -WPT_ROOT=[path to your WPT checkout] cmake -S . -B cmake-build-debug -DENABLE_WPT:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -cmake --build cmake-build-debug --parallel 8 --target wpt-runtime -cd cmake-build-debug -ctest --verbose # Note: some of the tests run fairly slowly in debug builds, so be patient +WPT_FLAGS="--update-expectations" ctest -R wpt -v ``` ## Configuring available builtins + StarlingMonkey supports enabling/disabling bundled builtins using CMake options. You can get a full list of bundled builtins by running the following shell command: + ```shell cmake -P [PATH_TO_STARLING_MONKEY]/cmake/builtins.cmake ``` Note that it's required to include builtins defining all exports defined by the used host API. Using the default WASI 0.2.0 host API, that means including the `fetch_event` builtin. - ## Using StarlingMonkey as a CMake sub-project StarlingMonkey can be used as a subproject in a larger CMake project. diff --git a/cmake/wasmtime.cmake b/cmake/wasmtime.cmake index 47d4fa11..f0444e41 100644 --- a/cmake/wasmtime.cmake +++ b/cmake/wasmtime.cmake @@ -1,4 +1,5 @@ set(WASMTIME_VERSION v19.0.2) set(WASMTIME_URL https://github.com/bytecodealliance/wasmtime/releases/download/${WASMTIME_VERSION}/wasmtime-${WASMTIME_VERSION}-${HOST_ARCH}-${HOST_OS}.tar.xz) CPMAddPackage(NAME wasmtime URL ${WASMTIME_URL} DOWNLOAD_ONLY TRUE) -set(WASMTIME ${CPM_PACKAGE_wasmtime_SOURCE_DIR}/wasmtime) +set(WASMTIME_DIR ${CPM_PACKAGE_wasmtime_SOURCE_DIR}) +set(WASMTIME ${WASMTIME_DIR}/wasmtime) diff --git a/deps/wpt-hosts b/deps/wpt-hosts new file mode 100644 index 00000000..5d56a62e --- /dev/null +++ b/deps/wpt-hosts @@ -0,0 +1,62 @@ +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.not-web-platform.test +127.0.0.1 www1.not-web-platform.test +127.0.0.1 web-platform.test +127.0.0.1 xn--lve-6lad.www1.web-platform.test +127.0.0.1 xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test +127.0.0.1 www1.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.www.web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.web-platform.test +127.0.0.1 www1.web-platform.test +127.0.0.1 xn--lve-6lad.www.web-platform.test +127.0.0.1 xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.web-platform.test +127.0.0.1 xn--lve-6lad.xn--lve-6lad.not-web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.web-platform.test +127.0.0.1 www1.xn--lve-6lad.not-web-platform.test +127.0.0.1 xn--lve-6lad.xn--lve-6lad.web-platform.test +127.0.0.1 xn--lve-6lad.www2.web-platform.test +127.0.0.1 www.not-web-platform.test +127.0.0.1 www2.www1.not-web-platform.test +127.0.0.1 www1.www2.not-web-platform.test +127.0.0.1 not-web-platform.test +127.0.0.1 xn--lve-6lad.not-web-platform.test +127.0.0.1 www2.not-web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.www1.web-platform.test +127.0.0.1 www1.xn--n8j6ds53lwwkrqhv28a.web-platform.test +127.0.0.1 www.www1.not-web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.www.not-web-platform.test +127.0.0.1 www1.www.web-platform.test +127.0.0.1 www.xn--lve-6lad.web-platform.test +127.0.0.1 www2.www.web-platform.test +127.0.0.1 www.web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.www1.not-web-platform.test +127.0.0.1 xn--lve-6lad.www.not-web-platform.test +127.0.0.1 www.www1.web-platform.test +127.0.0.1 www2.xn--lve-6lad.web-platform.test +127.0.0.1 www.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test +127.0.0.1 www2.www1.web-platform.test +127.0.0.1 www2.www2.web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.not-web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.www2.not-web-platform.test +127.0.0.1 xn--lve-6lad.www1.not-web-platform.test +127.0.0.1 www2.www.not-web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.www2.web-platform.test +127.0.0.1 www2.web-platform.test +127.0.0.1 www.www2.not-web-platform.test +127.0.0.1 www.xn--n8j6ds53lwwkrqhv28a.web-platform.test +127.0.0.1 www1.www1.not-web-platform.test +127.0.0.1 www.www.not-web-platform.test +127.0.0.1 xn--lve-6lad.web-platform.test +127.0.0.1 www1.www.not-web-platform.test +127.0.0.1 xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.web-platform.test +127.0.0.1 xn--lve-6lad.www2.not-web-platform.test +127.0.0.1 www.www2.web-platform.test +127.0.0.1 www2.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test +127.0.0.1 www.xn--lve-6lad.not-web-platform.test +127.0.0.1 www1.xn--lve-6lad.web-platform.test +127.0.0.1 www.www.web-platform.test +127.0.0.1 www2.xn--lve-6lad.not-web-platform.test +127.0.0.1 www1.www1.web-platform.test +127.0.0.1 www1.www2.web-platform.test +127.0.0.1 www2.www2.not-web-platform.test +127.0.0.1 www2.xn--n8j6ds53lwwkrqhv28a.web-platform.test \ No newline at end of file diff --git a/tests/wpt-harness/expectations/WebCryptoAPI/getRandomValues.any.js.json b/tests/wpt-harness/expectations/WebCryptoAPI/getRandomValues.any.js.json index 42c44670..877f4a9f 100644 --- a/tests/wpt-harness/expectations/WebCryptoAPI/getRandomValues.any.js.json +++ b/tests/wpt-harness/expectations/WebCryptoAPI/getRandomValues.any.js.json @@ -1,4 +1,7 @@ { + "Float16 arrays": { + "status": "PASS" + }, "Float arrays": { "status": "PASS" }, diff --git a/tests/wpt-harness/expectations/WebCryptoAPI/idlharness.https.any.js.json b/tests/wpt-harness/expectations/WebCryptoAPI/idlharness.https.any.js.json index 32f0e4bd..35e383e6 100644 --- a/tests/wpt-harness/expectations/WebCryptoAPI/idlharness.https.any.js.json +++ b/tests/wpt-harness/expectations/WebCryptoAPI/idlharness.https.any.js.json @@ -149,7 +149,7 @@ "SubtleCrypto interface: operation deriveKey(AlgorithmIdentifier, CryptoKey, AlgorithmIdentifier, boolean, sequence)": { "status": "FAIL" }, - "SubtleCrypto interface: operation deriveBits(AlgorithmIdentifier, CryptoKey, unsigned long)": { + "SubtleCrypto interface: operation deriveBits(AlgorithmIdentifier, CryptoKey, optional unsigned long?)": { "status": "FAIL" }, "SubtleCrypto interface: operation importKey(KeyFormat, (BufferSource or JsonWebKey), AlgorithmIdentifier, boolean, sequence)": { @@ -212,10 +212,10 @@ "SubtleCrypto interface: calling deriveKey(AlgorithmIdentifier, CryptoKey, AlgorithmIdentifier, boolean, sequence) on crypto.subtle with too few arguments must throw TypeError": { "status": "FAIL" }, - "SubtleCrypto interface: crypto.subtle must inherit property \"deriveBits(AlgorithmIdentifier, CryptoKey, unsigned long)\" with the proper type": { + "SubtleCrypto interface: crypto.subtle must inherit property \"deriveBits(AlgorithmIdentifier, CryptoKey, optional unsigned long?)\" with the proper type": { "status": "FAIL" }, - "SubtleCrypto interface: calling deriveBits(AlgorithmIdentifier, CryptoKey, unsigned long) on crypto.subtle with too few arguments must throw TypeError": { + "SubtleCrypto interface: calling deriveBits(AlgorithmIdentifier, CryptoKey, optional unsigned long?) on crypto.subtle with too few arguments must throw TypeError": { "status": "FAIL" }, "SubtleCrypto interface: crypto.subtle must inherit property \"importKey(KeyFormat, (BufferSource or JsonWebKey), AlgorithmIdentifier, boolean, sequence)\" with the proper type": { diff --git a/tests/wpt-harness/expectations/WebCryptoAPI/import_export/ec_importKey.https.any.js.json b/tests/wpt-harness/expectations/WebCryptoAPI/import_export/ec_importKey.https.any.js.json index 0e90e693..1dd7e8e4 100644 --- a/tests/wpt-harness/expectations/WebCryptoAPI/import_export/ec_importKey.https.any.js.json +++ b/tests/wpt-harness/expectations/WebCryptoAPI/import_export/ec_importKey.https.any.js.json @@ -1,4 +1,19 @@ { + "Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, true, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (spki, buffer(59, compressed), {name: ECDSA, namedCurve: P-256}, true, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, true, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (raw, buffer(65), {name: ECDSA, namedCurve: P-256}, true, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (raw, buffer(33, compressed), {name: ECDSA, namedCurve: P-256}, true, [verify])": { + "status": "FAIL" + }, "Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, true, [])": { "status": "FAIL" }, @@ -14,18 +29,54 @@ "Good parameters: P-256 bits (raw, buffer(33, compressed), {name: ECDSA, namedCurve: P-256}, true, [])": { "status": "FAIL" }, + "Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, true, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (spki, buffer(59, compressed), {name: ECDSA, namedCurve: P-256}, true, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, true, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (raw, buffer(65), {name: ECDSA, namedCurve: P-256}, true, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (raw, buffer(33, compressed), {name: ECDSA, namedCurve: P-256}, true, [verify, verify])": { + "status": "FAIL" + }, "Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, true, [sign])": { "status": "FAIL" }, + "Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, true, [sign, sign])": { + "status": "FAIL" + }, "Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, true, [])": { "status": "FAIL" }, "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, true, [sign])": { "status": "FAIL" }, + "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, true, [sign, sign])": { + "status": "FAIL" + }, "Empty Usages: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, true, [])": { "status": "FAIL" }, + "Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, false, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (spki, buffer(59, compressed), {name: ECDSA, namedCurve: P-256}, false, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, false, [verify])": { + "status": "PASS" + }, + "Good parameters: P-256 bits (raw, buffer(65), {name: ECDSA, namedCurve: P-256}, false, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (raw, buffer(33, compressed), {name: ECDSA, namedCurve: P-256}, false, [verify])": { + "status": "FAIL" + }, "Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, false, [])": { "status": "FAIL" }, @@ -41,18 +92,54 @@ "Good parameters: P-256 bits (raw, buffer(33, compressed), {name: ECDSA, namedCurve: P-256}, false, [])": { "status": "FAIL" }, + "Good parameters: P-256 bits (spki, buffer(91), {name: ECDSA, namedCurve: P-256}, false, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (spki, buffer(59, compressed), {name: ECDSA, namedCurve: P-256}, false, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-256}, false, [verify, verify])": { + "status": "PASS" + }, + "Good parameters: P-256 bits (raw, buffer(65), {name: ECDSA, namedCurve: P-256}, false, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (raw, buffer(33, compressed), {name: ECDSA, namedCurve: P-256}, false, [verify, verify])": { + "status": "FAIL" + }, "Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [sign])": { "status": "FAIL" }, + "Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [sign, sign])": { + "status": "FAIL" + }, "Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDSA, namedCurve: P-256}, false, [])": { "status": "FAIL" }, "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, false, [sign])": { "status": "PASS" }, + "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, false, [sign, sign])": { + "status": "PASS" + }, "Empty Usages: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-256}, false, [])": { "status": "FAIL" }, + "Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, true, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (spki, buffer(72, compressed), {name: ECDSA, namedCurve: P-384}, true, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, true, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (raw, buffer(97), {name: ECDSA, namedCurve: P-384}, true, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (raw, buffer(49, compressed), {name: ECDSA, namedCurve: P-384}, true, [verify])": { + "status": "FAIL" + }, "Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, true, [])": { "status": "FAIL" }, @@ -68,18 +155,54 @@ "Good parameters: P-384 bits (raw, buffer(49, compressed), {name: ECDSA, namedCurve: P-384}, true, [])": { "status": "FAIL" }, + "Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, true, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (spki, buffer(72, compressed), {name: ECDSA, namedCurve: P-384}, true, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, true, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (raw, buffer(97), {name: ECDSA, namedCurve: P-384}, true, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (raw, buffer(49, compressed), {name: ECDSA, namedCurve: P-384}, true, [verify, verify])": { + "status": "FAIL" + }, "Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, true, [sign])": { "status": "FAIL" }, + "Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, true, [sign, sign])": { + "status": "FAIL" + }, "Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, true, [])": { "status": "FAIL" }, "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, true, [sign])": { "status": "FAIL" }, + "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, true, [sign, sign])": { + "status": "FAIL" + }, "Empty Usages: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, true, [])": { "status": "FAIL" }, + "Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, false, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (spki, buffer(72, compressed), {name: ECDSA, namedCurve: P-384}, false, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, false, [verify])": { + "status": "PASS" + }, + "Good parameters: P-384 bits (raw, buffer(97), {name: ECDSA, namedCurve: P-384}, false, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (raw, buffer(49, compressed), {name: ECDSA, namedCurve: P-384}, false, [verify])": { + "status": "FAIL" + }, "Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, false, [])": { "status": "FAIL" }, @@ -95,18 +218,54 @@ "Good parameters: P-384 bits (raw, buffer(49, compressed), {name: ECDSA, namedCurve: P-384}, false, [])": { "status": "FAIL" }, + "Good parameters: P-384 bits (spki, buffer(120), {name: ECDSA, namedCurve: P-384}, false, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (spki, buffer(72, compressed), {name: ECDSA, namedCurve: P-384}, false, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-384}, false, [verify, verify])": { + "status": "PASS" + }, + "Good parameters: P-384 bits (raw, buffer(97), {name: ECDSA, namedCurve: P-384}, false, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (raw, buffer(49, compressed), {name: ECDSA, namedCurve: P-384}, false, [verify, verify])": { + "status": "FAIL" + }, "Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [sign])": { "status": "FAIL" }, + "Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [sign, sign])": { + "status": "FAIL" + }, "Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDSA, namedCurve: P-384}, false, [])": { "status": "FAIL" }, "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, false, [sign])": { "status": "PASS" }, + "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, false, [sign, sign])": { + "status": "PASS" + }, "Empty Usages: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-384}, false, [])": { "status": "FAIL" }, + "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, true, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDSA, namedCurve: P-521}, true, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, true, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (raw, buffer(133), {name: ECDSA, namedCurve: P-521}, true, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDSA, namedCurve: P-521}, true, [verify])": { + "status": "FAIL" + }, "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, true, [])": { "status": "FAIL" }, @@ -122,18 +281,54 @@ "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDSA, namedCurve: P-521}, true, [])": { "status": "FAIL" }, + "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, true, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDSA, namedCurve: P-521}, true, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, true, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (raw, buffer(133), {name: ECDSA, namedCurve: P-521}, true, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDSA, namedCurve: P-521}, true, [verify, verify])": { + "status": "FAIL" + }, "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, true, [sign])": { "status": "FAIL" }, + "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, true, [sign, sign])": { + "status": "FAIL" + }, "Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, true, [])": { "status": "FAIL" }, "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign])": { "status": "FAIL" }, + "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign, sign])": { + "status": "FAIL" + }, "Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [])": { "status": "FAIL" }, + "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, [verify])": { + "status": "PASS" + }, + "Good parameters: P-521 bits (raw, buffer(133), {name: ECDSA, namedCurve: P-521}, false, [verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify])": { + "status": "FAIL" + }, "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, [])": { "status": "FAIL" }, @@ -149,15 +344,36 @@ "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDSA, namedCurve: P-521}, false, [])": { "status": "FAIL" }, + "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])": { + "status": "PASS" + }, + "Good parameters: P-521 bits (raw, buffer(133), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])": { + "status": "FAIL" + }, "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign])": { "status": "FAIL" }, + "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign, sign])": { + "status": "FAIL" + }, "Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [])": { "status": "FAIL" }, "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, false, [sign])": { "status": "PASS" }, + "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, false, [sign, sign])": { + "status": "PASS" + }, "Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, false, [])": { "status": "FAIL" }, @@ -170,6 +386,9 @@ "Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-256}, true, [])": { "status": "FAIL" }, + "ECDH any JWK alg: P-256 bits (jwk, object(kty, crv, x, y, alg), {name: ECDH, namedCurve: P-256}, true, [])": { + "status": "FAIL" + }, "Good parameters: P-256 bits (raw, buffer(65), {name: ECDH, namedCurve: P-256}, true, [])": { "status": "FAIL" }, @@ -185,18 +404,36 @@ "Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [deriveBits])": { "status": "FAIL" }, + "Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, "Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, true, [])": { "status": "FAIL" }, "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [deriveKey])": { "status": "FAIL" }, + "ECDH any JWK alg: P-256 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-256}, true, [deriveKey])": { + "status": "FAIL" + }, "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey])": { "status": "FAIL" }, + "ECDH any JWK alg: P-256 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-256}, true, [deriveBits, deriveKey])": { + "status": "FAIL" + }, "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [deriveBits])": { "status": "FAIL" }, + "ECDH any JWK alg: P-256 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-256}, true, [deriveBits])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, + "ECDH any JWK alg: P-256 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-256}, true, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, "Empty Usages: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, true, [])": { "status": "FAIL" }, @@ -209,6 +446,9 @@ "Good parameters: P-256 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-256}, false, [])": { "status": "FAIL" }, + "ECDH any JWK alg: P-256 bits (jwk, object(kty, crv, x, y, alg), {name: ECDH, namedCurve: P-256}, false, [])": { + "status": "FAIL" + }, "Good parameters: P-256 bits (raw, buffer(65), {name: ECDH, namedCurve: P-256}, false, [])": { "status": "FAIL" }, @@ -224,18 +464,36 @@ "Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [deriveBits])": { "status": "FAIL" }, + "Good parameters: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, "Empty Usages: P-256 bits (pkcs8, buffer(138), {name: ECDH, namedCurve: P-256}, false, [])": { "status": "FAIL" }, "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [deriveKey])": { "status": "FAIL" }, + "ECDH any JWK alg: P-256 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-256}, false, [deriveKey])": { + "status": "FAIL" + }, "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey])": { "status": "FAIL" }, + "ECDH any JWK alg: P-256 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-256}, false, [deriveBits, deriveKey])": { + "status": "FAIL" + }, "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [deriveBits])": { "status": "FAIL" }, + "ECDH any JWK alg: P-256 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-256}, false, [deriveBits])": { + "status": "FAIL" + }, + "Good parameters: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, + "ECDH any JWK alg: P-256 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-256}, false, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, "Empty Usages: P-256 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-256}, false, [])": { "status": "FAIL" }, @@ -248,6 +506,9 @@ "Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-384}, true, [])": { "status": "FAIL" }, + "ECDH any JWK alg: P-384 bits (jwk, object(kty, crv, x, y, alg), {name: ECDH, namedCurve: P-384}, true, [])": { + "status": "FAIL" + }, "Good parameters: P-384 bits (raw, buffer(97), {name: ECDH, namedCurve: P-384}, true, [])": { "status": "FAIL" }, @@ -263,18 +524,36 @@ "Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [deriveBits])": { "status": "FAIL" }, + "Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, "Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, true, [])": { "status": "FAIL" }, "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [deriveKey])": { "status": "FAIL" }, + "ECDH any JWK alg: P-384 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-384}, true, [deriveKey])": { + "status": "FAIL" + }, "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey])": { "status": "FAIL" }, + "ECDH any JWK alg: P-384 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-384}, true, [deriveBits, deriveKey])": { + "status": "FAIL" + }, "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [deriveBits])": { "status": "FAIL" }, + "ECDH any JWK alg: P-384 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-384}, true, [deriveBits])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, + "ECDH any JWK alg: P-384 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-384}, true, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, "Empty Usages: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, true, [])": { "status": "FAIL" }, @@ -287,6 +566,9 @@ "Good parameters: P-384 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-384}, false, [])": { "status": "FAIL" }, + "ECDH any JWK alg: P-384 bits (jwk, object(kty, crv, x, y, alg), {name: ECDH, namedCurve: P-384}, false, [])": { + "status": "FAIL" + }, "Good parameters: P-384 bits (raw, buffer(97), {name: ECDH, namedCurve: P-384}, false, [])": { "status": "FAIL" }, @@ -302,18 +584,36 @@ "Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [deriveBits])": { "status": "FAIL" }, + "Good parameters: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, "Empty Usages: P-384 bits (pkcs8, buffer(185), {name: ECDH, namedCurve: P-384}, false, [])": { "status": "FAIL" }, "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [deriveKey])": { "status": "FAIL" }, + "ECDH any JWK alg: P-384 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-384}, false, [deriveKey])": { + "status": "FAIL" + }, "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey])": { "status": "FAIL" }, + "ECDH any JWK alg: P-384 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-384}, false, [deriveBits, deriveKey])": { + "status": "FAIL" + }, "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [deriveBits])": { "status": "FAIL" }, + "ECDH any JWK alg: P-384 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-384}, false, [deriveBits])": { + "status": "FAIL" + }, + "Good parameters: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, + "ECDH any JWK alg: P-384 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-384}, false, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, "Empty Usages: P-384 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-384}, false, [])": { "status": "FAIL" }, @@ -326,6 +626,9 @@ "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-521}, true, [])": { "status": "FAIL" }, + "ECDH any JWK alg: P-521 bits (jwk, object(kty, crv, x, y, alg), {name: ECDH, namedCurve: P-521}, true, [])": { + "status": "FAIL" + }, "Good parameters: P-521 bits (raw, buffer(133), {name: ECDH, namedCurve: P-521}, true, [])": { "status": "FAIL" }, @@ -341,18 +644,36 @@ "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [deriveBits])": { "status": "FAIL" }, + "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, "Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, true, [])": { "status": "FAIL" }, "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveKey])": { "status": "FAIL" }, + "ECDH any JWK alg: P-521 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-521}, true, [deriveKey])": { + "status": "FAIL" + }, "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey])": { "status": "FAIL" }, + "ECDH any JWK alg: P-521 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey])": { + "status": "FAIL" + }, "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveBits])": { "status": "FAIL" }, + "ECDH any JWK alg: P-521 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-521}, true, [deriveBits])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, + "ECDH any JWK alg: P-521 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, "Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [])": { "status": "FAIL" }, @@ -365,6 +686,9 @@ "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-521}, false, [])": { "status": "FAIL" }, + "ECDH any JWK alg: P-521 bits (jwk, object(kty, crv, x, y, alg), {name: ECDH, namedCurve: P-521}, false, [])": { + "status": "FAIL" + }, "Good parameters: P-521 bits (raw, buffer(133), {name: ECDH, namedCurve: P-521}, false, [])": { "status": "FAIL" }, @@ -380,18 +704,36 @@ "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveBits])": { "status": "FAIL" }, + "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, "Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [])": { "status": "FAIL" }, "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [deriveKey])": { "status": "FAIL" }, + "ECDH any JWK alg: P-521 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-521}, false, [deriveKey])": { + "status": "FAIL" + }, "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey])": { "status": "FAIL" }, + "ECDH any JWK alg: P-521 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey])": { + "status": "FAIL" + }, "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [deriveBits])": { "status": "FAIL" }, + "ECDH any JWK alg: P-521 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-521}, false, [deriveBits])": { + "status": "FAIL" + }, + "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, + "ECDH any JWK alg: P-521 bits (jwk, object(kty, crv, x, y, d, alg), {name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits])": { + "status": "FAIL" + }, "Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, false, [])": { "status": "FAIL" } diff --git a/tests/wpt-harness/expectations/compression/compression-constructor-error.tentative.any.js.json b/tests/wpt-harness/expectations/compression/compression-constructor-error.tentative.any.js.json new file mode 100644 index 00000000..7fd43eca --- /dev/null +++ b/tests/wpt-harness/expectations/compression/compression-constructor-error.tentative.any.js.json @@ -0,0 +1,11 @@ +{ + "\"a\" should cause the constructor to throw": { + "status": "PASS" + }, + "no input should cause the constructor to throw": { + "status": "PASS" + }, + "non-string input should cause the constructor to throw": { + "status": "PASS" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/compression/compression-large-flush-output.any.js.json b/tests/wpt-harness/expectations/compression/compression-large-flush-output.any.js.json new file mode 100644 index 00000000..32813d9d --- /dev/null +++ b/tests/wpt-harness/expectations/compression/compression-large-flush-output.any.js.json @@ -0,0 +1,11 @@ +{ + "deflate compression with large flush output": { + "status": "FAIL" + }, + "gzip compression with large flush output": { + "status": "FAIL" + }, + "deflate-raw compression with large flush output": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/compression/compression-stream.tentative.any.js.json b/tests/wpt-harness/expectations/compression/compression-stream.tentative.any.js.json index f901cc72..f59f14f4 100644 --- a/tests/wpt-harness/expectations/compression/compression-stream.tentative.any.js.json +++ b/tests/wpt-harness/expectations/compression/compression-stream.tentative.any.js.json @@ -1,6 +1,6 @@ { "CompressionStream constructor should throw on invalid format": { - "status": "FAIL" + "status": "PASS" }, "deflated empty data should be reinflated back to its origin": { "status": "PASS" diff --git a/tests/wpt-harness/expectations/compression/decompression-buffersource.tentative.any.js.json b/tests/wpt-harness/expectations/compression/decompression-buffersource.tentative.any.js.json index cb57a226..5e132dac 100644 --- a/tests/wpt-harness/expectations/compression/decompression-buffersource.tentative.any.js.json +++ b/tests/wpt-harness/expectations/compression/decompression-buffersource.tentative.any.js.json @@ -23,6 +23,9 @@ "chunk of type Uint32Array should work for deflate": { "status": "PASS" }, + "chunk of type Float16Array should work for deflate": { + "status": "PASS" + }, "chunk of type Float32Array should work for deflate": { "status": "PASS" }, @@ -56,6 +59,9 @@ "chunk of type Uint32Array should work for gzip": { "status": "PASS" }, + "chunk of type Float16Array should work for gzip": { + "status": "PASS" + }, "chunk of type Float32Array should work for gzip": { "status": "PASS" }, @@ -89,6 +95,9 @@ "chunk of type Uint32Array should work for deflate-raw": { "status": "PASS" }, + "chunk of type Float16Array should work for deflate-raw": { + "status": "PASS" + }, "chunk of type Float32Array should work for deflate-raw": { "status": "PASS" }, diff --git a/tests/wpt-harness/expectations/compression/decompression-corrupt-input.tentative.any.js.json b/tests/wpt-harness/expectations/compression/decompression-corrupt-input.tentative.any.js.json index 1b9447db..3b266e32 100644 --- a/tests/wpt-harness/expectations/compression/decompression-corrupt-input.tentative.any.js.json +++ b/tests/wpt-harness/expectations/compression/decompression-corrupt-input.tentative.any.js.json @@ -30,7 +30,7 @@ "status": "PASS" }, "format 'deflate' field ADLER should be error for 255": { - "status": "PASS" + "status": "FAIL" }, "the unchanged input for 'gzip' should decompress successfully": { "status": "PASS" @@ -72,7 +72,7 @@ "status": "PASS" }, "format 'gzip' field ISIZE should be error for 1": { - "status": "PASS" + "status": "FAIL" }, "the deflate input compressed with dictionary should give an error": { "status": "PASS" diff --git a/tests/wpt-harness/expectations/console/console-log-symbol.any.js.json b/tests/wpt-harness/expectations/console/console-log-symbol.any.js.json new file mode 100644 index 00000000..5935c552 --- /dev/null +++ b/tests/wpt-harness/expectations/console/console-log-symbol.any.js.json @@ -0,0 +1,5 @@ +{ + "Logging a symbol doesn't throw": { + "status": "PASS" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/encoding/api-invalid-label.any.js.json b/tests/wpt-harness/expectations/encoding/api-invalid-label.any.js.json index 9e26dfee..308e2967 100644 --- a/tests/wpt-harness/expectations/encoding/api-invalid-label.any.js.json +++ b/tests/wpt-harness/expectations/encoding/api-invalid-label.any.js.json @@ -1 +1,10265 @@ -{} \ No newline at end of file +{ + "Invalid label \"invalid-invalidLabel\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0unicode-1-1-utf-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode-1-1-utf-8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0unicode-1-1-utf-8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vunicode-1-1-utf-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode-1-1-utf-8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vunicode-1-1-utf-8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" unicode-1-1-utf-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode-1-1-utf-8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" unicode-1-1-utf-8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode-1-1-utf-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode-1-1-utf-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode-1-1-utf-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode-1-1-utf-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode-1-1-utf-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode-1-1-utf-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0unicode11utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode11utf8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0unicode11utf8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vunicode11utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode11utf8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vunicode11utf8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" unicode11utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode11utf8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" unicode11utf8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode11utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode11utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode11utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode11utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode11utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode11utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0unicode20utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode20utf8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0unicode20utf8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vunicode20utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode20utf8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vunicode20utf8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" unicode20utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode20utf8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" unicode20utf8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode20utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode20utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode20utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode20utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode20utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode20utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0utf-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0utf-8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vutf-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vutf-8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" utf-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" utf-8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0utf8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vutf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vutf8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" utf8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-unicode20utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-unicode20utf8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-unicode20utf8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-unicode20utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-unicode20utf8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-unicode20utf8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-unicode20utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-unicode20utf8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-unicode20utf8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-unicode20utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-unicode20utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-unicode20utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-unicode20utf8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-unicode20utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-unicode20utf8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"866\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0866\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\v866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"866\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\v866\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" 866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"866 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" 866 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp866\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp866\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp866\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp866\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp866 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp866 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csibm866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csibm866\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csibm866\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsibm866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csibm866\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsibm866\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csibm866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csibm866 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csibm866 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csibm866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csibm866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csibm866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csibm866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csibm866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csibm866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ibm866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ibm866\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ibm866\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vibm866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ibm866\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vibm866\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ibm866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ibm866 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ibm866 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ibm866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ibm866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ibm866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ibm866\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ibm866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ibm866
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-101\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-101\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-101\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-101\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-101\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-101\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-101\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-101 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-101 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-101\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-101
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-101
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-101\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-101
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-101
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88592\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88592\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88592\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88592\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88592\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88592\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88592\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88592 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88592 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88592\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88592
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88592
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88592\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88592
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88592
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-2:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-2:1987\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-2:1987\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-2:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-2:1987\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-2:1987\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-2:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-2:1987 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-2:1987 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-2:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-2:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-2:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-2:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-2:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-2:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0latin2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0latin2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlatin2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlatin2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" latin2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" latin2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin3\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin3\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin3\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin3\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin3 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin3 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-3\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-3\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-3\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-3\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-3 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-3 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-109\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-109\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-109\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-109\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-109\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-109\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-109\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-109 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-109 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-109\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-109
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-109
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-109\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-109
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-109
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-3\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-3\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-3\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-3\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-3 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-3 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88593\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88593\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88593\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88593\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88593\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88593\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88593\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88593 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88593 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88593\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88593
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88593
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88593\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88593
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88593
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-3\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-3\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-3\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-3\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-3 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-3 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-3:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-3:1988\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-3:1988\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-3:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-3:1988\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-3:1988\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-3:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-3:1988 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-3:1988 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-3:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-3:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-3:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-3:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-3:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-3:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l3\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l3\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l3\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl3\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l3 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l3 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0latin3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin3\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0latin3\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlatin3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin3\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlatin3\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" latin3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin3 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" latin3 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin3\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin3
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin4\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin4\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin4\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin4\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin4 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin4 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-4\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-4\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-4\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-4\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-4 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-4 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-110\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-110\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-110\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-110\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-110\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-110\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-110\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-110 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-110 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-110\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-110
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-110
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-110\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-110
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-110
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-4\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-4\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-4\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-4\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-4 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-4 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88594\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88594\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88594\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88594\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88594\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88594\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88594\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88594 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88594 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88594\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88594
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88594
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88594\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88594
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88594
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-4\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-4\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-4\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-4\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-4 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-4 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-4:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-4:1988\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-4:1988\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-4:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-4:1988\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-4:1988\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-4:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-4:1988 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-4:1988 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-4:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-4:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-4:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-4:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-4:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-4:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l4\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l4\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l4\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl4\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l4 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l4 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0latin4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin4\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0latin4\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlatin4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin4\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlatin4\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" latin4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin4 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" latin4 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin4\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin4
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatincyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatincyrillic\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatincyrillic\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatincyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatincyrillic\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatincyrillic\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatincyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatincyrillic \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatincyrillic \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatincyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatincyrillic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatincyrillic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatincyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatincyrillic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatincyrillic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cyrillic\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cyrillic\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cyrillic\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcyrillic\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cyrillic \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cyrillic \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cyrillic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cyrillic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cyrillic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cyrillic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-144\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-144\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-144\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-144\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-144\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-144\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-144\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-144 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-144 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-144\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-144
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-144
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-144\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-144
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-144
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88595\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88595\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88595\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88595\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88595\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88595\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88595\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88595 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88595 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88595\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88595
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88595
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88595\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88595
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88595
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-5:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-5:1988\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-5:1988\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-5:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-5:1988\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-5:1988\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-5:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-5:1988 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-5:1988 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-5:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-5:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-5:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-5:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-5:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-5:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0arabic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"arabic\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0arabic\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\varabic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"arabic\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\varabic\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" arabic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"arabic \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" arabic \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
arabic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"arabic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
arabic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
arabic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"arabic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
arabic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0asmo-708\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"asmo-708\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0asmo-708\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vasmo-708\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"asmo-708\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vasmo-708\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" asmo-708\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"asmo-708 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" asmo-708 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
asmo-708\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"asmo-708
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
asmo-708
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
asmo-708\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"asmo-708
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
asmo-708
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso88596e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88596e\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso88596e\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso88596e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88596e\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso88596e\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso88596e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88596e \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso88596e \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88596e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88596e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88596e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88596e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88596e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88596e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso88596i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88596i\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso88596i\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso88596i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88596i\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso88596i\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso88596i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88596i \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso88596i \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88596i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88596i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88596i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88596i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88596i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88596i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatinarabic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatinarabic\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatinarabic\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatinarabic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatinarabic\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatinarabic\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatinarabic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatinarabic \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatinarabic \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatinarabic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatinarabic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatinarabic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatinarabic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatinarabic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatinarabic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ecma-114\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ecma-114\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ecma-114\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vecma-114\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ecma-114\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vecma-114\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ecma-114\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ecma-114 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ecma-114 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ecma-114\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ecma-114
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ecma-114
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ecma-114\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ecma-114
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ecma-114
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-6\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-6\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-6 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-6-e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6-e\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-6-e\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-6-e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6-e\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-6-e\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-6-e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6-e \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-6-e \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-6-e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6-e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-6-e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-6-e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6-e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-6-e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-6-i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6-i\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-6-i\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-6-i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6-i\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-6-i\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-6-i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6-i \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-6-i \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-6-i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6-i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-6-i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-6-i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-6-i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-6-i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-127\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-127\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-127\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-127\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-127\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-127\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-127\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-127 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-127 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-127\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-127
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-127
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-127\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-127
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-127
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-6\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-6\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-6\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-6\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-6 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-6 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88596\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88596\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88596\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88596\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88596\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88596\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88596\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88596 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88596 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88596\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88596
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88596
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88596\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88596
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88596
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-6\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-6\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-6\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-6\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-6 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-6 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-6:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-6:1987\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-6:1987\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-6:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-6:1987\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-6:1987\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-6:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-6:1987 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-6:1987 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-6:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-6:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-6:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-6:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-6:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-6:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatingreek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatingreek\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatingreek\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatingreek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatingreek\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatingreek\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatingreek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatingreek \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatingreek \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatingreek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatingreek
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatingreek
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatingreek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatingreek
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatingreek
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ecma-118\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ecma-118\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ecma-118\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vecma-118\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ecma-118\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vecma-118\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ecma-118\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ecma-118 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ecma-118 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ecma-118\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ecma-118
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ecma-118
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ecma-118\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ecma-118
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ecma-118
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0elot_928\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"elot_928\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0elot_928\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\velot_928\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"elot_928\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\velot_928\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" elot_928\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"elot_928 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" elot_928 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
elot_928\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"elot_928
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
elot_928
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
elot_928\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"elot_928
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
elot_928
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0greek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"greek\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0greek\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgreek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"greek\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgreek\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" greek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"greek \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" greek \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
greek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"greek
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
greek
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
greek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"greek
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
greek
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0greek8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"greek8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0greek8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgreek8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"greek8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgreek8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" greek8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"greek8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" greek8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
greek8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"greek8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
greek8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
greek8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"greek8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
greek8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-7\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-7\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-7\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-7\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-7 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-7 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-7
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-7
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-7
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-7
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-126\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-126\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-126\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-126\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-126\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-126\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-126\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-126 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-126 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-126\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-126
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-126
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-126\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-126
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-126
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-7\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-7\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-7\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-7\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-7 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-7 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-7
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-7
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-7
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-7
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88597\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88597\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88597\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88597\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88597\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88597\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88597\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88597 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88597 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88597\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88597
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88597
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88597\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88597
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88597
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-7\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-7\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-7\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-7\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-7 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-7 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-7
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-7
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-7\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-7
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-7
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-7:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-7:1987\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-7:1987\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-7:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-7:1987\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-7:1987\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-7:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-7:1987 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-7:1987 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-7:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-7:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-7:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-7:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-7:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-7:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0sun_eu_greek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"sun_eu_greek\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0sun_eu_greek\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vsun_eu_greek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"sun_eu_greek\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vsun_eu_greek\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" sun_eu_greek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"sun_eu_greek \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" sun_eu_greek \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
sun_eu_greek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"sun_eu_greek
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
sun_eu_greek
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
sun_eu_greek\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"sun_eu_greek
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
sun_eu_greek
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso88598e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88598e\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso88598e\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso88598e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88598e\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso88598e\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso88598e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88598e \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso88598e \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88598e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88598e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88598e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88598e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88598e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88598e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatinhebrew\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatinhebrew\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatinhebrew\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatinhebrew\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatinhebrew\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatinhebrew\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatinhebrew\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatinhebrew \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatinhebrew \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatinhebrew\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatinhebrew
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatinhebrew
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatinhebrew\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatinhebrew
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatinhebrew
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0hebrew\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"hebrew\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0hebrew\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vhebrew\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"hebrew\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vhebrew\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" hebrew\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"hebrew \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" hebrew \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
hebrew\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"hebrew
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
hebrew
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
hebrew\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"hebrew
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
hebrew
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-8-e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8-e\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-8-e\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-8-e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8-e\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-8-e\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-8-e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8-e \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-8-e \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-8-e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8-e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-8-e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-8-e\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8-e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-8-e
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-138\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-138\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-138\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-138\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-138\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-138\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-138\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-138 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-138 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-138\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-138
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-138
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-138\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-138
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-138
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88598\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88598\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88598\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88598\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88598\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88598\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88598\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88598 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88598 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88598\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88598
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88598
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88598\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88598
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88598
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-8:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-8:1988\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-8:1988\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-8:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-8:1988\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-8:1988\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-8:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-8:1988 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-8:1988 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-8:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-8:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-8:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-8:1988\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-8:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-8:1988
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0visual\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"visual\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0visual\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vvisual\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"visual\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vvisual\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" visual\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"visual \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" visual \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
visual\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"visual
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
visual
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
visual\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"visual
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
visual
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso88598i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88598i\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso88598i\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso88598i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88598i\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso88598i\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso88598i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88598i \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso88598i \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88598i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88598i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88598i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88598i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso88598i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso88598i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-8-i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8-i\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-8-i\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-8-i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8-i\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-8-i\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-8-i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8-i \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-8-i \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-8-i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8-i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-8-i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-8-i\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-8-i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-8-i
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0logical\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"logical\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0logical\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlogical\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"logical\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlogical\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" logical\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"logical \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" logical \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
logical\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"logical
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
logical
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
logical\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"logical
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
logical
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin6\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin6\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin6\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin6\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin6 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin6 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-10\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-10\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-10\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-10\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-10\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-10\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-10\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-10 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-10 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-10\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-10
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-10
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-10\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-10
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-10
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-157\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-157\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-157\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-157\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-157\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-157\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-157\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-157 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-157 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-157\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-157
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-157
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-157\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-157
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-157
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-10\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-10\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-10\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-10\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-10\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-10\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-10\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-10 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-10 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-10\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-10
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-10
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-10\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-10
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-10
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso885910\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885910\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso885910\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso885910\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885910\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso885910\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso885910\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885910 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso885910 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885910\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885910
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885910
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885910\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885910
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885910
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l6\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l6\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l6\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl6\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l6 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l6 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0latin6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin6\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0latin6\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlatin6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin6\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlatin6\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" latin6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin6 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" latin6 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin6\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin6
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-13\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-13\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-13\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-13\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-13\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-13\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-13\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-13 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-13 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-13\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-13
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-13
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-13\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-13
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-13
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-13\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-13\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-13\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-13\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-13\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-13\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-13\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-13 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-13 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-13\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-13
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-13
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-13\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-13
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-13
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso885913\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885913\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso885913\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso885913\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885913\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso885913\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso885913\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885913 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso885913 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885913\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885913
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885913
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885913\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885913
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885913
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-14\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-14\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-14\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-14\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-14\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-14\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-14\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-14 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-14 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-14\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-14
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-14
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-14\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-14
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-14
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-14\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-14\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-14\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-14\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-14\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-14\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-14\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-14 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-14 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-14\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-14
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-14
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-14\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-14
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-14
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso885914\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885914\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso885914\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso885914\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885914\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso885914\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso885914\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885914 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso885914 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885914\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885914
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885914
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885914\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885914
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885914
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin9\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin9\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin9\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin9\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin9 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin9 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-15\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-15\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-15\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-15\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-15 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-15 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-15
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-15
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-15
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-15
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-15\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-15\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-15\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-15\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-15 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-15 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-15
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-15
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-15
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-15
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso885915\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885915\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso885915\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso885915\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885915\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso885915\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso885915\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885915 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso885915 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885915\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885915
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885915
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885915\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885915
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885915
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-15\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-15\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-15\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-15\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-15 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-15 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-15
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-15
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-15\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-15
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-15
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l9\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l9\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l9\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl9\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l9 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l9 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-16\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-16\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-16\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-16\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-16\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-16\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-16\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-16 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-16 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-16\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-16
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-16
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-16\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-16
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-16
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cskoi8r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cskoi8r\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cskoi8r\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcskoi8r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cskoi8r\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcskoi8r\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cskoi8r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cskoi8r \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cskoi8r \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cskoi8r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cskoi8r
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cskoi8r
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cskoi8r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cskoi8r
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cskoi8r
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0koi\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0koi\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkoi\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkoi\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" koi\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" koi \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0koi8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0koi8\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkoi8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkoi8\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" koi8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" koi8 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0koi8-r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-r\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0koi8-r\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkoi8-r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-r\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkoi8-r\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" koi8-r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-r \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" koi8-r \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8-r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-r
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8-r
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8-r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-r
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8-r
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0koi8_r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8_r\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0koi8_r\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkoi8_r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8_r\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkoi8_r\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" koi8_r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8_r \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" koi8_r \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8_r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8_r
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8_r
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8_r\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8_r
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8_r
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0koi8-ru\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-ru\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0koi8-ru\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkoi8-ru\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-ru\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkoi8-ru\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" koi8-ru\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-ru \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" koi8-ru \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8-ru\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-ru
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8-ru
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8-ru\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-ru
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8-ru
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0koi8-u\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-u\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0koi8-u\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkoi8-u\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-u\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkoi8-u\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" koi8-u\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-u \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" koi8-u \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8-u\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-u
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8-u
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8-u\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"koi8-u
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
koi8-u
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csmacintosh\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csmacintosh\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csmacintosh\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsmacintosh\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csmacintosh\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsmacintosh\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csmacintosh\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csmacintosh \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csmacintosh \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csmacintosh\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csmacintosh
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csmacintosh
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csmacintosh\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csmacintosh
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csmacintosh
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0mac\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"mac\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0mac\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vmac\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"mac\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vmac\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" mac\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"mac \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" mac \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
mac\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"mac
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
mac
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
mac\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"mac
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
mac
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0macintosh\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"macintosh\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0macintosh\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vmacintosh\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"macintosh\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vmacintosh\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" macintosh\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"macintosh \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" macintosh \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
macintosh\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"macintosh
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
macintosh
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
macintosh\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"macintosh
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
macintosh
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-mac-roman\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-roman\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-mac-roman\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-mac-roman\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-roman\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-mac-roman\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-mac-roman\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-roman \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-mac-roman \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-mac-roman\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-roman
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-mac-roman
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-mac-roman\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-roman
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-mac-roman
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0dos-874\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"dos-874\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0dos-874\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vdos-874\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"dos-874\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vdos-874\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" dos-874\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"dos-874 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" dos-874 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
dos-874\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"dos-874
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
dos-874
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
dos-874\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"dos-874
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
dos-874
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-11\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-11\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-11\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-11\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-11\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-11\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-11\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-11 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-11 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-11\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-11
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-11
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-11\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-11
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-11
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-11\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-11\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-11\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-11\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-11\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-11\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-11\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-11 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-11 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-11\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-11
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-11
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-11\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-11
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-11
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso885911\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885911\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso885911\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso885911\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885911\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso885911\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso885911\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885911 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso885911 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885911\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885911
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885911
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885911\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso885911
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso885911
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0tis-620\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"tis-620\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0tis-620\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vtis-620\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"tis-620\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vtis-620\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" tis-620\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"tis-620 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" tis-620 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
tis-620\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"tis-620
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
tis-620
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
tis-620\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"tis-620
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
tis-620
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-874\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-874\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-874\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-874\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-874\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-874\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-874\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-874 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-874 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-874\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-874
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-874
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-874\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-874
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-874
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1250\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1250\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1250\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1250\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1250 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1250 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1250
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1250
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1250
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1250
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1250\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1250\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1250\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1250\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1250 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1250 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1250
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1250
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1250
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1250
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1250\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1250\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1250\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1250\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1250 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1250 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1250
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1250
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1250\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1250
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1250
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1251\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1251\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1251\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1251\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1251 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1251 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1251
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1251
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1251
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1251
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1251\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1251\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1251\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1251\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1251 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1251 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1251
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1251
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1251
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1251
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1251\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1251\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1251\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1251\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1251 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1251 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1251
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1251
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1251\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1251
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1251
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ansi_x3.4-1968\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ansi_x3.4-1968\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ansi_x3.4-1968\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vansi_x3.4-1968\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ansi_x3.4-1968\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vansi_x3.4-1968\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ansi_x3.4-1968\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ansi_x3.4-1968 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ansi_x3.4-1968 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ansi_x3.4-1968\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ansi_x3.4-1968
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ansi_x3.4-1968
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ansi_x3.4-1968\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ansi_x3.4-1968
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ansi_x3.4-1968
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ascii\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ascii\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ascii\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vascii\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ascii\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vascii\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ascii\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ascii \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ascii \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ascii\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ascii
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ascii
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ascii\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ascii
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ascii
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1252\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1252\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1252\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1252\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1252 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1252 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1252
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1252
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1252
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1252
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp819\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp819\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp819\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp819\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp819\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp819\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp819\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp819 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp819 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp819\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp819
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp819
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp819\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp819
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp819
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin1\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin1\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin1\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin1\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin1 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin1 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ibm819\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ibm819\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ibm819\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vibm819\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ibm819\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vibm819\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ibm819\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ibm819 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ibm819 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ibm819\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ibm819
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ibm819
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ibm819\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ibm819
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ibm819
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-1\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-1\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-1\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-1\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-1 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-1 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-100\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-100\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-100\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-100\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-100\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-100\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-100\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-100 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-100 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-100\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-100
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-100
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-100\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-100
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-100
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-1\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-1\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-1\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-1\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-1 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-1 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88591\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88591\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88591\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88591\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88591\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88591\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88591\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88591 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88591 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88591\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88591
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88591
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88591\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88591
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88591
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-1\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-1\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-1\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-1\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-1 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-1 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-1:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-1:1987\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-1:1987\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-1:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-1:1987\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-1:1987\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-1:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-1:1987 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-1:1987 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-1:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-1:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-1:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-1:1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-1:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-1:1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l1\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l1\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l1\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl1\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l1 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l1 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0latin1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin1\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0latin1\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlatin1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin1\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlatin1\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" latin1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin1 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" latin1 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin1\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin1
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0us-ascii\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"us-ascii\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0us-ascii\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vus-ascii\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"us-ascii\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vus-ascii\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" us-ascii\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"us-ascii \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" us-ascii \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
us-ascii\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"us-ascii
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
us-ascii
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
us-ascii\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"us-ascii
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
us-ascii
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1252\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1252\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1252\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1252\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1252 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1252 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1252
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1252
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1252
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1252
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1252\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1252\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1252\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1252\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1252 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1252 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1252
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1252
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1252\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1252
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1252
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1253\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1253\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1253\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1253\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1253 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1253 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1253
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1253
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1253
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1253
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1253\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1253\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1253\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1253\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1253 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1253 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1253
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1253
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1253
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1253
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1253\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1253\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1253\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1253\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1253 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1253 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1253
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1253
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1253\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1253
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1253
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1254\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1254\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1254\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1254\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1254 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1254 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1254
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1254
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1254
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1254
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csisolatin5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsisolatin5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csisolatin5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csisolatin5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csisolatin5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-9\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-8859-9\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-9\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-8859-9\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-9 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-8859-9 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-8859-9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-8859-9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-148\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-148\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-148\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-148\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-148\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-148\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-148\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-148 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-148 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-148\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-148
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-148
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-148\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-148
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-148
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-9\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso8859-9\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-9\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso8859-9\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-9 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso8859-9 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso8859-9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso8859-9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88599\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88599\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso88599\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88599\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88599\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso88599\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88599\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88599 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso88599 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88599\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88599
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88599
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88599\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso88599
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso88599
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-9\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-9\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-9\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-9\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-9 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-9 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-9\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-9
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-9:1989\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-9:1989\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso_8859-9:1989\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-9:1989\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-9:1989\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso_8859-9:1989\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-9:1989\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-9:1989 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso_8859-9:1989 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-9:1989\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-9:1989
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-9:1989
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-9:1989\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso_8859-9:1989
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso_8859-9:1989
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0l5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vl5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" l5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"l5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
l5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0latin5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0latin5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlatin5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vlatin5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" latin5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" latin5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"latin5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
latin5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1254\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1254\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1254\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1254\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1254 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1254 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1254
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1254
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1254
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1254
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1254\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1254\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1254\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1254\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1254 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1254 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1254
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1254
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1254\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1254
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1254
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1255\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1255\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1255\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1255\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1255 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1255 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1255
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1255
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1255
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1255
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1255\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1255\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1255\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1255\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1255 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1255 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1255
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1255
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1255
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1255
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1255\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1255\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1255\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1255\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1255 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1255 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1255
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1255
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1255\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1255
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1255
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1256\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1256\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1256\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1256\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1256 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1256 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1256
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1256
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1256
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1256
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1256\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1256\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1256\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1256\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1256 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1256 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1256
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1256
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1256
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1256
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1256\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1256\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1256\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1256\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1256 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1256 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1256
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1256
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1256\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1256
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1256
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1257\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1257\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1257\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1257\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1257 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1257 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1257
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1257
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1257
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1257
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1257\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1257\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1257\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1257\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1257 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1257 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1257
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1257
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1257
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1257
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1257\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1257\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1257\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1257\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1257 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1257 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1257
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1257
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1257\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1257
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1257
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1258\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cp1258\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1258\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcp1258\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1258 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cp1258 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1258
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1258
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cp1258
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cp1258
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1258\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-1258\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1258\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-1258\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1258 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-1258 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1258
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1258
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-1258
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-1258
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1258\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-cp1258\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1258\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-cp1258\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1258 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-cp1258 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1258
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1258
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1258\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-cp1258
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-cp1258
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-mac-cyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-cyrillic\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-mac-cyrillic\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-mac-cyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-cyrillic\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-mac-cyrillic\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-mac-cyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-cyrillic \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-mac-cyrillic \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-mac-cyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-cyrillic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-mac-cyrillic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-mac-cyrillic\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-cyrillic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-mac-cyrillic
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-mac-ukrainian\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-ukrainian\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-mac-ukrainian\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-mac-ukrainian\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-ukrainian\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-mac-ukrainian\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-mac-ukrainian\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-ukrainian \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-mac-ukrainian \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-mac-ukrainian\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-ukrainian
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-mac-ukrainian
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-mac-ukrainian\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-mac-ukrainian
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-mac-ukrainian
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0chinese\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"chinese\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0chinese\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vchinese\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"chinese\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vchinese\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" chinese\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"chinese \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" chinese \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
chinese\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"chinese
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
chinese
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
chinese\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"chinese
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
chinese
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csgb2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csgb2312\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csgb2312\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsgb2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csgb2312\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsgb2312\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csgb2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csgb2312 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csgb2312 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csgb2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csgb2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csgb2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csgb2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csgb2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csgb2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso58gb231280\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso58gb231280\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso58gb231280\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso58gb231280\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso58gb231280\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso58gb231280\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso58gb231280\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso58gb231280 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso58gb231280 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso58gb231280\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso58gb231280
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso58gb231280
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso58gb231280\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso58gb231280
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso58gb231280
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0gb2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb2312\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0gb2312\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgb2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb2312\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgb2312\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" gb2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb2312 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" gb2312 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0gb_2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb_2312\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0gb_2312\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgb_2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb_2312\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgb_2312\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" gb_2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb_2312 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" gb_2312 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb_2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb_2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb_2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb_2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb_2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb_2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0gb_2312-80\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb_2312-80\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0gb_2312-80\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgb_2312-80\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb_2312-80\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgb_2312-80\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" gb_2312-80\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb_2312-80 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" gb_2312-80 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb_2312-80\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb_2312-80
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb_2312-80
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb_2312-80\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb_2312-80
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb_2312-80
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0gbk\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gbk\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0gbk\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgbk\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gbk\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgbk\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" gbk\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gbk \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" gbk \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gbk\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gbk
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gbk
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gbk\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gbk
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gbk
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-58\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-58\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-58\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-58\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-58\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-58\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-58\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-58 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-58 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-58\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-58
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-58
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-58\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-58
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-58
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-gbk\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-gbk\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-gbk\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-gbk\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-gbk\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-gbk\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-gbk\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-gbk \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-gbk \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-gbk\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-gbk
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-gbk
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-gbk\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-gbk
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-gbk
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0gb18030\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb18030\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0gb18030\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgb18030\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb18030\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vgb18030\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" gb18030\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb18030 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" gb18030 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb18030\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb18030
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb18030
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb18030\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"gb18030
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
gb18030
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"big5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0big5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vbig5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"big5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vbig5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"big5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" big5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"big5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
big5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"big5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
big5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0big5-hkscs\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"big5-hkscs\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0big5-hkscs\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vbig5-hkscs\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"big5-hkscs\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vbig5-hkscs\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" big5-hkscs\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"big5-hkscs \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" big5-hkscs \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
big5-hkscs\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"big5-hkscs
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
big5-hkscs
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
big5-hkscs\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"big5-hkscs
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
big5-hkscs
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cn-big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cn-big5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cn-big5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcn-big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cn-big5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcn-big5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cn-big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cn-big5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cn-big5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cn-big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cn-big5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cn-big5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cn-big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cn-big5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cn-big5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csbig5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csbig5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csbig5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsbig5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csbig5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsbig5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csbig5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csbig5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csbig5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csbig5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csbig5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csbig5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csbig5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csbig5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csbig5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-x-big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-x-big5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-x-big5\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-x-big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-x-big5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-x-big5\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-x-big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-x-big5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-x-big5 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-x-big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-x-big5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-x-big5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-x-big5\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-x-big5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-x-big5
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cseucpkdfmtjapanese\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cseucpkdfmtjapanese\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cseucpkdfmtjapanese\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcseucpkdfmtjapanese\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cseucpkdfmtjapanese\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcseucpkdfmtjapanese\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cseucpkdfmtjapanese\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cseucpkdfmtjapanese \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cseucpkdfmtjapanese \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cseucpkdfmtjapanese\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cseucpkdfmtjapanese
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cseucpkdfmtjapanese
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cseucpkdfmtjapanese\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cseucpkdfmtjapanese
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cseucpkdfmtjapanese
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0euc-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"euc-jp\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0euc-jp\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\veuc-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"euc-jp\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\veuc-jp\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" euc-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"euc-jp \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" euc-jp \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
euc-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"euc-jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
euc-jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
euc-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"euc-jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
euc-jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-euc-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-euc-jp\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-euc-jp\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-euc-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-euc-jp\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-euc-jp\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-euc-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-euc-jp \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-euc-jp \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-euc-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-euc-jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-euc-jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-euc-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-euc-jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-euc-jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso2022jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso2022jp\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso2022jp\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso2022jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso2022jp\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso2022jp\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso2022jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso2022jp \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso2022jp \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso2022jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso2022jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso2022jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso2022jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso2022jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso2022jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-2022-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-jp\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-2022-jp\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-2022-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-jp\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-2022-jp\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-2022-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-jp \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-2022-jp \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-jp\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-jp
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csshiftjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csshiftjis\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csshiftjis\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsshiftjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csshiftjis\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsshiftjis\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csshiftjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csshiftjis \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csshiftjis \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csshiftjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csshiftjis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csshiftjis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csshiftjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csshiftjis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csshiftjis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ms932\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ms932\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ms932\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vms932\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ms932\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vms932\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ms932\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ms932 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ms932 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ms932\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ms932
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ms932
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ms932\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ms932
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ms932
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ms_kanji\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ms_kanji\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ms_kanji\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vms_kanji\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ms_kanji\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vms_kanji\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ms_kanji\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ms_kanji \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ms_kanji \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ms_kanji\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ms_kanji
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ms_kanji
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ms_kanji\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ms_kanji
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ms_kanji
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0shift-jis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"shift-jis\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0shift-jis\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vshift-jis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"shift-jis\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vshift-jis\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" shift-jis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"shift-jis \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" shift-jis \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
shift-jis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"shift-jis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
shift-jis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
shift-jis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"shift-jis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
shift-jis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0shift_jis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"shift_jis\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0shift_jis\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vshift_jis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"shift_jis\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vshift_jis\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" shift_jis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"shift_jis \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" shift_jis \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
shift_jis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"shift_jis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
shift_jis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
shift_jis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"shift_jis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
shift_jis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0sjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"sjis\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0sjis\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vsjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"sjis\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vsjis\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" sjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"sjis \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" sjis \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
sjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"sjis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
sjis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
sjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"sjis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
sjis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-31j\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-31j\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-31j\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-31j\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-31j\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-31j\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-31j\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-31j \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-31j \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-31j\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-31j
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-31j
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-31j\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-31j
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-31j
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-sjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-sjis\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-sjis\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-sjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-sjis\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-sjis\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-sjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-sjis \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-sjis \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-sjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-sjis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-sjis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-sjis\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-sjis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-sjis
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cseuckr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cseuckr\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0cseuckr\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcseuckr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cseuckr\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcseuckr\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cseuckr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cseuckr \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" cseuckr \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cseuckr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cseuckr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cseuckr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cseuckr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"cseuckr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
cseuckr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csksc56011987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csksc56011987\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csksc56011987\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsksc56011987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csksc56011987\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsksc56011987\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csksc56011987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csksc56011987 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csksc56011987 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csksc56011987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csksc56011987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csksc56011987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csksc56011987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csksc56011987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csksc56011987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0euc-kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"euc-kr\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0euc-kr\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\veuc-kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"euc-kr\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\veuc-kr\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" euc-kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"euc-kr \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" euc-kr \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
euc-kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"euc-kr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
euc-kr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
euc-kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"euc-kr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
euc-kr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-149\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-149\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-ir-149\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-149\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-149\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-ir-149\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-149\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-149 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-ir-149 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-149\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-149
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-149
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-149\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-ir-149
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-ir-149
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0korean\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"korean\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0korean\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkorean\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"korean\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vkorean\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" korean\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"korean \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" korean \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
korean\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"korean
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
korean
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
korean\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"korean
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
korean
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ks_c_5601-1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ks_c_5601-1987\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ks_c_5601-1987\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vks_c_5601-1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ks_c_5601-1987\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vks_c_5601-1987\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ks_c_5601-1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ks_c_5601-1987 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ks_c_5601-1987 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ks_c_5601-1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ks_c_5601-1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ks_c_5601-1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ks_c_5601-1987\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ks_c_5601-1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ks_c_5601-1987
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ks_c_5601-1989\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ks_c_5601-1989\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ks_c_5601-1989\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vks_c_5601-1989\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ks_c_5601-1989\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vks_c_5601-1989\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ks_c_5601-1989\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ks_c_5601-1989 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ks_c_5601-1989 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ks_c_5601-1989\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ks_c_5601-1989
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ks_c_5601-1989
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ks_c_5601-1989\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ks_c_5601-1989
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ks_c_5601-1989
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ksc5601\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ksc5601\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ksc5601\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vksc5601\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ksc5601\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vksc5601\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ksc5601\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ksc5601 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ksc5601 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ksc5601\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ksc5601
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ksc5601
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ksc5601\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ksc5601
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ksc5601
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ksc_5601\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ksc_5601\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ksc_5601\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vksc_5601\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ksc_5601\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vksc_5601\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ksc_5601\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ksc_5601 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ksc_5601 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ksc_5601\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ksc_5601
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ksc_5601
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ksc_5601\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ksc_5601
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ksc_5601
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-949\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-949\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0windows-949\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-949\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-949\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vwindows-949\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-949\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-949 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" windows-949 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-949\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-949
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-949
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-949\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"windows-949
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
windows-949
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso2022kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso2022kr\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csiso2022kr\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso2022kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso2022kr\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsiso2022kr\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso2022kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso2022kr \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csiso2022kr \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso2022kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso2022kr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso2022kr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso2022kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csiso2022kr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csiso2022kr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0hz-gb-2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"hz-gb-2312\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0hz-gb-2312\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vhz-gb-2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"hz-gb-2312\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vhz-gb-2312\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" hz-gb-2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"hz-gb-2312 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" hz-gb-2312 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
hz-gb-2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"hz-gb-2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
hz-gb-2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
hz-gb-2312\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"hz-gb-2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
hz-gb-2312
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-2022-cn\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-cn\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-2022-cn\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-2022-cn\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-cn\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-2022-cn\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-2022-cn\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-cn \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-2022-cn \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-cn\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-cn
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-cn
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-cn\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-cn
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-cn
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-2022-cn-ext\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-cn-ext\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-2022-cn-ext\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-2022-cn-ext\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-cn-ext\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-2022-cn-ext\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-2022-cn-ext\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-cn-ext \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-2022-cn-ext \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-cn-ext\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-cn-ext
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-cn-ext
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-cn-ext\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-cn-ext
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-cn-ext
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-2022-kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-kr\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-2022-kr\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-2022-kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-kr\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-2022-kr\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-2022-kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-kr \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-2022-kr \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-kr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-kr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-kr\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-2022-kr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-2022-kr
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0replacement\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"replacement\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0replacement\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vreplacement\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"replacement\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vreplacement\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" replacement\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"replacement \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" replacement \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
replacement\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"replacement
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
replacement
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
replacement\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"replacement
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
replacement
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0unicodefffe\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicodefffe\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0unicodefffe\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vunicodefffe\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicodefffe\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vunicodefffe\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" unicodefffe\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicodefffe \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" unicodefffe \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicodefffe\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicodefffe
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicodefffe
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicodefffe\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicodefffe
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicodefffe
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0utf-16be\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16be\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0utf-16be\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vutf-16be\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16be\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vutf-16be\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" utf-16be\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16be \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" utf-16be \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-16be\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16be
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-16be
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-16be\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16be
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-16be
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csunicode\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csunicode\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0csunicode\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsunicode\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csunicode\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vcsunicode\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csunicode\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csunicode \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" csunicode \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csunicode\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csunicode
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csunicode
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csunicode\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"csunicode
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
csunicode
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-10646-ucs-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-10646-ucs-2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0iso-10646-ucs-2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-10646-ucs-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-10646-ucs-2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\viso-10646-ucs-2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-10646-ucs-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-10646-ucs-2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" iso-10646-ucs-2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-10646-ucs-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-10646-ucs-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-10646-ucs-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-10646-ucs-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"iso-10646-ucs-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
iso-10646-ucs-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ucs-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ucs-2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0ucs-2\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vucs-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ucs-2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vucs-2\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ucs-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ucs-2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" ucs-2 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ucs-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ucs-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ucs-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ucs-2\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"ucs-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
ucs-2
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0unicode\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0unicode\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vunicode\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vunicode\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" unicode\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" unicode \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicode
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicode
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0unicodefeff\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicodefeff\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0unicodefeff\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vunicodefeff\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicodefeff\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vunicodefeff\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" unicodefeff\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicodefeff \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" unicodefeff \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicodefeff\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicodefeff
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicodefeff
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicodefeff\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"unicodefeff
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
unicodefeff
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0utf-16\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0utf-16\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vutf-16\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vutf-16\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" utf-16\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" utf-16 \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-16\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-16
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-16\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-16
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0utf-16le\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16le\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0utf-16le\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vutf-16le\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16le\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vutf-16le\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" utf-16le\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16le \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" utf-16le \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-16le\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16le
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-16le
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-16le\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"utf-16le
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
utf-16le
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-user-defined\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-user-defined\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\0x-user-defined\\0\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-user-defined\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-user-defined\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"\\vx-user-defined\\v\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-user-defined\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-user-defined \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \" x-user-defined \" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-user-defined\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-user-defined
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-user-defined
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-user-defined\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"x-user-defined
\" should be rejected by TextDecoder.": { + "status": "PASS" + }, + "Invalid label \"
x-user-defined
\" should be rejected by TextDecoder.": { + "status": "PASS" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/encoding/api-replacement-encodings.any.js.json b/tests/wpt-harness/expectations/encoding/api-replacement-encodings.any.js.json new file mode 100644 index 00000000..436fae50 --- /dev/null +++ b/tests/wpt-harness/expectations/encoding/api-replacement-encodings.any.js.json @@ -0,0 +1,20 @@ +{ + "Label for \"replacement\" should be rejected by API: csiso2022kr": { + "status": "PASS" + }, + "Label for \"replacement\" should be rejected by API: hz-gb-2312": { + "status": "PASS" + }, + "Label for \"replacement\" should be rejected by API: iso-2022-cn": { + "status": "PASS" + }, + "Label for \"replacement\" should be rejected by API: iso-2022-cn-ext": { + "status": "PASS" + }, + "Label for \"replacement\" should be rejected by API: iso-2022-kr": { + "status": "PASS" + }, + "Label for \"replacement\" should be rejected by API: replacement": { + "status": "PASS" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/encoding/encodeInto.any.js.json b/tests/wpt-harness/expectations/encoding/encodeInto.any.js.json index e17c1e4b..7e141fdd 100644 --- a/tests/wpt-harness/expectations/encoding/encodeInto.any.js.json +++ b/tests/wpt-harness/expectations/encoding/encodeInto.any.js.json @@ -305,6 +305,12 @@ "Invalid encodeInto() destination: BigUint64Array, backed by: SharedArrayBuffer": { "status": "FAIL" }, + "Invalid encodeInto() destination: Float16Array, backed by: ArrayBuffer": { + "status": "PASS" + }, + "Invalid encodeInto() destination: Float16Array, backed by: SharedArrayBuffer": { + "status": "FAIL" + }, "Invalid encodeInto() destination: Float32Array, backed by: ArrayBuffer": { "status": "PASS" }, diff --git a/tests/wpt-harness/expectations/encoding/idlharness.any.js.json b/tests/wpt-harness/expectations/encoding/idlharness.any.js.json index 8393ed80..00b7eabd 100644 --- a/tests/wpt-harness/expectations/encoding/idlharness.any.js.json +++ b/tests/wpt-harness/expectations/encoding/idlharness.any.js.json @@ -41,7 +41,7 @@ "TextDecoder interface: existence and properties of interface prototype object's @@unscopables property": { "status": "PASS" }, - "TextDecoder interface: operation decode(optional BufferSource, optional TextDecodeOptions)": { + "TextDecoder interface: operation decode(optional AllowSharedBufferSource, optional TextDecodeOptions)": { "status": "PASS" }, "TextDecoder interface: attribute encoding": { @@ -59,10 +59,10 @@ "Stringification of new TextDecoder()": { "status": "PASS" }, - "TextDecoder interface: new TextDecoder() must inherit property \"decode(optional BufferSource, optional TextDecodeOptions)\" with the proper type": { + "TextDecoder interface: new TextDecoder() must inherit property \"decode(optional AllowSharedBufferSource, optional TextDecodeOptions)\" with the proper type": { "status": "PASS" }, - "TextDecoder interface: calling decode(optional BufferSource, optional TextDecodeOptions) on new TextDecoder() with too few arguments must throw TypeError": { + "TextDecoder interface: calling decode(optional AllowSharedBufferSource, optional TextDecodeOptions) on new TextDecoder() with too few arguments must throw TypeError": { "status": "PASS" }, "TextDecoder interface: new TextDecoder() must inherit property \"encoding\" with the proper type": { diff --git a/tests/wpt-harness/expectations/encoding/textdecoder-fatal-single-byte.any.js.json b/tests/wpt-harness/expectations/encoding/textdecoder-fatal-single-byte.any.js.json new file mode 100644 index 00000000..3ce60507 --- /dev/null +++ b/tests/wpt-harness/expectations/encoding/textdecoder-fatal-single-byte.any.js.json @@ -0,0 +1,21506 @@ +{ + "Not throw: IBM866 has a pointer 0": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 1": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 2": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 3": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 4": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 5": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 6": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 7": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 8": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 9": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 10": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 11": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 12": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 13": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 14": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 15": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 16": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 17": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 18": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 19": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 20": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 21": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 22": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 23": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 24": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 25": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 26": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 27": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 28": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 29": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 30": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 31": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 32": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 33": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 34": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 35": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 36": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 37": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 38": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 39": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 40": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 41": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 42": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 43": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 44": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 45": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 46": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 47": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 48": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 49": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 50": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 51": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 52": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 53": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 54": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 55": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 56": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 57": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 58": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 59": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 60": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 61": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 62": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 63": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 64": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 65": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 66": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 67": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 68": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 69": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 70": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 71": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 72": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 73": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 74": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 75": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 76": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 77": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 78": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 79": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 80": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 81": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 82": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 83": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 84": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 85": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 86": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 87": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 88": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 89": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 90": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 91": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 92": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 93": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 94": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 95": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 96": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 97": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 98": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 99": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 100": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 101": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 102": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 103": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 104": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 105": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 106": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 107": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 108": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 109": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 110": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 111": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 112": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 113": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 114": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 115": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 116": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 117": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 118": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 119": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 120": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 121": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 122": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 123": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 124": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 125": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 126": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 127": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 128": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 129": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 130": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 131": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 132": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 133": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 134": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 135": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 136": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 137": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 138": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 139": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 140": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 141": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 142": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 143": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 144": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 145": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 146": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 147": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 148": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 149": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 150": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 151": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 152": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 153": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 154": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 155": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 156": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 157": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 158": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 159": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 160": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 161": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 162": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 163": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 164": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 165": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 166": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 167": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 168": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 169": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 170": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 171": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 172": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 173": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 174": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 175": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 176": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 177": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 178": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 179": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 180": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 181": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 182": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 183": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 184": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 185": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 186": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 187": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 188": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 189": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 190": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 191": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 192": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 193": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 194": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 195": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 196": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 197": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 198": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 199": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 200": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 201": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 202": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 203": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 204": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 205": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 206": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 207": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 208": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 209": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 210": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 211": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 212": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 213": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 214": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 215": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 216": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 217": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 218": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 219": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 220": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 221": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 222": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 223": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 224": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 225": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 226": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 227": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 228": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 229": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 230": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 231": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 232": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 233": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 234": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 235": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 236": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 237": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 238": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 239": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 240": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 241": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 242": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 243": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 244": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 245": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 246": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 247": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 248": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 249": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 250": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 251": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 252": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 253": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 254": { + "status": "PASS" + }, + "Not throw: IBM866 has a pointer 255": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 0": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 1": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 2": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 3": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 4": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 5": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 6": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 7": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 8": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 9": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 10": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 11": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 12": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 13": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 14": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 15": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 16": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 17": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 18": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 19": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 20": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 21": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 22": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 23": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 24": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 25": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 26": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 27": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 28": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 29": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 30": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 31": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 32": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 33": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 34": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 35": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 36": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 37": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 38": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 39": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 40": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 41": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 42": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 43": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 44": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 45": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 46": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 47": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 48": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 49": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 50": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 51": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 52": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 53": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 54": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 55": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 56": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 57": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 58": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 59": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 60": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 61": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 62": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 63": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 64": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 65": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 66": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 67": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 68": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 69": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 70": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 71": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 72": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 73": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 74": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 75": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 76": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 77": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 78": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 79": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 80": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 81": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 82": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 83": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 84": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 85": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 86": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 87": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 88": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 89": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 90": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 91": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 92": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 93": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 94": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 95": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 96": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 97": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 98": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 99": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 100": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 101": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 102": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 103": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 104": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 105": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 106": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 107": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 108": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 109": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 110": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 111": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 112": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 113": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 114": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 115": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 116": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 117": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 118": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 119": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 120": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 121": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 122": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 123": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 124": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 125": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 126": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 127": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 128": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 129": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 130": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 131": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 132": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 133": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 134": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 135": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 136": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 137": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 138": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 139": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 140": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 141": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 142": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 143": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 144": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 145": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 146": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 147": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 148": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 149": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 150": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 151": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 152": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 153": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 154": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 155": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 156": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 157": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 158": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 159": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 160": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 161": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 162": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 163": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 164": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 165": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 166": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 167": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 168": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 169": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 170": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 171": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 172": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 173": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 174": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 175": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 176": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 177": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 178": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 179": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 180": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 181": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 182": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 183": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 184": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 185": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 186": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 187": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 188": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 189": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 190": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 191": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 192": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 193": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 194": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 195": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 196": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 197": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 198": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 199": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 200": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 201": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 202": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 203": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 204": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 205": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 206": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 207": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 208": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 209": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 210": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 211": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 212": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 213": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 214": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 215": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 216": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 217": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 218": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 219": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 220": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 221": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 222": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 223": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 224": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 225": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 226": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 227": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 228": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 229": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 230": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 231": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 232": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 233": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 234": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 235": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 236": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 237": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 238": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 239": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 240": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 241": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 242": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 243": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 244": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 245": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 246": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 247": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 248": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 249": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 250": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 251": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 252": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 253": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 254": { + "status": "PASS" + }, + "Not throw: ISO-8859-2 has a pointer 255": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 0": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 1": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 2": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 3": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 4": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 5": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 6": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 7": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 8": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 9": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 10": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 11": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 12": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 13": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 14": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 15": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 16": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 17": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 18": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 19": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 20": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 21": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 22": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 23": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 24": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 25": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 26": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 27": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 28": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 29": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 30": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 31": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 32": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 33": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 34": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 35": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 36": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 37": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 38": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 39": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 40": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 41": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 42": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 43": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 44": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 45": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 46": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 47": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 48": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 49": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 50": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 51": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 52": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 53": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 54": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 55": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 56": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 57": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 58": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 59": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 60": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 61": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 62": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 63": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 64": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 65": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 66": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 67": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 68": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 69": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 70": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 71": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 72": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 73": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 74": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 75": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 76": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 77": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 78": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 79": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 80": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 81": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 82": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 83": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 84": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 85": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 86": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 87": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 88": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 89": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 90": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 91": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 92": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 93": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 94": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 95": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 96": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 97": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 98": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 99": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 100": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 101": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 102": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 103": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 104": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 105": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 106": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 107": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 108": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 109": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 110": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 111": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 112": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 113": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 114": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 115": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 116": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 117": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 118": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 119": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 120": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 121": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 122": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 123": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 124": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 125": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 126": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 127": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 128": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 129": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 130": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 131": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 132": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 133": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 134": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 135": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 136": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 137": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 138": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 139": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 140": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 141": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 142": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 143": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 144": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 145": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 146": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 147": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 148": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 149": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 150": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 151": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 152": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 153": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 154": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 155": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 156": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 157": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 158": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 159": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 160": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 161": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 162": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 163": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 164": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-3 doesn't have a pointer 165": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 166": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 167": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 168": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 169": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 170": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 171": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 172": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 173": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-3 doesn't have a pointer 174": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 175": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 176": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 177": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 178": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 179": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 180": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 181": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 182": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 183": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 184": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 185": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 186": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 187": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 188": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 189": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-3 doesn't have a pointer 190": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 191": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 192": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 193": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 194": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-3 doesn't have a pointer 195": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 196": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 197": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 198": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 199": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 200": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 201": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 202": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 203": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 204": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 205": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 206": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 207": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-3 doesn't have a pointer 208": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 209": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 210": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 211": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 212": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 213": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 214": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 215": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 216": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 217": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 218": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 219": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 220": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 221": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 222": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 223": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 224": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 225": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 226": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-3 doesn't have a pointer 227": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 228": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 229": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 230": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 231": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 232": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 233": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 234": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 235": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 236": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 237": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 238": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 239": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-3 doesn't have a pointer 240": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 241": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 242": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 243": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 244": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 245": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 246": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 247": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 248": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 249": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 250": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 251": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 252": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 253": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 254": { + "status": "PASS" + }, + "Not throw: ISO-8859-3 has a pointer 255": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 0": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 1": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 2": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 3": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 4": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 5": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 6": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 7": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 8": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 9": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 10": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 11": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 12": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 13": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 14": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 15": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 16": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 17": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 18": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 19": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 20": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 21": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 22": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 23": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 24": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 25": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 26": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 27": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 28": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 29": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 30": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 31": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 32": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 33": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 34": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 35": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 36": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 37": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 38": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 39": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 40": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 41": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 42": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 43": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 44": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 45": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 46": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 47": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 48": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 49": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 50": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 51": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 52": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 53": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 54": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 55": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 56": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 57": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 58": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 59": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 60": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 61": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 62": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 63": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 64": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 65": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 66": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 67": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 68": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 69": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 70": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 71": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 72": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 73": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 74": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 75": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 76": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 77": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 78": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 79": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 80": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 81": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 82": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 83": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 84": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 85": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 86": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 87": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 88": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 89": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 90": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 91": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 92": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 93": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 94": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 95": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 96": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 97": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 98": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 99": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 100": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 101": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 102": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 103": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 104": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 105": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 106": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 107": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 108": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 109": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 110": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 111": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 112": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 113": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 114": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 115": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 116": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 117": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 118": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 119": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 120": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 121": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 122": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 123": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 124": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 125": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 126": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 127": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 128": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 129": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 130": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 131": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 132": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 133": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 134": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 135": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 136": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 137": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 138": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 139": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 140": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 141": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 142": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 143": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 144": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 145": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 146": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 147": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 148": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 149": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 150": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 151": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 152": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 153": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 154": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 155": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 156": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 157": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 158": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 159": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 160": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 161": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 162": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 163": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 164": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 165": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 166": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 167": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 168": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 169": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 170": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 171": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 172": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 173": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 174": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 175": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 176": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 177": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 178": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 179": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 180": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 181": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 182": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 183": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 184": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 185": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 186": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 187": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 188": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 189": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 190": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 191": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 192": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 193": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 194": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 195": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 196": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 197": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 198": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 199": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 200": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 201": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 202": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 203": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 204": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 205": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 206": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 207": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 208": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 209": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 210": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 211": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 212": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 213": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 214": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 215": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 216": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 217": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 218": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 219": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 220": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 221": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 222": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 223": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 224": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 225": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 226": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 227": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 228": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 229": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 230": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 231": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 232": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 233": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 234": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 235": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 236": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 237": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 238": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 239": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 240": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 241": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 242": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 243": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 244": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 245": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 246": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 247": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 248": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 249": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 250": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 251": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 252": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 253": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 254": { + "status": "PASS" + }, + "Not throw: ISO-8859-4 has a pointer 255": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 0": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 1": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 2": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 3": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 4": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 5": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 6": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 7": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 8": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 9": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 10": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 11": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 12": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 13": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 14": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 15": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 16": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 17": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 18": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 19": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 20": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 21": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 22": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 23": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 24": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 25": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 26": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 27": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 28": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 29": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 30": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 31": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 32": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 33": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 34": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 35": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 36": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 37": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 38": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 39": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 40": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 41": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 42": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 43": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 44": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 45": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 46": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 47": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 48": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 49": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 50": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 51": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 52": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 53": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 54": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 55": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 56": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 57": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 58": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 59": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 60": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 61": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 62": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 63": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 64": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 65": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 66": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 67": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 68": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 69": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 70": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 71": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 72": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 73": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 74": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 75": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 76": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 77": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 78": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 79": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 80": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 81": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 82": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 83": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 84": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 85": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 86": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 87": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 88": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 89": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 90": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 91": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 92": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 93": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 94": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 95": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 96": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 97": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 98": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 99": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 100": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 101": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 102": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 103": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 104": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 105": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 106": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 107": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 108": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 109": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 110": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 111": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 112": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 113": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 114": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 115": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 116": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 117": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 118": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 119": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 120": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 121": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 122": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 123": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 124": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 125": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 126": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 127": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 128": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 129": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 130": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 131": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 132": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 133": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 134": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 135": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 136": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 137": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 138": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 139": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 140": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 141": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 142": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 143": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 144": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 145": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 146": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 147": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 148": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 149": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 150": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 151": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 152": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 153": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 154": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 155": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 156": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 157": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 158": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 159": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 160": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 161": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 162": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 163": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 164": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 165": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 166": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 167": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 168": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 169": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 170": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 171": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 172": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 173": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 174": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 175": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 176": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 177": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 178": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 179": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 180": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 181": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 182": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 183": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 184": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 185": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 186": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 187": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 188": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 189": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 190": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 191": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 192": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 193": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 194": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 195": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 196": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 197": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 198": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 199": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 200": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 201": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 202": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 203": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 204": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 205": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 206": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 207": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 208": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 209": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 210": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 211": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 212": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 213": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 214": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 215": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 216": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 217": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 218": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 219": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 220": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 221": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 222": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 223": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 224": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 225": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 226": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 227": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 228": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 229": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 230": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 231": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 232": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 233": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 234": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 235": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 236": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 237": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 238": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 239": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 240": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 241": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 242": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 243": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 244": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 245": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 246": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 247": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 248": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 249": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 250": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 251": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 252": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 253": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 254": { + "status": "PASS" + }, + "Not throw: ISO-8859-5 has a pointer 255": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 0": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 1": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 2": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 3": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 4": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 5": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 6": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 7": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 8": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 9": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 10": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 11": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 12": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 13": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 14": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 15": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 16": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 17": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 18": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 19": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 20": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 21": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 22": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 23": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 24": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 25": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 26": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 27": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 28": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 29": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 30": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 31": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 32": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 33": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 34": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 35": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 36": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 37": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 38": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 39": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 40": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 41": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 42": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 43": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 44": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 45": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 46": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 47": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 48": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 49": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 50": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 51": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 52": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 53": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 54": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 55": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 56": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 57": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 58": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 59": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 60": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 61": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 62": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 63": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 64": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 65": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 66": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 67": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 68": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 69": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 70": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 71": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 72": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 73": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 74": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 75": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 76": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 77": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 78": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 79": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 80": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 81": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 82": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 83": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 84": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 85": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 86": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 87": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 88": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 89": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 90": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 91": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 92": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 93": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 94": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 95": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 96": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 97": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 98": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 99": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 100": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 101": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 102": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 103": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 104": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 105": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 106": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 107": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 108": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 109": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 110": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 111": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 112": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 113": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 114": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 115": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 116": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 117": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 118": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 119": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 120": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 121": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 122": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 123": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 124": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 125": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 126": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 127": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 128": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 129": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 130": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 131": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 132": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 133": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 134": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 135": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 136": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 137": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 138": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 139": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 140": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 141": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 142": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 143": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 144": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 145": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 146": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 147": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 148": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 149": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 150": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 151": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 152": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 153": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 154": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 155": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 156": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 157": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 158": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 159": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 160": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 161": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 162": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 163": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 164": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 165": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 166": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 167": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 168": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 169": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 170": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 171": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 172": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 173": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 174": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 175": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 176": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 177": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 178": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 179": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 180": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 181": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 182": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 183": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 184": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 185": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 186": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 187": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 188": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 189": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 190": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 191": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 192": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 193": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 194": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 195": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 196": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 197": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 198": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 199": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 200": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 201": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 202": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 203": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 204": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 205": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 206": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 207": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 208": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 209": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 210": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 211": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 212": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 213": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 214": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 215": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 216": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 217": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 218": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 219": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 220": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 221": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 222": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 223": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 224": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 225": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 226": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 227": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 228": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 229": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 230": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 231": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 232": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 233": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 234": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 235": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 236": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 237": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 238": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 239": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 240": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 241": { + "status": "PASS" + }, + "Not throw: ISO-8859-6 has a pointer 242": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 243": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 244": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 245": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 246": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 247": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 248": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 249": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 250": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 251": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 252": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 253": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 254": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-6 doesn't have a pointer 255": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 0": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 1": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 2": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 3": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 4": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 5": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 6": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 7": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 8": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 9": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 10": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 11": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 12": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 13": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 14": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 15": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 16": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 17": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 18": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 19": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 20": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 21": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 22": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 23": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 24": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 25": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 26": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 27": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 28": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 29": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 30": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 31": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 32": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 33": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 34": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 35": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 36": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 37": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 38": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 39": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 40": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 41": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 42": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 43": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 44": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 45": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 46": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 47": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 48": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 49": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 50": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 51": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 52": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 53": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 54": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 55": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 56": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 57": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 58": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 59": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 60": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 61": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 62": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 63": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 64": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 65": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 66": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 67": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 68": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 69": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 70": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 71": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 72": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 73": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 74": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 75": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 76": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 77": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 78": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 79": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 80": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 81": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 82": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 83": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 84": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 85": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 86": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 87": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 88": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 89": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 90": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 91": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 92": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 93": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 94": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 95": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 96": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 97": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 98": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 99": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 100": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 101": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 102": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 103": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 104": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 105": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 106": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 107": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 108": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 109": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 110": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 111": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 112": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 113": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 114": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 115": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 116": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 117": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 118": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 119": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 120": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 121": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 122": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 123": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 124": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 125": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 126": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 127": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 128": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 129": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 130": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 131": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 132": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 133": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 134": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 135": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 136": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 137": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 138": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 139": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 140": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 141": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 142": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 143": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 144": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 145": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 146": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 147": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 148": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 149": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 150": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 151": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 152": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 153": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 154": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 155": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 156": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 157": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 158": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 159": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 160": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 161": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 162": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 163": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 164": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 165": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 166": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 167": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 168": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 169": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 170": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 171": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 172": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 173": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-7 doesn't have a pointer 174": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 175": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 176": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 177": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 178": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 179": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 180": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 181": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 182": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 183": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 184": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 185": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 186": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 187": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 188": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 189": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 190": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 191": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 192": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 193": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 194": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 195": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 196": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 197": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 198": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 199": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 200": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 201": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 202": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 203": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 204": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 205": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 206": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 207": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 208": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 209": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-7 doesn't have a pointer 210": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 211": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 212": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 213": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 214": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 215": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 216": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 217": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 218": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 219": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 220": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 221": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 222": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 223": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 224": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 225": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 226": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 227": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 228": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 229": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 230": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 231": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 232": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 233": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 234": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 235": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 236": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 237": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 238": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 239": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 240": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 241": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 242": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 243": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 244": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 245": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 246": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 247": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 248": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 249": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 250": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 251": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 252": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 253": { + "status": "PASS" + }, + "Not throw: ISO-8859-7 has a pointer 254": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-7 doesn't have a pointer 255": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 0": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 1": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 2": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 3": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 4": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 5": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 6": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 7": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 8": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 9": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 10": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 11": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 12": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 13": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 14": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 15": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 16": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 17": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 18": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 19": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 20": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 21": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 22": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 23": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 24": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 25": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 26": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 27": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 28": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 29": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 30": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 31": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 32": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 33": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 34": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 35": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 36": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 37": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 38": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 39": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 40": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 41": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 42": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 43": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 44": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 45": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 46": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 47": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 48": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 49": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 50": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 51": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 52": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 53": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 54": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 55": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 56": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 57": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 58": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 59": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 60": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 61": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 62": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 63": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 64": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 65": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 66": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 67": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 68": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 69": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 70": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 71": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 72": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 73": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 74": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 75": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 76": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 77": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 78": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 79": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 80": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 81": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 82": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 83": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 84": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 85": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 86": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 87": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 88": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 89": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 90": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 91": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 92": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 93": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 94": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 95": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 96": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 97": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 98": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 99": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 100": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 101": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 102": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 103": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 104": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 105": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 106": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 107": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 108": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 109": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 110": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 111": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 112": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 113": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 114": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 115": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 116": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 117": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 118": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 119": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 120": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 121": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 122": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 123": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 124": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 125": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 126": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 127": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 128": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 129": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 130": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 131": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 132": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 133": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 134": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 135": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 136": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 137": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 138": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 139": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 140": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 141": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 142": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 143": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 144": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 145": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 146": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 147": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 148": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 149": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 150": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 151": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 152": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 153": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 154": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 155": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 156": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 157": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 158": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 159": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 160": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 161": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 162": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 163": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 164": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 165": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 166": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 167": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 168": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 169": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 170": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 171": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 172": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 173": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 174": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 175": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 176": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 177": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 178": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 179": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 180": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 181": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 182": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 183": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 184": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 185": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 186": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 187": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 188": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 189": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 190": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 191": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 192": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 193": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 194": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 195": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 196": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 197": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 198": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 199": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 200": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 201": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 202": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 203": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 204": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 205": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 206": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 207": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 208": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 209": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 210": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 211": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 212": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 213": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 214": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 215": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 216": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 217": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 218": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 219": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 220": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 221": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 222": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 223": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 224": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 225": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 226": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 227": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 228": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 229": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 230": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 231": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 232": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 233": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 234": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 235": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 236": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 237": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 238": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 239": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 240": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 241": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 242": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 243": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 244": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 245": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 246": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 247": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 248": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 249": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 250": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 251": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 252": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 253": { + "status": "PASS" + }, + "Not throw: ISO-8859-8 has a pointer 254": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8 doesn't have a pointer 255": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 0": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 1": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 2": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 3": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 4": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 5": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 6": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 7": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 8": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 9": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 10": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 11": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 12": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 13": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 14": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 15": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 16": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 17": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 18": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 19": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 20": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 21": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 22": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 23": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 24": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 25": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 26": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 27": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 28": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 29": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 30": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 31": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 32": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 33": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 34": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 35": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 36": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 37": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 38": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 39": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 40": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 41": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 42": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 43": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 44": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 45": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 46": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 47": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 48": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 49": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 50": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 51": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 52": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 53": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 54": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 55": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 56": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 57": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 58": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 59": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 60": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 61": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 62": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 63": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 64": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 65": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 66": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 67": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 68": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 69": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 70": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 71": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 72": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 73": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 74": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 75": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 76": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 77": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 78": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 79": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 80": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 81": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 82": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 83": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 84": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 85": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 86": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 87": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 88": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 89": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 90": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 91": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 92": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 93": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 94": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 95": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 96": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 97": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 98": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 99": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 100": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 101": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 102": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 103": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 104": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 105": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 106": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 107": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 108": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 109": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 110": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 111": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 112": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 113": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 114": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 115": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 116": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 117": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 118": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 119": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 120": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 121": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 122": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 123": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 124": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 125": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 126": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 127": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 128": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 129": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 130": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 131": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 132": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 133": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 134": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 135": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 136": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 137": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 138": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 139": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 140": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 141": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 142": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 143": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 144": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 145": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 146": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 147": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 148": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 149": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 150": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 151": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 152": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 153": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 154": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 155": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 156": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 157": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 158": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 159": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 160": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 161": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 162": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 163": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 164": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 165": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 166": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 167": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 168": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 169": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 170": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 171": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 172": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 173": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 174": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 175": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 176": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 177": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 178": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 179": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 180": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 181": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 182": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 183": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 184": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 185": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 186": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 187": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 188": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 189": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 190": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 191": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 192": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 193": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 194": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 195": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 196": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 197": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 198": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 199": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 200": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 201": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 202": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 203": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 204": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 205": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 206": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 207": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 208": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 209": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 210": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 211": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 212": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 213": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 214": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 215": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 216": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 217": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 218": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 219": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 220": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 221": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 222": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 223": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 224": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 225": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 226": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 227": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 228": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 229": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 230": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 231": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 232": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 233": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 234": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 235": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 236": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 237": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 238": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 239": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 240": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 241": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 242": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 243": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 244": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 245": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 246": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 247": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 248": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 249": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 250": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 251": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 252": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 253": { + "status": "PASS" + }, + "Not throw: ISO-8859-8-I has a pointer 254": { + "status": "PASS" + }, + "Throw due to fatal flag: ISO-8859-8-I doesn't have a pointer 255": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 0": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 1": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 2": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 3": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 4": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 5": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 6": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 7": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 8": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 9": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 10": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 11": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 12": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 13": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 14": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 15": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 16": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 17": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 18": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 19": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 20": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 21": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 22": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 23": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 24": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 25": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 26": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 27": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 28": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 29": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 30": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 31": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 32": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 33": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 34": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 35": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 36": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 37": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 38": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 39": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 40": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 41": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 42": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 43": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 44": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 45": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 46": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 47": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 48": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 49": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 50": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 51": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 52": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 53": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 54": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 55": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 56": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 57": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 58": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 59": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 60": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 61": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 62": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 63": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 64": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 65": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 66": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 67": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 68": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 69": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 70": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 71": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 72": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 73": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 74": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 75": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 76": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 77": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 78": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 79": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 80": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 81": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 82": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 83": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 84": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 85": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 86": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 87": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 88": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 89": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 90": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 91": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 92": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 93": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 94": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 95": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 96": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 97": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 98": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 99": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 100": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 101": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 102": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 103": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 104": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 105": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 106": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 107": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 108": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 109": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 110": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 111": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 112": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 113": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 114": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 115": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 116": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 117": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 118": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 119": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 120": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 121": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 122": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 123": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 124": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 125": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 126": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 127": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 128": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 129": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 130": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 131": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 132": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 133": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 134": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 135": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 136": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 137": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 138": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 139": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 140": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 141": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 142": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 143": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 144": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 145": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 146": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 147": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 148": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 149": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 150": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 151": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 152": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 153": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 154": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 155": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 156": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 157": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 158": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 159": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 160": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 161": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 162": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 163": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 164": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 165": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 166": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 167": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 168": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 169": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 170": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 171": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 172": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 173": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 174": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 175": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 176": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 177": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 178": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 179": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 180": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 181": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 182": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 183": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 184": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 185": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 186": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 187": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 188": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 189": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 190": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 191": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 192": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 193": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 194": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 195": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 196": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 197": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 198": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 199": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 200": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 201": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 202": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 203": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 204": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 205": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 206": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 207": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 208": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 209": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 210": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 211": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 212": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 213": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 214": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 215": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 216": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 217": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 218": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 219": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 220": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 221": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 222": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 223": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 224": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 225": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 226": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 227": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 228": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 229": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 230": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 231": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 232": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 233": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 234": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 235": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 236": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 237": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 238": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 239": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 240": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 241": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 242": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 243": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 244": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 245": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 246": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 247": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 248": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 249": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 250": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 251": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 252": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 253": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 254": { + "status": "PASS" + }, + "Not throw: ISO-8859-10 has a pointer 255": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 0": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 1": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 2": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 3": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 4": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 5": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 6": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 7": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 8": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 9": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 10": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 11": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 12": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 13": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 14": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 15": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 16": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 17": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 18": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 19": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 20": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 21": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 22": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 23": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 24": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 25": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 26": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 27": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 28": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 29": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 30": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 31": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 32": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 33": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 34": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 35": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 36": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 37": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 38": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 39": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 40": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 41": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 42": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 43": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 44": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 45": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 46": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 47": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 48": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 49": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 50": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 51": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 52": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 53": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 54": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 55": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 56": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 57": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 58": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 59": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 60": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 61": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 62": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 63": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 64": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 65": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 66": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 67": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 68": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 69": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 70": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 71": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 72": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 73": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 74": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 75": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 76": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 77": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 78": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 79": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 80": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 81": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 82": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 83": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 84": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 85": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 86": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 87": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 88": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 89": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 90": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 91": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 92": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 93": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 94": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 95": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 96": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 97": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 98": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 99": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 100": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 101": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 102": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 103": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 104": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 105": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 106": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 107": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 108": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 109": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 110": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 111": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 112": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 113": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 114": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 115": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 116": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 117": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 118": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 119": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 120": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 121": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 122": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 123": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 124": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 125": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 126": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 127": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 128": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 129": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 130": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 131": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 132": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 133": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 134": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 135": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 136": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 137": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 138": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 139": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 140": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 141": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 142": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 143": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 144": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 145": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 146": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 147": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 148": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 149": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 150": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 151": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 152": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 153": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 154": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 155": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 156": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 157": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 158": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 159": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 160": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 161": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 162": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 163": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 164": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 165": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 166": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 167": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 168": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 169": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 170": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 171": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 172": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 173": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 174": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 175": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 176": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 177": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 178": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 179": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 180": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 181": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 182": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 183": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 184": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 185": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 186": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 187": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 188": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 189": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 190": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 191": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 192": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 193": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 194": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 195": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 196": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 197": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 198": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 199": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 200": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 201": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 202": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 203": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 204": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 205": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 206": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 207": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 208": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 209": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 210": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 211": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 212": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 213": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 214": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 215": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 216": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 217": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 218": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 219": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 220": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 221": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 222": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 223": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 224": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 225": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 226": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 227": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 228": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 229": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 230": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 231": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 232": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 233": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 234": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 235": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 236": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 237": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 238": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 239": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 240": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 241": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 242": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 243": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 244": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 245": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 246": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 247": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 248": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 249": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 250": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 251": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 252": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 253": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 254": { + "status": "PASS" + }, + "Not throw: ISO-8859-13 has a pointer 255": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 0": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 1": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 2": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 3": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 4": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 5": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 6": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 7": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 8": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 9": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 10": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 11": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 12": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 13": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 14": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 15": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 16": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 17": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 18": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 19": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 20": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 21": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 22": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 23": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 24": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 25": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 26": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 27": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 28": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 29": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 30": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 31": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 32": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 33": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 34": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 35": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 36": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 37": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 38": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 39": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 40": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 41": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 42": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 43": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 44": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 45": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 46": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 47": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 48": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 49": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 50": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 51": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 52": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 53": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 54": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 55": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 56": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 57": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 58": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 59": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 60": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 61": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 62": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 63": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 64": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 65": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 66": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 67": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 68": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 69": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 70": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 71": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 72": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 73": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 74": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 75": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 76": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 77": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 78": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 79": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 80": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 81": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 82": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 83": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 84": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 85": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 86": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 87": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 88": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 89": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 90": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 91": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 92": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 93": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 94": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 95": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 96": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 97": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 98": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 99": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 100": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 101": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 102": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 103": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 104": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 105": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 106": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 107": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 108": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 109": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 110": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 111": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 112": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 113": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 114": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 115": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 116": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 117": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 118": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 119": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 120": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 121": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 122": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 123": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 124": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 125": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 126": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 127": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 128": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 129": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 130": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 131": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 132": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 133": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 134": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 135": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 136": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 137": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 138": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 139": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 140": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 141": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 142": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 143": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 144": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 145": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 146": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 147": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 148": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 149": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 150": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 151": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 152": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 153": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 154": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 155": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 156": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 157": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 158": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 159": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 160": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 161": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 162": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 163": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 164": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 165": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 166": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 167": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 168": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 169": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 170": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 171": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 172": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 173": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 174": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 175": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 176": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 177": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 178": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 179": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 180": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 181": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 182": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 183": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 184": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 185": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 186": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 187": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 188": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 189": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 190": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 191": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 192": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 193": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 194": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 195": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 196": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 197": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 198": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 199": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 200": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 201": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 202": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 203": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 204": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 205": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 206": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 207": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 208": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 209": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 210": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 211": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 212": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 213": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 214": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 215": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 216": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 217": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 218": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 219": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 220": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 221": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 222": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 223": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 224": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 225": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 226": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 227": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 228": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 229": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 230": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 231": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 232": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 233": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 234": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 235": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 236": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 237": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 238": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 239": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 240": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 241": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 242": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 243": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 244": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 245": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 246": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 247": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 248": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 249": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 250": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 251": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 252": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 253": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 254": { + "status": "PASS" + }, + "Not throw: ISO-8859-14 has a pointer 255": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 0": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 1": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 2": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 3": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 4": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 5": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 6": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 7": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 8": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 9": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 10": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 11": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 12": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 13": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 14": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 15": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 16": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 17": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 18": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 19": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 20": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 21": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 22": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 23": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 24": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 25": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 26": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 27": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 28": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 29": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 30": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 31": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 32": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 33": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 34": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 35": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 36": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 37": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 38": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 39": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 40": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 41": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 42": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 43": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 44": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 45": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 46": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 47": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 48": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 49": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 50": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 51": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 52": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 53": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 54": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 55": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 56": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 57": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 58": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 59": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 60": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 61": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 62": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 63": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 64": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 65": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 66": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 67": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 68": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 69": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 70": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 71": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 72": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 73": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 74": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 75": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 76": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 77": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 78": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 79": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 80": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 81": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 82": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 83": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 84": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 85": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 86": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 87": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 88": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 89": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 90": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 91": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 92": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 93": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 94": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 95": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 96": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 97": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 98": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 99": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 100": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 101": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 102": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 103": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 104": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 105": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 106": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 107": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 108": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 109": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 110": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 111": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 112": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 113": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 114": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 115": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 116": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 117": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 118": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 119": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 120": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 121": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 122": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 123": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 124": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 125": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 126": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 127": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 128": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 129": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 130": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 131": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 132": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 133": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 134": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 135": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 136": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 137": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 138": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 139": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 140": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 141": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 142": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 143": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 144": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 145": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 146": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 147": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 148": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 149": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 150": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 151": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 152": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 153": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 154": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 155": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 156": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 157": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 158": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 159": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 160": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 161": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 162": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 163": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 164": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 165": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 166": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 167": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 168": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 169": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 170": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 171": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 172": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 173": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 174": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 175": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 176": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 177": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 178": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 179": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 180": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 181": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 182": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 183": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 184": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 185": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 186": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 187": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 188": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 189": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 190": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 191": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 192": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 193": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 194": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 195": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 196": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 197": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 198": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 199": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 200": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 201": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 202": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 203": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 204": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 205": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 206": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 207": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 208": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 209": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 210": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 211": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 212": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 213": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 214": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 215": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 216": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 217": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 218": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 219": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 220": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 221": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 222": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 223": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 224": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 225": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 226": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 227": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 228": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 229": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 230": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 231": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 232": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 233": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 234": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 235": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 236": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 237": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 238": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 239": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 240": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 241": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 242": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 243": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 244": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 245": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 246": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 247": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 248": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 249": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 250": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 251": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 252": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 253": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 254": { + "status": "PASS" + }, + "Not throw: ISO-8859-15 has a pointer 255": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 0": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 1": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 2": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 3": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 4": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 5": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 6": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 7": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 8": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 9": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 10": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 11": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 12": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 13": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 14": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 15": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 16": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 17": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 18": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 19": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 20": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 21": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 22": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 23": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 24": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 25": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 26": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 27": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 28": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 29": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 30": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 31": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 32": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 33": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 34": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 35": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 36": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 37": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 38": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 39": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 40": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 41": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 42": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 43": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 44": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 45": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 46": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 47": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 48": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 49": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 50": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 51": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 52": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 53": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 54": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 55": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 56": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 57": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 58": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 59": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 60": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 61": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 62": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 63": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 64": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 65": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 66": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 67": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 68": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 69": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 70": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 71": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 72": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 73": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 74": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 75": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 76": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 77": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 78": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 79": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 80": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 81": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 82": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 83": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 84": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 85": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 86": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 87": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 88": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 89": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 90": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 91": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 92": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 93": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 94": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 95": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 96": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 97": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 98": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 99": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 100": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 101": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 102": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 103": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 104": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 105": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 106": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 107": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 108": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 109": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 110": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 111": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 112": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 113": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 114": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 115": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 116": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 117": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 118": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 119": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 120": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 121": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 122": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 123": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 124": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 125": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 126": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 127": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 128": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 129": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 130": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 131": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 132": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 133": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 134": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 135": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 136": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 137": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 138": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 139": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 140": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 141": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 142": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 143": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 144": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 145": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 146": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 147": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 148": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 149": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 150": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 151": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 152": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 153": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 154": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 155": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 156": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 157": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 158": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 159": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 160": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 161": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 162": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 163": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 164": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 165": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 166": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 167": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 168": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 169": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 170": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 171": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 172": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 173": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 174": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 175": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 176": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 177": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 178": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 179": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 180": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 181": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 182": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 183": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 184": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 185": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 186": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 187": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 188": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 189": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 190": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 191": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 192": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 193": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 194": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 195": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 196": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 197": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 198": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 199": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 200": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 201": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 202": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 203": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 204": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 205": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 206": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 207": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 208": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 209": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 210": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 211": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 212": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 213": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 214": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 215": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 216": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 217": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 218": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 219": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 220": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 221": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 222": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 223": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 224": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 225": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 226": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 227": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 228": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 229": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 230": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 231": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 232": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 233": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 234": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 235": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 236": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 237": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 238": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 239": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 240": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 241": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 242": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 243": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 244": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 245": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 246": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 247": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 248": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 249": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 250": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 251": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 252": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 253": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 254": { + "status": "PASS" + }, + "Not throw: ISO-8859-16 has a pointer 255": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 0": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 1": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 2": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 3": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 4": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 5": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 6": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 7": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 8": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 9": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 10": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 11": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 12": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 13": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 14": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 15": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 16": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 17": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 18": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 19": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 20": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 21": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 22": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 23": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 24": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 25": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 26": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 27": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 28": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 29": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 30": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 31": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 32": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 33": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 34": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 35": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 36": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 37": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 38": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 39": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 40": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 41": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 42": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 43": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 44": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 45": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 46": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 47": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 48": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 49": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 50": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 51": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 52": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 53": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 54": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 55": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 56": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 57": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 58": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 59": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 60": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 61": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 62": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 63": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 64": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 65": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 66": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 67": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 68": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 69": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 70": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 71": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 72": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 73": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 74": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 75": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 76": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 77": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 78": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 79": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 80": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 81": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 82": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 83": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 84": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 85": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 86": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 87": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 88": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 89": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 90": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 91": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 92": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 93": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 94": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 95": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 96": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 97": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 98": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 99": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 100": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 101": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 102": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 103": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 104": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 105": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 106": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 107": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 108": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 109": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 110": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 111": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 112": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 113": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 114": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 115": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 116": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 117": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 118": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 119": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 120": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 121": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 122": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 123": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 124": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 125": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 126": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 127": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 128": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 129": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 130": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 131": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 132": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 133": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 134": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 135": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 136": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 137": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 138": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 139": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 140": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 141": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 142": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 143": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 144": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 145": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 146": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 147": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 148": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 149": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 150": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 151": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 152": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 153": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 154": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 155": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 156": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 157": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 158": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 159": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 160": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 161": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 162": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 163": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 164": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 165": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 166": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 167": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 168": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 169": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 170": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 171": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 172": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 173": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 174": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 175": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 176": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 177": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 178": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 179": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 180": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 181": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 182": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 183": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 184": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 185": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 186": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 187": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 188": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 189": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 190": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 191": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 192": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 193": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 194": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 195": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 196": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 197": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 198": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 199": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 200": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 201": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 202": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 203": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 204": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 205": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 206": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 207": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 208": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 209": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 210": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 211": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 212": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 213": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 214": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 215": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 216": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 217": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 218": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 219": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 220": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 221": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 222": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 223": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 224": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 225": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 226": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 227": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 228": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 229": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 230": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 231": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 232": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 233": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 234": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 235": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 236": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 237": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 238": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 239": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 240": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 241": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 242": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 243": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 244": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 245": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 246": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 247": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 248": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 249": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 250": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 251": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 252": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 253": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 254": { + "status": "PASS" + }, + "Not throw: KOI8-R has a pointer 255": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 0": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 1": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 2": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 3": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 4": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 5": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 6": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 7": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 8": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 9": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 10": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 11": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 12": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 13": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 14": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 15": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 16": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 17": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 18": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 19": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 20": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 21": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 22": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 23": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 24": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 25": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 26": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 27": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 28": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 29": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 30": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 31": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 32": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 33": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 34": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 35": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 36": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 37": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 38": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 39": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 40": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 41": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 42": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 43": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 44": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 45": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 46": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 47": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 48": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 49": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 50": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 51": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 52": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 53": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 54": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 55": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 56": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 57": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 58": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 59": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 60": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 61": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 62": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 63": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 64": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 65": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 66": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 67": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 68": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 69": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 70": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 71": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 72": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 73": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 74": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 75": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 76": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 77": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 78": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 79": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 80": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 81": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 82": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 83": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 84": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 85": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 86": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 87": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 88": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 89": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 90": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 91": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 92": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 93": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 94": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 95": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 96": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 97": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 98": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 99": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 100": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 101": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 102": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 103": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 104": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 105": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 106": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 107": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 108": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 109": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 110": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 111": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 112": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 113": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 114": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 115": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 116": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 117": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 118": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 119": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 120": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 121": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 122": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 123": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 124": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 125": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 126": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 127": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 128": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 129": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 130": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 131": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 132": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 133": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 134": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 135": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 136": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 137": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 138": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 139": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 140": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 141": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 142": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 143": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 144": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 145": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 146": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 147": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 148": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 149": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 150": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 151": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 152": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 153": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 154": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 155": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 156": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 157": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 158": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 159": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 160": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 161": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 162": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 163": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 164": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 165": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 166": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 167": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 168": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 169": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 170": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 171": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 172": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 173": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 174": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 175": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 176": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 177": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 178": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 179": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 180": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 181": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 182": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 183": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 184": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 185": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 186": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 187": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 188": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 189": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 190": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 191": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 192": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 193": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 194": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 195": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 196": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 197": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 198": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 199": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 200": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 201": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 202": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 203": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 204": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 205": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 206": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 207": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 208": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 209": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 210": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 211": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 212": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 213": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 214": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 215": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 216": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 217": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 218": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 219": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 220": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 221": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 222": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 223": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 224": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 225": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 226": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 227": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 228": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 229": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 230": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 231": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 232": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 233": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 234": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 235": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 236": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 237": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 238": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 239": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 240": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 241": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 242": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 243": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 244": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 245": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 246": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 247": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 248": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 249": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 250": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 251": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 252": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 253": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 254": { + "status": "PASS" + }, + "Not throw: KOI8-U has a pointer 255": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 0": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 1": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 2": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 3": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 4": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 5": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 6": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 7": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 8": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 9": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 10": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 11": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 12": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 13": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 14": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 15": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 16": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 17": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 18": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 19": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 20": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 21": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 22": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 23": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 24": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 25": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 26": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 27": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 28": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 29": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 30": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 31": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 32": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 33": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 34": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 35": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 36": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 37": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 38": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 39": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 40": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 41": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 42": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 43": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 44": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 45": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 46": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 47": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 48": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 49": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 50": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 51": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 52": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 53": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 54": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 55": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 56": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 57": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 58": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 59": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 60": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 61": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 62": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 63": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 64": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 65": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 66": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 67": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 68": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 69": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 70": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 71": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 72": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 73": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 74": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 75": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 76": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 77": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 78": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 79": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 80": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 81": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 82": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 83": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 84": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 85": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 86": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 87": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 88": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 89": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 90": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 91": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 92": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 93": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 94": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 95": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 96": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 97": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 98": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 99": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 100": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 101": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 102": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 103": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 104": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 105": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 106": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 107": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 108": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 109": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 110": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 111": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 112": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 113": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 114": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 115": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 116": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 117": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 118": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 119": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 120": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 121": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 122": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 123": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 124": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 125": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 126": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 127": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 128": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 129": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 130": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 131": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 132": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 133": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 134": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 135": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 136": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 137": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 138": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 139": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 140": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 141": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 142": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 143": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 144": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 145": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 146": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 147": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 148": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 149": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 150": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 151": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 152": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 153": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 154": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 155": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 156": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 157": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 158": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 159": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 160": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 161": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 162": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 163": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 164": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 165": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 166": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 167": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 168": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 169": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 170": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 171": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 172": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 173": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 174": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 175": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 176": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 177": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 178": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 179": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 180": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 181": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 182": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 183": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 184": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 185": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 186": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 187": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 188": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 189": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 190": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 191": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 192": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 193": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 194": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 195": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 196": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 197": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 198": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 199": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 200": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 201": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 202": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 203": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 204": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 205": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 206": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 207": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 208": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 209": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 210": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 211": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 212": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 213": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 214": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 215": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 216": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 217": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 218": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 219": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 220": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 221": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 222": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 223": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 224": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 225": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 226": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 227": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 228": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 229": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 230": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 231": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 232": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 233": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 234": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 235": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 236": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 237": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 238": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 239": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 240": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 241": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 242": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 243": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 244": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 245": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 246": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 247": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 248": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 249": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 250": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 251": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 252": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 253": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 254": { + "status": "PASS" + }, + "Not throw: macintosh has a pointer 255": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 0": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 1": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 2": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 3": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 4": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 5": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 6": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 7": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 8": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 9": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 10": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 11": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 12": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 13": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 14": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 15": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 16": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 17": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 18": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 19": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 20": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 21": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 22": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 23": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 24": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 25": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 26": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 27": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 28": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 29": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 30": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 31": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 32": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 33": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 34": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 35": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 36": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 37": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 38": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 39": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 40": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 41": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 42": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 43": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 44": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 45": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 46": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 47": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 48": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 49": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 50": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 51": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 52": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 53": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 54": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 55": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 56": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 57": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 58": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 59": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 60": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 61": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 62": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 63": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 64": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 65": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 66": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 67": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 68": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 69": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 70": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 71": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 72": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 73": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 74": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 75": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 76": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 77": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 78": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 79": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 80": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 81": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 82": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 83": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 84": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 85": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 86": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 87": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 88": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 89": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 90": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 91": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 92": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 93": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 94": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 95": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 96": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 97": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 98": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 99": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 100": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 101": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 102": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 103": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 104": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 105": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 106": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 107": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 108": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 109": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 110": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 111": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 112": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 113": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 114": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 115": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 116": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 117": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 118": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 119": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 120": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 121": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 122": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 123": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 124": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 125": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 126": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 127": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 128": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 129": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 130": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 131": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 132": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 133": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 134": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 135": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 136": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 137": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 138": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 139": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 140": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 141": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 142": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 143": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 144": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 145": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 146": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 147": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 148": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 149": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 150": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 151": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 152": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 153": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 154": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 155": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 156": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 157": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 158": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 159": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 160": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 161": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 162": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 163": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 164": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 165": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 166": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 167": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 168": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 169": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 170": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 171": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 172": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 173": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 174": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 175": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 176": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 177": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 178": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 179": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 180": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 181": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 182": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 183": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 184": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 185": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 186": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 187": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 188": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 189": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 190": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 191": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 192": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 193": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 194": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 195": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 196": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 197": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 198": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 199": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 200": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 201": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 202": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 203": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 204": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 205": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 206": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 207": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 208": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 209": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 210": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 211": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 212": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 213": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 214": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 215": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 216": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 217": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 218": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-874 doesn't have a pointer 219": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-874 doesn't have a pointer 220": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-874 doesn't have a pointer 221": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-874 doesn't have a pointer 222": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 223": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 224": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 225": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 226": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 227": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 228": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 229": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 230": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 231": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 232": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 233": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 234": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 235": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 236": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 237": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 238": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 239": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 240": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 241": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 242": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 243": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 244": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 245": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 246": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 247": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 248": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 249": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 250": { + "status": "PASS" + }, + "Not throw: windows-874 has a pointer 251": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-874 doesn't have a pointer 252": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-874 doesn't have a pointer 253": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-874 doesn't have a pointer 254": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-874 doesn't have a pointer 255": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 0": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 1": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 2": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 3": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 4": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 5": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 6": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 7": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 8": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 9": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 10": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 11": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 12": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 13": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 14": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 15": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 16": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 17": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 18": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 19": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 20": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 21": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 22": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 23": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 24": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 25": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 26": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 27": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 28": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 29": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 30": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 31": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 32": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 33": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 34": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 35": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 36": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 37": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 38": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 39": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 40": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 41": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 42": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 43": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 44": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 45": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 46": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 47": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 48": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 49": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 50": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 51": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 52": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 53": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 54": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 55": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 56": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 57": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 58": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 59": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 60": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 61": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 62": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 63": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 64": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 65": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 66": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 67": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 68": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 69": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 70": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 71": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 72": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 73": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 74": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 75": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 76": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 77": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 78": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 79": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 80": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 81": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 82": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 83": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 84": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 85": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 86": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 87": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 88": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 89": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 90": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 91": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 92": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 93": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 94": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 95": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 96": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 97": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 98": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 99": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 100": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 101": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 102": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 103": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 104": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 105": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 106": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 107": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 108": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 109": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 110": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 111": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 112": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 113": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 114": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 115": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 116": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 117": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 118": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 119": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 120": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 121": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 122": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 123": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 124": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 125": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 126": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 127": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 128": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 129": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 130": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 131": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 132": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 133": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 134": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 135": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 136": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 137": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 138": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 139": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 140": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 141": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 142": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 143": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 144": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 145": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 146": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 147": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 148": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 149": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 150": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 151": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 152": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 153": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 154": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 155": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 156": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 157": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 158": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 159": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 160": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 161": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 162": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 163": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 164": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 165": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 166": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 167": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 168": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 169": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 170": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 171": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 172": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 173": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 174": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 175": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 176": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 177": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 178": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 179": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 180": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 181": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 182": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 183": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 184": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 185": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 186": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 187": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 188": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 189": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 190": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 191": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 192": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 193": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 194": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 195": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 196": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 197": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 198": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 199": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 200": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 201": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 202": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 203": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 204": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 205": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 206": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 207": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 208": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 209": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 210": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 211": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 212": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 213": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 214": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 215": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 216": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 217": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 218": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 219": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 220": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 221": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 222": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 223": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 224": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 225": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 226": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 227": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 228": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 229": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 230": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 231": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 232": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 233": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 234": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 235": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 236": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 237": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 238": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 239": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 240": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 241": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 242": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 243": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 244": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 245": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 246": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 247": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 248": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 249": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 250": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 251": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 252": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 253": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 254": { + "status": "PASS" + }, + "Not throw: windows-1250 has a pointer 255": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 0": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 1": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 2": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 3": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 4": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 5": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 6": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 7": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 8": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 9": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 10": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 11": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 12": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 13": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 14": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 15": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 16": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 17": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 18": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 19": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 20": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 21": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 22": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 23": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 24": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 25": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 26": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 27": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 28": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 29": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 30": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 31": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 32": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 33": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 34": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 35": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 36": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 37": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 38": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 39": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 40": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 41": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 42": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 43": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 44": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 45": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 46": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 47": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 48": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 49": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 50": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 51": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 52": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 53": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 54": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 55": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 56": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 57": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 58": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 59": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 60": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 61": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 62": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 63": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 64": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 65": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 66": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 67": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 68": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 69": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 70": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 71": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 72": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 73": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 74": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 75": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 76": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 77": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 78": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 79": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 80": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 81": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 82": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 83": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 84": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 85": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 86": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 87": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 88": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 89": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 90": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 91": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 92": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 93": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 94": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 95": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 96": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 97": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 98": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 99": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 100": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 101": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 102": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 103": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 104": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 105": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 106": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 107": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 108": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 109": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 110": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 111": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 112": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 113": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 114": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 115": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 116": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 117": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 118": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 119": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 120": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 121": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 122": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 123": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 124": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 125": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 126": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 127": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 128": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 129": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 130": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 131": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 132": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 133": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 134": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 135": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 136": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 137": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 138": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 139": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 140": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 141": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 142": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 143": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 144": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 145": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 146": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 147": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 148": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 149": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 150": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 151": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 152": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 153": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 154": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 155": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 156": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 157": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 158": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 159": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 160": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 161": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 162": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 163": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 164": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 165": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 166": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 167": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 168": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 169": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 170": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 171": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 172": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 173": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 174": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 175": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 176": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 177": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 178": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 179": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 180": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 181": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 182": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 183": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 184": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 185": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 186": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 187": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 188": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 189": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 190": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 191": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 192": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 193": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 194": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 195": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 196": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 197": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 198": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 199": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 200": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 201": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 202": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 203": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 204": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 205": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 206": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 207": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 208": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 209": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 210": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 211": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 212": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 213": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 214": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 215": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 216": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 217": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 218": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 219": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 220": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 221": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 222": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 223": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 224": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 225": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 226": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 227": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 228": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 229": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 230": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 231": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 232": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 233": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 234": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 235": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 236": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 237": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 238": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 239": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 240": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 241": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 242": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 243": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 244": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 245": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 246": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 247": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 248": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 249": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 250": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 251": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 252": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 253": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 254": { + "status": "PASS" + }, + "Not throw: windows-1251 has a pointer 255": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 0": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 1": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 2": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 3": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 4": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 5": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 6": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 7": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 8": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 9": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 10": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 11": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 12": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 13": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 14": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 15": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 16": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 17": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 18": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 19": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 20": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 21": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 22": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 23": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 24": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 25": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 26": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 27": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 28": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 29": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 30": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 31": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 32": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 33": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 34": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 35": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 36": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 37": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 38": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 39": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 40": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 41": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 42": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 43": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 44": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 45": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 46": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 47": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 48": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 49": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 50": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 51": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 52": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 53": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 54": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 55": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 56": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 57": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 58": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 59": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 60": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 61": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 62": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 63": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 64": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 65": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 66": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 67": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 68": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 69": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 70": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 71": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 72": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 73": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 74": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 75": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 76": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 77": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 78": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 79": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 80": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 81": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 82": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 83": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 84": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 85": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 86": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 87": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 88": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 89": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 90": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 91": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 92": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 93": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 94": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 95": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 96": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 97": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 98": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 99": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 100": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 101": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 102": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 103": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 104": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 105": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 106": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 107": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 108": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 109": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 110": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 111": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 112": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 113": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 114": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 115": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 116": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 117": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 118": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 119": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 120": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 121": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 122": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 123": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 124": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 125": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 126": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 127": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 128": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 129": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 130": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 131": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 132": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 133": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 134": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 135": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 136": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 137": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 138": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 139": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 140": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 141": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 142": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 143": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 144": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 145": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 146": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 147": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 148": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 149": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 150": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 151": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 152": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 153": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 154": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 155": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 156": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 157": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 158": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 159": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 160": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 161": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 162": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 163": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 164": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 165": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 166": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 167": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 168": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 169": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 170": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 171": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 172": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 173": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 174": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 175": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 176": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 177": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 178": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 179": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 180": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 181": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 182": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 183": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 184": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 185": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 186": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 187": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 188": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 189": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 190": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 191": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 192": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 193": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 194": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 195": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 196": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 197": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 198": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 199": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 200": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 201": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 202": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 203": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 204": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 205": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 206": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 207": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 208": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 209": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 210": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 211": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 212": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 213": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 214": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 215": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 216": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 217": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 218": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 219": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 220": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 221": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 222": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 223": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 224": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 225": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 226": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 227": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 228": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 229": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 230": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 231": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 232": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 233": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 234": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 235": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 236": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 237": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 238": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 239": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 240": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 241": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 242": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 243": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 244": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 245": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 246": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 247": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 248": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 249": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 250": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 251": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 252": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 253": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 254": { + "status": "PASS" + }, + "Not throw: windows-1252 has a pointer 255": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 0": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 1": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 2": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 3": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 4": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 5": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 6": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 7": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 8": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 9": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 10": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 11": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 12": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 13": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 14": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 15": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 16": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 17": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 18": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 19": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 20": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 21": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 22": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 23": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 24": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 25": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 26": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 27": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 28": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 29": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 30": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 31": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 32": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 33": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 34": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 35": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 36": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 37": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 38": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 39": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 40": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 41": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 42": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 43": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 44": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 45": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 46": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 47": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 48": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 49": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 50": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 51": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 52": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 53": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 54": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 55": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 56": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 57": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 58": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 59": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 60": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 61": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 62": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 63": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 64": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 65": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 66": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 67": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 68": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 69": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 70": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 71": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 72": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 73": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 74": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 75": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 76": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 77": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 78": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 79": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 80": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 81": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 82": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 83": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 84": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 85": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 86": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 87": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 88": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 89": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 90": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 91": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 92": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 93": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 94": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 95": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 96": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 97": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 98": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 99": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 100": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 101": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 102": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 103": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 104": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 105": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 106": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 107": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 108": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 109": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 110": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 111": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 112": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 113": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 114": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 115": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 116": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 117": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 118": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 119": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 120": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 121": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 122": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 123": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 124": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 125": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 126": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 127": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 128": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 129": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 130": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 131": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 132": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 133": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 134": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 135": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 136": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 137": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 138": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 139": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 140": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 141": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 142": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 143": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 144": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 145": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 146": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 147": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 148": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 149": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 150": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 151": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 152": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 153": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 154": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 155": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 156": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 157": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 158": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 159": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 160": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 161": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 162": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 163": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 164": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 165": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 166": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 167": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 168": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 169": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1253 doesn't have a pointer 170": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 171": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 172": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 173": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 174": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 175": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 176": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 177": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 178": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 179": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 180": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 181": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 182": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 183": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 184": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 185": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 186": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 187": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 188": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 189": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 190": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 191": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 192": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 193": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 194": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 195": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 196": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 197": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 198": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 199": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 200": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 201": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 202": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 203": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 204": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 205": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 206": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 207": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 208": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 209": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1253 doesn't have a pointer 210": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 211": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 212": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 213": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 214": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 215": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 216": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 217": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 218": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 219": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 220": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 221": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 222": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 223": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 224": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 225": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 226": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 227": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 228": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 229": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 230": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 231": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 232": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 233": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 234": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 235": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 236": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 237": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 238": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 239": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 240": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 241": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 242": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 243": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 244": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 245": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 246": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 247": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 248": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 249": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 250": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 251": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 252": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 253": { + "status": "PASS" + }, + "Not throw: windows-1253 has a pointer 254": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1253 doesn't have a pointer 255": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 0": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 1": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 2": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 3": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 4": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 5": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 6": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 7": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 8": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 9": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 10": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 11": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 12": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 13": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 14": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 15": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 16": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 17": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 18": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 19": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 20": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 21": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 22": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 23": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 24": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 25": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 26": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 27": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 28": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 29": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 30": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 31": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 32": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 33": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 34": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 35": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 36": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 37": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 38": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 39": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 40": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 41": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 42": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 43": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 44": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 45": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 46": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 47": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 48": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 49": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 50": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 51": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 52": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 53": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 54": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 55": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 56": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 57": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 58": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 59": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 60": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 61": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 62": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 63": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 64": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 65": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 66": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 67": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 68": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 69": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 70": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 71": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 72": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 73": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 74": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 75": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 76": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 77": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 78": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 79": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 80": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 81": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 82": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 83": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 84": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 85": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 86": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 87": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 88": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 89": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 90": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 91": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 92": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 93": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 94": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 95": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 96": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 97": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 98": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 99": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 100": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 101": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 102": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 103": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 104": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 105": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 106": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 107": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 108": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 109": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 110": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 111": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 112": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 113": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 114": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 115": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 116": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 117": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 118": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 119": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 120": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 121": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 122": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 123": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 124": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 125": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 126": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 127": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 128": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 129": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 130": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 131": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 132": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 133": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 134": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 135": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 136": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 137": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 138": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 139": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 140": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 141": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 142": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 143": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 144": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 145": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 146": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 147": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 148": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 149": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 150": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 151": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 152": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 153": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 154": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 155": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 156": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 157": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 158": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 159": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 160": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 161": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 162": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 163": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 164": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 165": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 166": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 167": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 168": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 169": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 170": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 171": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 172": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 173": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 174": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 175": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 176": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 177": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 178": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 179": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 180": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 181": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 182": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 183": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 184": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 185": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 186": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 187": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 188": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 189": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 190": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 191": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 192": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 193": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 194": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 195": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 196": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 197": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 198": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 199": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 200": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 201": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 202": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 203": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 204": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 205": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 206": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 207": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 208": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 209": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 210": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 211": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 212": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 213": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 214": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 215": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 216": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 217": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 218": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 219": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 220": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 221": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 222": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 223": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 224": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 225": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 226": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 227": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 228": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 229": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 230": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 231": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 232": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 233": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 234": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 235": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 236": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 237": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 238": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 239": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 240": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 241": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 242": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 243": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 244": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 245": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 246": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 247": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 248": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 249": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 250": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 251": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 252": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 253": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 254": { + "status": "PASS" + }, + "Not throw: windows-1254 has a pointer 255": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 0": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 1": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 2": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 3": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 4": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 5": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 6": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 7": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 8": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 9": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 10": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 11": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 12": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 13": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 14": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 15": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 16": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 17": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 18": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 19": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 20": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 21": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 22": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 23": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 24": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 25": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 26": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 27": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 28": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 29": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 30": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 31": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 32": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 33": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 34": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 35": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 36": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 37": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 38": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 39": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 40": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 41": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 42": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 43": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 44": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 45": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 46": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 47": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 48": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 49": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 50": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 51": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 52": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 53": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 54": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 55": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 56": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 57": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 58": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 59": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 60": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 61": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 62": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 63": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 64": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 65": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 66": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 67": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 68": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 69": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 70": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 71": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 72": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 73": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 74": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 75": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 76": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 77": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 78": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 79": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 80": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 81": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 82": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 83": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 84": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 85": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 86": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 87": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 88": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 89": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 90": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 91": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 92": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 93": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 94": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 95": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 96": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 97": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 98": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 99": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 100": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 101": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 102": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 103": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 104": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 105": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 106": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 107": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 108": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 109": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 110": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 111": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 112": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 113": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 114": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 115": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 116": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 117": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 118": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 119": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 120": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 121": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 122": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 123": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 124": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 125": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 126": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 127": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 128": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 129": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 130": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 131": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 132": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 133": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 134": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 135": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 136": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 137": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 138": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 139": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 140": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 141": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 142": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 143": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 144": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 145": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 146": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 147": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 148": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 149": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 150": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 151": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 152": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 153": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 154": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 155": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 156": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 157": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 158": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 159": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 160": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 161": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 162": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 163": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 164": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 165": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 166": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 167": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 168": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 169": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 170": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 171": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 172": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 173": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 174": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 175": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 176": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 177": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 178": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 179": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 180": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 181": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 182": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 183": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 184": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 185": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 186": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 187": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 188": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 189": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 190": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 191": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 192": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 193": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 194": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 195": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 196": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 197": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 198": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 199": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 200": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 201": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 202": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 203": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 204": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 205": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 206": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 207": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 208": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 209": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 210": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 211": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 212": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 213": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 214": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 215": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 216": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1255 doesn't have a pointer 217": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1255 doesn't have a pointer 218": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1255 doesn't have a pointer 219": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1255 doesn't have a pointer 220": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1255 doesn't have a pointer 221": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1255 doesn't have a pointer 222": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1255 doesn't have a pointer 223": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 224": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 225": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 226": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 227": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 228": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 229": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 230": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 231": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 232": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 233": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 234": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 235": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 236": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 237": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 238": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 239": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 240": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 241": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 242": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 243": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 244": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 245": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 246": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 247": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 248": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 249": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 250": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1255 doesn't have a pointer 251": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1255 doesn't have a pointer 252": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 253": { + "status": "PASS" + }, + "Not throw: windows-1255 has a pointer 254": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1255 doesn't have a pointer 255": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 0": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 1": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 2": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 3": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 4": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 5": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 6": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 7": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 8": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 9": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 10": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 11": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 12": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 13": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 14": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 15": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 16": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 17": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 18": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 19": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 20": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 21": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 22": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 23": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 24": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 25": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 26": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 27": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 28": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 29": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 30": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 31": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 32": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 33": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 34": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 35": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 36": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 37": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 38": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 39": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 40": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 41": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 42": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 43": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 44": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 45": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 46": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 47": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 48": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 49": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 50": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 51": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 52": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 53": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 54": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 55": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 56": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 57": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 58": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 59": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 60": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 61": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 62": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 63": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 64": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 65": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 66": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 67": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 68": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 69": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 70": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 71": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 72": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 73": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 74": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 75": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 76": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 77": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 78": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 79": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 80": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 81": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 82": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 83": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 84": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 85": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 86": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 87": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 88": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 89": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 90": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 91": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 92": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 93": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 94": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 95": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 96": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 97": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 98": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 99": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 100": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 101": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 102": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 103": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 104": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 105": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 106": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 107": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 108": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 109": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 110": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 111": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 112": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 113": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 114": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 115": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 116": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 117": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 118": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 119": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 120": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 121": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 122": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 123": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 124": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 125": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 126": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 127": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 128": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 129": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 130": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 131": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 132": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 133": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 134": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 135": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 136": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 137": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 138": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 139": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 140": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 141": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 142": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 143": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 144": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 145": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 146": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 147": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 148": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 149": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 150": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 151": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 152": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 153": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 154": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 155": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 156": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 157": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 158": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 159": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 160": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 161": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 162": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 163": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 164": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 165": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 166": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 167": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 168": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 169": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 170": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 171": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 172": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 173": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 174": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 175": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 176": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 177": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 178": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 179": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 180": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 181": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 182": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 183": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 184": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 185": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 186": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 187": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 188": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 189": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 190": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 191": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 192": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 193": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 194": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 195": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 196": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 197": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 198": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 199": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 200": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 201": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 202": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 203": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 204": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 205": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 206": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 207": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 208": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 209": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 210": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 211": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 212": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 213": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 214": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 215": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 216": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 217": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 218": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 219": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 220": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 221": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 222": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 223": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 224": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 225": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 226": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 227": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 228": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 229": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 230": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 231": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 232": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 233": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 234": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 235": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 236": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 237": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 238": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 239": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 240": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 241": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 242": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 243": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 244": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 245": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 246": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 247": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 248": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 249": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 250": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 251": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 252": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 253": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 254": { + "status": "PASS" + }, + "Not throw: windows-1256 has a pointer 255": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 0": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 1": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 2": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 3": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 4": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 5": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 6": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 7": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 8": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 9": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 10": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 11": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 12": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 13": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 14": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 15": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 16": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 17": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 18": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 19": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 20": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 21": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 22": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 23": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 24": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 25": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 26": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 27": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 28": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 29": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 30": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 31": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 32": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 33": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 34": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 35": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 36": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 37": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 38": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 39": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 40": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 41": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 42": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 43": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 44": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 45": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 46": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 47": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 48": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 49": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 50": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 51": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 52": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 53": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 54": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 55": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 56": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 57": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 58": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 59": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 60": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 61": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 62": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 63": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 64": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 65": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 66": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 67": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 68": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 69": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 70": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 71": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 72": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 73": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 74": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 75": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 76": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 77": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 78": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 79": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 80": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 81": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 82": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 83": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 84": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 85": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 86": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 87": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 88": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 89": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 90": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 91": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 92": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 93": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 94": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 95": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 96": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 97": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 98": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 99": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 100": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 101": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 102": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 103": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 104": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 105": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 106": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 107": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 108": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 109": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 110": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 111": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 112": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 113": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 114": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 115": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 116": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 117": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 118": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 119": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 120": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 121": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 122": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 123": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 124": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 125": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 126": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 127": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 128": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 129": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 130": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 131": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 132": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 133": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 134": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 135": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 136": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 137": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 138": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 139": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 140": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 141": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 142": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 143": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 144": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 145": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 146": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 147": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 148": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 149": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 150": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 151": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 152": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 153": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 154": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 155": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 156": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 157": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 158": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 159": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 160": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1257 doesn't have a pointer 161": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 162": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 163": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 164": { + "status": "PASS" + }, + "Throw due to fatal flag: windows-1257 doesn't have a pointer 165": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 166": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 167": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 168": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 169": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 170": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 171": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 172": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 173": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 174": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 175": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 176": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 177": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 178": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 179": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 180": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 181": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 182": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 183": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 184": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 185": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 186": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 187": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 188": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 189": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 190": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 191": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 192": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 193": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 194": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 195": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 196": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 197": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 198": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 199": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 200": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 201": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 202": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 203": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 204": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 205": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 206": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 207": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 208": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 209": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 210": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 211": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 212": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 213": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 214": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 215": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 216": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 217": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 218": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 219": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 220": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 221": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 222": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 223": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 224": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 225": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 226": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 227": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 228": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 229": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 230": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 231": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 232": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 233": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 234": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 235": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 236": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 237": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 238": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 239": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 240": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 241": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 242": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 243": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 244": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 245": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 246": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 247": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 248": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 249": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 250": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 251": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 252": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 253": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 254": { + "status": "PASS" + }, + "Not throw: windows-1257 has a pointer 255": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 0": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 1": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 2": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 3": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 4": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 5": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 6": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 7": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 8": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 9": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 10": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 11": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 12": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 13": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 14": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 15": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 16": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 17": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 18": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 19": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 20": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 21": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 22": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 23": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 24": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 25": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 26": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 27": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 28": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 29": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 30": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 31": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 32": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 33": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 34": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 35": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 36": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 37": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 38": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 39": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 40": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 41": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 42": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 43": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 44": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 45": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 46": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 47": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 48": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 49": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 50": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 51": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 52": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 53": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 54": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 55": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 56": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 57": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 58": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 59": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 60": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 61": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 62": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 63": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 64": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 65": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 66": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 67": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 68": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 69": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 70": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 71": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 72": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 73": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 74": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 75": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 76": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 77": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 78": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 79": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 80": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 81": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 82": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 83": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 84": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 85": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 86": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 87": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 88": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 89": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 90": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 91": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 92": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 93": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 94": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 95": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 96": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 97": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 98": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 99": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 100": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 101": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 102": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 103": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 104": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 105": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 106": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 107": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 108": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 109": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 110": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 111": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 112": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 113": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 114": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 115": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 116": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 117": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 118": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 119": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 120": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 121": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 122": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 123": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 124": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 125": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 126": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 127": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 128": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 129": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 130": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 131": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 132": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 133": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 134": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 135": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 136": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 137": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 138": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 139": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 140": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 141": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 142": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 143": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 144": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 145": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 146": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 147": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 148": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 149": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 150": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 151": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 152": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 153": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 154": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 155": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 156": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 157": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 158": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 159": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 160": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 161": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 162": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 163": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 164": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 165": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 166": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 167": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 168": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 169": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 170": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 171": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 172": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 173": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 174": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 175": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 176": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 177": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 178": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 179": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 180": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 181": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 182": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 183": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 184": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 185": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 186": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 187": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 188": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 189": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 190": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 191": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 192": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 193": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 194": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 195": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 196": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 197": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 198": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 199": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 200": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 201": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 202": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 203": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 204": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 205": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 206": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 207": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 208": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 209": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 210": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 211": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 212": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 213": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 214": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 215": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 216": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 217": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 218": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 219": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 220": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 221": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 222": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 223": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 224": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 225": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 226": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 227": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 228": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 229": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 230": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 231": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 232": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 233": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 234": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 235": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 236": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 237": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 238": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 239": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 240": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 241": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 242": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 243": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 244": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 245": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 246": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 247": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 248": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 249": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 250": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 251": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 252": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 253": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 254": { + "status": "PASS" + }, + "Not throw: windows-1258 has a pointer 255": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 0": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 1": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 2": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 3": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 4": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 5": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 6": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 7": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 8": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 9": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 10": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 11": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 12": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 13": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 14": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 15": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 16": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 17": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 18": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 19": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 20": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 21": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 22": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 23": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 24": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 25": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 26": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 27": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 28": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 29": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 30": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 31": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 32": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 33": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 34": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 35": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 36": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 37": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 38": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 39": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 40": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 41": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 42": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 43": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 44": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 45": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 46": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 47": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 48": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 49": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 50": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 51": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 52": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 53": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 54": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 55": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 56": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 57": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 58": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 59": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 60": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 61": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 62": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 63": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 64": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 65": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 66": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 67": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 68": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 69": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 70": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 71": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 72": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 73": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 74": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 75": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 76": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 77": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 78": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 79": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 80": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 81": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 82": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 83": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 84": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 85": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 86": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 87": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 88": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 89": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 90": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 91": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 92": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 93": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 94": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 95": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 96": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 97": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 98": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 99": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 100": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 101": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 102": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 103": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 104": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 105": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 106": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 107": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 108": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 109": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 110": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 111": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 112": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 113": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 114": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 115": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 116": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 117": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 118": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 119": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 120": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 121": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 122": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 123": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 124": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 125": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 126": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 127": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 128": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 129": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 130": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 131": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 132": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 133": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 134": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 135": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 136": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 137": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 138": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 139": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 140": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 141": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 142": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 143": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 144": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 145": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 146": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 147": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 148": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 149": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 150": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 151": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 152": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 153": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 154": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 155": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 156": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 157": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 158": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 159": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 160": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 161": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 162": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 163": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 164": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 165": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 166": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 167": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 168": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 169": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 170": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 171": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 172": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 173": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 174": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 175": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 176": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 177": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 178": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 179": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 180": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 181": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 182": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 183": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 184": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 185": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 186": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 187": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 188": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 189": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 190": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 191": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 192": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 193": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 194": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 195": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 196": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 197": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 198": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 199": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 200": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 201": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 202": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 203": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 204": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 205": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 206": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 207": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 208": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 209": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 210": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 211": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 212": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 213": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 214": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 215": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 216": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 217": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 218": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 219": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 220": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 221": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 222": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 223": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 224": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 225": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 226": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 227": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 228": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 229": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 230": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 231": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 232": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 233": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 234": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 235": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 236": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 237": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 238": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 239": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 240": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 241": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 242": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 243": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 244": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 245": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 246": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 247": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 248": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 249": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 250": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 251": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 252": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 253": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 254": { + "status": "PASS" + }, + "Not throw: x-mac-cyrillic has a pointer 255": { + "status": "PASS" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/encoding/textdecoder-labels.any.js.json b/tests/wpt-harness/expectations/encoding/textdecoder-labels.any.js.json new file mode 100644 index 00000000..2684de4f --- /dev/null +++ b/tests/wpt-harness/expectations/encoding/textdecoder-labels.any.js.json @@ -0,0 +1,668 @@ +{ + "unicode-1-1-utf-8 => UTF-8": { + "status": "PASS" + }, + "unicode11utf8 => UTF-8": { + "status": "PASS" + }, + "unicode20utf8 => UTF-8": { + "status": "PASS" + }, + "utf-8 => UTF-8": { + "status": "PASS" + }, + "utf8 => UTF-8": { + "status": "PASS" + }, + "x-unicode20utf8 => UTF-8": { + "status": "PASS" + }, + "866 => IBM866": { + "status": "PASS" + }, + "cp866 => IBM866": { + "status": "PASS" + }, + "csibm866 => IBM866": { + "status": "PASS" + }, + "ibm866 => IBM866": { + "status": "PASS" + }, + "csisolatin2 => ISO-8859-2": { + "status": "PASS" + }, + "iso-8859-2 => ISO-8859-2": { + "status": "PASS" + }, + "iso-ir-101 => ISO-8859-2": { + "status": "PASS" + }, + "iso8859-2 => ISO-8859-2": { + "status": "PASS" + }, + "iso88592 => ISO-8859-2": { + "status": "PASS" + }, + "iso_8859-2 => ISO-8859-2": { + "status": "PASS" + }, + "iso_8859-2:1987 => ISO-8859-2": { + "status": "PASS" + }, + "l2 => ISO-8859-2": { + "status": "PASS" + }, + "latin2 => ISO-8859-2": { + "status": "PASS" + }, + "csisolatin3 => ISO-8859-3": { + "status": "PASS" + }, + "iso-8859-3 => ISO-8859-3": { + "status": "PASS" + }, + "iso-ir-109 => ISO-8859-3": { + "status": "PASS" + }, + "iso8859-3 => ISO-8859-3": { + "status": "PASS" + }, + "iso88593 => ISO-8859-3": { + "status": "PASS" + }, + "iso_8859-3 => ISO-8859-3": { + "status": "PASS" + }, + "iso_8859-3:1988 => ISO-8859-3": { + "status": "PASS" + }, + "l3 => ISO-8859-3": { + "status": "PASS" + }, + "latin3 => ISO-8859-3": { + "status": "PASS" + }, + "csisolatin4 => ISO-8859-4": { + "status": "PASS" + }, + "iso-8859-4 => ISO-8859-4": { + "status": "PASS" + }, + "iso-ir-110 => ISO-8859-4": { + "status": "PASS" + }, + "iso8859-4 => ISO-8859-4": { + "status": "PASS" + }, + "iso88594 => ISO-8859-4": { + "status": "PASS" + }, + "iso_8859-4 => ISO-8859-4": { + "status": "PASS" + }, + "iso_8859-4:1988 => ISO-8859-4": { + "status": "PASS" + }, + "l4 => ISO-8859-4": { + "status": "PASS" + }, + "latin4 => ISO-8859-4": { + "status": "PASS" + }, + "csisolatincyrillic => ISO-8859-5": { + "status": "PASS" + }, + "cyrillic => ISO-8859-5": { + "status": "PASS" + }, + "iso-8859-5 => ISO-8859-5": { + "status": "PASS" + }, + "iso-ir-144 => ISO-8859-5": { + "status": "PASS" + }, + "iso8859-5 => ISO-8859-5": { + "status": "PASS" + }, + "iso88595 => ISO-8859-5": { + "status": "PASS" + }, + "iso_8859-5 => ISO-8859-5": { + "status": "PASS" + }, + "iso_8859-5:1988 => ISO-8859-5": { + "status": "PASS" + }, + "arabic => ISO-8859-6": { + "status": "PASS" + }, + "asmo-708 => ISO-8859-6": { + "status": "PASS" + }, + "csiso88596e => ISO-8859-6": { + "status": "PASS" + }, + "csiso88596i => ISO-8859-6": { + "status": "PASS" + }, + "csisolatinarabic => ISO-8859-6": { + "status": "PASS" + }, + "ecma-114 => ISO-8859-6": { + "status": "PASS" + }, + "iso-8859-6 => ISO-8859-6": { + "status": "PASS" + }, + "iso-8859-6-e => ISO-8859-6": { + "status": "PASS" + }, + "iso-8859-6-i => ISO-8859-6": { + "status": "PASS" + }, + "iso-ir-127 => ISO-8859-6": { + "status": "PASS" + }, + "iso8859-6 => ISO-8859-6": { + "status": "PASS" + }, + "iso88596 => ISO-8859-6": { + "status": "PASS" + }, + "iso_8859-6 => ISO-8859-6": { + "status": "PASS" + }, + "iso_8859-6:1987 => ISO-8859-6": { + "status": "PASS" + }, + "csisolatingreek => ISO-8859-7": { + "status": "PASS" + }, + "ecma-118 => ISO-8859-7": { + "status": "PASS" + }, + "elot_928 => ISO-8859-7": { + "status": "PASS" + }, + "greek => ISO-8859-7": { + "status": "PASS" + }, + "greek8 => ISO-8859-7": { + "status": "PASS" + }, + "iso-8859-7 => ISO-8859-7": { + "status": "PASS" + }, + "iso-ir-126 => ISO-8859-7": { + "status": "PASS" + }, + "iso8859-7 => ISO-8859-7": { + "status": "PASS" + }, + "iso88597 => ISO-8859-7": { + "status": "PASS" + }, + "iso_8859-7 => ISO-8859-7": { + "status": "PASS" + }, + "iso_8859-7:1987 => ISO-8859-7": { + "status": "PASS" + }, + "sun_eu_greek => ISO-8859-7": { + "status": "PASS" + }, + "csiso88598e => ISO-8859-8": { + "status": "PASS" + }, + "csisolatinhebrew => ISO-8859-8": { + "status": "PASS" + }, + "hebrew => ISO-8859-8": { + "status": "PASS" + }, + "iso-8859-8 => ISO-8859-8": { + "status": "PASS" + }, + "iso-8859-8-e => ISO-8859-8": { + "status": "PASS" + }, + "iso-ir-138 => ISO-8859-8": { + "status": "PASS" + }, + "iso8859-8 => ISO-8859-8": { + "status": "PASS" + }, + "iso88598 => ISO-8859-8": { + "status": "PASS" + }, + "iso_8859-8 => ISO-8859-8": { + "status": "PASS" + }, + "iso_8859-8:1988 => ISO-8859-8": { + "status": "PASS" + }, + "visual => ISO-8859-8": { + "status": "PASS" + }, + "csiso88598i => ISO-8859-8-I": { + "status": "PASS" + }, + "iso-8859-8-i => ISO-8859-8-I": { + "status": "PASS" + }, + "logical => ISO-8859-8-I": { + "status": "PASS" + }, + "csisolatin6 => ISO-8859-10": { + "status": "PASS" + }, + "iso-8859-10 => ISO-8859-10": { + "status": "PASS" + }, + "iso-ir-157 => ISO-8859-10": { + "status": "PASS" + }, + "iso8859-10 => ISO-8859-10": { + "status": "PASS" + }, + "iso885910 => ISO-8859-10": { + "status": "PASS" + }, + "l6 => ISO-8859-10": { + "status": "PASS" + }, + "latin6 => ISO-8859-10": { + "status": "PASS" + }, + "iso-8859-13 => ISO-8859-13": { + "status": "PASS" + }, + "iso8859-13 => ISO-8859-13": { + "status": "PASS" + }, + "iso885913 => ISO-8859-13": { + "status": "PASS" + }, + "iso-8859-14 => ISO-8859-14": { + "status": "PASS" + }, + "iso8859-14 => ISO-8859-14": { + "status": "PASS" + }, + "iso885914 => ISO-8859-14": { + "status": "PASS" + }, + "csisolatin9 => ISO-8859-15": { + "status": "PASS" + }, + "iso-8859-15 => ISO-8859-15": { + "status": "PASS" + }, + "iso8859-15 => ISO-8859-15": { + "status": "PASS" + }, + "iso885915 => ISO-8859-15": { + "status": "PASS" + }, + "iso_8859-15 => ISO-8859-15": { + "status": "PASS" + }, + "l9 => ISO-8859-15": { + "status": "PASS" + }, + "iso-8859-16 => ISO-8859-16": { + "status": "PASS" + }, + "cskoi8r => KOI8-R": { + "status": "PASS" + }, + "koi => KOI8-R": { + "status": "PASS" + }, + "koi8 => KOI8-R": { + "status": "PASS" + }, + "koi8-r => KOI8-R": { + "status": "PASS" + }, + "koi8_r => KOI8-R": { + "status": "PASS" + }, + "koi8-ru => KOI8-U": { + "status": "PASS" + }, + "koi8-u => KOI8-U": { + "status": "PASS" + }, + "csmacintosh => macintosh": { + "status": "PASS" + }, + "mac => macintosh": { + "status": "PASS" + }, + "macintosh => macintosh": { + "status": "PASS" + }, + "x-mac-roman => macintosh": { + "status": "PASS" + }, + "dos-874 => windows-874": { + "status": "PASS" + }, + "iso-8859-11 => windows-874": { + "status": "PASS" + }, + "iso8859-11 => windows-874": { + "status": "PASS" + }, + "iso885911 => windows-874": { + "status": "PASS" + }, + "tis-620 => windows-874": { + "status": "PASS" + }, + "windows-874 => windows-874": { + "status": "PASS" + }, + "cp1250 => windows-1250": { + "status": "PASS" + }, + "windows-1250 => windows-1250": { + "status": "PASS" + }, + "x-cp1250 => windows-1250": { + "status": "PASS" + }, + "cp1251 => windows-1251": { + "status": "PASS" + }, + "windows-1251 => windows-1251": { + "status": "PASS" + }, + "x-cp1251 => windows-1251": { + "status": "PASS" + }, + "ansi_x3.4-1968 => windows-1252": { + "status": "PASS" + }, + "ascii => windows-1252": { + "status": "PASS" + }, + "cp1252 => windows-1252": { + "status": "PASS" + }, + "cp819 => windows-1252": { + "status": "PASS" + }, + "csisolatin1 => windows-1252": { + "status": "PASS" + }, + "ibm819 => windows-1252": { + "status": "PASS" + }, + "iso-8859-1 => windows-1252": { + "status": "PASS" + }, + "iso-ir-100 => windows-1252": { + "status": "PASS" + }, + "iso8859-1 => windows-1252": { + "status": "PASS" + }, + "iso88591 => windows-1252": { + "status": "PASS" + }, + "iso_8859-1 => windows-1252": { + "status": "PASS" + }, + "iso_8859-1:1987 => windows-1252": { + "status": "PASS" + }, + "l1 => windows-1252": { + "status": "PASS" + }, + "latin1 => windows-1252": { + "status": "PASS" + }, + "us-ascii => windows-1252": { + "status": "PASS" + }, + "windows-1252 => windows-1252": { + "status": "PASS" + }, + "x-cp1252 => windows-1252": { + "status": "PASS" + }, + "cp1253 => windows-1253": { + "status": "PASS" + }, + "windows-1253 => windows-1253": { + "status": "PASS" + }, + "x-cp1253 => windows-1253": { + "status": "PASS" + }, + "cp1254 => windows-1254": { + "status": "PASS" + }, + "csisolatin5 => windows-1254": { + "status": "PASS" + }, + "iso-8859-9 => windows-1254": { + "status": "PASS" + }, + "iso-ir-148 => windows-1254": { + "status": "PASS" + }, + "iso8859-9 => windows-1254": { + "status": "PASS" + }, + "iso88599 => windows-1254": { + "status": "PASS" + }, + "iso_8859-9 => windows-1254": { + "status": "PASS" + }, + "iso_8859-9:1989 => windows-1254": { + "status": "PASS" + }, + "l5 => windows-1254": { + "status": "PASS" + }, + "latin5 => windows-1254": { + "status": "PASS" + }, + "windows-1254 => windows-1254": { + "status": "PASS" + }, + "x-cp1254 => windows-1254": { + "status": "PASS" + }, + "cp1255 => windows-1255": { + "status": "PASS" + }, + "windows-1255 => windows-1255": { + "status": "PASS" + }, + "x-cp1255 => windows-1255": { + "status": "PASS" + }, + "cp1256 => windows-1256": { + "status": "PASS" + }, + "windows-1256 => windows-1256": { + "status": "PASS" + }, + "x-cp1256 => windows-1256": { + "status": "PASS" + }, + "cp1257 => windows-1257": { + "status": "PASS" + }, + "windows-1257 => windows-1257": { + "status": "PASS" + }, + "x-cp1257 => windows-1257": { + "status": "PASS" + }, + "cp1258 => windows-1258": { + "status": "PASS" + }, + "windows-1258 => windows-1258": { + "status": "PASS" + }, + "x-cp1258 => windows-1258": { + "status": "PASS" + }, + "x-mac-cyrillic => x-mac-cyrillic": { + "status": "PASS" + }, + "x-mac-ukrainian => x-mac-cyrillic": { + "status": "PASS" + }, + "chinese => GBK": { + "status": "PASS" + }, + "csgb2312 => GBK": { + "status": "PASS" + }, + "csiso58gb231280 => GBK": { + "status": "PASS" + }, + "gb2312 => GBK": { + "status": "PASS" + }, + "gb_2312 => GBK": { + "status": "PASS" + }, + "gb_2312-80 => GBK": { + "status": "PASS" + }, + "gbk => GBK": { + "status": "PASS" + }, + "iso-ir-58 => GBK": { + "status": "PASS" + }, + "x-gbk => GBK": { + "status": "PASS" + }, + "gb18030 => gb18030": { + "status": "PASS" + }, + "big5 => Big5": { + "status": "PASS" + }, + "big5-hkscs => Big5": { + "status": "PASS" + }, + "cn-big5 => Big5": { + "status": "PASS" + }, + "csbig5 => Big5": { + "status": "PASS" + }, + "x-x-big5 => Big5": { + "status": "PASS" + }, + "cseucpkdfmtjapanese => EUC-JP": { + "status": "PASS" + }, + "euc-jp => EUC-JP": { + "status": "PASS" + }, + "x-euc-jp => EUC-JP": { + "status": "PASS" + }, + "csiso2022jp => ISO-2022-JP": { + "status": "PASS" + }, + "iso-2022-jp => ISO-2022-JP": { + "status": "PASS" + }, + "csshiftjis => Shift_JIS": { + "status": "PASS" + }, + "ms932 => Shift_JIS": { + "status": "PASS" + }, + "ms_kanji => Shift_JIS": { + "status": "PASS" + }, + "shift-jis => Shift_JIS": { + "status": "PASS" + }, + "shift_jis => Shift_JIS": { + "status": "PASS" + }, + "sjis => Shift_JIS": { + "status": "PASS" + }, + "windows-31j => Shift_JIS": { + "status": "PASS" + }, + "x-sjis => Shift_JIS": { + "status": "PASS" + }, + "cseuckr => EUC-KR": { + "status": "PASS" + }, + "csksc56011987 => EUC-KR": { + "status": "PASS" + }, + "euc-kr => EUC-KR": { + "status": "PASS" + }, + "iso-ir-149 => EUC-KR": { + "status": "PASS" + }, + "korean => EUC-KR": { + "status": "PASS" + }, + "ks_c_5601-1987 => EUC-KR": { + "status": "PASS" + }, + "ks_c_5601-1989 => EUC-KR": { + "status": "PASS" + }, + "ksc5601 => EUC-KR": { + "status": "PASS" + }, + "ksc_5601 => EUC-KR": { + "status": "PASS" + }, + "windows-949 => EUC-KR": { + "status": "PASS" + }, + "unicodefffe => UTF-16BE": { + "status": "PASS" + }, + "utf-16be => UTF-16BE": { + "status": "PASS" + }, + "csunicode => UTF-16LE": { + "status": "PASS" + }, + "iso-10646-ucs-2 => UTF-16LE": { + "status": "PASS" + }, + "ucs-2 => UTF-16LE": { + "status": "PASS" + }, + "unicode => UTF-16LE": { + "status": "PASS" + }, + "unicodefeff => UTF-16LE": { + "status": "PASS" + }, + "utf-16 => UTF-16LE": { + "status": "PASS" + }, + "utf-16le => UTF-16LE": { + "status": "PASS" + }, + "x-user-defined => x-user-defined": { + "status": "PASS" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/abort/general.any.js.json b/tests/wpt-harness/expectations/fetch/api/abort/general.any.js.json new file mode 100644 index 00000000..b3b92c1c --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/abort/general.any.js.json @@ -0,0 +1,161 @@ +{ + "Aborting rejects with AbortError": { + "status": "FAIL" + }, + "Aborting rejects with abort reason": { + "status": "FAIL" + }, + "Aborting rejects with AbortError - no-cors": { + "status": "FAIL" + }, + "TypeError from request constructor takes priority - RequestInit's window is not null": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - Input URL is not valid": { + "status": "FAIL" + }, + "TypeError from request constructor takes priority - Input URL has credentials": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - RequestInit's mode is navigate": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - RequestInit's referrer is invalid": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - RequestInit's method is invalid": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - RequestInit's method is forbidden": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - RequestInit's mode is no-cors and method is not simple": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - RequestInit's cache mode is only-if-cached and mode is not same-origin": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode cors": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - Request with cache mode: only-if-cached and fetch mode no-cors": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - Bad referrerPolicy init parameter value": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - Bad mode init parameter value": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - Bad credentials init parameter value": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - Bad cache init parameter value": { + "status": "PASS" + }, + "TypeError from request constructor takes priority - Bad redirect init parameter value": { + "status": "PASS" + }, + "Request objects have a signal property": { + "status": "FAIL" + }, + "Signal on request object": { + "status": "FAIL" + }, + "Signal on request object should also have abort reason": { + "status": "FAIL" + }, + "Signal on request object created from request object": { + "status": "FAIL" + }, + "Signal on request object created from request object, with signal on second request": { + "status": "FAIL" + }, + "Signal on request object created from request object, with signal on second request overriding another": { + "status": "FAIL" + }, + "Signal retained after unrelated properties are overridden by fetch": { + "status": "FAIL" + }, + "Signal removed by setting to null": { + "status": "FAIL" + }, + "Already aborted signal rejects immediately": { + "status": "FAIL" + }, + "Request is still 'used' if signal is aborted before fetching": { + "status": "FAIL" + }, + "response.arrayBuffer() rejects if already aborted": { + "status": "FAIL" + }, + "response.blob() rejects if already aborted": { + "status": "FAIL" + }, + "response.bytes() rejects if already aborted": { + "status": "FAIL" + }, + "response.formData() rejects if already aborted": { + "status": "FAIL" + }, + "response.json() rejects if already aborted": { + "status": "FAIL" + }, + "response.text() rejects if already aborted": { + "status": "FAIL" + }, + "Call text() twice on aborted response": { + "status": "FAIL" + }, + "Already aborted signal does not make request": { + "status": "FAIL" + }, + "Already aborted signal can be used for many fetches": { + "status": "FAIL" + }, + "Signal can be used to abort other fetches, even if another fetch succeeded before aborting": { + "status": "FAIL" + }, + "Underlying connection is closed when aborting after receiving response": { + "status": "FAIL" + }, + "Underlying connection is closed when aborting after receiving response - no-cors": { + "status": "FAIL" + }, + "Fetch aborted & connection closed when aborted after calling response.arrayBuffer()": { + "status": "FAIL" + }, + "Fetch aborted & connection closed when aborted after calling response.blob()": { + "status": "FAIL" + }, + "Fetch aborted & connection closed when aborted after calling response.bytes()": { + "status": "FAIL" + }, + "Fetch aborted & connection closed when aborted after calling response.formData()": { + "status": "FAIL" + }, + "Fetch aborted & connection closed when aborted after calling response.json()": { + "status": "FAIL" + }, + "Fetch aborted & connection closed when aborted after calling response.text()": { + "status": "FAIL" + }, + "Stream errors once aborted. Underlying connection closed.": { + "status": "FAIL" + }, + "Stream errors once aborted, after reading. Underlying connection closed.": { + "status": "FAIL" + }, + "Stream will not error if body is empty. It's closed with an empty queue before it errors.": { + "status": "FAIL" + }, + "Readable stream synchronously cancels with AbortError if aborted before reading": { + "status": "FAIL" + }, + "Signal state is cloned": { + "status": "FAIL" + }, + "Clone aborts with original controller": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/abort/request.any.js.json b/tests/wpt-harness/expectations/fetch/api/abort/request.any.js.json new file mode 100644 index 00000000..400ec59a --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/abort/request.any.js.json @@ -0,0 +1,56 @@ +{ + "Calling arrayBuffer() on an aborted request": { + "status": "FAIL" + }, + "Aborting a request after calling arrayBuffer()": { + "status": "FAIL" + }, + "Calling arrayBuffer() on an aborted consumed empty request": { + "status": "FAIL" + }, + "Calling arrayBuffer() on an aborted consumed nonempty request": { + "status": "FAIL" + }, + "Calling blob() on an aborted request": { + "status": "FAIL" + }, + "Aborting a request after calling blob()": { + "status": "FAIL" + }, + "Calling blob() on an aborted consumed empty request": { + "status": "FAIL" + }, + "Calling blob() on an aborted consumed nonempty request": { + "status": "FAIL" + }, + "Calling formData() on an aborted request": { + "status": "FAIL" + }, + "Aborting a request after calling formData()": { + "status": "FAIL" + }, + "Calling formData() on an aborted consumed nonempty request": { + "status": "FAIL" + }, + "Calling json() on an aborted request": { + "status": "FAIL" + }, + "Aborting a request after calling json()": { + "status": "FAIL" + }, + "Calling json() on an aborted consumed nonempty request": { + "status": "FAIL" + }, + "Calling text() on an aborted request": { + "status": "FAIL" + }, + "Aborting a request after calling text()": { + "status": "FAIL" + }, + "Calling text() on an aborted consumed empty request": { + "status": "FAIL" + }, + "Calling text() on an aborted consumed nonempty request": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/basic/header-value-null-byte.any.js.json b/tests/wpt-harness/expectations/fetch/api/basic/header-value-null-byte.any.js.json index 5512f3f0..c86b4116 100644 --- a/tests/wpt-harness/expectations/fetch/api/basic/header-value-null-byte.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/basic/header-value-null-byte.any.js.json @@ -1,5 +1,5 @@ { "Ensure fetch() rejects null bytes in headers": { - "status": "FAIL" + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/basic/integrity.sub.any.js.json b/tests/wpt-harness/expectations/fetch/api/basic/integrity.sub.any.js.json index de3376ea..7b111ec0 100644 --- a/tests/wpt-harness/expectations/fetch/api/basic/integrity.sub.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/basic/integrity.sub.any.js.json @@ -51,6 +51,6 @@ "status": "FAIL" }, "SHA-* integrity for opaque response": { - "status": "FAIL" + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/basic/keepalive.any.js.json b/tests/wpt-harness/expectations/fetch/api/basic/keepalive.any.js.json new file mode 100644 index 00000000..2e280b11 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/basic/keepalive.any.js.json @@ -0,0 +1,20 @@ +{ + "[keepalive] simple GET request on 'load' [no payload]; setting up": { + "status": "FAIL" + }, + "[keepalive] simple GET request on 'unload' [no payload]; setting up": { + "status": "FAIL" + }, + "[keepalive] simple GET request on 'pagehide' [no payload]; setting up": { + "status": "FAIL" + }, + "[keepalive] simple POST request on 'load' [no payload]; setting up": { + "status": "FAIL" + }, + "[keepalive] simple POST request on 'unload' [no payload]; setting up": { + "status": "FAIL" + }, + "[keepalive] simple POST request on 'pagehide' [no payload]; setting up": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/basic/mode-same-origin.any.js.json b/tests/wpt-harness/expectations/fetch/api/basic/mode-same-origin.any.js.json new file mode 100644 index 00000000..5dc94809 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/basic/mode-same-origin.any.js.json @@ -0,0 +1,26 @@ +{ + "Fetch ../resources/top.txt with same-origin mode": { + "status": "FAIL" + }, + "Fetch http://web-platform.test:8000/fetch/api/resources/top.txt with same-origin mode": { + "status": "FAIL" + }, + "Fetch https://web-platform.test:8443/fetch/api/resources/top.txt with same-origin mode": { + "status": "PASS" + }, + "Fetch http://www1.web-platform.test:8000/fetch/api/resources/top.txt with same-origin mode": { + "status": "FAIL" + }, + "Fetch /fetch/api/basic/../resources/redirect.py?location=../resources/top.txt with same-origin mode": { + "status": "FAIL" + }, + "Fetch /fetch/api/basic/../resources/redirect.py?location=http://web-platform.test:8000/fetch/api/resources/top.txt with same-origin mode": { + "status": "FAIL" + }, + "Fetch /fetch/api/basic/../resources/redirect.py?location=https://web-platform.test:8443/fetch/api/resources/top.txt with same-origin mode": { + "status": "FAIL" + }, + "Fetch /fetch/api/basic/../resources/redirect.py?location=http://www1.web-platform.test:8000/fetch/api/resources/top.txt with same-origin mode": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/basic/request-forbidden-headers.any.js.json b/tests/wpt-harness/expectations/fetch/api/basic/request-forbidden-headers.any.js.json index cc9f596c..5818dafc 100644 --- a/tests/wpt-harness/expectations/fetch/api/basic/request-forbidden-headers.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/basic/request-forbidden-headers.any.js.json @@ -11,9 +11,6 @@ "Access-Control-Request-Method is a forbidden request header": { "status": "FAIL" }, - "Access-Control-Request-Private-Network is a forbidden request header": { - "status": "FAIL" - }, "Connection is a forbidden request header": { "status": "FAIL" }, diff --git a/tests/wpt-harness/expectations/fetch/api/basic/request-head.any.js.json b/tests/wpt-harness/expectations/fetch/api/basic/request-head.any.js.json index 312a3f71..a4e4098a 100644 --- a/tests/wpt-harness/expectations/fetch/api/basic/request-head.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/basic/request-head.any.js.json @@ -1,5 +1,5 @@ { "Fetch with HEAD with body": { - "status": "FAIL" + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/basic/request-headers-nonascii.any.js.json b/tests/wpt-harness/expectations/fetch/api/basic/request-headers-nonascii.any.js.json index d06c8d5d..a320d3ba 100644 --- a/tests/wpt-harness/expectations/fetch/api/basic/request-headers-nonascii.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/basic/request-headers-nonascii.any.js.json @@ -1,5 +1,5 @@ { "Non-ascii bytes in request headers": { - "status": "PASS" + "status": "FAIL" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/basic/request-headers.any.js.json b/tests/wpt-harness/expectations/fetch/api/basic/request-headers.any.js.json index 99c2d9eb..c72e4350 100644 --- a/tests/wpt-harness/expectations/fetch/api/basic/request-headers.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/basic/request-headers.any.js.json @@ -35,6 +35,9 @@ "Fetch with POST with Int8Array body": { "status": "FAIL" }, + "Fetch with POST with Float16Array body": { + "status": "FAIL" + }, "Fetch with POST with Float32Array body": { "status": "FAIL" }, diff --git a/tests/wpt-harness/expectations/fetch/api/basic/request-upload.any.js.json b/tests/wpt-harness/expectations/fetch/api/basic/request-upload.any.js.json index d353b0ba..1c91e706 100644 --- a/tests/wpt-harness/expectations/fetch/api/basic/request-upload.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/basic/request-upload.any.js.json @@ -20,6 +20,9 @@ "Fetch with POST with Int8Array body": { "status": "PASS" }, + "Fetch with POST with Float16Array body": { + "status": "PASS" + }, "Fetch with POST with Float32Array body": { "status": "PASS" }, @@ -33,19 +36,19 @@ "status": "FAIL" }, "Fetch with POST with ReadableStream containing String": { - "status": "FAIL" + "status": "PASS" }, "Fetch with POST with ReadableStream containing null": { - "status": "FAIL" + "status": "PASS" }, "Fetch with POST with ReadableStream containing number": { - "status": "FAIL" + "status": "PASS" }, "Fetch with POST with ReadableStream containing ArrayBuffer": { - "status": "FAIL" + "status": "PASS" }, "Fetch with POST with ReadableStream containing Blob": { - "status": "FAIL" + "status": "PASS" }, "Fetch with POST with text body on 421 response should be retried once on new connection.": { "status": "FAIL" diff --git a/tests/wpt-harness/expectations/fetch/api/basic/request-upload.h2.any.js.json b/tests/wpt-harness/expectations/fetch/api/basic/request-upload.h2.any.js.json deleted file mode 100644 index ef5cad95..00000000 --- a/tests/wpt-harness/expectations/fetch/api/basic/request-upload.h2.any.js.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "Fetch with POST with empty ReadableStream": { - "status": "FAIL" - }, - "Fetch with POST with ReadableStream": { - "status": "FAIL" - }, - "Fetch with POST with ReadableStream on 421 response should return the response and not retry.": { - "status": "PASS" - }, - "Feature detect for POST with ReadableStream": { - "status": "FAIL" - }, - "Feature detect for POST with ReadableStream, using request object": { - "status": "FAIL" - }, - "Synchronous feature detect": { - "status": "FAIL" - }, - "Synchronous feature detect fails if feature unsupported": { - "status": "PASS" - }, - "Streaming upload with body containing a String": { - "status": "FAIL" - }, - "Streaming upload with body containing null": { - "status": "FAIL" - }, - "Streaming upload with body containing a number": { - "status": "FAIL" - }, - "Streaming upload should fail on a 401 response": { - "status": "FAIL" - } -} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/basic/response-null-body.any.js.json b/tests/wpt-harness/expectations/fetch/api/basic/response-null-body.any.js.json new file mode 100644 index 00000000..d8d125a2 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/basic/response-null-body.any.js.json @@ -0,0 +1,35 @@ +{ + "Response.body is null for responses with status=204 (method=GET)": { + "status": "PASS" + }, + "Response.body is null for responses with status=204 (method=POST)": { + "status": "PASS" + }, + "Response.body is null for responses with status=204 (method=OPTIONS)": { + "status": "PASS" + }, + "Response.body is null for responses with status=205 (method=GET)": { + "status": "PASS" + }, + "Response.body is null for responses with status=205 (method=POST)": { + "status": "PASS" + }, + "Response.body is null for responses with status=205 (method=OPTIONS)": { + "status": "PASS" + }, + "Response.body is null for responses with status=304 (method=GET)": { + "status": "PASS" + }, + "Response.body is null for responses with status=304 (method=POST)": { + "status": "PASS" + }, + "Response.body is null for responses with status=304 (method=OPTIONS)": { + "status": "PASS" + }, + "Response.body is null for responses with method=HEAD": { + "status": "FAIL" + }, + "Null body status with subresource integrity should abort": { + "status": "PASS" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/basic/status.h2.any.js.json b/tests/wpt-harness/expectations/fetch/api/basic/status.h2.any.js.json new file mode 100644 index 00000000..e0882bdd --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/basic/status.h2.any.js.json @@ -0,0 +1,23 @@ +{ + "statusText over H2 for status 200 should be the empty string": { + "status": "FAIL" + }, + "statusText over H2 for status 210 should be the empty string": { + "status": "PASS" + }, + "statusText over H2 for status 400 should be the empty string": { + "status": "FAIL" + }, + "statusText over H2 for status 404 should be the empty string": { + "status": "FAIL" + }, + "statusText over H2 for status 410 should be the empty string": { + "status": "FAIL" + }, + "statusText over H2 for status 500 should be the empty string": { + "status": "FAIL" + }, + "statusText over H2 for status 502 should be the empty string": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/body/cloned-any.js.json b/tests/wpt-harness/expectations/fetch/api/body/cloned-any.js.json new file mode 100644 index 00000000..2a5fcc1a --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/body/cloned-any.js.json @@ -0,0 +1,17 @@ +{ + "FormData is cloned": { + "status": "FAIL" + }, + "URLSearchParams is cloned": { + "status": "FAIL" + }, + "TypedArray is cloned": { + "status": "PASS" + }, + "ArrayBuffer is cloned": { + "status": "PASS" + }, + "Blob is cloned": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/body/formdata.any.js.json b/tests/wpt-harness/expectations/fetch/api/body/formdata.any.js.json new file mode 100644 index 00000000..eb94020b --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/body/formdata.any.js.json @@ -0,0 +1,11 @@ +{ + "Consume empty response.formData() as FormData": { + "status": "FAIL" + }, + "Consume empty request.formData() as FormData": { + "status": "FAIL" + }, + "Consume multipart/form-data headers case-insensitively": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/headers/header-setcookie.any.js.json b/tests/wpt-harness/expectations/fetch/api/headers/header-setcookie.any.js.json new file mode 100644 index 00000000..4a04a604 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/headers/header-setcookie.any.js.json @@ -0,0 +1,74 @@ +{ + "Headers.prototype.get combines set-cookie headers in order": { + "status": "PASS" + }, + "Headers iterator does not combine set-cookie headers": { + "status": "FAIL" + }, + "Headers iterator does not special case set-cookie2 headers": { + "status": "PASS" + }, + "Headers iterator does not combine set-cookie & set-cookie2 headers": { + "status": "FAIL" + }, + "Headers iterator preserves set-cookie ordering": { + "status": "FAIL" + }, + "Headers iterator preserves per header ordering, but sorts keys alphabetically": { + "status": "FAIL" + }, + "Headers iterator preserves per header ordering, but sorts keys alphabetically (and ignores value ordering)": { + "status": "FAIL" + }, + "Headers iterator is correctly updated with set-cookie changes": { + "status": "FAIL" + }, + "Headers iterator is correctly updated with set-cookie changes #2": { + "status": "FAIL" + }, + "Headers.prototype.has works for set-cookie": { + "status": "PASS" + }, + "Headers.prototype.append works for set-cookie": { + "status": "FAIL" + }, + "Headers.prototype.set works for set-cookie": { + "status": "PASS" + }, + "Headers.prototype.delete works for set-cookie": { + "status": "PASS" + }, + "Headers.prototype.getSetCookie with no headers present": { + "status": "FAIL" + }, + "Headers.prototype.getSetCookie with one header": { + "status": "FAIL" + }, + "Headers.prototype.getSetCookie with one header created from an object": { + "status": "FAIL" + }, + "Headers.prototype.getSetCookie with multiple headers": { + "status": "FAIL" + }, + "Headers.prototype.getSetCookie with an empty header": { + "status": "FAIL" + }, + "Headers.prototype.getSetCookie with two equal headers": { + "status": "FAIL" + }, + "Headers.prototype.getSetCookie ignores set-cookie2 headers": { + "status": "FAIL" + }, + "Headers.prototype.getSetCookie preserves header ordering": { + "status": "FAIL" + }, + "Adding Set-Cookie headers normalizes their value": { + "status": "FAIL" + }, + "Adding invalid Set-Cookie headers throws": { + "status": "PASS" + }, + "Set-Cookie is a forbidden response header": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/headers/header-values-normalize.any.js.json b/tests/wpt-harness/expectations/fetch/api/headers/header-values-normalize.any.js.json index 3326acca..76d18cdd 100644 --- a/tests/wpt-harness/expectations/fetch/api/headers/header-values-normalize.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/headers/header-values-normalize.any.js.json @@ -1,6 +1,6 @@ { "fetch() with value %00": { - "status": "FAIL" + "status": "PASS" }, "fetch() with value %01": { "status": "FAIL" @@ -30,10 +30,10 @@ "status": "PASS" }, "fetch() with value %0A": { - "status": "FAIL" + "status": "PASS" }, "fetch() with value %0D": { - "status": "FAIL" + "status": "PASS" }, "fetch() with value %0E": { "status": "FAIL" diff --git a/tests/wpt-harness/expectations/fetch/api/headers/header-values.any.js.json b/tests/wpt-harness/expectations/fetch/api/headers/header-values.any.js.json index d597731c..627db7de 100644 --- a/tests/wpt-harness/expectations/fetch/api/headers/header-values.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/headers/header-values.any.js.json @@ -1,12 +1,12 @@ { "fetch() with value x%00x needs to throw": { - "status": "FAIL" + "status": "PASS" }, "fetch() with value x%0Ax needs to throw": { - "status": "FAIL" + "status": "PASS" }, "fetch() with value x%0Dx needs to throw": { - "status": "FAIL" + "status": "PASS" }, "fetch() with all valid values": { "status": "FAIL" diff --git a/tests/wpt-harness/expectations/fetch/api/headers/headers-basic.any.js.json b/tests/wpt-harness/expectations/fetch/api/headers/headers-basic.any.js.json index 25820e33..4fd7a460 100644 --- a/tests/wpt-harness/expectations/fetch/api/headers/headers-basic.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/headers/headers-basic.any.js.json @@ -12,7 +12,7 @@ "status": "PASS" }, "Create headers with 1 should throw": { - "status": "FAIL" + "status": "PASS" }, "Create headers with sequence": { "status": "PASS" diff --git a/tests/wpt-harness/expectations/fetch/api/headers/headers-errors.any.js.json b/tests/wpt-harness/expectations/fetch/api/headers/headers-errors.any.js.json index 0f54c16e..26cc9e15 100644 --- a/tests/wpt-harness/expectations/fetch/api/headers/headers-errors.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/headers/headers-errors.any.js.json @@ -1,54 +1,54 @@ { "Create headers giving an array having one string as init argument": { - "status": "FAIL" + "status": "PASS" }, "Create headers giving an array having three strings as init argument": { - "status": "FAIL" + "status": "PASS" }, "Create headers giving bad header name as init argument": { - "status": "FAIL" + "status": "PASS" }, "Create headers giving bad header value as init argument": { "status": "FAIL" }, "Check headers get with an invalid name invalidĀ": { - "status": "FAIL" + "status": "PASS" }, "Check headers get with an invalid name [object Object]": { - "status": "FAIL" + "status": "PASS" }, "Check headers delete with an invalid name invalidĀ": { - "status": "FAIL" + "status": "PASS" }, "Check headers delete with an invalid name [object Object]": { - "status": "FAIL" + "status": "PASS" }, "Check headers has with an invalid name invalidĀ": { - "status": "FAIL" + "status": "PASS" }, "Check headers has with an invalid name [object Object]": { - "status": "FAIL" + "status": "PASS" }, "Check headers set with an invalid name invalidĀ": { - "status": "FAIL" + "status": "PASS" }, "Check headers set with an invalid name [object Object]": { - "status": "FAIL" + "status": "PASS" }, "Check headers set with an invalid value invalidĀ": { "status": "FAIL" }, "Check headers append with an invalid name invalidĀ": { - "status": "FAIL" + "status": "PASS" }, "Check headers append with an invalid name [object Object]": { - "status": "FAIL" + "status": "PASS" }, "Check headers append with an invalid value invalidĀ": { "status": "FAIL" }, "Headers forEach throws if argument is not callable": { - "status": "FAIL" + "status": "PASS" }, "Headers forEach loop should stop if callback is throwing exception": { "status": "PASS" diff --git a/tests/wpt-harness/expectations/fetch/api/headers/headers-no-cors.any.js.json b/tests/wpt-harness/expectations/fetch/api/headers/headers-no-cors.any.js.json new file mode 100644 index 00000000..eb79cc13 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/headers/headers-no-cors.any.js.json @@ -0,0 +1,83 @@ +{ + "Loading data…": { + "status": "PASS" + }, + "\"no-cors\" Headers object cannot have accept set to sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have accept-language set to sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have content-language set to sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have accept set to , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have accept-language set to , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have content-language set to , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have content-type set to text/plain;ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, text/plain": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have accept/\" as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have accept/012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have accept-language/\u0001 as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have accept-language/@ as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have authorization/basics as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have content-language/\u0001 as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have content-language/@ as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have content-type/text/html as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have content-type/text/plain; long=0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901 as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have range/bytes 0- as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have test/hi as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have dpr/2 as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have rtt/1.0 as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have downlink/-1.0 as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have ect/6g as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have save-data/on as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have viewport-width/100 as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have width/100 as header": { + "status": "FAIL" + }, + "\"no-cors\" Headers object cannot have unknown/doesitmatter as header": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-back-to-original-origin.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-back-to-original-origin.any.js.json new file mode 100644 index 00000000..338553a6 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-back-to-original-origin.any.js.json @@ -0,0 +1,8 @@ +{ + "original => remote => original with mode: \"no-cors\"": { + "status": "FAIL" + }, + "original => remote => original with mode: \"cors\"": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-count.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-count.any.js.json new file mode 100644 index 00000000..aae50a71 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-count.any.js.json @@ -0,0 +1,32 @@ +{ + "Redirect 301 20 times": { + "status": "FAIL" + }, + "Redirect 301 21 times": { + "status": "FAIL" + }, + "Redirect 302 20 times": { + "status": "FAIL" + }, + "Redirect 302 21 times": { + "status": "FAIL" + }, + "Redirect 303 20 times": { + "status": "FAIL" + }, + "Redirect 303 21 times": { + "status": "FAIL" + }, + "Redirect 307 20 times": { + "status": "FAIL" + }, + "Redirect 307 21 times": { + "status": "FAIL" + }, + "Redirect 308 20 times": { + "status": "FAIL" + }, + "Redirect 308 21 times": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-empty-location.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-empty-location.any.js.json new file mode 100644 index 00000000..4a22bc55 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-empty-location.any.js.json @@ -0,0 +1,8 @@ +{ + "redirect response with empty Location, follow mode": { + "status": "FAIL" + }, + "redirect response with empty Location, manual mode": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-keepalive.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-keepalive.any.js.json new file mode 100644 index 00000000..dd774280 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-keepalive.any.js.json @@ -0,0 +1,20 @@ +{ + "[keepalive][new window][unload] same-origin redirect; setting up": { + "status": "FAIL" + }, + "[keepalive][new window][unload] same-origin redirect + preflight; setting up": { + "status": "FAIL" + }, + "[keepalive][new window][unload] cross-origin redirect; setting up": { + "status": "FAIL" + }, + "[keepalive][new window][unload] cross-origin redirect + preflight; setting up": { + "status": "FAIL" + }, + "[keepalive][new window][unload] redirect to file URL; setting up": { + "status": "FAIL" + }, + "[keepalive][new window][unload] redirect to data URL; setting up": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-keepalive.https.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-keepalive.https.any.js.json new file mode 100644 index 00000000..2a64da93 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-keepalive.https.any.js.json @@ -0,0 +1,5 @@ +{ + "[keepalive][iframe][load] mixed content redirect; setting up": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-location-escape.tentative.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-location-escape.tentative.any.js.json new file mode 100644 index 00000000..07ef9a14 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-location-escape.tentative.any.js.json @@ -0,0 +1,17 @@ +{ + "Redirect to escaped UTF-8": { + "status": "FAIL" + }, + "Redirect to unescaped UTF-8": { + "status": "FAIL" + }, + "Redirect to escaped and unescaped UTF-8": { + "status": "FAIL" + }, + "Escaping produces double-percent": { + "status": "FAIL" + }, + "Redirect to invalid UTF-8": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-location.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-location.any.js.json new file mode 100644 index 00000000..c844f748 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-location.any.js.json @@ -0,0 +1,167 @@ +{ + "Redirect 301 in \"follow\" mode without location": { + "status": "PASS" + }, + "Redirect 301 in \"manual\" mode without location": { + "status": "FAIL" + }, + "Redirect 301 in \"follow\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 301 in \"manual\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 301 in \"error\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 301 in \"follow\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 301 in \"manual\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 301 in \"error\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 301 in \"follow\" mode with data location": { + "status": "FAIL" + }, + "Redirect 301 in \"manual\" mode with data location": { + "status": "FAIL" + }, + "Redirect 301 in \"error\" mode with data location": { + "status": "FAIL" + }, + "Redirect 302 in \"follow\" mode without location": { + "status": "PASS" + }, + "Redirect 302 in \"manual\" mode without location": { + "status": "FAIL" + }, + "Redirect 302 in \"follow\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 302 in \"manual\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 302 in \"error\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 302 in \"follow\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 302 in \"manual\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 302 in \"error\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 302 in \"follow\" mode with data location": { + "status": "FAIL" + }, + "Redirect 302 in \"manual\" mode with data location": { + "status": "FAIL" + }, + "Redirect 302 in \"error\" mode with data location": { + "status": "FAIL" + }, + "Redirect 303 in \"follow\" mode without location": { + "status": "PASS" + }, + "Redirect 303 in \"manual\" mode without location": { + "status": "FAIL" + }, + "Redirect 303 in \"follow\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 303 in \"manual\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 303 in \"error\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 303 in \"follow\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 303 in \"manual\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 303 in \"error\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 303 in \"follow\" mode with data location": { + "status": "FAIL" + }, + "Redirect 303 in \"manual\" mode with data location": { + "status": "FAIL" + }, + "Redirect 303 in \"error\" mode with data location": { + "status": "FAIL" + }, + "Redirect 307 in \"follow\" mode without location": { + "status": "PASS" + }, + "Redirect 307 in \"manual\" mode without location": { + "status": "FAIL" + }, + "Redirect 307 in \"follow\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 307 in \"manual\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 307 in \"error\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 307 in \"follow\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 307 in \"manual\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 307 in \"error\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 307 in \"follow\" mode with data location": { + "status": "FAIL" + }, + "Redirect 307 in \"manual\" mode with data location": { + "status": "FAIL" + }, + "Redirect 307 in \"error\" mode with data location": { + "status": "FAIL" + }, + "Redirect 308 in \"follow\" mode without location": { + "status": "PASS" + }, + "Redirect 308 in \"manual\" mode without location": { + "status": "FAIL" + }, + "Redirect 308 in \"follow\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 308 in \"manual\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 308 in \"error\" mode with valid location": { + "status": "FAIL" + }, + "Redirect 308 in \"follow\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 308 in \"manual\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 308 in \"error\" mode with invalid location": { + "status": "FAIL" + }, + "Redirect 308 in \"follow\" mode with data location": { + "status": "FAIL" + }, + "Redirect 308 in \"manual\" mode with data location": { + "status": "FAIL" + }, + "Redirect 308 in \"error\" mode with data location": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-method.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-method.any.js.json new file mode 100644 index 00000000..97ccead0 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-method.any.js.json @@ -0,0 +1,47 @@ +{ + "Response.redirected should be false on not-redirected responses": { + "status": "PASS" + }, + "Redirect 301 with GET": { + "status": "FAIL" + }, + "Redirect 301 with POST": { + "status": "FAIL" + }, + "Redirect 301 with HEAD": { + "status": "FAIL" + }, + "Redirect 302 with GET": { + "status": "FAIL" + }, + "Redirect 302 with POST": { + "status": "FAIL" + }, + "Redirect 302 with HEAD": { + "status": "FAIL" + }, + "Redirect 303 with GET": { + "status": "FAIL" + }, + "Redirect 303 with POST": { + "status": "FAIL" + }, + "Redirect 303 with HEAD": { + "status": "FAIL" + }, + "Redirect 303 with TESTING": { + "status": "FAIL" + }, + "Redirect 307 with GET": { + "status": "FAIL" + }, + "Redirect 307 with POST (string body)": { + "status": "FAIL" + }, + "Redirect 307 with POST (blob body)": { + "status": "FAIL" + }, + "Redirect 307 with HEAD": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-mode.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-mode.any.js.json new file mode 100644 index 00000000..fa8def8e --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-mode.any.js.json @@ -0,0 +1,185 @@ +{ + "same-origin redirect 301 in error redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 301 in error redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 301 in manual redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 301 in manual redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 301 in follow redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 301 in follow redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 302 in error redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 302 in error redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 302 in manual redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 302 in manual redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 302 in follow redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 302 in follow redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 303 in error redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 303 in error redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 303 in manual redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 303 in manual redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 303 in follow redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 303 in follow redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 307 in error redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 307 in error redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 307 in manual redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 307 in manual redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 307 in follow redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 307 in follow redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 308 in error redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 308 in error redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 308 in manual redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 308 in manual redirect and no-cors mode": { + "status": "FAIL" + }, + "same-origin redirect 308 in follow redirect and cors mode": { + "status": "FAIL" + }, + "same-origin redirect 308 in follow redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 301 in error redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 301 in error redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 301 in manual redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 301 in manual redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 301 in follow redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 301 in follow redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 302 in error redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 302 in error redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 302 in manual redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 302 in manual redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 302 in follow redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 302 in follow redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 303 in error redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 303 in error redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 303 in manual redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 303 in manual redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 303 in follow redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 303 in follow redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 307 in error redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 307 in error redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 307 in manual redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 307 in manual redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 307 in follow redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 307 in follow redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 308 in error redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 308 in error redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 308 in manual redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 308 in manual redirect and no-cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 308 in follow redirect and cors mode": { + "status": "FAIL" + }, + "cross-origin redirect 308 in follow redirect and no-cors mode": { + "status": "FAIL" + }, + "manual redirect with a CORS error should be rejected": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-origin.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-origin.any.js.json new file mode 100644 index 00000000..4b87af52 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-origin.any.js.json @@ -0,0 +1,122 @@ +{ + "[GET] Redirect 301 Same origin to same origin": { + "status": "FAIL" + }, + "[GET] Redirect 301 Same origin to other origin": { + "status": "FAIL" + }, + "[GET] Redirect 301 Other origin to other origin": { + "status": "FAIL" + }, + "[GET] Redirect 301 Other origin to same origin": { + "status": "FAIL" + }, + "[POST] Redirect 301 Same origin to same origin": { + "status": "FAIL" + }, + "[POST] Redirect 301 Same origin to other origin": { + "status": "FAIL" + }, + "[POST] Redirect 301 Other origin to other origin": { + "status": "FAIL" + }, + "[POST] Redirect 301 Other origin to same origin": { + "status": "FAIL" + }, + "[GET] Redirect 302 Same origin to same origin": { + "status": "FAIL" + }, + "[GET] Redirect 302 Same origin to other origin": { + "status": "FAIL" + }, + "[GET] Redirect 302 Other origin to other origin": { + "status": "FAIL" + }, + "[GET] Redirect 302 Other origin to same origin": { + "status": "FAIL" + }, + "[POST] Redirect 302 Same origin to same origin": { + "status": "FAIL" + }, + "[POST] Redirect 302 Same origin to other origin": { + "status": "FAIL" + }, + "[POST] Redirect 302 Other origin to other origin": { + "status": "FAIL" + }, + "[POST] Redirect 302 Other origin to same origin": { + "status": "FAIL" + }, + "[GET] Redirect 303 Same origin to same origin": { + "status": "FAIL" + }, + "[GET] Redirect 303 Same origin to other origin": { + "status": "FAIL" + }, + "[GET] Redirect 303 Other origin to other origin": { + "status": "FAIL" + }, + "[GET] Redirect 303 Other origin to same origin": { + "status": "FAIL" + }, + "[POST] Redirect 303 Same origin to same origin": { + "status": "FAIL" + }, + "[POST] Redirect 303 Same origin to other origin": { + "status": "FAIL" + }, + "[POST] Redirect 303 Other origin to other origin": { + "status": "FAIL" + }, + "[POST] Redirect 303 Other origin to same origin": { + "status": "FAIL" + }, + "[GET] Redirect 307 Same origin to same origin": { + "status": "FAIL" + }, + "[GET] Redirect 307 Same origin to other origin": { + "status": "FAIL" + }, + "[GET] Redirect 307 Other origin to other origin": { + "status": "FAIL" + }, + "[GET] Redirect 307 Other origin to same origin": { + "status": "FAIL" + }, + "[POST] Redirect 307 Same origin to same origin": { + "status": "FAIL" + }, + "[POST] Redirect 307 Same origin to other origin": { + "status": "FAIL" + }, + "[POST] Redirect 307 Other origin to other origin": { + "status": "FAIL" + }, + "[POST] Redirect 307 Other origin to same origin": { + "status": "FAIL" + }, + "[GET] Redirect 308 Same origin to same origin": { + "status": "FAIL" + }, + "[GET] Redirect 308 Same origin to other origin": { + "status": "FAIL" + }, + "[GET] Redirect 308 Other origin to other origin": { + "status": "FAIL" + }, + "[GET] Redirect 308 Other origin to same origin": { + "status": "FAIL" + }, + "[POST] Redirect 308 Same origin to same origin": { + "status": "FAIL" + }, + "[POST] Redirect 308 Same origin to other origin": { + "status": "FAIL" + }, + "[POST] Redirect 308 Other origin to other origin": { + "status": "FAIL" + }, + "[POST] Redirect 308 Other origin to same origin": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-referrer-override.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-referrer-override.any.js.json new file mode 100644 index 00000000..b78241ae --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-referrer-override.any.js.json @@ -0,0 +1,386 @@ +{ + "Same origin redirection, no-referrer init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer init, origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer init, origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer init, same-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer init, same-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer-when-downgrade init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer-when-downgrade init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer-when-downgrade init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer-when-downgrade init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer-when-downgrade init, origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer-when-downgrade init, origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer-when-downgrade init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer-when-downgrade init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer-when-downgrade init, same-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer-when-downgrade init, same-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer-when-downgrade init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer-when-downgrade init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer-when-downgrade init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer-when-downgrade init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, no-referrer-when-downgrade init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, no-referrer-when-downgrade init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin init, origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin init, origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin init, same-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin init, same-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin-when-cross-origin init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin-when-cross-origin init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin-when-cross-origin init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin-when-cross-origin init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin-when-cross-origin init, origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin-when-cross-origin init, origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin-when-cross-origin init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin-when-cross-origin init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin-when-cross-origin init, same-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin-when-cross-origin init, same-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin-when-cross-origin init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin-when-cross-origin init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin-when-cross-origin init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin-when-cross-origin init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, origin-when-cross-origin init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, origin-when-cross-origin init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, same-origin init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, same-origin init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, same-origin init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, same-origin init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, same-origin init, origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, same-origin init, origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, same-origin init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, same-origin init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, same-origin init, same-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, same-origin init, same-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, same-origin init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, same-origin init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, same-origin init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, same-origin init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, same-origin init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, same-origin init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin init, origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin init, origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin init, same-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin init, same-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin-when-cross-origin init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin-when-cross-origin init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin-when-cross-origin init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin-when-cross-origin init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin-when-cross-origin init, origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin-when-cross-origin init, origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin-when-cross-origin init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin-when-cross-origin init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin-when-cross-origin init, same-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin-when-cross-origin init, same-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin-when-cross-origin init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin-when-cross-origin init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin-when-cross-origin init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin-when-cross-origin init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, strict-origin-when-cross-origin init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, strict-origin-when-cross-origin init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, unsafe-url init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, unsafe-url init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, unsafe-url init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, unsafe-url init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, unsafe-url init, origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, unsafe-url init, origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, unsafe-url init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, unsafe-url init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, unsafe-url init, same-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, unsafe-url init, same-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, unsafe-url init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, unsafe-url init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, unsafe-url init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, unsafe-url init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, unsafe-url init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, unsafe-url init, unsafe-url redirect header ": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-referrer.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-referrer.any.js.json new file mode 100644 index 00000000..86a01459 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-referrer.any.js.json @@ -0,0 +1,98 @@ +{ + "Same origin redirection, empty init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, empty init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, empty init, same-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, empty init, origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, empty init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, empty init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, empty init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, empty init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Same origin redirection, empty redirect header, unsafe-url init ": { + "status": "FAIL" + }, + "Same origin redirection, empty redirect header, no-referrer-when-downgrade init ": { + "status": "FAIL" + }, + "Same origin redirection, empty redirect header, same-origin init ": { + "status": "FAIL" + }, + "Same origin redirection, empty redirect header, origin init ": { + "status": "FAIL" + }, + "Same origin redirection, empty redirect header, origin-when-cross-origin init ": { + "status": "FAIL" + }, + "Same origin redirection, empty redirect header, no-referrer init ": { + "status": "FAIL" + }, + "Same origin redirection, empty redirect header, strict-origin init ": { + "status": "FAIL" + }, + "Same origin redirection, empty redirect header, strict-origin-when-cross-origin init ": { + "status": "FAIL" + }, + "Cross origin redirection, empty init, unsafe-url redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, empty init, no-referrer-when-downgrade redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, empty init, same-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, empty init, origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, empty init, origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, empty init, no-referrer redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, empty init, strict-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, empty init, strict-origin-when-cross-origin redirect header ": { + "status": "FAIL" + }, + "Cross origin redirection, empty redirect header, unsafe-url init ": { + "status": "FAIL" + }, + "Cross origin redirection, empty redirect header, no-referrer-when-downgrade init ": { + "status": "FAIL" + }, + "Cross origin redirection, empty redirect header, same-origin init ": { + "status": "FAIL" + }, + "Cross origin redirection, empty redirect header, origin init ": { + "status": "FAIL" + }, + "Cross origin redirection, empty redirect header, origin-when-cross-origin init ": { + "status": "FAIL" + }, + "Cross origin redirection, empty redirect header, no-referrer init ": { + "status": "FAIL" + }, + "Cross origin redirection, empty redirect header, strict-origin init ": { + "status": "FAIL" + }, + "Cross origin redirection, empty redirect header, strict-origin-when-cross-origin init ": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-schemes.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-schemes.any.js.json new file mode 100644 index 00000000..22950009 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-schemes.any.js.json @@ -0,0 +1,20 @@ +{ + "redirect-schemes": { + "status": "FAIL" + }, + "redirect-schemes 1": { + "status": "FAIL" + }, + "redirect-schemes 2": { + "status": "FAIL" + }, + "redirect-schemes 3": { + "status": "FAIL" + }, + "redirect-schemes 4": { + "status": "FAIL" + }, + "redirect-schemes 5": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-to-dataurl.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-to-dataurl.any.js.json new file mode 100644 index 00000000..a288574c --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-to-dataurl.any.js.json @@ -0,0 +1,17 @@ +{ + "Testing data URL loading after same-origin redirection (cors mode)": { + "status": "FAIL" + }, + "Testing data URL loading after same-origin redirection (no-cors mode)": { + "status": "FAIL" + }, + "Testing data URL loading after same-origin redirection (same-origin mode)": { + "status": "FAIL" + }, + "Testing data URL loading after cross-origin redirection (cors mode)": { + "status": "FAIL" + }, + "Testing data URL loading after cross-origin redirection (no-cors mode)": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/redirect/redirect-upload.h2.any.js.json b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-upload.h2.any.js.json new file mode 100644 index 00000000..3b8e100f --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/redirect/redirect-upload.h2.any.js.json @@ -0,0 +1,17 @@ +{ + "Fetch upload streaming should be accepted on 303": { + "status": "FAIL" + }, + "Fetch upload streaming should fail on 301": { + "status": "FAIL" + }, + "Fetch upload streaming should fail on 302": { + "status": "FAIL" + }, + "Fetch upload streaming should fail on 307": { + "status": "FAIL" + }, + "Fetch upload streaming should fail on 308": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/request/request-constructor-init-body-override.any.js.json b/tests/wpt-harness/expectations/fetch/api/request/request-constructor-init-body-override.any.js.json new file mode 100644 index 00000000..ce0d8384 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/request/request-constructor-init-body-override.any.js.json @@ -0,0 +1,5 @@ +{ + "Check that the body of a new request can be overridden when created from an existing Request object": { + "status": "PASS" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/request/request-consume.any.js.json b/tests/wpt-harness/expectations/fetch/api/request/request-consume.any.js.json index 285e6712..29eb926e 100644 --- a/tests/wpt-harness/expectations/fetch/api/request/request-consume.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/request/request-consume.any.js.json @@ -8,6 +8,9 @@ "Consume String request's body as arrayBuffer": { "status": "PASS" }, + "Consume String request's body as bytes": { + "status": "FAIL" + }, "Consume String request's body as JSON": { "status": "PASS" }, @@ -20,6 +23,9 @@ "Consume ArrayBuffer request's body as arrayBuffer": { "status": "PASS" }, + "Consume ArrayBuffer request's body as bytes": { + "status": "FAIL" + }, "Consume ArrayBuffer request's body as JSON": { "status": "PASS" }, @@ -32,6 +38,9 @@ "Consume Uint8Array request's body as arrayBuffer": { "status": "PASS" }, + "Consume Uint8Array request's body as bytes": { + "status": "FAIL" + }, "Consume Uint8Array request's body as JSON": { "status": "PASS" }, @@ -44,6 +53,9 @@ "Consume Int8Array request's body as arrayBuffer": { "status": "PASS" }, + "Consume Int8Array request's body as bytes": { + "status": "FAIL" + }, "Consume Int8Array request's body as JSON": { "status": "PASS" }, @@ -56,6 +68,9 @@ "Consume Float32Array request's body as arrayBuffer": { "status": "PASS" }, + "Consume Float32Array request's body as bytes": { + "status": "FAIL" + }, "Consume Float32Array request's body as JSON": { "status": "PASS" }, @@ -68,6 +83,9 @@ "Consume DataView request's body as arrayBuffer": { "status": "PASS" }, + "Consume DataView request's body as bytes": { + "status": "FAIL" + }, "Consume DataView request's body as JSON": { "status": "PASS" }, @@ -86,6 +104,9 @@ "Consume blob response's body as arrayBuffer": { "status": "FAIL" }, + "Consume blob response's body as bytes": { + "status": "FAIL" + }, "Consume blob response's body as blob (empty blob as input)": { "status": "FAIL" }, diff --git a/tests/wpt-harness/expectations/fetch/api/request/request-error.any.js.json b/tests/wpt-harness/expectations/fetch/api/request/request-error.any.js.json index 43f54690..f483406b 100644 --- a/tests/wpt-harness/expectations/fetch/api/request/request-error.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/request/request-error.any.js.json @@ -3,7 +3,7 @@ "status": "FAIL" }, "Input URL is not valid": { - "status": "FAIL" + "status": "PASS" }, "Input URL has credentials": { "status": "FAIL" diff --git a/tests/wpt-harness/expectations/fetch/api/request/request-headers.any.js.json b/tests/wpt-harness/expectations/fetch/api/request/request-headers.any.js.json index e3d8890e..bddd1281 100644 --- a/tests/wpt-harness/expectations/fetch/api/request/request-headers.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/request/request-headers.any.js.json @@ -41,9 +41,6 @@ "Adding invalid request header \"Access-Control-Request-Method: KO\"": { "status": "FAIL" }, - "Adding invalid request header \"Access-Control-Request-Private-Network: KO\"": { - "status": "FAIL" - }, "Adding invalid request header \"Connection: KO\"": { "status": "FAIL" }, diff --git a/tests/wpt-harness/expectations/fetch/api/request/request-init-priority.any.js.json b/tests/wpt-harness/expectations/fetch/api/request/request-init-priority.any.js.json new file mode 100644 index 00000000..2a3563a6 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/request/request-init-priority.any.js.json @@ -0,0 +1,26 @@ +{ + "new Request() with a 'high' priority does not throw an error": { + "status": "PASS" + }, + "new Request() with a 'low' priority does not throw an error": { + "status": "PASS" + }, + "new Request() with a 'auto' priority does not throw an error": { + "status": "PASS" + }, + "new Request() throws a TypeError if any of RequestInit's members' values are invalid": { + "status": "FAIL" + }, + "fetch() with a 'high' priority completes successfully": { + "status": "PASS" + }, + "fetch() with a 'low' priority completes successfully": { + "status": "PASS" + }, + "fetch() with a 'auto' priority completes successfully": { + "status": "PASS" + }, + "fetch() with an invalid priority returns a rejected promise with a TypeError": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/request/request-init-stream.any.js.json b/tests/wpt-harness/expectations/fetch/api/request/request-init-stream.any.js.json index 034bd6b1..2e19eb85 100644 --- a/tests/wpt-harness/expectations/fetch/api/request/request-init-stream.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/request/request-init-stream.any.js.json @@ -3,22 +3,22 @@ "status": "PASS" }, "Constructing a Request with a stream on which getReader() is called": { - "status": "FAIL" + "status": "PASS" }, "Constructing a Request with a stream on which read() is called": { - "status": "FAIL" + "status": "PASS" }, "Constructing a Request with a stream on which read() and releaseLock() are called": { - "status": "FAIL" + "status": "PASS" }, "Constructing a Request with a Request on which body.getReader() is called": { - "status": "FAIL" + "status": "PASS" }, "Constructing a Request with a Request on which body.getReader().read() is called": { - "status": "FAIL" + "status": "PASS" }, "Constructing a Request with a Request on which read() and releaseLock() are called": { - "status": "FAIL" + "status": "PASS" }, "It is OK to omit .duplex when the body is null.": { "status": "PASS" diff --git a/tests/wpt-harness/expectations/fetch/api/request/request-structure.any.js.json b/tests/wpt-harness/expectations/fetch/api/request/request-structure.any.js.json index 408376fd..58602918 100644 --- a/tests/wpt-harness/expectations/fetch/api/request/request-structure.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/request/request-structure.any.js.json @@ -1,6 +1,6 @@ { "Request has clone method": { - "status": "PASS" + "status": "FAIL" }, "Request has arrayBuffer method": { "status": "PASS" diff --git a/tests/wpt-harness/expectations/fetch/api/response/response-blob-realm.any.js.json b/tests/wpt-harness/expectations/fetch/api/response/response-blob-realm.any.js.json new file mode 100644 index 00000000..47621e2a --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/response/response-blob-realm.any.js.json @@ -0,0 +1,5 @@ +{ + "realm of the Uint8Array from Response bytes()": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/response/response-error-from-stream.any.js.json b/tests/wpt-harness/expectations/fetch/api/response/response-error-from-stream.any.js.json index 68019fa4..14ffc379 100644 --- a/tests/wpt-harness/expectations/fetch/api/response/response-error-from-stream.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/response/response-error-from-stream.any.js.json @@ -11,6 +11,9 @@ "ReadableStream start() Error propagates to Response.blob() Promise": { "status": "FAIL" }, + "ReadableStream start() Error propagates to Response.bytes() Promise": { + "status": "FAIL" + }, "ReadableStream start() Error propagates to Response.formData() Promise": { "status": "FAIL" }, @@ -26,6 +29,9 @@ "ReadableStream pull() Error propagates to Response.blob() Promise": { "status": "FAIL" }, + "ReadableStream pull() Error propagates to Response.bytes() Promise": { + "status": "FAIL" + }, "ReadableStream pull() Error propagates to Response.formData() Promise": { "status": "FAIL" }, diff --git a/tests/wpt-harness/expectations/fetch/api/response/response-error.any.js.json b/tests/wpt-harness/expectations/fetch/api/response/response-error.any.js.json index e41e7c45..0dcb3c6e 100644 --- a/tests/wpt-harness/expectations/fetch/api/response/response-error.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/response/response-error.any.js.json @@ -1,18 +1,18 @@ { "Throws RangeError when responseInit's status is 0": { - "status": "FAIL" + "status": "PASS" }, "Throws RangeError when responseInit's status is 100": { - "status": "FAIL" + "status": "PASS" }, "Throws RangeError when responseInit's status is 199": { - "status": "FAIL" + "status": "PASS" }, "Throws RangeError when responseInit's status is 600": { - "status": "FAIL" + "status": "PASS" }, "Throws RangeError when responseInit's status is 1000": { - "status": "FAIL" + "status": "PASS" }, "Throws TypeError when responseInit's statusText is \n": { "status": "FAIL" @@ -21,12 +21,12 @@ "status": "FAIL" }, "Throws TypeError when building a response with body and a body status of 204": { - "status": "FAIL" + "status": "PASS" }, "Throws TypeError when building a response with body and a body status of 205": { - "status": "FAIL" + "status": "PASS" }, "Throws TypeError when building a response with body and a body status of 304": { - "status": "FAIL" + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/response/response-from-stream.any.js.json b/tests/wpt-harness/expectations/fetch/api/response/response-from-stream.any.js.json index 4d94cc9f..710a47ee 100644 --- a/tests/wpt-harness/expectations/fetch/api/response/response-from-stream.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/response/response-from-stream.any.js.json @@ -1,11 +1,11 @@ { "Constructing a Response with a stream on which getReader() is called": { - "status": "FAIL" + "status": "PASS" }, "Constructing a Response with a stream on which read() is called": { - "status": "FAIL" + "status": "PASS" }, "Constructing a Response with a stream on which read() and releaseLock() are called": { - "status": "FAIL" + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/response/response-headers-guard.any.js.json b/tests/wpt-harness/expectations/fetch/api/response/response-headers-guard.any.js.json new file mode 100644 index 00000000..a7dde64c --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/response/response-headers-guard.any.js.json @@ -0,0 +1,5 @@ +{ + "Ensure response headers are immutable": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/response/response-static-error.any.js.json b/tests/wpt-harness/expectations/fetch/api/response/response-static-error.any.js.json index f27f066e..a138eb57 100644 --- a/tests/wpt-harness/expectations/fetch/api/response/response-static-error.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/response/response-static-error.any.js.json @@ -2,9 +2,6 @@ "Check response returned by static method error()": { "status": "FAIL" }, - "Ensure response headers are immutable": { - "status": "FAIL" - }, "the 'guard' of the Headers instance should be immutable": { "status": "FAIL" } diff --git a/tests/wpt-harness/expectations/fetch/api/response/response-static-json.any.js.json b/tests/wpt-harness/expectations/fetch/api/response/response-static-json.any.js.json index d0bb0c32..82df1617 100644 --- a/tests/wpt-harness/expectations/fetch/api/response/response-static-json.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/response/response-static-json.any.js.json @@ -1,21 +1,21 @@ { "Check response returned by static json() with init undefined": { - "status": "PASS" + "status": "FAIL" }, "Check response returned by static json() with init {\"status\":400}": { - "status": "PASS" + "status": "FAIL" }, "Check response returned by static json() with init {\"statusText\":\"foo\"}": { - "status": "PASS" + "status": "FAIL" }, "Check response returned by static json() with init {\"headers\":{}}": { - "status": "PASS" + "status": "FAIL" }, "Check response returned by static json() with init {\"headers\":{\"content-type\":\"foo/bar\"}}": { - "status": "PASS" + "status": "FAIL" }, "Check response returned by static json() with init {\"headers\":{\"x-foo\":\"bar\"}}": { - "status": "PASS" + "status": "FAIL" }, "Throws TypeError when calling static json() with a status of 204": { "status": "PASS" @@ -27,7 +27,7 @@ "status": "PASS" }, "Check static json() encodes JSON objects correctly": { - "status": "PASS" + "status": "FAIL" }, "Check static json() throws when data is not encodable": { "status": "PASS" @@ -36,15 +36,15 @@ "status": "PASS" }, "Check static json() propagates JSON serializer errors": { - "status": "PASS" + "status": "FAIL" }, "Check response returned by static json() with input 𝌆": { - "status": "PASS" + "status": "FAIL" }, "Check response returned by static json() with input U+df06U+d834": { - "status": "PASS" + "status": "FAIL" }, "Check response returned by static json() with input U+dead": { - "status": "PASS" + "status": "FAIL" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/response/response-stream-bad-chunk.any.js.json b/tests/wpt-harness/expectations/fetch/api/response/response-stream-bad-chunk.any.js.json new file mode 100644 index 00000000..78654577 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/api/response/response-stream-bad-chunk.any.js.json @@ -0,0 +1,20 @@ +{ + "ReadableStream with non-Uint8Array chunk passed to Response.arrayBuffer() causes TypeError": { + "status": "PASS" + }, + "ReadableStream with non-Uint8Array chunk passed to Response.blob() causes TypeError": { + "status": "FAIL" + }, + "ReadableStream with non-Uint8Array chunk passed to Response.bytes() causes TypeError": { + "status": "FAIL" + }, + "ReadableStream with non-Uint8Array chunk passed to Response.formData() causes TypeError": { + "status": "FAIL" + }, + "ReadableStream with non-Uint8Array chunk passed to Response.json() causes TypeError": { + "status": "PASS" + }, + "ReadableStream with non-Uint8Array chunk passed to Response.text() causes TypeError": { + "status": "PASS" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/response/response-stream-disturbed-2.any.js.json b/tests/wpt-harness/expectations/fetch/api/response/response-stream-disturbed-2.any.js.json index 24e0e1ec..d81b359d 100644 --- a/tests/wpt-harness/expectations/fetch/api/response/response-stream-disturbed-2.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/response/response-stream-disturbed-2.any.js.json @@ -3,13 +3,13 @@ "status": "FAIL" }, "Getting text after getting a locked Response body (body source: fetch)": { - "status": "FAIL" + "status": "PASS" }, "Getting json after getting a locked Response body (body source: fetch)": { - "status": "FAIL" + "status": "PASS" }, "Getting arrayBuffer after getting a locked Response body (body source: fetch)": { - "status": "FAIL" + "status": "PASS" }, "Getting blob after getting a locked Response body (body source: stream)": { "status": "FAIL" @@ -27,12 +27,12 @@ "status": "FAIL" }, "Getting text after getting a locked Response body (body source: string)": { - "status": "FAIL" + "status": "PASS" }, "Getting json after getting a locked Response body (body source: string)": { - "status": "FAIL" + "status": "PASS" }, "Getting arrayBuffer after getting a locked Response body (body source: string)": { - "status": "FAIL" + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/api/response/response-stream-disturbed-3.any.js.json b/tests/wpt-harness/expectations/fetch/api/response/response-stream-disturbed-3.any.js.json index fd99fdf9..b306c09e 100644 --- a/tests/wpt-harness/expectations/fetch/api/response/response-stream-disturbed-3.any.js.json +++ b/tests/wpt-harness/expectations/fetch/api/response/response-stream-disturbed-3.any.js.json @@ -3,13 +3,13 @@ "status": "FAIL" }, "Getting text after reading the Response body (body source: fetch)": { - "status": "FAIL" + "status": "PASS" }, "Getting json after reading the Response body (body source: fetch)": { - "status": "FAIL" + "status": "PASS" }, "Getting arrayBuffer after reading the Response body (body source: fetch)": { - "status": "FAIL" + "status": "PASS" }, "Getting blob after reading the Response body (body source: stream)": { "status": "FAIL" @@ -27,12 +27,12 @@ "status": "FAIL" }, "Getting text after reading the Response body (body source: string)": { - "status": "FAIL" + "status": "PASS" }, "Getting json after reading the Response body (body source: string)": { - "status": "FAIL" + "status": "PASS" }, "Getting arrayBuffer after reading the Response body (body source: string)": { - "status": "FAIL" + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/data-urls/base64.any.js.json b/tests/wpt-harness/expectations/fetch/data-urls/base64.any.js.json new file mode 100644 index 00000000..5c95e295 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/data-urls/base64.any.js.json @@ -0,0 +1,245 @@ +{ + "Setup.": { + "status": "PASS" + }, + "data: URL base64 handling: \"\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcd\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \" abcd\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcd \"": { + "status": "FAIL" + }, + "data: URL base64 handling: \" abcd===\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcd=== \"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcd ===\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"a\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abc\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcde\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"𐀀\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"=\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"==\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"===\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"====\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"=====\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"a=\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"a==\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"a===\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"a====\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"a=====\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab=\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab==\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab===\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab====\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab=====\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abc=\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abc==\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abc===\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abc====\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abc=====\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcd=\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcd==\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcd===\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcd====\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcd=====\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcde=\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcde==\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcde===\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcde====\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcde=====\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"=a\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"=a=\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"a=b\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"a=b=\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab=c\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab=c=\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abc=d\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abc=d=\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab\\vcd\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab cd\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab、cd\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab\\tcd\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab\\ncd\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab\\fcd\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab\\rcd\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab cd\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab cd\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab\\t\\n\\f\\r cd\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \" \\t\\n\\f\\r ab\\t\\n\\f\\r cd\\t\\n\\f\\r \"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"ab\\t\\n\\f\\r =\\t\\n\\f\\r =\\t\\n\\f\\r \"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"A\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"/A\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"//A\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"///A\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"////A\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"/\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"A/\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"AA/\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"AAAA/\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"AAA/\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"\\0nonsense\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"abcd\\0nonsense\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"YQ\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"YR\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"~~\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"..\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"--\"": { + "status": "FAIL" + }, + "data: URL base64 handling: \"__\"": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/fetch/data-urls/processing.any.js.json b/tests/wpt-harness/expectations/fetch/data-urls/processing.any.js.json new file mode 100644 index 00000000..da515a27 --- /dev/null +++ b/tests/wpt-harness/expectations/fetch/data-urls/processing.any.js.json @@ -0,0 +1,221 @@ +{ + "Setup.": { + "status": "PASS" + }, + "\"data://test/,X\"": { + "status": "FAIL" + }, + "\"data://test:test/,X\"": { + "status": "PASS" + }, + "\"data:,X\"": { + "status": "FAIL" + }, + "\"data:\"": { + "status": "FAIL" + }, + "\"data:text/html\"": { + "status": "FAIL" + }, + "\"data:text/html ;charset=x \"": { + "status": "FAIL" + }, + "\"data:,\"": { + "status": "FAIL" + }, + "\"data:,X#X\"": { + "status": "FAIL" + }, + "\"data:,%FF\"": { + "status": "FAIL" + }, + "\"data:text/plain,X\"": { + "status": "FAIL" + }, + "\"data:text/plain ,X\"": { + "status": "FAIL" + }, + "\"data:text/plain%20,X\"": { + "status": "FAIL" + }, + "\"data:text/plain\\f,X\"": { + "status": "FAIL" + }, + "\"data:text/plain%0C,X\"": { + "status": "FAIL" + }, + "\"data:text/plain;,X\"": { + "status": "FAIL" + }, + "\"data:;x=x;charset=x,X\"": { + "status": "FAIL" + }, + "\"data:;x=x,X\"": { + "status": "FAIL" + }, + "\"data:text/plain;charset=windows-1252,%C2%B1\"": { + "status": "FAIL" + }, + "\"data:text/plain;Charset=UTF-8,%C2%B1\"": { + "status": "FAIL" + }, + "\"data:text/plain;charset=windows-1252,áñçə💩\"": { + "status": "FAIL" + }, + "\"data:text/plain;charset=UTF-8,áñçə💩\"": { + "status": "FAIL" + }, + "\"data:image/gif,%C2%B1\"": { + "status": "FAIL" + }, + "\"data:IMAGE/gif,%C2%B1\"": { + "status": "FAIL" + }, + "\"data:IMAGE/gif;hi=x,%C2%B1\"": { + "status": "FAIL" + }, + "\"data:IMAGE/gif;CHARSET=x,%C2%B1\"": { + "status": "FAIL" + }, + "\"data: ,%FF\"": { + "status": "FAIL" + }, + "\"data:%20,%FF\"": { + "status": "FAIL" + }, + "\"data:\\f,%FF\"": { + "status": "FAIL" + }, + "\"data:%1F,%FF\"": { + "status": "FAIL" + }, + "\"data:\\0,%FF\"": { + "status": "FAIL" + }, + "\"data:%00,%FF\"": { + "status": "FAIL" + }, + "\"data:text/html ,X\"": { + "status": "FAIL" + }, + "\"data:text / html,X\"": { + "status": "FAIL" + }, + "\"data:†,X\"": { + "status": "FAIL" + }, + "\"data:†/†,X\"": { + "status": "FAIL" + }, + "\"data:X,X\"": { + "status": "FAIL" + }, + "\"data:image/png,X X\"": { + "status": "FAIL" + }, + "\"data:application/javascript,X X\"": { + "status": "FAIL" + }, + "\"data:application/xml,X X\"": { + "status": "FAIL" + }, + "\"data:text/javascript,X X\"": { + "status": "FAIL" + }, + "\"data:text/plain,X X\"": { + "status": "FAIL" + }, + "\"data:unknown/unknown,X X\"": { + "status": "FAIL" + }, + "\"data:text/plain;a=\\\",\\\",X\"": { + "status": "FAIL" + }, + "\"data:text/plain;a=%2C,X\"": { + "status": "FAIL" + }, + "\"data:;base64;base64,WA\"": { + "status": "FAIL" + }, + "\"data:x/x;base64;base64,WA\"": { + "status": "FAIL" + }, + "\"data:x/x;base64;charset=x,WA\"": { + "status": "FAIL" + }, + "\"data:x/x;base64;charset=x;base64,WA\"": { + "status": "FAIL" + }, + "\"data:x/x;base64;base64x,WA\"": { + "status": "FAIL" + }, + "\"data:;base64,W%20A\"": { + "status": "FAIL" + }, + "\"data:;base64,W%0CA\"": { + "status": "FAIL" + }, + "\"data:x;base64x,WA\"": { + "status": "FAIL" + }, + "\"data:x;base64;x,WA\"": { + "status": "FAIL" + }, + "\"data:x;base64=x,WA\"": { + "status": "FAIL" + }, + "\"data:; base64,WA\"": { + "status": "FAIL" + }, + "\"data:; base64,WA\"": { + "status": "FAIL" + }, + "\"data: ;charset=x ; base64,WA\"": { + "status": "FAIL" + }, + "\"data:;base64;,WA\"": { + "status": "FAIL" + }, + "\"data:;base64 ,WA\"": { + "status": "FAIL" + }, + "\"data:;base64 ,WA\"": { + "status": "FAIL" + }, + "\"data:;base 64,WA\"": { + "status": "FAIL" + }, + "\"data:;BASe64,WA\"": { + "status": "FAIL" + }, + "\"data:;%62ase64,WA\"": { + "status": "FAIL" + }, + "\"data:%3Bbase64,WA\"": { + "status": "FAIL" + }, + "\"data:;charset=x,X\"": { + "status": "FAIL" + }, + "\"data:; charset=x,X\"": { + "status": "FAIL" + }, + "\"data:;charset =x,X\"": { + "status": "FAIL" + }, + "\"data:;charset= x,X\"": { + "status": "FAIL" + }, + "\"data:;charset=,X\"": { + "status": "FAIL" + }, + "\"data:;charset,X\"": { + "status": "FAIL" + }, + "\"data:;charset=\\\"x\\\",X\"": { + "status": "FAIL" + }, + "\"data:;CHARSET=\\\"X\\\",X\"": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/html/webappapis/structured-clone/structured-clone.any.js.json b/tests/wpt-harness/expectations/html/webappapis/structured-clone/structured-clone.any.js.json index 832fe893..f85c26b6 100644 --- a/tests/wpt-harness/expectations/html/webappapis/structured-clone/structured-clone.any.js.json +++ b/tests/wpt-harness/expectations/html/webappapis/structured-clone/structured-clone.any.js.json @@ -342,7 +342,7 @@ "status": "PASS" }, "Serializing a non-serializable platform object fails": { - "status": "FAIL" + "status": "PASS" }, "An object whose interface is deleted from the global must still deserialize": { "status": "FAIL" @@ -351,16 +351,16 @@ "status": "FAIL" }, "Resizable ArrayBuffer": { - "status": "FAIL" + "status": "PASS" }, "Growable SharedArrayBuffer": { "status": "FAIL" }, "Length-tracking TypedArray": { - "status": "FAIL" + "status": "PASS" }, "Length-tracking DataView": { - "status": "FAIL" + "status": "PASS" }, "Serializing OOB TypedArray throws": { "status": "FAIL" @@ -390,13 +390,13 @@ "status": "FAIL" }, "Resizable ArrayBuffer is transferable": { - "status": "FAIL" + "status": "PASS" }, "Length-tracking TypedArray is transferable": { - "status": "FAIL" + "status": "PASS" }, "Length-tracking DataView is transferable": { - "status": "FAIL" + "status": "PASS" }, "Transferring OOB TypedArray throws": { "status": "FAIL" diff --git a/tests/wpt-harness/expectations/streams/idlharness.any.js.json b/tests/wpt-harness/expectations/streams/idlharness.any.js.json new file mode 100644 index 00000000..6e23c0f5 --- /dev/null +++ b/tests/wpt-harness/expectations/streams/idlharness.any.js.json @@ -0,0 +1,689 @@ +{ + "idl_test setup": { + "status": "PASS" + }, + "idl_test validation": { + "status": "PASS" + }, + "ReadableStreamDefaultReader includes ReadableStreamGenericReader: member names are unique": { + "status": "PASS" + }, + "ReadableStreamBYOBReader includes ReadableStreamGenericReader: member names are unique": { + "status": "PASS" + }, + "ReadableStream interface: existence and properties of interface object": { + "status": "PASS" + }, + "ReadableStream interface object length": { + "status": "PASS" + }, + "ReadableStream interface object name": { + "status": "PASS" + }, + "ReadableStream interface: existence and properties of interface prototype object": { + "status": "PASS" + }, + "ReadableStream interface: existence and properties of interface prototype object's \"constructor\" property": { + "status": "PASS" + }, + "ReadableStream interface: existence and properties of interface prototype object's @@unscopables property": { + "status": "PASS" + }, + "ReadableStream interface: operation from(any)": { + "status": "FAIL" + }, + "ReadableStream interface: attribute locked": { + "status": "PASS" + }, + "ReadableStream interface: operation cancel(optional any)": { + "status": "PASS" + }, + "ReadableStream interface: operation getReader(optional ReadableStreamGetReaderOptions)": { + "status": "PASS" + }, + "ReadableStream interface: operation pipeThrough(ReadableWritablePair, optional StreamPipeOptions)": { + "status": "PASS" + }, + "ReadableStream interface: operation pipeTo(WritableStream, optional StreamPipeOptions)": { + "status": "FAIL" + }, + "ReadableStream interface: operation tee()": { + "status": "PASS" + }, + "ReadableStream interface: async iterable": { + "status": "FAIL" + }, + "ReadableStream must be primary interface of new ReadableStream()": { + "status": "PASS" + }, + "Stringification of new ReadableStream()": { + "status": "PASS" + }, + "ReadableStream interface: new ReadableStream() must inherit property \"from(any)\" with the proper type": { + "status": "PASS" + }, + "ReadableStream interface: calling from(any) on new ReadableStream() with too few arguments must throw TypeError": { + "status": "FAIL" + }, + "ReadableStream interface: new ReadableStream() must inherit property \"locked\" with the proper type": { + "status": "PASS" + }, + "ReadableStream interface: new ReadableStream() must inherit property \"cancel(optional any)\" with the proper type": { + "status": "PASS" + }, + "ReadableStream interface: calling cancel(optional any) on new ReadableStream() with too few arguments must throw TypeError": { + "status": "PASS" + }, + "ReadableStream interface: new ReadableStream() must inherit property \"getReader(optional ReadableStreamGetReaderOptions)\" with the proper type": { + "status": "PASS" + }, + "ReadableStream interface: calling getReader(optional ReadableStreamGetReaderOptions) on new ReadableStream() with too few arguments must throw TypeError": { + "status": "PASS" + }, + "ReadableStream interface: new ReadableStream() must inherit property \"pipeThrough(ReadableWritablePair, optional StreamPipeOptions)\" with the proper type": { + "status": "PASS" + }, + "ReadableStream interface: calling pipeThrough(ReadableWritablePair, optional StreamPipeOptions) on new ReadableStream() with too few arguments must throw TypeError": { + "status": "PASS" + }, + "ReadableStream interface: new ReadableStream() must inherit property \"pipeTo(WritableStream, optional StreamPipeOptions)\" with the proper type": { + "status": "PASS" + }, + "ReadableStream interface: calling pipeTo(WritableStream, optional StreamPipeOptions) on new ReadableStream() with too few arguments must throw TypeError": { + "status": "FAIL" + }, + "ReadableStream interface: new ReadableStream() must inherit property \"tee()\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamDefaultReader interface: existence and properties of interface object": { + "status": "PASS" + }, + "ReadableStreamDefaultReader interface object length": { + "status": "PASS" + }, + "ReadableStreamDefaultReader interface object name": { + "status": "PASS" + }, + "ReadableStreamDefaultReader interface: existence and properties of interface prototype object": { + "status": "PASS" + }, + "ReadableStreamDefaultReader interface: existence and properties of interface prototype object's \"constructor\" property": { + "status": "PASS" + }, + "ReadableStreamDefaultReader interface: existence and properties of interface prototype object's @@unscopables property": { + "status": "PASS" + }, + "ReadableStreamDefaultReader interface: operation read()": { + "status": "FAIL" + }, + "ReadableStreamDefaultReader interface: operation releaseLock()": { + "status": "FAIL" + }, + "ReadableStreamDefaultReader interface: attribute closed": { + "status": "FAIL" + }, + "ReadableStreamDefaultReader interface: operation cancel(optional any)": { + "status": "FAIL" + }, + "ReadableStreamDefaultReader must be primary interface of (new ReadableStream()).getReader()": { + "status": "PASS" + }, + "Stringification of (new ReadableStream()).getReader()": { + "status": "FAIL" + }, + "ReadableStreamDefaultReader interface: (new ReadableStream()).getReader() must inherit property \"read()\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamDefaultReader interface: (new ReadableStream()).getReader() must inherit property \"releaseLock()\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamDefaultReader interface: (new ReadableStream()).getReader() must inherit property \"closed\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamDefaultReader interface: (new ReadableStream()).getReader() must inherit property \"cancel(optional any)\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamDefaultReader interface: calling cancel(optional any) on (new ReadableStream()).getReader() with too few arguments must throw TypeError": { + "status": "PASS" + }, + "ReadableStreamBYOBReader interface: existence and properties of interface object": { + "status": "PASS" + }, + "ReadableStreamBYOBReader interface object length": { + "status": "PASS" + }, + "ReadableStreamBYOBReader interface object name": { + "status": "PASS" + }, + "ReadableStreamBYOBReader interface: existence and properties of interface prototype object": { + "status": "PASS" + }, + "ReadableStreamBYOBReader interface: existence and properties of interface prototype object's \"constructor\" property": { + "status": "PASS" + }, + "ReadableStreamBYOBReader interface: existence and properties of interface prototype object's @@unscopables property": { + "status": "PASS" + }, + "ReadableStreamBYOBReader interface: operation read(ArrayBufferView, optional ReadableStreamBYOBReaderReadOptions)": { + "status": "FAIL" + }, + "ReadableStreamBYOBReader interface: operation releaseLock()": { + "status": "FAIL" + }, + "ReadableStreamBYOBReader interface: attribute closed": { + "status": "FAIL" + }, + "ReadableStreamBYOBReader interface: operation cancel(optional any)": { + "status": "FAIL" + }, + "ReadableStreamBYOBReader must be primary interface of (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' })": { + "status": "PASS" + }, + "Stringification of (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' })": { + "status": "FAIL" + }, + "ReadableStreamBYOBReader interface: (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) must inherit property \"read(ArrayBufferView, optional ReadableStreamBYOBReaderReadOptions)\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamBYOBReader interface: calling read(ArrayBufferView, optional ReadableStreamBYOBReaderReadOptions) on (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) with too few arguments must throw TypeError": { + "status": "PASS" + }, + "ReadableStreamBYOBReader interface: (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) must inherit property \"releaseLock()\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamBYOBReader interface: (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) must inherit property \"closed\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamBYOBReader interface: (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) must inherit property \"cancel(optional any)\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamBYOBReader interface: calling cancel(optional any) on (new ReadableStream({ type: 'bytes' })).getReader({ mode: 'byob' }) with too few arguments must throw TypeError": { + "status": "PASS" + }, + "ReadableStreamDefaultController interface: existence and properties of interface object": { + "status": "PASS" + }, + "ReadableStreamDefaultController interface object length": { + "status": "PASS" + }, + "ReadableStreamDefaultController interface object name": { + "status": "PASS" + }, + "ReadableStreamDefaultController interface: existence and properties of interface prototype object": { + "status": "PASS" + }, + "ReadableStreamDefaultController interface: existence and properties of interface prototype object's \"constructor\" property": { + "status": "PASS" + }, + "ReadableStreamDefaultController interface: existence and properties of interface prototype object's @@unscopables property": { + "status": "PASS" + }, + "ReadableStreamDefaultController interface: attribute desiredSize": { + "status": "FAIL" + }, + "ReadableStreamDefaultController interface: operation close()": { + "status": "FAIL" + }, + "ReadableStreamDefaultController interface: operation enqueue(optional any)": { + "status": "FAIL" + }, + "ReadableStreamDefaultController interface: operation error(optional any)": { + "status": "FAIL" + }, + "ReadableStreamDefaultController must be primary interface of self.readableStreamDefaultController": { + "status": "PASS" + }, + "Stringification of self.readableStreamDefaultController": { + "status": "FAIL" + }, + "ReadableStreamDefaultController interface: self.readableStreamDefaultController must inherit property \"desiredSize\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamDefaultController interface: self.readableStreamDefaultController must inherit property \"close()\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamDefaultController interface: self.readableStreamDefaultController must inherit property \"enqueue(optional any)\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamDefaultController interface: calling enqueue(optional any) on self.readableStreamDefaultController with too few arguments must throw TypeError": { + "status": "PASS" + }, + "ReadableStreamDefaultController interface: self.readableStreamDefaultController must inherit property \"error(optional any)\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamDefaultController interface: calling error(optional any) on self.readableStreamDefaultController with too few arguments must throw TypeError": { + "status": "PASS" + }, + "ReadableByteStreamController interface: existence and properties of interface object": { + "status": "PASS" + }, + "ReadableByteStreamController interface object length": { + "status": "PASS" + }, + "ReadableByteStreamController interface object name": { + "status": "PASS" + }, + "ReadableByteStreamController interface: existence and properties of interface prototype object": { + "status": "PASS" + }, + "ReadableByteStreamController interface: existence and properties of interface prototype object's \"constructor\" property": { + "status": "PASS" + }, + "ReadableByteStreamController interface: existence and properties of interface prototype object's @@unscopables property": { + "status": "PASS" + }, + "ReadableByteStreamController interface: attribute byobRequest": { + "status": "FAIL" + }, + "ReadableByteStreamController interface: attribute desiredSize": { + "status": "FAIL" + }, + "ReadableByteStreamController interface: operation close()": { + "status": "FAIL" + }, + "ReadableByteStreamController interface: operation enqueue(ArrayBufferView)": { + "status": "FAIL" + }, + "ReadableByteStreamController interface: operation error(optional any)": { + "status": "FAIL" + }, + "ReadableByteStreamController must be primary interface of self.readableByteStreamController": { + "status": "PASS" + }, + "Stringification of self.readableByteStreamController": { + "status": "FAIL" + }, + "ReadableByteStreamController interface: self.readableByteStreamController must inherit property \"byobRequest\" with the proper type": { + "status": "PASS" + }, + "ReadableByteStreamController interface: self.readableByteStreamController must inherit property \"desiredSize\" with the proper type": { + "status": "PASS" + }, + "ReadableByteStreamController interface: self.readableByteStreamController must inherit property \"close()\" with the proper type": { + "status": "PASS" + }, + "ReadableByteStreamController interface: self.readableByteStreamController must inherit property \"enqueue(ArrayBufferView)\" with the proper type": { + "status": "PASS" + }, + "ReadableByteStreamController interface: calling enqueue(ArrayBufferView) on self.readableByteStreamController with too few arguments must throw TypeError": { + "status": "PASS" + }, + "ReadableByteStreamController interface: self.readableByteStreamController must inherit property \"error(optional any)\" with the proper type": { + "status": "PASS" + }, + "ReadableByteStreamController interface: calling error(optional any) on self.readableByteStreamController with too few arguments must throw TypeError": { + "status": "PASS" + }, + "ReadableStreamBYOBRequest interface: existence and properties of interface object": { + "status": "PASS" + }, + "ReadableStreamBYOBRequest interface object length": { + "status": "PASS" + }, + "ReadableStreamBYOBRequest interface object name": { + "status": "PASS" + }, + "ReadableStreamBYOBRequest interface: existence and properties of interface prototype object": { + "status": "PASS" + }, + "ReadableStreamBYOBRequest interface: existence and properties of interface prototype object's \"constructor\" property": { + "status": "PASS" + }, + "ReadableStreamBYOBRequest interface: existence and properties of interface prototype object's @@unscopables property": { + "status": "PASS" + }, + "ReadableStreamBYOBRequest interface: attribute view": { + "status": "FAIL" + }, + "ReadableStreamBYOBRequest interface: operation respond(unsigned long long)": { + "status": "FAIL" + }, + "ReadableStreamBYOBRequest interface: operation respondWithNewView(ArrayBufferView)": { + "status": "FAIL" + }, + "ReadableStreamBYOBRequest must be primary interface of self.readableStreamByobRequest": { + "status": "PASS" + }, + "Stringification of self.readableStreamByobRequest": { + "status": "FAIL" + }, + "ReadableStreamBYOBRequest interface: self.readableStreamByobRequest must inherit property \"view\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamBYOBRequest interface: self.readableStreamByobRequest must inherit property \"respond(unsigned long long)\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamBYOBRequest interface: calling respond(unsigned long long) on self.readableStreamByobRequest with too few arguments must throw TypeError": { + "status": "FAIL" + }, + "ReadableStreamBYOBRequest interface: self.readableStreamByobRequest must inherit property \"respondWithNewView(ArrayBufferView)\" with the proper type": { + "status": "PASS" + }, + "ReadableStreamBYOBRequest interface: calling respondWithNewView(ArrayBufferView) on self.readableStreamByobRequest with too few arguments must throw TypeError": { + "status": "PASS" + }, + "WritableStream interface: existence and properties of interface object": { + "status": "PASS" + }, + "WritableStream interface object length": { + "status": "PASS" + }, + "WritableStream interface object name": { + "status": "PASS" + }, + "WritableStream interface: existence and properties of interface prototype object": { + "status": "PASS" + }, + "WritableStream interface: existence and properties of interface prototype object's \"constructor\" property": { + "status": "PASS" + }, + "WritableStream interface: existence and properties of interface prototype object's @@unscopables property": { + "status": "PASS" + }, + "WritableStream interface: attribute locked": { + "status": "FAIL" + }, + "WritableStream interface: operation abort(optional any)": { + "status": "FAIL" + }, + "WritableStream interface: operation close()": { + "status": "FAIL" + }, + "WritableStream interface: operation getWriter()": { + "status": "FAIL" + }, + "WritableStream must be primary interface of new WritableStream()": { + "status": "PASS" + }, + "Stringification of new WritableStream()": { + "status": "FAIL" + }, + "WritableStream interface: new WritableStream() must inherit property \"locked\" with the proper type": { + "status": "PASS" + }, + "WritableStream interface: new WritableStream() must inherit property \"abort(optional any)\" with the proper type": { + "status": "PASS" + }, + "WritableStream interface: calling abort(optional any) on new WritableStream() with too few arguments must throw TypeError": { + "status": "PASS" + }, + "WritableStream interface: new WritableStream() must inherit property \"close()\" with the proper type": { + "status": "PASS" + }, + "WritableStream interface: new WritableStream() must inherit property \"getWriter()\" with the proper type": { + "status": "PASS" + }, + "WritableStreamDefaultWriter interface: existence and properties of interface object": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter interface object length": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter interface object name": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter interface: existence and properties of interface prototype object": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter interface: existence and properties of interface prototype object's \"constructor\" property": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter interface: existence and properties of interface prototype object's @@unscopables property": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter interface: attribute closed": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter interface: attribute desiredSize": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter interface: attribute ready": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter interface: operation abort(optional any)": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter interface: operation close()": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter interface: operation releaseLock()": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter interface: operation write(optional any)": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter must be primary interface of (new WritableStream()).getWriter()": { + "status": "FAIL" + }, + "Stringification of (new WritableStream()).getWriter()": { + "status": "FAIL" + }, + "WritableStreamDefaultWriter interface: (new WritableStream()).getWriter() must inherit property \"closed\" with the proper type": { + "status": "PASS" + }, + "WritableStreamDefaultWriter interface: (new WritableStream()).getWriter() must inherit property \"desiredSize\" with the proper type": { + "status": "PASS" + }, + "WritableStreamDefaultWriter interface: (new WritableStream()).getWriter() must inherit property \"ready\" with the proper type": { + "status": "PASS" + }, + "WritableStreamDefaultWriter interface: (new WritableStream()).getWriter() must inherit property \"abort(optional any)\" with the proper type": { + "status": "PASS" + }, + "WritableStreamDefaultWriter interface: calling abort(optional any) on (new WritableStream()).getWriter() with too few arguments must throw TypeError": { + "status": "PASS" + }, + "WritableStreamDefaultWriter interface: (new WritableStream()).getWriter() must inherit property \"close()\" with the proper type": { + "status": "PASS" + }, + "WritableStreamDefaultWriter interface: (new WritableStream()).getWriter() must inherit property \"releaseLock()\" with the proper type": { + "status": "PASS" + }, + "WritableStreamDefaultWriter interface: (new WritableStream()).getWriter() must inherit property \"write(optional any)\" with the proper type": { + "status": "PASS" + }, + "WritableStreamDefaultWriter interface: calling write(optional any) on (new WritableStream()).getWriter() with too few arguments must throw TypeError": { + "status": "PASS" + }, + "WritableStreamDefaultController interface: existence and properties of interface object": { + "status": "FAIL" + }, + "WritableStreamDefaultController interface object length": { + "status": "FAIL" + }, + "WritableStreamDefaultController interface object name": { + "status": "FAIL" + }, + "WritableStreamDefaultController interface: existence and properties of interface prototype object": { + "status": "FAIL" + }, + "WritableStreamDefaultController interface: existence and properties of interface prototype object's \"constructor\" property": { + "status": "FAIL" + }, + "WritableStreamDefaultController interface: existence and properties of interface prototype object's @@unscopables property": { + "status": "FAIL" + }, + "WritableStreamDefaultController interface: attribute signal": { + "status": "FAIL" + }, + "WritableStreamDefaultController interface: operation error(optional any)": { + "status": "FAIL" + }, + "WritableStreamDefaultController must be primary interface of self.writableStreamDefaultController": { + "status": "FAIL" + }, + "Stringification of self.writableStreamDefaultController": { + "status": "FAIL" + }, + "WritableStreamDefaultController interface: self.writableStreamDefaultController must inherit property \"signal\" with the proper type": { + "status": "FAIL" + }, + "WritableStreamDefaultController interface: self.writableStreamDefaultController must inherit property \"error(optional any)\" with the proper type": { + "status": "PASS" + }, + "WritableStreamDefaultController interface: calling error(optional any) on self.writableStreamDefaultController with too few arguments must throw TypeError": { + "status": "PASS" + }, + "TransformStream interface: existence and properties of interface object": { + "status": "PASS" + }, + "TransformStream interface object length": { + "status": "PASS" + }, + "TransformStream interface object name": { + "status": "PASS" + }, + "TransformStream interface: existence and properties of interface prototype object": { + "status": "PASS" + }, + "TransformStream interface: existence and properties of interface prototype object's \"constructor\" property": { + "status": "PASS" + }, + "TransformStream interface: existence and properties of interface prototype object's @@unscopables property": { + "status": "PASS" + }, + "TransformStream interface: attribute readable": { + "status": "FAIL" + }, + "TransformStream interface: attribute writable": { + "status": "FAIL" + }, + "TransformStream must be primary interface of new TransformStream()": { + "status": "PASS" + }, + "Stringification of new TransformStream()": { + "status": "FAIL" + }, + "TransformStream interface: new TransformStream() must inherit property \"readable\" with the proper type": { + "status": "PASS" + }, + "TransformStream interface: new TransformStream() must inherit property \"writable\" with the proper type": { + "status": "PASS" + }, + "TransformStreamDefaultController interface: existence and properties of interface object": { + "status": "FAIL" + }, + "TransformStreamDefaultController interface object length": { + "status": "FAIL" + }, + "TransformStreamDefaultController interface object name": { + "status": "FAIL" + }, + "TransformStreamDefaultController interface: existence and properties of interface prototype object": { + "status": "FAIL" + }, + "TransformStreamDefaultController interface: existence and properties of interface prototype object's \"constructor\" property": { + "status": "FAIL" + }, + "TransformStreamDefaultController interface: existence and properties of interface prototype object's @@unscopables property": { + "status": "FAIL" + }, + "TransformStreamDefaultController interface: attribute desiredSize": { + "status": "FAIL" + }, + "TransformStreamDefaultController interface: operation enqueue(optional any)": { + "status": "FAIL" + }, + "TransformStreamDefaultController interface: operation error(optional any)": { + "status": "FAIL" + }, + "TransformStreamDefaultController interface: operation terminate()": { + "status": "FAIL" + }, + "TransformStreamDefaultController must be primary interface of self.transformStreamDefaultController": { + "status": "FAIL" + }, + "Stringification of self.transformStreamDefaultController": { + "status": "FAIL" + }, + "TransformStreamDefaultController interface: self.transformStreamDefaultController must inherit property \"desiredSize\" with the proper type": { + "status": "PASS" + }, + "TransformStreamDefaultController interface: self.transformStreamDefaultController must inherit property \"enqueue(optional any)\" with the proper type": { + "status": "PASS" + }, + "TransformStreamDefaultController interface: calling enqueue(optional any) on self.transformStreamDefaultController with too few arguments must throw TypeError": { + "status": "PASS" + }, + "TransformStreamDefaultController interface: self.transformStreamDefaultController must inherit property \"error(optional any)\" with the proper type": { + "status": "PASS" + }, + "TransformStreamDefaultController interface: calling error(optional any) on self.transformStreamDefaultController with too few arguments must throw TypeError": { + "status": "PASS" + }, + "TransformStreamDefaultController interface: self.transformStreamDefaultController must inherit property \"terminate()\" with the proper type": { + "status": "PASS" + }, + "ByteLengthQueuingStrategy interface: existence and properties of interface object": { + "status": "PASS" + }, + "ByteLengthQueuingStrategy interface object length": { + "status": "PASS" + }, + "ByteLengthQueuingStrategy interface object name": { + "status": "PASS" + }, + "ByteLengthQueuingStrategy interface: existence and properties of interface prototype object": { + "status": "PASS" + }, + "ByteLengthQueuingStrategy interface: existence and properties of interface prototype object's \"constructor\" property": { + "status": "PASS" + }, + "ByteLengthQueuingStrategy interface: existence and properties of interface prototype object's @@unscopables property": { + "status": "PASS" + }, + "ByteLengthQueuingStrategy interface: attribute highWaterMark": { + "status": "PASS" + }, + "ByteLengthQueuingStrategy interface: attribute size": { + "status": "FAIL" + }, + "ByteLengthQueuingStrategy must be primary interface of new ByteLengthQueuingStrategy({ highWaterMark: 5 })": { + "status": "PASS" + }, + "Stringification of new ByteLengthQueuingStrategy({ highWaterMark: 5 })": { + "status": "PASS" + }, + "ByteLengthQueuingStrategy interface: new ByteLengthQueuingStrategy({ highWaterMark: 5 }) must inherit property \"highWaterMark\" with the proper type": { + "status": "PASS" + }, + "ByteLengthQueuingStrategy interface: new ByteLengthQueuingStrategy({ highWaterMark: 5 }) must inherit property \"size\" with the proper type": { + "status": "PASS" + }, + "CountQueuingStrategy interface: existence and properties of interface object": { + "status": "PASS" + }, + "CountQueuingStrategy interface object length": { + "status": "PASS" + }, + "CountQueuingStrategy interface object name": { + "status": "PASS" + }, + "CountQueuingStrategy interface: existence and properties of interface prototype object": { + "status": "PASS" + }, + "CountQueuingStrategy interface: existence and properties of interface prototype object's \"constructor\" property": { + "status": "PASS" + }, + "CountQueuingStrategy interface: existence and properties of interface prototype object's @@unscopables property": { + "status": "PASS" + }, + "CountQueuingStrategy interface: attribute highWaterMark": { + "status": "PASS" + }, + "CountQueuingStrategy interface: attribute size": { + "status": "FAIL" + }, + "CountQueuingStrategy must be primary interface of new CountQueuingStrategy({ highWaterMark: 5 })": { + "status": "PASS" + }, + "Stringification of new CountQueuingStrategy({ highWaterMark: 5 })": { + "status": "PASS" + }, + "CountQueuingStrategy interface: new CountQueuingStrategy({ highWaterMark: 5 }) must inherit property \"highWaterMark\" with the proper type": { + "status": "PASS" + }, + "CountQueuingStrategy interface: new CountQueuingStrategy({ highWaterMark: 5 }) must inherit property \"size\" with the proper type": { + "status": "PASS" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/piping/general-addition.any.js.json b/tests/wpt-harness/expectations/streams/piping/general-addition.any.js.json new file mode 100644 index 00000000..9d9f793d --- /dev/null +++ b/tests/wpt-harness/expectations/streams/piping/general-addition.any.js.json @@ -0,0 +1,5 @@ +{ + "enqueue() must not synchronously call write algorithm": { + "status": "PASS" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/readable-byte-streams/enqueue-with-detached-buffer.any.js.json b/tests/wpt-harness/expectations/streams/readable-byte-streams/enqueue-with-detached-buffer.any.js.json new file mode 100644 index 00000000..577bfa37 --- /dev/null +++ b/tests/wpt-harness/expectations/streams/readable-byte-streams/enqueue-with-detached-buffer.any.js.json @@ -0,0 +1,5 @@ +{ + "enqueue after detaching byobRequest.view.buffer should throw": { + "status": "PASS" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/readable-byte-streams/non-transferable-buffers.any.js.json b/tests/wpt-harness/expectations/streams/readable-byte-streams/non-transferable-buffers.any.js.json new file mode 100644 index 00000000..8e9eced7 --- /dev/null +++ b/tests/wpt-harness/expectations/streams/readable-byte-streams/non-transferable-buffers.any.js.json @@ -0,0 +1,14 @@ +{ + "ReadableStream with byte source: read() with a non-transferable buffer": { + "status": "FAIL" + }, + "ReadableStream with byte source: fill() with a non-transferable buffer": { + "status": "FAIL" + }, + "ReadableStream with byte source: enqueue() with a non-transferable buffer": { + "status": "FAIL" + }, + "ReadableStream with byte source: respondWithNewView() with a non-transferable buffer": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/readable-byte-streams/read-min.any.js.json b/tests/wpt-harness/expectations/streams/readable-byte-streams/read-min.any.js.json new file mode 100644 index 00000000..977bd160 --- /dev/null +++ b/tests/wpt-harness/expectations/streams/readable-byte-streams/read-min.any.js.json @@ -0,0 +1,74 @@ +{ + "ReadableStream with byte source: read({ min }) rejects if min is 0": { + "status": "FAIL" + }, + "ReadableStream with byte source: read({ min }) rejects if min is negative": { + "status": "FAIL" + }, + "ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (Uint8Array)": { + "status": "FAIL" + }, + "ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (Uint16Array)": { + "status": "FAIL" + }, + "ReadableStream with byte source: read({ min }) rejects if min is larger than view's length (DataView)": { + "status": "FAIL" + }, + "ReadableStream with byte source: read({ min }), then read()": { + "status": "FAIL" + }, + "ReadableStream with byte source: read({ min }) with a DataView": { + "status": "FAIL" + }, + "ReadableStream with byte source: enqueue(), then read({ min })": { + "status": "FAIL" + }, + "ReadableStream with byte source: read({ min: 3 }) on a 3-byte Uint8Array, then multiple enqueue() up to 3 bytes": { + "status": "FAIL" + }, + "ReadableStream with byte source: read({ min: 3 }) on a 5-byte Uint8Array, then multiple enqueue() up to 3 bytes": { + "status": "FAIL" + }, + "ReadableStream with byte source: read({ min: 3 }) on a 5-byte Uint8Array, then multiple enqueue() up to 4 bytes": { + "status": "FAIL" + }, + "ReadableStream with byte source: enqueue(), read({ min }) partially, then read()": { + "status": "PASS" + }, + "ReadableStream with byte source: read({ min }), then respondWithNewView() with a transferred ArrayBuffer": { + "status": "PASS" + }, + "ReadableStream with byte source: read({ min }) on a closed stream": { + "status": "PASS" + }, + "ReadableStream with byte source: read({ min }) when closed before view is filled": { + "status": "FAIL" + }, + "ReadableStream with byte source: read({ min }) when closed immediately after view is filled": { + "status": "FAIL" + }, + "ReadableStream with byte source: read({ min }) on an errored stream": { + "status": "PASS" + }, + "ReadableStream with byte source: read({ min }), then error()": { + "status": "PASS" + }, + "ReadableStream with byte source: getReader(), read({ min }), then cancel()": { + "status": "PASS" + }, + "ReadableStream with byte source: cancel() with partially filled pending read({ min }) request": { + "status": "FAIL" + }, + "ReadableStream with byte source: enqueue(), then read({ min }) with smaller views": { + "status": "PASS" + }, + "ReadableStream with byte source: 3 byte enqueue(), then close(), then read({ min }) with 2-element Uint16Array must fail": { + "status": "FAIL" + }, + "ReadableStream with byte source: read({ min }) with 2-element Uint16Array, then 3 byte enqueue(), then close() must fail": { + "status": "FAIL" + }, + "ReadableStream with byte source: tee() with read({ min }) from branch1 and read() from branch2": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/readable-streams/async-iterator.any.js.json b/tests/wpt-harness/expectations/streams/readable-streams/async-iterator.any.js.json new file mode 100644 index 00000000..ad743284 --- /dev/null +++ b/tests/wpt-harness/expectations/streams/readable-streams/async-iterator.any.js.json @@ -0,0 +1,125 @@ +{ + "Async iterator instances should have the correct list of properties": { + "status": "FAIL" + }, + "Async-iterating a push source": { + "status": "FAIL" + }, + "Async-iterating a pull source": { + "status": "FAIL" + }, + "Async-iterating a push source with undefined values": { + "status": "FAIL" + }, + "Async-iterating a pull source with undefined values": { + "status": "FAIL" + }, + "Async-iterating a pull source manually": { + "status": "FAIL" + }, + "Async-iterating an errored stream throws": { + "status": "FAIL" + }, + "Async-iterating a closed stream never executes the loop body, but works fine": { + "status": "FAIL" + }, + "Async-iterating an empty but not closed/errored stream never executes the loop body and stalls the async function": { + "status": "FAIL" + }, + "Async-iterating a partially consumed stream": { + "status": "FAIL" + }, + "Cancellation behavior when throwing inside loop body; preventCancel = false": { + "status": "FAIL" + }, + "Cancellation behavior when throwing inside loop body; preventCancel = true": { + "status": "FAIL" + }, + "Cancellation behavior when breaking inside loop body; preventCancel = false": { + "status": "FAIL" + }, + "Cancellation behavior when breaking inside loop body; preventCancel = true": { + "status": "FAIL" + }, + "Cancellation behavior when returning inside loop body; preventCancel = false": { + "status": "FAIL" + }, + "Cancellation behavior when returning inside loop body; preventCancel = true": { + "status": "FAIL" + }, + "Cancellation behavior when manually calling return(); preventCancel = false": { + "status": "FAIL" + }, + "Cancellation behavior when manually calling return(); preventCancel = true": { + "status": "FAIL" + }, + "next() rejects if the stream errors": { + "status": "FAIL" + }, + "return() does not rejects if the stream has not errored yet": { + "status": "FAIL" + }, + "return() rejects if the stream has errored": { + "status": "FAIL" + }, + "next() that succeeds; next() that reports an error; next()": { + "status": "FAIL" + }, + "next() that succeeds; next() that reports an error(); next() [no awaiting]": { + "status": "FAIL" + }, + "next() that succeeds; next() that reports an error(); return()": { + "status": "FAIL" + }, + "next() that succeeds; next() that reports an error(); return() [no awaiting]": { + "status": "FAIL" + }, + "next() that succeeds; return()": { + "status": "FAIL" + }, + "next() that succeeds; return() [no awaiting]": { + "status": "FAIL" + }, + "return(); next()": { + "status": "FAIL" + }, + "return(); next() [no awaiting]": { + "status": "FAIL" + }, + "return(); next() with delayed cancel()": { + "status": "FAIL" + }, + "return(); next() with delayed cancel() [no awaiting]": { + "status": "FAIL" + }, + "return(); return()": { + "status": "FAIL" + }, + "return(); return() [no awaiting]": { + "status": "FAIL" + }, + "values() throws if there's already a lock": { + "status": "FAIL" + }, + "Acquiring a reader after exhaustively async-iterating a stream": { + "status": "FAIL" + }, + "Acquiring a reader after return()ing from a stream that errors": { + "status": "FAIL" + }, + "Acquiring a reader after partially async-iterating a stream": { + "status": "FAIL" + }, + "Acquiring a reader and reading the remaining chunks after partially async-iterating a stream with preventCancel = true": { + "status": "FAIL" + }, + "return() should unlock the stream synchronously when preventCancel = false": { + "status": "FAIL" + }, + "return() should unlock the stream synchronously when preventCancel = true": { + "status": "FAIL" + }, + "close() while next() is pending": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/readable-streams/cancel.any.js.json b/tests/wpt-harness/expectations/streams/readable-streams/cancel.any.js.json index 0f99335b..35aed23d 100644 --- a/tests/wpt-harness/expectations/streams/readable-streams/cancel.any.js.json +++ b/tests/wpt-harness/expectations/streams/readable-streams/cancel.any.js.json @@ -28,5 +28,8 @@ }, "ReadableStream cancellation: cancelling before start finishes should prevent pull() from being called": { "status": "PASS" + }, + "ReadableStream cancellation: underlyingSource.cancel() should called, even with pending pull": { + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/readable-streams/from.any.js.json b/tests/wpt-harness/expectations/streams/readable-streams/from.any.js.json new file mode 100644 index 00000000..51276962 --- /dev/null +++ b/tests/wpt-harness/expectations/streams/readable-streams/from.any.js.json @@ -0,0 +1,119 @@ +{ + "ReadableStream.from accepts an array of values": { + "status": "FAIL" + }, + "ReadableStream.from accepts an array of promises": { + "status": "FAIL" + }, + "ReadableStream.from accepts an array iterator": { + "status": "FAIL" + }, + "ReadableStream.from accepts a string": { + "status": "FAIL" + }, + "ReadableStream.from accepts a Set": { + "status": "FAIL" + }, + "ReadableStream.from accepts a Set iterator": { + "status": "FAIL" + }, + "ReadableStream.from accepts a sync generator": { + "status": "FAIL" + }, + "ReadableStream.from accepts an async generator": { + "status": "FAIL" + }, + "ReadableStream.from accepts a sync iterable of values": { + "status": "FAIL" + }, + "ReadableStream.from accepts a sync iterable of promises": { + "status": "FAIL" + }, + "ReadableStream.from accepts an async iterable": { + "status": "FAIL" + }, + "ReadableStream.from accepts a ReadableStream": { + "status": "FAIL" + }, + "ReadableStream.from accepts a ReadableStream async iterator": { + "status": "FAIL" + }, + "ReadableStream.from throws on invalid iterables; specifically null": { + "status": "PASS" + }, + "ReadableStream.from throws on invalid iterables; specifically undefined": { + "status": "PASS" + }, + "ReadableStream.from throws on invalid iterables; specifically 0": { + "status": "PASS" + }, + "ReadableStream.from throws on invalid iterables; specifically NaN": { + "status": "PASS" + }, + "ReadableStream.from throws on invalid iterables; specifically true": { + "status": "PASS" + }, + "ReadableStream.from throws on invalid iterables; specifically {}": { + "status": "PASS" + }, + "ReadableStream.from throws on invalid iterables; specifically Object.create(null)": { + "status": "PASS" + }, + "ReadableStream.from throws on invalid iterables; specifically a function": { + "status": "PASS" + }, + "ReadableStream.from throws on invalid iterables; specifically a symbol": { + "status": "PASS" + }, + "ReadableStream.from throws on invalid iterables; specifically an object with a non-callable @@iterator method": { + "status": "PASS" + }, + "ReadableStream.from throws on invalid iterables; specifically an object with a non-callable @@asyncIterator method": { + "status": "PASS" + }, + "ReadableStream.from re-throws errors from calling the @@iterator method": { + "status": "FAIL" + }, + "ReadableStream.from re-throws errors from calling the @@asyncIterator method": { + "status": "FAIL" + }, + "ReadableStream.from ignores @@iterator if @@asyncIterator exists": { + "status": "FAIL" + }, + "ReadableStream.from ignores a null @@asyncIterator": { + "status": "FAIL" + }, + "ReadableStream.from accepts an empty iterable": { + "status": "FAIL" + }, + "ReadableStream.from: stream errors when next() rejects": { + "status": "FAIL" + }, + "ReadableStream.from: stream stalls when next() never settles": { + "status": "FAIL" + }, + "ReadableStream.from: calls next() after first read()": { + "status": "FAIL" + }, + "ReadableStream.from: cancelling the returned stream calls and awaits return()": { + "status": "FAIL" + }, + "ReadableStream.from: return() is not called when iterator completes normally": { + "status": "FAIL" + }, + "ReadableStream.from: cancel() rejects when return() fulfills with a non-object": { + "status": "FAIL" + }, + "ReadableStream.from: reader.read() inside next()": { + "status": "FAIL" + }, + "ReadableStream.from: reader.cancel() inside next()": { + "status": "FAIL" + }, + "ReadableStream.from: reader.cancel() inside return()": { + "status": "FAIL" + }, + "ReadableStream.from(array), push() to array while reading": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/readable-streams/owning-type-message-port.any.js.json b/tests/wpt-harness/expectations/streams/readable-streams/owning-type-message-port.any.js.json new file mode 100644 index 00000000..ad087615 --- /dev/null +++ b/tests/wpt-harness/expectations/streams/readable-streams/owning-type-message-port.any.js.json @@ -0,0 +1,8 @@ +{ + "Transferred MessageChannel works as expected": { + "status": "FAIL" + }, + "Second branch of owning ReadableStream tee should end up into errors with transfer only values": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/readable-streams/owning-type-video-frame.any.js.json b/tests/wpt-harness/expectations/streams/readable-streams/owning-type-video-frame.any.js.json new file mode 100644 index 00000000..7498ec65 --- /dev/null +++ b/tests/wpt-harness/expectations/streams/readable-streams/owning-type-video-frame.any.js.json @@ -0,0 +1,17 @@ +{ + "ReadableStream of type owning should close serialized chunks": { + "status": "FAIL" + }, + "ReadableStream of type owning should transfer JS chunks with transferred values": { + "status": "FAIL" + }, + "ReadableStream of type owning should error when trying to enqueue not serializable values": { + "status": "FAIL" + }, + "ReadableStream of type owning should clone serializable objects when teeing": { + "status": "FAIL" + }, + "ReadableStream of type owning should clone JS Objects with serializables when teeing": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/readable-streams/owning-type.any.js.json b/tests/wpt-harness/expectations/streams/readable-streams/owning-type.any.js.json new file mode 100644 index 00000000..52ebcab1 --- /dev/null +++ b/tests/wpt-harness/expectations/streams/readable-streams/owning-type.any.js.json @@ -0,0 +1,17 @@ +{ + "ReadableStream can be constructed with owning type": { + "status": "FAIL" + }, + "ReadableStream of type owning should call start with a ReadableStreamDefaultController": { + "status": "FAIL" + }, + "ReadableStream should be able to call enqueue with an empty transfer list": { + "status": "FAIL" + }, + "ReadableStream should check transfer parameter": { + "status": "FAIL" + }, + "ReadableStream of type owning should transfer enqueued chunks": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/transform-streams/cancel.any.js.json b/tests/wpt-harness/expectations/streams/transform-streams/cancel.any.js.json new file mode 100644 index 00000000..25da64f4 --- /dev/null +++ b/tests/wpt-harness/expectations/streams/transform-streams/cancel.any.js.json @@ -0,0 +1,23 @@ +{ + "cancelling the readable side should call transformer.cancel()": { + "status": "FAIL" + }, + "cancelling the readable side should reject if transformer.cancel() throws": { + "status": "FAIL" + }, + "aborting the writable side should call transformer.abort()": { + "status": "FAIL" + }, + "aborting the writable side should reject if transformer.cancel() throws": { + "status": "FAIL" + }, + "closing the writable side should reject if a parallel transformer.cancel() throws": { + "status": "FAIL" + }, + "readable.cancel() and a parallel writable.close() should reject if a transformer.cancel() calls controller.error()": { + "status": "FAIL" + }, + "writable.abort() and readable.cancel() should reject if a transformer.cancel() calls controller.error()": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/transform-streams/errors.any.js.json b/tests/wpt-harness/expectations/streams/transform-streams/errors.any.js.json index 80a278c5..c414fcd4 100644 --- a/tests/wpt-harness/expectations/streams/transform-streams/errors.any.js.json +++ b/tests/wpt-harness/expectations/streams/transform-streams/errors.any.js.json @@ -32,7 +32,7 @@ "an exception from transform() should error the stream if terminate has been requested but not completed": { "status": "PASS" }, - "abort should set the close reason for the writable when it happens before cancel during start, but cancel should still succeed": { + "abort should set the close reason for the writable when it happens before cancel during start, and cancel should reject": { "status": "PASS" }, "abort should set the close reason for the writable when it happens before cancel during underlying sink write, but cancel should still succeed": { @@ -41,7 +41,10 @@ "controller.error() should do nothing the second time it is called": { "status": "PASS" }, - "controller.error() should do nothing after readable.cancel()": { + "controller.error() should close writable immediately after readable.cancel()": { + "status": "FAIL" + }, + "controller.error() should do nothing after readable.cancel() resolves": { "status": "PASS" }, "controller.error() should do nothing after writable.abort() has completed": { diff --git a/tests/wpt-harness/expectations/streams/transform-streams/flush.any.js.json b/tests/wpt-harness/expectations/streams/transform-streams/flush.any.js.json index 8b2df7bb..37207be9 100644 --- a/tests/wpt-harness/expectations/streams/transform-streams/flush.any.js.json +++ b/tests/wpt-harness/expectations/streams/transform-streams/flush.any.js.json @@ -13,5 +13,8 @@ }, "error() during flush should cause writer.close() to reject": { "status": "PASS" + }, + "closing the writable side should call transformer.flush() and a parallel readable.cancel() should not reject": { + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/transform-streams/general.any.js.json b/tests/wpt-harness/expectations/streams/transform-streams/general.any.js.json index d73087db..033d758e 100644 --- a/tests/wpt-harness/expectations/streams/transform-streams/general.any.js.json +++ b/tests/wpt-harness/expectations/streams/transform-streams/general.any.js.json @@ -59,7 +59,10 @@ "controller.terminate() should do nothing the second time it is called": { "status": "PASS" }, - "terminate() should do nothing after readable.cancel()": { + "terminate() should abort writable immediately after readable.cancel()": { + "status": "FAIL" + }, + "terminate() should do nothing after readable.cancel() resolves": { "status": "PASS" }, "start() should not be called twice": { diff --git a/tests/wpt-harness/expectations/streams/transform-streams/reentrant-strategies.any.js.json b/tests/wpt-harness/expectations/streams/transform-streams/reentrant-strategies.any.js.json index 0ed3e3c7..8904254b 100644 --- a/tests/wpt-harness/expectations/streams/transform-streams/reentrant-strategies.any.js.json +++ b/tests/wpt-harness/expectations/streams/transform-streams/reentrant-strategies.any.js.json @@ -30,6 +30,6 @@ "status": "PASS" }, "writer.abort() inside size() should work": { - "status": "PASS" + "status": "FAIL" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/streams/transform-streams/terminate.any.js.json b/tests/wpt-harness/expectations/streams/transform-streams/terminate.any.js.json index 53133237..aa20c02c 100644 --- a/tests/wpt-harness/expectations/streams/transform-streams/terminate.any.js.json +++ b/tests/wpt-harness/expectations/streams/transform-streams/terminate.any.js.json @@ -1,18 +1,18 @@ { "controller.terminate() should error pipeTo()": { - "status": "FAIL" + "status": "PASS" }, "controller.terminate() should prevent remaining chunks from being processed": { - "status": "FAIL" + "status": "PASS" }, "controller.enqueue() should throw after controller.terminate()": { "status": "PASS" }, "controller.error() after controller.terminate() with queued chunk should error the readable": { - "status": "FAIL" + "status": "PASS" }, "controller.error() after controller.terminate() without queued chunk should do nothing": { - "status": "FAIL" + "status": "PASS" }, "controller.terminate() inside flush() should not prevent writer.close() from succeeding": { "status": "PASS" diff --git a/tests/wpt-harness/expectations/url/historical.any.js.json b/tests/wpt-harness/expectations/url/historical.any.js.json new file mode 100644 index 00000000..519b66e8 --- /dev/null +++ b/tests/wpt-harness/expectations/url/historical.any.js.json @@ -0,0 +1,23 @@ +{ + "searchParams on location object": { + "status": "FAIL" + }, + "Setting URL's href attribute and base URLs": { + "status": "FAIL" + }, + "URL.domainToASCII should be undefined": { + "status": "PASS" + }, + "URL.domainToUnicode should be undefined": { + "status": "PASS" + }, + "URL: no structured serialize/deserialize support": { + "status": "PASS" + }, + "URLSearchParams: no structured serialize/deserialize support": { + "status": "FAIL" + }, + "Constructor only takes strings": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/url-constructor.any.js.json b/tests/wpt-harness/expectations/url/url-constructor.any.js.json index d532457d..c92a87df 100644 --- a/tests/wpt-harness/expectations/url/url-constructor.any.js.json +++ b/tests/wpt-harness/expectations/url/url-constructor.any.js.json @@ -51,25 +51,25 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: <> against ": { "status": "PASS" @@ -161,6 +161,12 @@ "Parsing: against ": { "status": "PASS" }, + "Parsing: without base": { + "status": "PASS" + }, + "Parsing: without base": { + "status": "PASS" + }, "Parsing: against ": { "status": "PASS" }, @@ -198,16 +204,16 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -216,7 +222,7 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -240,16 +246,16 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -386,6 +392,21 @@ "Parsing: against ": { "status": "PASS" }, + "Parsing: without base": { + "status": "PASS" + }, + "Parsing: without base": { + "status": "PASS" + }, + "Parsing: without base": { + "status": "FAIL" + }, + "Parsing: without base": { + "status": "PASS" + }, + "Parsing: without base": { + "status": "PASS" + }, "Parsing: without base": { "status": "PASS" }, @@ -516,7 +537,7 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -534,7 +555,7 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -678,34 +699,34 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -720,13 +741,13 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -776,23 +797,29 @@ "Parsing: against ": { "status": "PASS" }, + "Parsing: without base": { + "status": "PASS" + }, + "Parsing: against ": { + "status": "PASS" + }, "Parsing: against ": { "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -804,52 +831,52 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -861,13 +888,13 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -876,16 +903,16 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -900,34 +927,34 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -975,10 +1002,10 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -990,10 +1017,10 @@ "status": "PASS" }, "Parsing: <../i> against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: <../i> against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: <../i> against ": { "status": "PASS" @@ -1005,10 +1032,10 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -1020,10 +1047,10 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -1068,16 +1095,16 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -1097,35 +1124,32 @@ "Parsing: without base": { "status": "PASS" }, - "Parsing: without base": { - "status": "PASS" - }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: b> without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -1137,118 +1161,118 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: b> without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -1260,142 +1284,142 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -1404,16 +1428,16 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -1443,7 +1467,7 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -1494,7 +1518,7 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -1503,25 +1527,25 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -1530,25 +1554,25 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -1752,7 +1776,7 @@ "status": "PASS" }, "Parsing: <\\\\\\.\\Y:> without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -1767,7 +1791,7 @@ "status": "PASS" }, "Parsing: <\\\\\\.\\y:> without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "FAIL" @@ -1806,43 +1830,43 @@ "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -1965,7 +1989,7 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -2010,7 +2034,7 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -2046,19 +2070,19 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { "status": "PASS" @@ -2100,13 +2124,13 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: <#link> against ": { "status": "PASS" @@ -2169,103 +2193,103 @@ "status": "PASS" }, "Parsing: <#> without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: against ": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -2277,7 +2301,7 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -2313,7 +2337,7 @@ "status": "PASS" }, "Parsing: <> without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -2322,13 +2346,13 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -2340,13 +2364,13 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -2358,13 +2382,13 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -2376,13 +2400,13 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -2394,13 +2418,13 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -2412,13 +2436,13 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -2430,13 +2454,13 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" @@ -2448,18 +2472,54 @@ "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { - "status": "FAIL" + "status": "PASS" }, "Parsing: without base": { "status": "PASS" }, "Parsing: without base": { "status": "PASS" + }, + "Parsing: against ": { + "status": "FAIL" + }, + "Parsing: against ": { + "status": "FAIL" + }, + "Parsing: against ": { + "status": "FAIL" + }, + "Parsing: against ": { + "status": "FAIL" + }, + "Parsing: against ": { + "status": "FAIL" + }, + "Parsing: against ": { + "status": "FAIL" + }, + "Parsing: against ": { + "status": "FAIL" + }, + "Parsing: against ": { + "status": "PASS" + }, + "Parsing: against ": { + "status": "PASS" + }, + "Parsing: against ": { + "status": "FAIL" + }, + "Parsing: against ": { + "status": "PASS" + }, + "Parsing: without base": { + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/url-origin.any.js.json b/tests/wpt-harness/expectations/url/url-origin.any.js.json index 24a1e6ed..ffd6fc65 100644 --- a/tests/wpt-harness/expectations/url/url-origin.any.js.json +++ b/tests/wpt-harness/expectations/url/url-origin.any.js.json @@ -140,6 +140,12 @@ "Origin parsing: against ": { "status": "PASS" }, + "Origin parsing: without base": { + "status": "PASS" + }, + "Origin parsing: without base": { + "status": "PASS" + }, "Origin parsing: against ": { "status": "PASS" }, @@ -785,9 +791,6 @@ "Origin parsing: without base": { "status": "PASS" }, - "Origin parsing: without base": { - "status": "PASS" - }, "Origin parsing: without base": { "status": "PASS" }, @@ -959,9 +962,6 @@ "Origin parsing: without base": { "status": "PASS" }, - "Origin parsing: without base": { - "status": "PASS" - }, "Origin parsing: without base": { "status": "FAIL" }, @@ -1093,5 +1093,8 @@ }, "Origin parsing: without base": { "status": "PASS" + }, + "Origin parsing: without base": { + "status": "PASS" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/url-setters.any.js.json b/tests/wpt-harness/expectations/url/url-setters.any.js.json index efe8b4ad..e34055ea 100644 --- a/tests/wpt-harness/expectations/url/url-setters.any.js.json +++ b/tests/wpt-harness/expectations/url/url-setters.any.js.json @@ -269,6 +269,9 @@ "URL: Setting .host = 'example.com?stuff' Stuff after a ? delimiter is ignored": { "status": "PASS" }, + "URL: Setting .host = 'example.com?stuff:8080' Stuff after a ? delimiter is ignored, trailing 'port'": { + "status": "PASS" + }, "URL: Setting .host = 'example.com:8080?stuff' Stuff after a ? delimiter is ignored": { "status": "PASS" }, @@ -296,6 +299,15 @@ "URL: Setting .host = 'example.com:8080+2' Anything other than ASCII digit stops the port parser in a setter but is not an error": { "status": "PASS" }, + "URL: Setting .host = 'example.com:invalid' Anything other than ASCII digit stops the port parser in a setter but is not an error": { + "status": "FAIL" + }, + "URL: Setting .host = '[::1]:invalid' Anything other than ASCII digit stops the port parser in a setter but is not an error": { + "status": "FAIL" + }, + "URL: Setting .host = '[::1]' IPv6 without port": { + "status": "PASS" + }, "URL: Setting .host = 'example.com:65535' Port numbers are 16 bit integers": { "status": "PASS" }, @@ -564,7 +576,7 @@ "status": "PASS" }, "URL: Setting .pathname = '' Non-special URLs can have their paths erased": { - "status": "FAIL" + "status": "PASS" }, "URL: Setting .pathname = '' Non-special URLs with an empty host can have their paths erased": { "status": "FAIL" @@ -684,10 +696,10 @@ "status": "PASS" }, "URL: Setting .search = '' Do not drop trailing spaces from non-trailing opaque paths": { - "status": "FAIL" + "status": "PASS" }, "URL: Setting .search = ''": { - "status": "FAIL" + "status": "PASS" }, "URL: Setting .search = ' ' Trailing space should be encoded": { "status": "PASS" diff --git a/tests/wpt-harness/expectations/url/url-statics-canparse.any.js.json b/tests/wpt-harness/expectations/url/url-statics-canparse.any.js.json new file mode 100644 index 00000000..44d16a6c --- /dev/null +++ b/tests/wpt-harness/expectations/url/url-statics-canparse.any.js.json @@ -0,0 +1,23 @@ +{ + "URL.canParse(undefined, undefined)": { + "status": "FAIL" + }, + "URL.canParse(aaa:b, undefined)": { + "status": "FAIL" + }, + "URL.canParse(undefined, aaa:b)": { + "status": "FAIL" + }, + "URL.canParse(aaa:/b, undefined)": { + "status": "FAIL" + }, + "URL.canParse(undefined, aaa:/b)": { + "status": "FAIL" + }, + "URL.canParse(https://test:test, undefined)": { + "status": "FAIL" + }, + "URL.canParse(a, https://b/)": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/url-statics-parse.any.js.json b/tests/wpt-harness/expectations/url/url-statics-parse.any.js.json new file mode 100644 index 00000000..2f640808 --- /dev/null +++ b/tests/wpt-harness/expectations/url/url-statics-parse.any.js.json @@ -0,0 +1,26 @@ +{ + "URL.parse(undefined, undefined)": { + "status": "FAIL" + }, + "URL.parse(aaa:b, undefined)": { + "status": "FAIL" + }, + "URL.parse(undefined, aaa:b)": { + "status": "FAIL" + }, + "URL.parse(aaa:/b, undefined)": { + "status": "FAIL" + }, + "URL.parse(undefined, aaa:/b)": { + "status": "FAIL" + }, + "URL.parse(https://test:test, undefined)": { + "status": "FAIL" + }, + "URL.parse(a, https://b/)": { + "status": "FAIL" + }, + "URL.parse() should return a unique object": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/urlsearchparams-constructor.any.js.json b/tests/wpt-harness/expectations/url/urlsearchparams-constructor.any.js.json index 0e4a3af0..b5d4f457 100644 --- a/tests/wpt-harness/expectations/url/urlsearchparams-constructor.any.js.json +++ b/tests/wpt-harness/expectations/url/urlsearchparams-constructor.any.js.json @@ -57,7 +57,7 @@ "status": "PASS" }, "Constructor with sequence of sequences of strings": { - "status": "FAIL" + "status": "PASS" }, "Construct with object with +": { "status": "PASS" diff --git a/tests/wpt-harness/expectations/url/urlsearchparams-delete.any.js.json b/tests/wpt-harness/expectations/url/urlsearchparams-delete.any.js.json index 2a755c8a..1220ee34 100644 --- a/tests/wpt-harness/expectations/url/urlsearchparams-delete.any.js.json +++ b/tests/wpt-harness/expectations/url/urlsearchparams-delete.any.js.json @@ -15,9 +15,12 @@ "status": "PASS" }, "Changing the query of a URL with an opaque path can impact the path if the URL has no fragment": { - "status": "FAIL" + "status": "PASS" }, "Two-argument delete()": { "status": "FAIL" + }, + "Two-argument delete() respects undefined as second arg": { + "status": "FAIL" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/urlsearchparams-has.any.js.json b/tests/wpt-harness/expectations/url/urlsearchparams-has.any.js.json index a0baf968..afa3b333 100644 --- a/tests/wpt-harness/expectations/url/urlsearchparams-has.any.js.json +++ b/tests/wpt-harness/expectations/url/urlsearchparams-has.any.js.json @@ -7,5 +7,8 @@ }, "Two-argument has()": { "status": "FAIL" + }, + "Two-argument has() respects undefined as second arg": { + "status": "FAIL" } } \ No newline at end of file diff --git a/tests/wpt-harness/expectations/url/urlsearchparams-size.any.js.json b/tests/wpt-harness/expectations/url/urlsearchparams-size.any.js.json new file mode 100644 index 00000000..831902de --- /dev/null +++ b/tests/wpt-harness/expectations/url/urlsearchparams-size.any.js.json @@ -0,0 +1,14 @@ +{ + "URLSearchParams's size and deletion": { + "status": "FAIL" + }, + "URLSearchParams's size and addition": { + "status": "FAIL" + }, + "URLSearchParams's size when obtained from a URL": { + "status": "FAIL" + }, + "URLSearchParams's size when obtained from a URL and using .search": { + "status": "FAIL" + } +} \ No newline at end of file diff --git a/tests/wpt-harness/run-wpt.mjs b/tests/wpt-harness/run-wpt.mjs index bad8b455..5ae3a3c2 100644 --- a/tests/wpt-harness/run-wpt.mjs +++ b/tests/wpt-harness/run-wpt.mjs @@ -154,7 +154,11 @@ function applyConfig(argv) { let childProcesses = {}; async function run() { - if (!applyConfig(process.argv)) { + if (!applyConfig([ + ...process.argv, + ...process.env.WPT_FLAGS ? process.env.WPT_FLAGS.split(' ') : [], + ...process.env.WPT_FILTER ? [process.env.WPT_FILTER] : [] + ])) { return process.exit(1); } @@ -215,14 +219,14 @@ async function run() { console.log(`\n${"Done. Stats:".padEnd(pathLength)} ${formatStats(stats)}`); - shutdown(); - if (config.tests.updateExpectations) { console.log(`Expectations updated: ${expectationsUpdated}`); + shutdown(); } else if (stats.unexpectedFail + stats.unexpectedPass != 0 || unexpectedFailure) { - process.exitCode = 1; + shutdown('Unexpected failures or passes. Verify that these new results match your expectations and run with --update-expectations to update the recorded expectations.'); + } else { + shutdown(); } - return process.exit(); } } @@ -270,6 +274,9 @@ async function startWptServer(root, logLevel) { // read the tea leaves a bit, by waiting for a message that is among the very last to be // printed during initialization, well after the main http server has started. for await(let [chunk] of on(server.stdout, "data")) { + if (/CRITICAL/.test(chunk)) { + shutdown(new Error('WPT Server Error: ' + chunk)); + } if (/wss on port \d+\] INFO - Listen on/.test(chunk)) { if (logLevel > LogLevel.Quiet) { console.info(`Started internal WPT server`); diff --git a/tests/wpt-harness/tests.json b/tests/wpt-harness/tests.json index 686903c3..5091d74b 100644 --- a/tests/wpt-harness/tests.json +++ b/tests/wpt-harness/tests.json @@ -1,7 +1,9 @@ [ "compression/compression-bad-chunks.tentative.any.js", + "compression/compression-constructor-error.tentative.any.js", "compression/compression-including-empty-chunk.tentative.any.js", + "compression/compression-large-flush-output.any.js", "compression/compression-multiple-chunks.tentative.any.js", "compression/compression-output-length.tentative.any.js", "SLOW compression/compression-stream.tentative.any.js", @@ -18,10 +20,16 @@ "compression/idlharness.https.any.js", "console/console-is-a-namespace.any.js", "console/console-label-conversion.any.js", + "SKIP console/console-log-large-array.any.js", + "console/console-log-symbol.any.js", "console/console-namespace-object-class-string.any.js", "console/console-tests-historical.any.js", "console/idlharness.any.js", "encoding/api-basics.any.js", + "encoding/api-basics.any.js", + "encoding/api-invalid-label.any.js", + "encoding/api-replacement-encodings.any.js", + "encoding/api-surrogates-utf8.any.js", "encoding/api-surrogates-utf8.any.js", "encoding/encodeInto.any.js", "SLOW encoding/idlharness.any.js", @@ -31,46 +39,81 @@ "encoding/textdecoder-byte-order-marks.any.js", "encoding/textdecoder-copy.any.js", "encoding/textdecoder-eof.any.js", + "encoding/textdecoder-fatal-single-byte.any.js", "encoding/textdecoder-fatal-streaming.any.js", "encoding/textdecoder-fatal.any.js", "encoding/textdecoder-ignorebom.any.js", + "encoding/textdecoder-labels.any.js", "encoding/textdecoder-streaming.any.js", "encoding/textdecoder-utf16-surrogates.any.js", "encoding/textencoder-constructor-non-utf.any.js", "encoding/textencoder-utf16-surrogates.any.js", "encoding/unsupported-encodings.any.js", + "SKIP fetch/api/abort/cache.https.any.js", + "fetch/api/abort/general.any.js", + "fetch/api/abort/request.any.js", "fetch/api/basic/accept-header.any.js", "fetch/api/basic/conditional-get.any.js", + "fetch/api/basic/error-after-response.any.js", "fetch/api/basic/header-value-combining.any.js", "fetch/api/basic/header-value-null-byte.any.js", "fetch/api/basic/historical.any.js", "fetch/api/basic/http-response-code.any.js", "fetch/api/basic/integrity.sub.any.js", + "fetch/api/basic/keepalive.any.js", + "SKIP fetch/api/basic/mode-no-cors.sub.any.js", + "fetch/api/basic/mode-same-origin.any.js", + "fetch/api/basic/referrer.any.js", "fetch/api/basic/referrer.any.js", "fetch/api/basic/request-forbidden-headers.any.js", "fetch/api/basic/request-head.any.js", "fetch/api/basic/request-headers-case.any.js", "fetch/api/basic/request-headers-nonascii.any.js", "fetch/api/basic/request-headers.any.js", + "SKIP fetch/api/basic/request-private-network-headers.tentative.any.js", "fetch/api/basic/request-referrer.any.js", "fetch/api/basic/request-upload.any.js", "fetch/api/basic/request-upload.h2.any.js", + "fetch/api/basic/response-null-body.any.js", "fetch/api/basic/response-url.sub.any.js", "fetch/api/basic/scheme-about.any.js", "fetch/api/basic/scheme-blob.sub.any.js", "fetch/api/basic/scheme-data.any.js", "fetch/api/basic/scheme-others.sub.any.js", + "fetch/api/basic/status.h2.any.js", "fetch/api/basic/stream-response.any.js", "fetch/api/basic/stream-safe-creation.any.js", + "fetch/api/basic/text-utf8.any.js", + "fetch/api/body/cloned-any.js", + "fetch/api/body/formdata.any.js", + "fetch/api/body/mime-type.any.js", + "fetch/api/headers/header-setcookie.any.js", "fetch/api/headers/header-values-normalize.any.js", "fetch/api/headers/header-values.any.js", "fetch/api/headers/headers-basic.any.js", "fetch/api/headers/headers-casing.any.js", "fetch/api/headers/headers-combine.any.js", "fetch/api/headers/headers-errors.any.js", + "fetch/api/headers/headers-no-cors.any.js", "fetch/api/headers/headers-normalize.any.js", "fetch/api/headers/headers-record.any.js", "fetch/api/headers/headers-structure.any.js", + "fetch/api/idlharness.any.js", + "fetch/api/redirect/redirect-back-to-original-origin.any.js", + "fetch/api/redirect/redirect-count.any.js", + "fetch/api/redirect/redirect-empty-location.any.js", + "fetch/api/redirect/redirect-keepalive.any.js", + "fetch/api/redirect/redirect-keepalive.https.any.js", + "fetch/api/redirect/redirect-location-escape.tentative.any.js", + "fetch/api/redirect/redirect-location.any.js", + "fetch/api/redirect/redirect-method.any.js", + "fetch/api/redirect/redirect-mode.any.js", + "fetch/api/redirect/redirect-origin.any.js", + "fetch/api/redirect/redirect-referrer-override.any.js", + "fetch/api/redirect/redirect-referrer.any.js", + "fetch/api/redirect/redirect-schemes.any.js", + "fetch/api/redirect/redirect-to-dataurl.any.js", + "fetch/api/redirect/redirect-upload.h2.any.js", "fetch/api/request/forbidden-method.any.js", "SKIP [tests restrictions we're not imposing] fetch/api/request/request-bad-port.any.js", "fetch/api/request/request-cache-default-conditional.any.js", @@ -80,6 +123,8 @@ "fetch/api/request/request-cache-no-store.any.js", "fetch/api/request/request-cache-only-if-cached.any.js", "fetch/api/request/request-cache-reload.any.js", + "fetch/api/request/request-cache.js", + "fetch/api/request/request-constructor-init-body-override.any.js", "fetch/api/request/request-consume-empty.any.js", "fetch/api/request/request-consume.any.js", "fetch/api/request/request-disturbed.any.js", @@ -87,10 +132,12 @@ "fetch/api/request/request-headers.any.js", "fetch/api/request/request-init-002.any.js", "fetch/api/request/request-init-contenttype.any.js", + "fetch/api/request/request-init-priority.any.js", "fetch/api/request/request-init-stream.any.js", "fetch/api/request/request-keepalive.any.js", "fetch/api/request/request-structure.any.js", "fetch/api/response/json.any.js", + "fetch/api/response/response-blob-realm.any.js", "fetch/api/response/response-cancel-stream.any.js", "fetch/api/response/response-clone.any.js", "fetch/api/response/response-consume-empty.any.js", @@ -98,12 +145,14 @@ "fetch/api/response/response-error-from-stream.any.js", "fetch/api/response/response-error.any.js", "fetch/api/response/response-from-stream.any.js", + "fetch/api/response/response-headers-guard.any.js", "fetch/api/response/response-init-001.any.js", "fetch/api/response/response-init-002.any.js", "fetch/api/response/response-init-contenttype.any.js", "fetch/api/response/response-static-error.any.js", "fetch/api/response/response-static-json.any.js", "fetch/api/response/response-static-redirect.any.js", + "fetch/api/response/response-stream-bad-chunk.any.js", "fetch/api/response/response-stream-disturbed-1.any.js", "fetch/api/response/response-stream-disturbed-2.any.js", "fetch/api/response/response-stream-disturbed-3.any.js", @@ -112,29 +161,37 @@ "fetch/api/response/response-stream-disturbed-6.any.js", "fetch/api/response/response-stream-disturbed-by-pipe.any.js", "fetch/api/response/response-stream-with-broken-then.any.js", - "fetch/api/basic/text-utf8.any.js", + "fetch/data-urls/base64.any.js", + "fetch/data-urls/processing.any.js", "hr-time/basic.any.js", "hr-time/idlharness.any.js", "hr-time/monotonic-clock.any.js", "html/webappapis/atob/base64.any.js", + "streams/idlharness.any.js", "streams/piping/abort.any.js", "streams/piping/close-propagation-backward.any.js", "streams/piping/close-propagation-forward.any.js", "streams/piping/error-propagation-backward.any.js", "streams/piping/error-propagation-forward.any.js", "streams/piping/flow-control.any.js", + "streams/piping/general-addition.any.js", "streams/piping/general.any.js", "streams/piping/multiple-propagation.any.js", "streams/piping/pipe-through.any.js", "streams/piping/then-interception.any.js", "streams/piping/throwing-options.any.js", "streams/piping/transform-streams.any.js", + "streams/queuing-strategies-size-function-per-global.window.js", "streams/queuing-strategies.any.js", "streams/readable-byte-streams/bad-buffers-and-views.any.js", "streams/readable-byte-streams/construct-byob-request.any.js", + "streams/readable-byte-streams/enqueue-with-detached-buffer.any.js", "streams/readable-byte-streams/general.any.js", + "streams/readable-byte-streams/non-transferable-buffers.any.js", + "streams/readable-byte-streams/read-min.any.js", "streams/readable-byte-streams/respond-after-enqueue.any.js", "streams/readable-byte-streams/tee.any.js", + "streams/readable-streams/async-iterator.any.js", "streams/readable-streams/bad-strategies.any.js", "streams/readable-streams/bad-underlying-sources.any.js", "streams/readable-streams/cancel.any.js", @@ -142,13 +199,18 @@ "streams/readable-streams/count-queuing-strategy-integration.any.js", "streams/readable-streams/default-reader.any.js", "streams/readable-streams/floating-point-total-queue-size.any.js", + "streams/readable-streams/from.any.js", "streams/readable-streams/garbage-collection.any.js", "streams/readable-streams/general.any.js", + "streams/readable-streams/owning-type-message-port.any.js", + "streams/readable-streams/owning-type-video-frame.any.js", + "streams/readable-streams/owning-type.any.js", "streams/readable-streams/patched-global.any.js", "streams/readable-streams/reentrant-strategies.any.js", "streams/readable-streams/tee.any.js", "streams/readable-streams/templated.any.js", "streams/transform-streams/backpressure.any.js", + "streams/transform-streams/cancel.any.js", "streams/transform-streams/errors.any.js", "streams/transform-streams/flush.any.js", "streams/transform-streams/general.any.js", @@ -172,11 +234,15 @@ "streams/writable-streams/reentrant-strategy.any.js", "streams/writable-streams/start.any.js", "streams/writable-streams/write.any.js", + "url/historical.any.js", + "url/idlharness.any.js", "SLOW url/url-constructor.any.js", "url/url-origin.any.js", "url/url-searchparams.any.js", "url/url-setters-stripping.any.js", "url/url-setters.any.js", + "url/url-statics-canparse.any.js", + "url/url-statics-parse.any.js", "url/url-tojson.any.js", "url/urlencoded-parser.any.js", "url/urlsearchparams-append.any.js", @@ -187,6 +253,7 @@ "url/urlsearchparams-getall.any.js", "url/urlsearchparams-has.any.js", "url/urlsearchparams-set.any.js", + "url/urlsearchparams-size.any.js", "url/urlsearchparams-sort.any.js", "url/urlsearchparams-stringifier.any.js", "WebCryptoAPI/digest/digest.https.any.js", diff --git a/tests/wpt-harness/wpt.cmake b/tests/wpt-harness/wpt.cmake index bfb541d2..077b451d 100644 --- a/tests/wpt-harness/wpt.cmake +++ b/tests/wpt-harness/wpt.cmake @@ -1,17 +1,27 @@ enable_testing() +include("wasmtime") + +if(DEFINED $ENV{WPT_ROOT}) + set(WPT_ROOT $ENV{WPT_ROOT}) +else() + CPMAddPackage( + NAME wpt-suite + GITHUB_REPOSITORY web-platform-tests/wpt + GIT_TAG bd65bb46410dd6ea3319e3688a5248a0a7d06960 + DOWNLOAD_ONLY TRUE + ) + set(WPT_ROOT ${CPM_PACKAGE_wpt-suite_SOURCE_DIR}) +endif() + add_builtin(wpt_support SRC "${CMAKE_CURRENT_LIST_DIR}/wpt_builtins.cpp" INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/builtins/web/") -if(NOT DEFINED ENV{WPT_ROOT}) - message(FATAL_ERROR "WPT_ROOT environment variable is not set") -endif() - add_custom_command( OUTPUT wpt-runtime.wasm WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E env PATH=${WASM_TOOLS_DIR}:${WIZER_DIR}:$ENV{PATH} WPT_ROOT=$ENV{WPT_ROOT} ${CMAKE_CURRENT_SOURCE_DIR}/tests/wpt-harness/build-wpt-runtime.sh + COMMAND ${CMAKE_COMMAND} -E env PATH=${WASM_TOOLS_DIR}:${WIZER_DIR}:$ENV{PATH} WPT_ROOT=${WPT_ROOT} ${CMAKE_CURRENT_SOURCE_DIR}/tests/wpt-harness/build-wpt-runtime.sh DEPENDS starling.wasm componentize.sh tests/wpt-harness/build-wpt-runtime.sh tests/wpt-harness/pre-harness.js tests/wpt-harness/post-harness.js VERBATIM ) @@ -24,5 +34,5 @@ endif () add_test( NAME wpt WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E env PATH=${WASMTIME_DIR}:$ENV{PATH} WASMTIME_BACKTRACE_DETAILS=${BT_DETAILS} node ${CMAKE_CURRENT_SOURCE_DIR}/tests/wpt-harness/run-wpt.mjs --wpt-root=$ENV{WPT_ROOT} -v $ENV{WPT_FILTER} + COMMAND ${CMAKE_COMMAND} -E env PATH=${WASMTIME_DIR}:$ENV{PATH} WASMTIME_BACKTRACE_DETAILS=${BT_DETAILS} node ${CMAKE_CURRENT_SOURCE_DIR}/tests/wpt-harness/run-wpt.mjs --wpt-root=${WPT_ROOT} -vv ) From 80a9d976ceb3d76a93b932c45302bc8ac2a52376 Mon Sep 17 00:00:00 2001 From: Till Schneidereit Date: Fri, 26 Jul 2024 18:35:59 +0200 Subject: [PATCH 23/28] Fix bugs with streaming outgoing bodies (#88) This fixes a crashing bug in a trivial scenario: event.respondWith(new Response(someUpstreamResponse.body, someUpstreamResponse); It's not entirely clear to me why WPT didn't catch this, though it's possible that the tests that would've done so abort early for trivial reasons, such as our missing FormData support. Instead, I added an e2e test to cover this, which fails without this patch. (There are small unrelated tweaks to the runtime-eval support which I applied in debugging the test.) --- builtins/web/fetch/fetch-api.cpp | 2 +- builtins/web/fetch/fetch_event.cpp | 57 +++++++++---------- builtins/web/fetch/request-response.cpp | 51 ++++++++++------- builtins/web/fetch/request-response.h | 1 + .../stream-forwarding/expect_serve_body.txt | 2 + .../stream-forwarding/stream-forwarding.js | 29 ++++++++++ 6 files changed, 88 insertions(+), 54 deletions(-) create mode 100644 tests/e2e/stream-forwarding/expect_serve_body.txt create mode 100644 tests/e2e/stream-forwarding/stream-forwarding.js diff --git a/builtins/web/fetch/fetch-api.cpp b/builtins/web/fetch/fetch-api.cpp index 58d2f64f..67748c1c 100644 --- a/builtins/web/fetch/fetch-api.cpp +++ b/builtins/web/fetch/fetch-api.cpp @@ -68,7 +68,7 @@ bool fetch(JSContext *cx, unsigned argc, Value *vp) { return ReturnPromiseRejectedWithPendingError(cx, args); bool streaming = false; - if (!RequestOrResponse::maybe_stream_body(cx, request_obj, &streaming)) { + if (!RequestOrResponse::maybe_stream_body(cx, request_obj, request, &streaming)) { return false; } if (streaming) { diff --git a/builtins/web/fetch/fetch_event.cpp b/builtins/web/fetch/fetch_event.cpp index afcf9e81..1448f847 100644 --- a/builtins/web/fetch/fetch_event.cpp +++ b/builtins/web/fetch/fetch_event.cpp @@ -165,7 +165,7 @@ bool send_response(host_api::HttpOutgoingResponse *response, JS::HandleObject se return true; } -bool start_response(JSContext *cx, JS::HandleObject response_obj, bool streaming) { +bool start_response(JSContext *cx, JS::HandleObject response_obj) { auto status = Response::status(response_obj); auto headers = RequestOrResponse::headers_handle_clone(cx, response_obj, host_api::HttpHeadersGuard::Response); @@ -175,38 +175,23 @@ bool start_response(JSContext *cx, JS::HandleObject response_obj, bool streaming host_api::HttpOutgoingResponse* response = host_api::HttpOutgoingResponse::make(status, std::move(headers)); - if (streaming) { - // Get the body here, so it will be stored on the response object. - // Otherwise, it'd not be available anymore, because the response handle itself - // is consumed by sending it off. - auto body = response->body().unwrap(); - MOZ_RELEASE_ASSERT(body); - } - MOZ_RELEASE_ASSERT(response); auto existing_handle = Response::response_handle(response_obj); if (existing_handle) { MOZ_ASSERT(existing_handle->is_incoming()); - if (streaming) { - auto *source_body = static_cast(existing_handle)->body().unwrap(); - auto *dest_body = response->body().unwrap(); - - // TODO: check if we should add a callback here and do something in response to body - // streaming being finished. - auto res = dest_body->append(ENGINE, source_body, nullptr, nullptr); - if (auto *err = res.to_err()) { - HANDLE_ERROR(cx, *err); - return false; - } - MOZ_RELEASE_ASSERT(RequestOrResponse::mark_body_used(cx, response_obj)); - } } else { SetReservedSlot(response_obj, static_cast(Response::Slots::Response), PrivateValue(response)); } - if (streaming && response->has_body()) { + bool streaming = false; + if (!RequestOrResponse::maybe_stream_body(cx, response_obj, response, &streaming)) { + return false; + } + + if (streaming) { STREAMING_BODY = response->body().unwrap(); + FetchEvent::increase_interest(); } return send_response(response, FetchEvent::instance(), @@ -236,13 +221,7 @@ bool response_promise_then_handler(JSContext *cx, JS::HandleObject event, JS::Ha // Step 10.2 (very roughly: the way we handle responses and their bodies is // very different.) JS::RootedObject response_obj(cx, &args[0].toObject()); - - bool streaming = false; - if (!RequestOrResponse::maybe_stream_body(cx, response_obj, &streaming)) { - return false; - } - - return start_response(cx, response_obj, streaming); + return start_response(cx, response_obj); } // Steps in this function refer to the spec at @@ -460,9 +439,18 @@ FetchEvent::State FetchEvent::state(JSObject *self) { void FetchEvent::set_state(JSObject *self, State new_state) { MOZ_ASSERT(is_instance(self)); - MOZ_ASSERT((uint8_t)new_state > (uint8_t)state(self)); + auto current_state = state(self); + MOZ_ASSERT((uint8_t)new_state > (uint8_t)current_state); JS::SetReservedSlot(self, static_cast(Slots::State), JS::Int32Value(static_cast(new_state))); + + if (current_state == State::responseStreaming && + (new_state == State::responseDone || new_state == State::respondedWithError)) { + if (STREAMING_BODY && STREAMING_BODY->valid()) { + STREAMING_BODY->close(); + } + decrease_interest(); + } } bool FetchEvent::response_started(JSObject *self) { @@ -562,6 +550,13 @@ bool eval_request_body(host_api::HttpIncomingRequest *request) { offset += chunk.size(); } + if (len == 0) { + fprintf(stderr, "Error: Failed to evaluate incoming request body. " + "Components without an initialized script have to be invoked with a body" + "that can be run as a JS script\n"); + return false; + } + if (!source.init(CONTEXT, buffer, len, JS::SourceOwnership::TakeOwnership)) { return false; } diff --git a/builtins/web/fetch/request-response.cpp b/builtins/web/fetch/request-response.cpp index 8c45e58d..578b0b6a 100644 --- a/builtins/web/fetch/request-response.cpp +++ b/builtins/web/fetch/request-response.cpp @@ -440,11 +440,19 @@ unique_ptr RequestOrResponse::headers_handle_clone(JSCont } bool finish_outgoing_body_streaming(JSContext* cx, HandleObject body_owner) { - // The only response we ever send is the one passed to - // `FetchEvent#respondWith` to send to the client. As such, we can be - // certain that if we have a response here, we can advance the FetchState to + // If no `body_owner` was passed, that means we sent a response: those aren't always + // reified during `respondWith` processing, and we don't need the instance here. + // That means, if we don't have the `body_owner`, we can advance the FetchState to // `responseDone`. + // (Note that even if we encountered an error while streaming, `responseDone` is the + // right state: `respondedWithError` is for when sending a response at all failed.) // TODO(TS): factor this out to remove dependency on fetch-event.h + if (!body_owner || Response::is_instance(body_owner)) { + fetch_event::FetchEvent::set_state(fetch_event::FetchEvent::instance(), + fetch_event::FetchEvent::State::responseDone); + return true; + } + auto body = RequestOrResponse::outgoing_body_handle(body_owner); auto res = body->close(); if (auto *err = res.to_err()) { @@ -452,11 +460,6 @@ bool finish_outgoing_body_streaming(JSContext* cx, HandleObject body_owner) { return false; } - if (Response::is_instance(body_owner)) { - fetch_event::FetchEvent::set_state(fetch_event::FetchEvent::instance(), - fetch_event::FetchEvent::State::responseDone); - } - if (Request::is_instance(body_owner)) { auto pending_handle = static_cast( GetReservedSlot(body_owner, static_cast(Request::Slots::PendingResponseHandle)) @@ -472,6 +475,7 @@ bool finish_outgoing_body_streaming(JSContext* cx, HandleObject body_owner) { bool RequestOrResponse::append_body(JSContext *cx, JS::HandleObject self, JS::HandleObject source) { MOZ_ASSERT(!body_used(source)); MOZ_ASSERT(!body_used(self)); + MOZ_ASSERT(self != source); host_api::HttpIncomingBody *source_body = incoming_body_handle(source); host_api::HttpOutgoingBody *dest_body = outgoing_body_handle(self); auto res = dest_body->append(ENGINE, source_body, finish_outgoing_body_streaming, self); @@ -920,7 +924,6 @@ bool reader_for_outgoing_body_then_handler(JSContext *cx, JS::HandleObject body_ return false; if (done_val.toBoolean()) { - fetch_event::FetchEvent::decrease_interest(); return finish_outgoing_body_streaming(cx, body_owner); } @@ -984,24 +987,30 @@ bool reader_for_outgoing_body_catch_handler(JSContext *cx, JS::HandleObject body fprintf(stderr, "Warning: body ReadableStream closed during body streaming. Exception: "); ENGINE->dump_value(args.get(0), stderr); - // The only response we ever send is the one passed to - // `FetchEvent#respondWith` to send to the client. As such, we can be certain - // that if we have a response here, we can advance the FetchState to - // `responseDone`. (Note that even though we encountered an error, - // `responseDone` is the right state: `respondedWithError` is for when sending - // a response at all failed.) - // TODO(TS): investigate why this is disabled. - // if (Response::is_instance(body_owner)) { - // FetchEvent::set_state(FetchEvent::instance(), FetchEvent::State::responseDone); - // } return finish_outgoing_body_streaming(cx, body_owner); } bool RequestOrResponse::maybe_stream_body(JSContext *cx, JS::HandleObject body_owner, + host_api::HttpOutgoingBodyOwner* destination, bool *requires_streaming) { *requires_streaming = false; + if (!has_body(body_owner)) { + return true; + } + + // First, handle direct forwarding of incoming bodies. + // Those can be handled by direct use of async tasks and the host API, without needing + // to use JS streams at all. + if (is_incoming(body_owner)) { + auto *source_body = incoming_body_handle(body_owner); + auto *dest_body = destination->body().unwrap(); + auto res = dest_body->append(ENGINE, source_body, finish_outgoing_body_streaming, nullptr); + if (auto *err = res.to_err()) { + HANDLE_ERROR(cx, *err); + return false; + } + MOZ_RELEASE_ASSERT(RequestOrResponse::mark_body_used(cx, body_owner)); - if (is_incoming(body_owner) && has_body(body_owner)) { *requires_streaming = true; return true; } @@ -1060,8 +1069,6 @@ bool RequestOrResponse::maybe_stream_body(JSContext *cx, JS::HandleObject body_o if (!JS::AddPromiseReactions(cx, promise, then_handler, catch_handler)) return false; - fetch_event::FetchEvent::increase_interest(); - *requires_streaming = true; return true; } diff --git a/builtins/web/fetch/request-response.h b/builtins/web/fetch/request-response.h index 50653b97..c98fa5fa 100644 --- a/builtins/web/fetch/request-response.h +++ b/builtins/web/fetch/request-response.h @@ -103,6 +103,7 @@ class RequestOrResponse final { * to `true`. */ static bool maybe_stream_body(JSContext *cx, JS::HandleObject body_owner, + host_api::HttpOutgoingBodyOwner *destination, bool *requires_streaming); static JSObject *create_body_stream(JSContext *cx, JS::HandleObject owner); diff --git a/tests/e2e/stream-forwarding/expect_serve_body.txt b/tests/e2e/stream-forwarding/expect_serve_body.txt new file mode 100644 index 00000000..94954abd --- /dev/null +++ b/tests/e2e/stream-forwarding/expect_serve_body.txt @@ -0,0 +1,2 @@ +hello +world diff --git a/tests/e2e/stream-forwarding/stream-forwarding.js b/tests/e2e/stream-forwarding/stream-forwarding.js new file mode 100644 index 00000000..af2aafd6 --- /dev/null +++ b/tests/e2e/stream-forwarding/stream-forwarding.js @@ -0,0 +1,29 @@ +addEventListener('fetch', async (event) => { + try { + if (event.request.url.endsWith('/nested')) { + let encoder = new TextEncoder(); + let body = new TransformStream({ + start(controller) { + }, + transform(chunk, controller) { + controller.enqueue(encoder.encode(chunk)); + }, + flush(controller) { + } + }); + let writer = body.writable.getWriter(); + event.respondWith(new Response(body.readable)); + await writer.write('hello\n'); + await writer.write('world\n'); + writer.close(); + return; + } + + let resolve; + event.respondWith(new Promise((r) => resolve = r)); + let response = await fetch(event.request.url + 'nested'); + resolve(new Response(response.body, response)); + } catch (e) { + console.error(e); + } +}); From 6b446b577262a9720dbefc1b34c2a1b2b09fd73d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1vid=20Istv=C3=A1n=20B=C3=ADr=C3=B3?= Date: Thu, 1 Aug 2024 12:37:09 +0200 Subject: [PATCH 24/28] re-enable sync fetch tests --- tests/integration/handlers.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/integration/handlers.js b/tests/integration/handlers.js index 4b7d0b25..fa0d59a8 100644 --- a/tests/integration/handlers.js +++ b/tests/integration/handlers.js @@ -1,7 +1,6 @@ export { handler as btoa } from './btoa/btoa.js'; export { handler as performance } from './performance/performance.js'; export { handler as crypto } from './crypto/crypto.js'; -// Disabled for now -// export { handler as fetchsync } from './fetchsync/fetchsync.js'; +export { handler as fetchsync } from './fetchsync/fetchsync.js'; export { handler as timers } from './timers/timers.js'; export { handler as headers } from './headers/headers.js'; From 709a9980ae9964576455e590714613a0b33decac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1vid=20Istv=C3=A1n=20B=C3=ADr=C3=B3?= Date: Thu, 1 Aug 2024 15:03:10 +0200 Subject: [PATCH 25/28] debug for test --- tests/integration/fetchsync/fetchsync.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/integration/fetchsync/fetchsync.js b/tests/integration/fetchsync/fetchsync.js index 2f56e37b..c99fd063 100644 --- a/tests/integration/fetchsync/fetchsync.js +++ b/tests/integration/fetchsync/fetchsync.js @@ -44,6 +44,7 @@ export const handler = serveTest(async (t) => { }); function testGetJsonArray(url, length) { + console.log(`testGetJsonArray: ${url}, ${length}`); let result = syncGetJson(url); assert(result != null, 'result is not nullish'); assert(result['length'] === length, `length == ${length}`); @@ -51,6 +52,7 @@ function testGetJsonArray(url, length) { } function testGetTextArray(url, length) { + console.log(`testGetTextArray: ${url}, ${length}`); let textResult = syncGetText(url); let result = JSON.parse(textResult); assert(result != null, 'result is not nullish'); @@ -59,6 +61,7 @@ function testGetTextArray(url, length) { } function testPatchJson(url, body) { + console.log(`testPatchJson: ${url}, ${body}`); let result = syncPatchJson(url, body); for (let key of Object.keys(body)) { assert(result[key] != null, `result[${key}] is not nullish`); @@ -67,6 +70,7 @@ function testPatchJson(url, body) { } function testPatchText(url, body) { + console.log(`testPatchText: ${url}, ${body}`); let textResult = syncPatchText(url, body); let result = JSON.parse(textResult); for (let key of Object.keys(body)) { From 1c163cacc80d3f76198104210a698ebeac8a69e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1vid=20Istv=C3=A1n=20B=C3=ADr=C3=B3?= Date: Thu, 1 Aug 2024 15:03:44 +0200 Subject: [PATCH 26/28] naming --- builtins/web/fetch/fetch-api.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builtins/web/fetch/fetch-api.cpp b/builtins/web/fetch/fetch-api.cpp index 7a982a7a..8ee6cc7d 100644 --- a/builtins/web/fetch/fetch-api.cpp +++ b/builtins/web/fetch/fetch-api.cpp @@ -102,13 +102,13 @@ bool fetch(JSContext *cx, unsigned argc, Value *vp) { return true; } -bool runEventLoopUntilInterest(JSContext *cx, unsigned argc, Value *vp) { +bool run_event_loop_until_interest(JSContext *cx, unsigned argc, Value *vp) { return ENGINE->run_event_loop_until_interest(); } const JSFunctionSpec methods[] = { JS_FN("fetch", fetch, 2, JSPROP_ENUMERATE), - JS_FN("runEventLoopUntilInterest", runEventLoopUntilInterest, 0, JSPROP_ENUMERATE), + JS_FN("runEventLoopUntilInterest", run_event_loop_until_interest, 0, JSPROP_ENUMERATE), JS_FS_END, }; From caeb760c7b2c209a83971ea92e38eb2a8977fcba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1vid=20Istv=C3=A1n=20B=C3=ADr=C3=B3?= Date: Thu, 1 Aug 2024 16:03:00 +0200 Subject: [PATCH 27/28] disable async fetch tests again --- tests/tests.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tests.cmake b/tests/tests.cmake index aa04e034..cf3c5e42 100644 --- a/tests/tests.cmake +++ b/tests/tests.cmake @@ -39,5 +39,5 @@ test_integration(btoa) test_integration(performance) test_integration(crypto) test_integration(headers) -test_integration(fetchsync) +# test_integration(fetchsync) test_integration(timers) From 228a6d909ed2269f0260b99b75477373e0c1104a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1vid=20Istv=C3=A1n=20B=C3=ADr=C3=B3?= Date: Thu, 1 Aug 2024 16:03:47 +0200 Subject: [PATCH 28/28] cleanup after merge --- host-apis/wasi-0.2.0-rc-2023-10-18/host_api.cpp | 0 host-apis/wasi-0.2.0-rc-2023-12-05/host_api.cpp | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 host-apis/wasi-0.2.0-rc-2023-10-18/host_api.cpp delete mode 100644 host-apis/wasi-0.2.0-rc-2023-12-05/host_api.cpp diff --git a/host-apis/wasi-0.2.0-rc-2023-10-18/host_api.cpp b/host-apis/wasi-0.2.0-rc-2023-10-18/host_api.cpp deleted file mode 100644 index e69de29b..00000000 diff --git a/host-apis/wasi-0.2.0-rc-2023-12-05/host_api.cpp b/host-apis/wasi-0.2.0-rc-2023-12-05/host_api.cpp deleted file mode 100644 index e69de29b..00000000