diff --git a/driver/js/include/driver/scope.h b/driver/js/include/driver/scope.h index 826369d8f1b..0aca8fe4ef4 100644 --- a/driver/js/include/driver/scope.h +++ b/driver/js/include/driver/scope.h @@ -275,22 +275,7 @@ class Scope : public std::enable_shared_from_this { inline void SetUriLoader(std::weak_ptr loader) { loader_ = loader; - auto the_loader = loader_.lock(); - if (the_loader) { - the_loader->SetRequestTimePerformanceCallback([WEAK_THIS](const string_view& uri, const TimePoint& start, const TimePoint& end) { - DEFINE_AND_CHECK_SELF(Scope) - auto runner = self->GetTaskRunner(); - if (runner) { - auto task = [weak_this, uri, start, end]() { - DEFINE_AND_CHECK_SELF(Scope) - auto entry = self->GetPerformance()->PerformanceResource(uri); - entry->SetLoadSourceStart(start); - entry->SetLoadSourceEnd(end); - }; - runner->PostTask(std::move(task)); - } - }); - } + SetCallbackForUriLoader(); } inline std::weak_ptr GetUriLoader() { return loader_; } @@ -325,6 +310,8 @@ class Scope : public std::enable_shared_from_this { return performance_; } + void HandleUriLoaderError(const string_view& uri, const int32_t ret_code, const string_view& error_msg); + #ifdef ENABLE_INSPECTOR inline void SetDevtoolsDataSource(std::shared_ptr devtools_data_source) { devtools_data_source_ = devtools_data_source; @@ -470,6 +457,7 @@ class Scope : public std::enable_shared_from_this { friend class Engine; void BindModule(); void Bootstrap(); + void SetCallbackForUriLoader(); private: std::weak_ptr engine_; diff --git a/driver/js/include/driver/vm/js_vm.h b/driver/js/include/driver/vm/js_vm.h index 318b029f4ef..1a121ca8896 100644 --- a/driver/js/include/driver/vm/js_vm.h +++ b/driver/js/include/driver/vm/js_vm.h @@ -85,6 +85,12 @@ class VM { } static void HandleUncaughtException(const std::shared_ptr& ctx, const std::shared_ptr& exception); + static void HandleError(const std::shared_ptr& ctx, + const std::shared_ptr& event, + const std::shared_ptr& source, + const std::shared_ptr& lineno, + const std::shared_ptr& colno, + const std::shared_ptr& error); virtual std::shared_ptr ParseJson(const std::shared_ptr& ctx, const string_view& json) = 0; virtual std::shared_ptr CreateContext() = 0; private: diff --git a/driver/js/lib/global/Others.js b/driver/js/lib/global/Others.js index c20f4dfef34..bdef124102b 100644 --- a/driver/js/lib/global/Others.js +++ b/driver/js/lib/global/Others.js @@ -21,8 +21,19 @@ global.__ISHIPPY__ = true; global.__GLOBAL__ = { globalEventHandle: {}, + globalErrorHandle: [], }; +class ErrorEvent { + constructor(message, filename, lineno, colno, error) { + this.message = message; + this.filename = filename; + this.lineno = lineno; + this.colno = colno; + this.error = error; + } +} + /** * Register the Hippy app entry function, the native will trigger an event to execute the function * and start the app. @@ -114,6 +125,115 @@ function emit(eventName, ...args) { } } +/** + * Register a listener for a error event, and the listener will be called + * when the event is triggered. + */ +Object.defineProperty(Hippy, 'onerror', { + get: function() { + let listeners = __GLOBAL__.globalErrorHandle; + return listeners.length > 0 ? listeners.slice(-1) : null; + }, + set: function(listener) { + if (typeof listener !== 'function') { + throw new TypeError('Hippy.onerror only accept a function as listener'); + } + __GLOBAL__.globalErrorHandle = []; + let listeners = __GLOBAL__.globalErrorHandle; + listeners.push(listener); + } +}); + +/** + * Trigger a error event with arguments. + * + * @param {any} args - Event callback arguments: event, source, lineno, colno, error. + */ +function emitError(...args) { + if (args.length !== 5) { + throw new TypeError('Hippy.emitError only accept 5 params'); + } + + let errObj = new Error(); + errObj.message = JSON.stringify(args[4]); + + const listeners = __GLOBAL__.globalErrorHandle; + if (listeners) { + try { + listeners.forEach(listener => listener(args[0], args[1], args[2], args[3], errObj)); + } catch (err) { + /* eslint-disable-next-line no-console */ + console.error(err); + } + } else { + if (args[0]) { + console.error(args[0].toString()); + } + } + + const eventName = 'error'; + const eventListeners = __GLOBAL__.globalEventHandle[eventName]; + if (eventListeners) { + try { + let event = new ErrorEvent(args[0], args[1], args[2], args[3], errObj); + eventListeners.forEach(listener => listener(event)); + } catch (err) { + /* eslint-disable-next-line no-console */ + console.error(err); + } + } else { + if (args[0]) { + console.error(args[0].toString()); + } + } +} + +/** + * Register a listener for a specific event, and the listener will be called + * when the event is triggered. + * + * @param {string} eventName - The event name will be registered. + * @param {Function} listener - Event callback. + * @returns {Set} - Set of event listeners + */ +function addEventListener(eventName, listener) { + if (typeof eventName !== 'string' || typeof listener !== 'function') { + throw new TypeError('Hippy.addEventListener() only accept a string as event name and a function as listener'); + } + + let eventListeners = __GLOBAL__.globalEventHandle[eventName]; + if (!(eventListeners instanceof Set)) { + __GLOBAL__.globalEventHandle[eventName] = new Set(); + eventListeners = __GLOBAL__.globalEventHandle[eventName]; + } + eventListeners.add(listener); + return eventListeners; +} + +/** + * Remove specific event listener, + * + * @param {string} eventName - The event name will be removed. + * @param {Function} listener - Specific event callback will be removed, + * the listeners will clean all if not specific. + * @returns {Set | null} - Set of event listeners, or null of empty. + */ +function removeEventListener(eventName, listener) { + if (typeof eventName !== 'string') { + throw new TypeError('Hippy.removeEventListener() only accept a string as event name'); + } + const eventListeners = __GLOBAL__.globalEventHandle[eventName]; + if (!(eventListeners instanceof Set)) { + return null; + } + if (listener) { + eventListeners.delete(listener); + return eventListeners; + } + eventListeners.clear(); + return null; +} + Hippy.device = {}; Hippy.bridge = {}; Hippy.register = { @@ -122,3 +242,6 @@ Hippy.register = { Hippy.on = on; Hippy.off = off; Hippy.emit = emit; +Hippy.emitError = emitError; +Hippy.addEventListener = addEventListener; +Hippy.removeEventListener = removeEventListener; diff --git a/driver/js/lib/modules/ErrorHandle.js b/driver/js/lib/modules/ErrorHandle.js new file mode 100644 index 00000000000..fa7b55b41d6 --- /dev/null +++ b/driver/js/lib/modules/ErrorHandle.js @@ -0,0 +1,28 @@ +/* + * Tencent is pleased to support the open source community by making + * Hippy available. + * + * Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function errorHandler(event, source, lineno, colno, error) { + if (global.Hippy) { + global.Hippy.emitError(event, source, lineno, colno, error); + } else { + /* eslint-disable-next-line no-console */ + console.error(err); + } +}); diff --git a/driver/js/scripts/build-core.js b/driver/js/scripts/build-core.js index aceda22655a..890ad402c3a 100644 --- a/driver/js/scripts/build-core.js +++ b/driver/js/scripts/build-core.js @@ -189,6 +189,7 @@ function getAllRequiredFiles(platform) { getAbsolutePath('../lib/bootstrap.js'), getAbsolutePath(`../lib/entry/${platform}/hippy.js`), getAbsolutePath('../lib/modules/ExceptionHandle.js'), + getAbsolutePath('../lib/modules/ErrorHandle.js'), ]; rl.on('line', (line) => { @@ -241,7 +242,7 @@ function generateCpp(platform, buildDirPath) { for (let i = 0; i < fileBuffer.length; i += 1) { byteArr.push(fileBuffer[i]); } - if (fileName === 'bootstrap' || fileName === 'ExceptionHandle') { + if (fileName === 'bootstrap' || fileName === 'ExceptionHandle' || fileName === 'ErrorHandle') { code += ` const uint8_t k_${fileName}[] = { ${byteArr.join(',')},0 }; // NOLINT`; } else { diff --git a/driver/js/src/scope.cc b/driver/js/src/scope.cc index 1c0a54b7185..718bbe8f04a 100644 --- a/driver/js/src/scope.cc +++ b/driver/js/src/scope.cc @@ -599,5 +599,47 @@ void Scope::UnloadInstance(const std::shared_ptr& value) { } } +void Scope::SetCallbackForUriLoader() { + auto the_loader = loader_.lock(); + if (the_loader) { + the_loader->SetRequestTimePerformanceCallback([WEAK_THIS](const string_view& uri, const TimePoint& start, const TimePoint& end) { + DEFINE_AND_CHECK_SELF(Scope) + auto runner = self->GetTaskRunner(); + if (runner) { + auto task = [weak_this, uri, start, end]() { + DEFINE_AND_CHECK_SELF(Scope) + auto entry = self->GetPerformance()->PerformanceResource(uri); + entry->SetLoadSourceStart(start); + entry->SetLoadSourceEnd(end); + }; + runner->PostTask(std::move(task)); + } + }); + the_loader->SetRequestErrorCallback([WEAK_THIS](const string_view& uri, const int32_t ret_code, const string_view& error_msg) { + DEFINE_AND_CHECK_SELF(Scope) + auto runner = self->GetTaskRunner(); + if (runner) { + auto task = [weak_this, uri, ret_code, error_msg]() { + DEFINE_AND_CHECK_SELF(Scope) + self->HandleUriLoaderError(uri, ret_code, error_msg); + }; + runner->PostTask(std::move(task)); + } + }); + } +} + +void Scope::HandleUriLoaderError(const string_view& uri, const int32_t ret_code, const string_view& error_msg) { + std::unordered_map> error_map; + error_map["code"] = context_->CreateNumber(static_cast(ret_code)); + error_map["message"] = context_->CreateString(error_msg); + auto event = context_->CreateString("vfs error"); + auto source = context_->CreateString(uri); + auto lineno = context_->CreateNumber(0); + auto colno = context_->CreateNumber(0); + auto error = context_->CreateObject(error_map); + VM::HandleError(context_, event, source, lineno, colno, error); +} + } } diff --git a/driver/js/src/vm/js_vm.cc b/driver/js/src/vm/js_vm.cc index c77e292f8a6..f9fbe23b3b1 100644 --- a/driver/js/src/vm/js_vm.cc +++ b/driver/js/src/vm/js_vm.cc @@ -31,8 +31,11 @@ inline namespace driver { inline namespace vm { constexpr char kEventName[] = "uncaughtException"; -constexpr char kErrorHandlerJSName[] = "ExceptionHandle.js"; -constexpr char kHippyErrorHandlerName[] = "HippyExceptionHandler"; +constexpr char kExceptionHandlerJSName[] = "ExceptionHandle.js"; +constexpr char kHippyExceptionHandlerName[] = "HippyExceptionHandler"; + +constexpr char kErrorHandlerJSName[] = "ErrorHandle.js"; +constexpr char kHippyErrorHandlerName[] = "HippyErrorHandler"; using Ctx = hippy::Ctx; using CtxValue = hippy::CtxValue; @@ -40,11 +43,11 @@ using CtxValue = hippy::CtxValue; void VM::HandleUncaughtException(const std::shared_ptr& ctx, const std::shared_ptr& exception) { auto global_object = ctx->GetGlobalObject(); - string_view error_handle_name(kHippyErrorHandlerName); + string_view error_handle_name(kHippyExceptionHandlerName); auto error_handle_key = ctx->CreateString(error_handle_name); auto exception_handler = ctx->GetProperty(global_object, error_handle_key); if (!ctx->IsFunction(exception_handler)) { - const auto& source_code = hippy::GetNativeSourceCode(kErrorHandlerJSName); + const auto& source_code = hippy::GetNativeSourceCode(kExceptionHandlerJSName); FOOTSTONE_DCHECK(source_code.data_ && source_code.length_); string_view str_view(source_code.data_, source_code.length_); exception_handler = ctx->RunScript(str_view, error_handle_name); @@ -63,6 +66,33 @@ void VM::HandleUncaughtException(const std::shared_ptr& ctx, } } +void VM::HandleError(const std::shared_ptr& ctx, + const std::shared_ptr& event, + const std::shared_ptr& source, + const std::shared_ptr& lineno, + const std::shared_ptr& colno, + const std::shared_ptr& error) { + auto global_object = ctx->GetGlobalObject(); + string_view error_handle_name(kHippyErrorHandlerName); + auto error_handle_key = ctx->CreateString(error_handle_name); + auto error_handler = ctx->GetProperty(global_object, error_handle_key); + if (!ctx->IsFunction(error_handler)) { + const auto& source_code = hippy::GetNativeSourceCode(kErrorHandlerJSName); + FOOTSTONE_DCHECK(source_code.data_ && source_code.length_); + string_view str_view(source_code.data_, source_code.length_); + error_handler = ctx->RunScript(str_view, error_handle_name); + ctx->SetProperty(global_object, error_handle_key, error_handler); + } + + std::shared_ptr argv[5] = {event, source, lineno, colno, error}; + + auto try_catch = CreateTryCatchScope(true, ctx); + auto ret_value = ctx->CallFunction(error_handler, ctx->GetGlobalObject(), 5, argv); + if (try_catch->HasCaught()) { + auto message = try_catch->GetExceptionMessage(); + FOOTSTONE_LOG(WARNING) << "hippy errorHandler error, description = " << message; + } +} } } diff --git a/driver/js/src/vm/jsc/native_source_code_ios.cc b/driver/js/src/vm/jsc/native_source_code_ios.cc index 7f1a126bcf5..f9d984f4c9f 100644 --- a/driver/js/src/vm/jsc/native_source_code_ios.cc +++ b/driver/js/src/vm/jsc/native_source_code_ios.cc @@ -29,7 +29,8 @@ namespace { const uint8_t k_bootstrap[] = { 34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,102,117,110,99,116,105,111,110,32,95,99,108,97,115,115,67,97,108,108,67,104,101,99,107,40,105,110,115,116,97,110,99,101,44,32,67,111,110,115,116,114,117,99,116,111,114,41,32,123,32,105,102,32,40,33,40,105,110,115,116,97,110,99,101,32,105,110,115,116,97,110,99,101,111,102,32,67,111,110,115,116,114,117,99,116,111,114,41,41,32,123,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,34,67,97,110,110,111,116,32,99,97,108,108,32,97,32,99,108,97,115,115,32,97,115,32,97,32,102,117,110,99,116,105,111,110,34,41,59,32,125,32,125,10,102,117,110,99,116,105,111,110,32,95,100,101,102,105,110,101,80,114,111,112,101,114,116,105,101,115,40,116,97,114,103,101,116,44,32,112,114,111,112,115,41,32,123,32,102,111,114,32,40,118,97,114,32,105,32,61,32,48,59,32,105,32,60,32,112,114,111,112,115,46,108,101,110,103,116,104,59,32,105,43,43,41,32,123,32,118,97,114,32,100,101,115,99,114,105,112,116,111,114,32,61,32,112,114,111,112,115,91,105,93,59,32,100,101,115,99,114,105,112,116,111,114,46,101,110,117,109,101,114,97,98,108,101,32,61,32,100,101,115,99,114,105,112,116,111,114,46,101,110,117,109,101,114,97,98,108,101,32,124,124,32,102,97,108,115,101,59,32,100,101,115,99,114,105,112,116,111,114,46,99,111,110,102,105,103,117,114,97,98,108,101,32,61,32,116,114,117,101,59,32,105,102,32,40,34,118,97,108,117,101,34,32,105,110,32,100,101,115,99,114,105,112,116,111,114,41,32,100,101,115,99,114,105,112,116,111,114,46,119,114,105,116,97,98,108,101,32,61,32,116,114,117,101,59,32,79,98,106,101,99,116,46,100,101,102,105,110,101,80,114,111,112,101,114,116,121,40,116,97,114,103,101,116,44,32,95,116,111,80,114,111,112,101,114,116,121,75,101,121,40,100,101,115,99,114,105,112,116,111,114,46,107,101,121,41,44,32,100,101,115,99,114,105,112,116,111,114,41,59,32,125,32,125,10,102,117,110,99,116,105,111,110,32,95,99,114,101,97,116,101,67,108,97,115,115,40,67,111,110,115,116,114,117,99,116,111,114,44,32,112,114,111,116,111,80,114,111,112,115,44,32,115,116,97,116,105,99,80,114,111,112,115,41,32,123,32,105,102,32,40,112,114,111,116,111,80,114,111,112,115,41,32,95,100,101,102,105,110,101,80,114,111,112,101,114,116,105,101,115,40,67,111,110,115,116,114,117,99,116,111,114,46,112,114,111,116,111,116,121,112,101,44,32,112,114,111,116,111,80,114,111,112,115,41,59,32,105,102,32,40,115,116,97,116,105,99,80,114,111,112,115,41,32,95,100,101,102,105,110,101,80,114,111,112,101,114,116,105,101,115,40,67,111,110,115,116,114,117,99,116,111,114,44,32,115,116,97,116,105,99,80,114,111,112,115,41,59,32,79,98,106,101,99,116,46,100,101,102,105,110,101,80,114,111,112,101,114,116,121,40,67,111,110,115,116,114,117,99,116,111,114,44,32,34,112,114,111,116,111,116,121,112,101,34,44,32,123,32,119,114,105,116,97,98,108,101,58,32,102,97,108,115,101,32,125,41,59,32,114,101,116,117,114,110,32,67,111,110,115,116,114,117,99,116,111,114,59,32,125,10,102,117,110,99,116,105,111,110,32,95,116,111,80,114,111,112,101,114,116,121,75,101,121,40,97,114,103,41,32,123,32,118,97,114,32,107,101,121,32,61,32,95,116,111,80,114,105,109,105,116,105,118,101,40,97,114,103,44,32,34,115,116,114,105,110,103,34,41,59,32,114,101,116,117,114,110,32,95,116,121,112,101,111,102,40,107,101,121,41,32,61,61,61,32,34,115,121,109,98,111,108,34,32,63,32,107,101,121,32,58,32,83,116,114,105,110,103,40,107,101,121,41,59,32,125,10,102,117,110,99,116,105,111,110,32,95,116,111,80,114,105,109,105,116,105,118,101,40,105,110,112,117,116,44,32,104,105,110,116,41,32,123,32,105,102,32,40,95,116,121,112,101,111,102,40,105,110,112,117,116,41,32,33,61,61,32,34,111,98,106,101,99,116,34,32,124,124,32,105,110,112,117,116,32,61,61,61,32,110,117,108,108,41,32,114,101,116,117,114,110,32,105,110,112,117,116,59,32,118,97,114,32,112,114,105,109,32,61,32,105,110,112,117,116,91,83,121,109,98,111,108,46,116,111,80,114,105,109,105,116,105,118,101,93,59,32,105,102,32,40,112,114,105,109,32,33,61,61,32,117,110,100,101,102,105,110,101,100,41,32,123,32,118,97,114,32,114,101,115,32,61,32,112,114,105,109,46,99,97,108,108,40,105,110,112,117,116,44,32,104,105,110,116,32,124,124,32,34,100,101,102,97,117,108,116,34,41,59,32,105,102,32,40,95,116,121,112,101,111,102,40,114,101,115,41,32,33,61,61,32,34,111,98,106,101,99,116,34,41,32,114,101,116,117,114,110,32,114,101,115,59,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,34,64,64,116,111,80,114,105,109,105,116,105,118,101,32,109,117,115,116,32,114,101,116,117,114,110,32,97,32,112,114,105,109,105,116,105,118,101,32,118,97,108,117,101,46,34,41,59,32,125,32,114,101,116,117,114,110,32,40,104,105,110,116,32,61,61,61,32,34,115,116,114,105,110,103,34,32,63,32,83,116,114,105,110,103,32,58,32,78,117,109,98,101,114,41,40,105,110,112,117,116,41,59,32,125,10,102,117,110,99,116,105,111,110,32,95,116,121,112,101,111,102,40,111,98,106,41,32,123,32,34,64,98,97,98,101,108,47,104,101,108,112,101,114,115,32,45,32,116,121,112,101,111,102,34,59,32,114,101,116,117,114,110,32,95,116,121,112,101,111,102,32,61,32,34,102,117,110,99,116,105,111,110,34,32,61,61,32,116,121,112,101,111,102,32,83,121,109,98,111,108,32,38,38,32,34,115,121,109,98,111,108,34,32,61,61,32,116,121,112,101,111,102,32,83,121,109,98,111,108,46,105,116,101,114,97,116,111,114,32,63,32,102,117,110,99,116,105,111,110,32,40,111,98,106,41,32,123,32,114,101,116,117,114,110,32,116,121,112,101,111,102,32,111,98,106,59,32,125,32,58,32,102,117,110,99,116,105,111,110,32,40,111,98,106,41,32,123,32,114,101,116,117,114,110,32,111,98,106,32,38,38,32,34,102,117,110,99,116,105,111,110,34,32,61,61,32,116,121,112,101,111,102,32,83,121,109,98,111,108,32,38,38,32,111,98,106,46,99,111,110,115,116,114,117,99,116,111,114,32,61,61,61,32,83,121,109,98,111,108,32,38,38,32,111,98,106,32,33,61,61,32,83,121,109,98,111,108,46,112,114,111,116,111,116,121,112,101,32,63,32,34,115,121,109,98,111,108,34,32,58,32,116,121,112,101,111,102,32,111,98,106,59,32,125,44,32,95,116,121,112,101,111,102,40,111,98,106,41,59,32,125,10,40,102,117,110,99,116,105,111,110,32,40,103,101,116,73,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,10,32,32,103,108,111,98,97,108,46,72,105,112,112,121,32,61,32,103,108,111,98,97,108,46,72,105,112,112,121,32,124,124,32,123,125,59,10,32,32,118,97,114,32,98,105,110,100,105,110,103,79,98,106,32,61,32,123,125,59,10,32,32,118,97,114,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,32,61,32,102,117,110,99,116,105,111,110,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,109,111,100,117,108,101,41,32,123,10,32,32,32,32,105,102,32,40,95,116,121,112,101,111,102,40,98,105,110,100,105,110,103,79,98,106,91,109,111,100,117,108,101,93,41,32,33,61,61,32,39,111,98,106,101,99,116,39,41,32,123,10,32,32,32,32,32,32,98,105,110,100,105,110,103,79,98,106,91,109,111,100,117,108,101,93,32,61,32,103,101,116,73,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,109,111,100,117,108,101,41,59,10,32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,32,98,105,110,100,105,110,103,79,98,106,91,109,111,100,117,108,101,93,59,10,32,32,125,59,10,32,32,118,97,114,32,67,111,110,116,101,120,116,105,102,121,83,99,114,105,112,116,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,39,41,59,10,32,32,118,97,114,32,78,97,116,105,118,101,77,111,100,117,108,101,32,61,32,102,117,110,99,116,105,111,110,32,40,41,32,123,10,32,32,32,32,102,117,110,99,116,105,111,110,32,78,97,116,105,118,101,77,111,100,117,108,101,40,102,105,108,101,110,97,109,101,41,32,123,10,32,32,32,32,32,32,95,99,108,97,115,115,67,97,108,108,67,104,101,99,107,40,116,104,105,115,44,32,78,97,116,105,118,101,77,111,100,117,108,101,41,59,10,32,32,32,32,32,32,116,104,105,115,46,102,105,108,101,110,97,109,101,32,61,32,102,105,108,101,110,97,109,101,59,10,32,32,32,32,32,32,116,104,105,115,46,101,120,112,111,114,116,115,32,61,32,123,125,59,10,32,32,32,32,125,10,32,32,32,32,95,99,114,101,97,116,101,67,108,97,115,115,40,78,97,116,105,118,101,77,111,100,117,108,101,44,32,91,123,10,32,32,32,32,32,32,107,101,121,58,32,34,99,111,109,112,105,108,101,34,44,10,32,32,32,32,32,32,118,97,108,117,101,58,32,102,117,110,99,116,105,111,110,32,99,111,109,112,105,108,101,40,41,32,123,10,32,32,32,32,32,32,32,32,118,97,114,32,102,110,32,61,32,67,111,110,116,101,120,116,105,102,121,83,99,114,105,112,116,46,82,117,110,73,110,84,104,105,115,67,111,110,116,101,120,116,40,116,104,105,115,46,102,105,108,101,110,97,109,101,41,59,10,32,32,32,32,32,32,32,32,102,110,40,116,104,105,115,46,101,120,112,111,114,116,115,44,32,78,97,116,105,118,101,77,111,100,117,108,101,46,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,59,10,32,32,32,32,32,32,125,10,32,32,32,32,125,44,32,123,10,32,32,32,32,32,32,107,101,121,58,32,34,99,97,99,104,101,34,44,10,32,32,32,32,32,32,118,97,108,117,101,58,32,102,117,110,99,116,105,111,110,32,99,97,99,104,101,40,41,32,123,10,32,32,32,32,32,32,32,32,78,97,116,105,118,101,77,111,100,117,108,101,46,99,97,99,104,101,91,116,104,105,115,46,102,105,108,101,110,97,109,101,93,32,61,32,116,104,105,115,59,10,32,32,32,32,32,32,125,10,32,32,32,32,125,93,44,32,91,123,10,32,32,32,32,32,32,107,101,121,58,32,34,114,101,113,117,105,114,101,34,44,10,32,32,32,32,32,32,118,97,108,117,101,58,32,102,117,110,99,116,105,111,110,32,114,101,113,117,105,114,101,40,102,105,108,101,80,97,116,104,41,32,123,10,32,32,32,32,32,32,32,32,118,97,114,32,102,105,108,101,80,97,116,104,65,114,114,32,61,32,102,105,108,101,80,97,116,104,46,115,112,108,105,116,40,39,47,39,41,59,10,32,32,32,32,32,32,32,32,118,97,114,32,102,105,108,101,110,97,109,101,32,61,32,102,105,108,101,80,97,116,104,65,114,114,91,102,105,108,101,80,97,116,104,65,114,114,46,108,101,110,103,116,104,32,45,32,49,93,59,10,32,32,32,32,32,32,32,32,118,97,114,32,99,97,99,104,101,100,32,61,32,78,97,116,105,118,101,77,111,100,117,108,101,46,99,97,99,104,101,91,102,105,108,101,110,97,109,101,93,59,10,32,32,32,32,32,32,32,32,105,102,32,40,99,97,99,104,101,100,41,32,123,10,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,97,99,104,101,100,46,101,120,112,111,114,116,115,59,10,32,32,32,32,32,32,32,32,125,10,32,32,32,32,32,32,32,32,118,97,114,32,110,97,116,105,118,101,77,111,100,117,108,101,32,61,32,110,101,119,32,78,97,116,105,118,101,77,111,100,117,108,101,40,102,105,108,101,110,97,109,101,41,59,10,32,32,32,32,32,32,32,32,110,97,116,105,118,101,77,111,100,117,108,101,46,99,97,99,104,101,40,41,59,10,32,32,32,32,32,32,32,32,110,97,116,105,118,101,77,111,100,117,108,101,46,99,111,109,112,105,108,101,40,41,59,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,110,97,116,105,118,101,77,111,100,117,108,101,46,101,120,112,111,114,116,115,59,10,32,32,32,32,32,32,125,10,32,32,32,32,125,93,41,59,10,32,32,32,32,114,101,116,117,114,110,32,78,97,116,105,118,101,77,111,100,117,108,101,59,10,32,32,125,40,41,59,10,32,32,78,97,116,105,118,101,77,111,100,117,108,101,46,99,97,99,104,101,32,61,32,123,125,59,10,32,32,78,97,116,105,118,101,77,111,100,117,108,101,46,114,101,113,117,105,114,101,40,39,104,105,112,112,121,46,106,115,39,41,59,10,125,41,59,0 }; // NOLINT const uint8_t k_hippy[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,79,116,104,101,114,115,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,68,121,110,97,109,105,99,76,111,97,100,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,80,108,97,116,102,111,114,109,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,98,114,105,100,103,101,47,105,111,115,47,106,115,50,110,97,116,105,118,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,84,105,109,101,114,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,105,111,115,47,112,114,111,109,105,115,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,67,111,110,115,111,108,101,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,78,101,116,119,111,114,107,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,83,116,111,114,97,103,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,68,105,109,101,110,115,105,111,110,115,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,85,116,105,108,115,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,105,111,115,47,103,108,111,98,97,108,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,98,114,105,100,103,101,47,105,111,115,47,110,97,116,105,118,101,50,106,115,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,69,118,101,110,116,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,65,110,105,109,97,116,105,111,110,70,114,97,109,101,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,105,111,115,47,84,117,114,98,111,46,106,115,39,41,59,10,103,108,111,98,97,108,46,108,111,99,97,108,83,116,111,114,97,103,101,32,61,32,72,105,112,112,121,46,97,115,121,110,99,83,116,111,114,97,103,101,59,10,103,108,111,98,97,108,46,116,117,114,98,111,80,114,111,109,105,115,101,32,61,32,72,105,112,112,121,46,116,117,114,98,111,80,114,111,109,105,115,101,59,125,41,59,0 }; // NOLINT const uint8_t k_ExceptionHandle[] = { 34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,40,102,117,110,99,116,105,111,110,32,101,120,99,101,112,116,105,111,110,72,97,110,100,108,101,114,40,101,118,101,110,116,78,97,109,101,44,32,101,114,114,41,32,123,10,32,32,105,102,32,40,103,108,111,98,97,108,46,72,105,112,112,121,41,32,123,10,32,32,32,32,103,108,111,98,97,108,46,72,105,112,112,121,46,101,109,105,116,40,39,117,110,99,97,117,103,104,116,69,120,99,101,112,116,105,111,110,39,44,32,101,114,114,41,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,118,101,110,116,78,97,109,101,44,32,101,114,114,41,59,10,32,32,125,10,125,41,59,0 }; // NOLINT - const uint8_t k_Others[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,103,108,111,98,97,108,46,95,95,73,83,72,73,80,80,89,95,95,32,61,32,116,114,117,101,59,10,103,108,111,98,97,108,46,95,95,71,76,79,66,65,76,95,95,32,61,32,123,10,32,32,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,58,32,123,125,10,125,59,10,102,117,110,99,116,105,111,110,32,104,105,112,112,121,82,101,103,105,115,116,101,114,40,97,112,112,78,97,109,101,44,32,101,110,116,114,121,70,117,110,99,41,32,123,10,32,32,95,95,71,76,79,66,65,76,95,95,46,97,112,112,82,101,103,105,115,116,101,114,91,97,112,112,78,97,109,101,93,32,61,32,123,10,32,32,32,32,114,117,110,58,32,101,110,116,114,121,70,117,110,99,10,32,32,125,59,10,125,10,102,117,110,99,116,105,111,110,32,111,110,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,110,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,32,97,110,100,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,125,10,32,32,118,97,114,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,32,61,32,110,101,119,32,83,101,116,40,41,59,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,97,100,100,40,108,105,115,116,101,110,101,114,41,59,10,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,125,10,102,117,110,99,116,105,111,110,32,111,102,102,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,102,102,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,118,97,114,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,32,32,125,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,100,101,108,101,116,101,40,108,105,115,116,101,110,101,114,41,59,10,32,32,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,99,108,101,97,114,40,41,59,10,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,125,10,102,117,110,99,116,105,111,110,32,101,109,105,116,40,101,118,101,110,116,78,97,109,101,41,32,123,10,32,32,102,111,114,32,40,118,97,114,32,95,108,101,110,32,61,32,97,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,44,32,97,114,103,115,32,61,32,110,101,119,32,65,114,114,97,121,40,95,108,101,110,32,62,32,49,32,63,32,95,108,101,110,32,45,32,49,32,58,32,48,41,44,32,95,107,101,121,32,61,32,49,59,32,95,107,101,121,32,60,32,95,108,101,110,59,32,95,107,101,121,43,43,41,32,123,10,32,32,32,32,97,114,103,115,91,95,107,101,121,32,45,32,49,93,32,61,32,97,114,103,117,109,101,110,116,115,91,95,107,101,121,93,59,10,32,32,125,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,118,97,114,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,101,118,101,110,116,76,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,105,102,32,40,101,118,101,110,116,78,97,109,101,32,61,61,61,32,39,117,110,99,97,117,103,104,116,69,120,99,101,112,116,105,111,110,39,32,38,38,32,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,59,10,32,32,125,10,32,32,116,114,121,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,102,117,110,99,116,105,111,110,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,32,32,114,101,116,117,114,110,32,108,105,115,116,101,110,101,114,46,97,112,112,108,121,40,118,111,105,100,32,48,44,32,97,114,103,115,41,59,10,32,32,32,32,125,41,59,10,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,125,10,125,10,72,105,112,112,121,46,100,101,118,105,99,101,32,61,32,123,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,32,61,32,123,125,59,10,72,105,112,112,121,46,114,101,103,105,115,116,101,114,32,61,32,123,10,32,32,114,101,103,105,115,116,58,32,104,105,112,112,121,82,101,103,105,115,116,101,114,10,125,59,10,72,105,112,112,121,46,111,110,32,61,32,111,110,59,10,72,105,112,112,121,46,111,102,102,32,61,32,111,102,102,59,10,72,105,112,112,121,46,101,109,105,116,32,61,32,101,109,105,116,59,125,41,59,0 }; // NOLINT + const uint8_t k_ErrorHandle[] = { 34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,40,102,117,110,99,116,105,111,110,32,101,114,114,111,114,72,97,110,100,108,101,114,40,101,118,101,110,116,44,32,115,111,117,114,99,101,44,32,108,105,110,101,110,111,44,32,99,111,108,110,111,44,32,101,114,114,111,114,41,32,123,10,32,32,105,102,32,40,103,108,111,98,97,108,46,72,105,112,112,121,41,32,123,10,32,32,32,32,103,108,111,98,97,108,46,72,105,112,112,121,46,101,109,105,116,69,114,114,111,114,40,101,118,101,110,116,44,32,115,111,117,114,99,101,44,32,108,105,110,101,110,111,44,32,99,111,108,110,111,44,32,101,114,114,111,114,41,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,125,10,125,41,59,0 }; // NOLINT + const uint8_t k_Others[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,102,117,110,99,116,105,111,110,32,95,116,121,112,101,111,102,40,111,98,106,41,32,123,32,34,64,98,97,98,101,108,47,104,101,108,112,101,114,115,32,45,32,116,121,112,101,111,102,34,59,32,114,101,116,117,114,110,32,95,116,121,112,101,111,102,32,61,32,34,102,117,110,99,116,105,111,110,34,32,61,61,32,116,121,112,101,111,102,32,83,121,109,98,111,108,32,38,38,32,34,115,121,109,98,111,108,34,32,61,61,32,116,121,112,101,111,102,32,83,121,109,98,111,108,46,105,116,101,114,97,116,111,114,32,63,32,102,117,110,99,116,105,111,110,32,40,111,98,106,41,32,123,32,114,101,116,117,114,110,32,116,121,112,101,111,102,32,111,98,106,59,32,125,32,58,32,102,117,110,99,116,105,111,110,32,40,111,98,106,41,32,123,32,114,101,116,117,114,110,32,111,98,106,32,38,38,32,34,102,117,110,99,116,105,111,110,34,32,61,61,32,116,121,112,101,111,102,32,83,121,109,98,111,108,32,38,38,32,111,98,106,46,99,111,110,115,116,114,117,99,116,111,114,32,61,61,61,32,83,121,109,98,111,108,32,38,38,32,111,98,106,32,33,61,61,32,83,121,109,98,111,108,46,112,114,111,116,111,116,121,112,101,32,63,32,34,115,121,109,98,111,108,34,32,58,32,116,121,112,101,111,102,32,111,98,106,59,32,125,44,32,95,116,121,112,101,111,102,40,111,98,106,41,59,32,125,10,102,117,110,99,116,105,111,110,32,95,100,101,102,105,110,101,80,114,111,112,101,114,116,105,101,115,40,116,97,114,103,101,116,44,32,112,114,111,112,115,41,32,123,32,102,111,114,32,40,118,97,114,32,105,32,61,32,48,59,32,105,32,60,32,112,114,111,112,115,46,108,101,110,103,116,104,59,32,105,43,43,41,32,123,32,118,97,114,32,100,101,115,99,114,105,112,116,111,114,32,61,32,112,114,111,112,115,91,105,93,59,32,100,101,115,99,114,105,112,116,111,114,46,101,110,117,109,101,114,97,98,108,101,32,61,32,100,101,115,99,114,105,112,116,111,114,46,101,110,117,109,101,114,97,98,108,101,32,124,124,32,102,97,108,115,101,59,32,100,101,115,99,114,105,112,116,111,114,46,99,111,110,102,105,103,117,114,97,98,108,101,32,61,32,116,114,117,101,59,32,105,102,32,40,34,118,97,108,117,101,34,32,105,110,32,100,101,115,99,114,105,112,116,111,114,41,32,100,101,115,99,114,105,112,116,111,114,46,119,114,105,116,97,98,108,101,32,61,32,116,114,117,101,59,32,79,98,106,101,99,116,46,100,101,102,105,110,101,80,114,111,112,101,114,116,121,40,116,97,114,103,101,116,44,32,95,116,111,80,114,111,112,101,114,116,121,75,101,121,40,100,101,115,99,114,105,112,116,111,114,46,107,101,121,41,44,32,100,101,115,99,114,105,112,116,111,114,41,59,32,125,32,125,10,102,117,110,99,116,105,111,110,32,95,99,114,101,97,116,101,67,108,97,115,115,40,67,111,110,115,116,114,117,99,116,111,114,44,32,112,114,111,116,111,80,114,111,112,115,44,32,115,116,97,116,105,99,80,114,111,112,115,41,32,123,32,105,102,32,40,112,114,111,116,111,80,114,111,112,115,41,32,95,100,101,102,105,110,101,80,114,111,112,101,114,116,105,101,115,40,67,111,110,115,116,114,117,99,116,111,114,46,112,114,111,116,111,116,121,112,101,44,32,112,114,111,116,111,80,114,111,112,115,41,59,32,105,102,32,40,115,116,97,116,105,99,80,114,111,112,115,41,32,95,100,101,102,105,110,101,80,114,111,112,101,114,116,105,101,115,40,67,111,110,115,116,114,117,99,116,111,114,44,32,115,116,97,116,105,99,80,114,111,112,115,41,59,32,79,98,106,101,99,116,46,100,101,102,105,110,101,80,114,111,112,101,114,116,121,40,67,111,110,115,116,114,117,99,116,111,114,44,32,34,112,114,111,116,111,116,121,112,101,34,44,32,123,32,119,114,105,116,97,98,108,101,58,32,102,97,108,115,101,32,125,41,59,32,114,101,116,117,114,110,32,67,111,110,115,116,114,117,99,116,111,114,59,32,125,10,102,117,110,99,116,105,111,110,32,95,116,111,80,114,111,112,101,114,116,121,75,101,121,40,97,114,103,41,32,123,32,118,97,114,32,107,101,121,32,61,32,95,116,111,80,114,105,109,105,116,105,118,101,40,97,114,103,44,32,34,115,116,114,105,110,103,34,41,59,32,114,101,116,117,114,110,32,95,116,121,112,101,111,102,40,107,101,121,41,32,61,61,61,32,34,115,121,109,98,111,108,34,32,63,32,107,101,121,32,58,32,83,116,114,105,110,103,40,107,101,121,41,59,32,125,10,102,117,110,99,116,105,111,110,32,95,116,111,80,114,105,109,105,116,105,118,101,40,105,110,112,117,116,44,32,104,105,110,116,41,32,123,32,105,102,32,40,95,116,121,112,101,111,102,40,105,110,112,117,116,41,32,33,61,61,32,34,111,98,106,101,99,116,34,32,124,124,32,105,110,112,117,116,32,61,61,61,32,110,117,108,108,41,32,114,101,116,117,114,110,32,105,110,112,117,116,59,32,118,97,114,32,112,114,105,109,32,61,32,105,110,112,117,116,91,83,121,109,98,111,108,46,116,111,80,114,105,109,105,116,105,118,101,93,59,32,105,102,32,40,112,114,105,109,32,33,61,61,32,117,110,100,101,102,105,110,101,100,41,32,123,32,118,97,114,32,114,101,115,32,61,32,112,114,105,109,46,99,97,108,108,40,105,110,112,117,116,44,32,104,105,110,116,32,124,124,32,34,100,101,102,97,117,108,116,34,41,59,32,105,102,32,40,95,116,121,112,101,111,102,40,114,101,115,41,32,33,61,61,32,34,111,98,106,101,99,116,34,41,32,114,101,116,117,114,110,32,114,101,115,59,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,34,64,64,116,111,80,114,105,109,105,116,105,118,101,32,109,117,115,116,32,114,101,116,117,114,110,32,97,32,112,114,105,109,105,116,105,118,101,32,118,97,108,117,101,46,34,41,59,32,125,32,114,101,116,117,114,110,32,40,104,105,110,116,32,61,61,61,32,34,115,116,114,105,110,103,34,32,63,32,83,116,114,105,110,103,32,58,32,78,117,109,98,101,114,41,40,105,110,112,117,116,41,59,32,125,10,102,117,110,99,116,105,111,110,32,95,99,108,97,115,115,67,97,108,108,67,104,101,99,107,40,105,110,115,116,97,110,99,101,44,32,67,111,110,115,116,114,117,99,116,111,114,41,32,123,32,105,102,32,40,33,40,105,110,115,116,97,110,99,101,32,105,110,115,116,97,110,99,101,111,102,32,67,111,110,115,116,114,117,99,116,111,114,41,41,32,123,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,34,67,97,110,110,111,116,32,99,97,108,108,32,97,32,99,108,97,115,115,32,97,115,32,97,32,102,117,110,99,116,105,111,110,34,41,59,32,125,32,125,10,103,108,111,98,97,108,46,95,95,73,83,72,73,80,80,89,95,95,32,61,32,116,114,117,101,59,10,103,108,111,98,97,108,46,95,95,71,76,79,66,65,76,95,95,32,61,32,123,10,32,32,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,58,32,123,125,44,10,32,32,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,58,32,91,93,10,125,59,10,118,97,114,32,69,114,114,111,114,69,118,101,110,116,32,61,32,95,99,114,101,97,116,101,67,108,97,115,115,40,102,117,110,99,116,105,111,110,32,69,114,114,111,114,69,118,101,110,116,40,109,101,115,115,97,103,101,44,32,102,105,108,101,110,97,109,101,44,32,108,105,110,101,110,111,44,32,99,111,108,110,111,44,32,101,114,114,111,114,41,32,123,10,32,32,95,99,108,97,115,115,67,97,108,108,67,104,101,99,107,40,116,104,105,115,44,32,69,114,114,111,114,69,118,101,110,116,41,59,10,32,32,116,104,105,115,46,109,101,115,115,97,103,101,32,61,32,109,101,115,115,97,103,101,59,10,32,32,116,104,105,115,46,102,105,108,101,110,97,109,101,32,61,32,102,105,108,101,110,97,109,101,59,10,32,32,116,104,105,115,46,108,105,110,101,110,111,32,61,32,108,105,110,101,110,111,59,10,32,32,116,104,105,115,46,99,111,108,110,111,32,61,32,99,111,108,110,111,59,10,32,32,116,104,105,115,46,101,114,114,111,114,32,61,32,101,114,114,111,114,59,10,125,41,59,10,102,117,110,99,116,105,111,110,32,104,105,112,112,121,82,101,103,105,115,116,101,114,40,97,112,112,78,97,109,101,44,32,101,110,116,114,121,70,117,110,99,41,32,123,10,32,32,95,95,71,76,79,66,65,76,95,95,46,97,112,112,82,101,103,105,115,116,101,114,91,97,112,112,78,97,109,101,93,32,61,32,123,10,32,32,32,32,114,117,110,58,32,101,110,116,114,121,70,117,110,99,10,32,32,125,59,10,125,10,102,117,110,99,116,105,111,110,32,111,110,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,110,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,32,97,110,100,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,125,10,32,32,118,97,114,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,32,61,32,110,101,119,32,83,101,116,40,41,59,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,97,100,100,40,108,105,115,116,101,110,101,114,41,59,10,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,125,10,102,117,110,99,116,105,111,110,32,111,102,102,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,102,102,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,118,97,114,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,32,32,125,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,100,101,108,101,116,101,40,108,105,115,116,101,110,101,114,41,59,10,32,32,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,99,108,101,97,114,40,41,59,10,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,125,10,102,117,110,99,116,105,111,110,32,101,109,105,116,40,101,118,101,110,116,78,97,109,101,41,32,123,10,32,32,102,111,114,32,40,118,97,114,32,95,108,101,110,32,61,32,97,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,44,32,97,114,103,115,32,61,32,110,101,119,32,65,114,114,97,121,40,95,108,101,110,32,62,32,49,32,63,32,95,108,101,110,32,45,32,49,32,58,32,48,41,44,32,95,107,101,121,32,61,32,49,59,32,95,107,101,121,32,60,32,95,108,101,110,59,32,95,107,101,121,43,43,41,32,123,10,32,32,32,32,97,114,103,115,91,95,107,101,121,32,45,32,49,93,32,61,32,97,114,103,117,109,101,110,116,115,91,95,107,101,121,93,59,10,32,32,125,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,118,97,114,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,101,118,101,110,116,76,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,105,102,32,40,101,118,101,110,116,78,97,109,101,32,61,61,61,32,39,117,110,99,97,117,103,104,116,69,120,99,101,112,116,105,111,110,39,32,38,38,32,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,59,10,32,32,125,10,32,32,116,114,121,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,102,117,110,99,116,105,111,110,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,32,32,114,101,116,117,114,110,32,108,105,115,116,101,110,101,114,46,97,112,112,108,121,40,118,111,105,100,32,48,44,32,97,114,103,115,41,59,10,32,32,32,32,125,41,59,10,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,125,10,125,10,79,98,106,101,99,116,46,100,101,102,105,110,101,80,114,111,112,101,114,116,121,40,72,105,112,112,121,44,32,39,111,110,101,114,114,111,114,39,44,32,123,10,32,32,103,101,116,58,32,102,117,110,99,116,105,111,110,32,103,101,116,40,41,32,123,10,32,32,32,32,118,97,114,32,108,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,59,10,32,32,32,32,114,101,116,117,114,110,32,108,105,115,116,101,110,101,114,115,46,108,101,110,103,116,104,32,62,32,48,32,63,32,108,105,115,116,101,110,101,114,115,46,115,108,105,99,101,40,45,49,41,32,58,32,110,117,108,108,59,10,32,32,125,44,10,32,32,115,101,116,58,32,102,117,110,99,116,105,111,110,32,115,101,116,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,105,102,32,40,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,110,101,114,114,111,114,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,32,32,125,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,32,61,32,91,93,59,10,32,32,32,32,118,97,114,32,108,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,59,10,32,32,32,32,108,105,115,116,101,110,101,114,115,46,112,117,115,104,40,108,105,115,116,101,110,101,114,41,59,10,32,32,125,10,125,41,59,10,102,117,110,99,116,105,111,110,32,101,109,105,116,69,114,114,111,114,40,41,32,123,10,32,32,102,111,114,32,40,118,97,114,32,95,108,101,110,50,32,61,32,97,114,103,117,109,101,110,116,115,46,108,101,110,103,116,104,44,32,97,114,103,115,32,61,32,110,101,119,32,65,114,114,97,121,40,95,108,101,110,50,41,44,32,95,107,101,121,50,32,61,32,48,59,32,95,107,101,121,50,32,60,32,95,108,101,110,50,59,32,95,107,101,121,50,43,43,41,32,123,10,32,32,32,32,97,114,103,115,91,95,107,101,121,50,93,32,61,32,97,114,103,117,109,101,110,116,115,91,95,107,101,121,50,93,59,10,32,32,125,10,32,32,105,102,32,40,97,114,103,115,46,108,101,110,103,116,104,32,33,61,61,32,53,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,69,114,114,111,114,32,111,110,108,121,32,97,99,99,101,112,116,32,53,32,112,97,114,97,109,115,39,41,59,10,32,32,125,10,32,32,118,97,114,32,101,114,114,79,98,106,32,61,32,110,101,119,32,69,114,114,111,114,40,41,59,10,32,32,101,114,114,79,98,106,46,109,101,115,115,97,103,101,32,61,32,74,83,79,78,46,115,116,114,105,110,103,105,102,121,40,97,114,103,115,91,52,93,41,59,10,32,32,118,97,114,32,108,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,59,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,116,114,121,32,123,10,32,32,32,32,32,32,108,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,102,117,110,99,116,105,111,110,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,108,105,115,116,101,110,101,114,40,97,114,103,115,91,48,93,44,32,97,114,103,115,91,49,93,44,32,97,114,103,115,91,50,93,44,32,97,114,103,115,91,51,93,44,32,101,114,114,79,98,106,41,59,10,32,32,32,32,32,32,125,41,59,10,32,32,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,32,32,125,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,105,102,32,40,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,125,10,32,32,118,97,114,32,101,118,101,110,116,78,97,109,101,32,61,32,39,101,114,114,111,114,39,59,10,32,32,118,97,114,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,116,114,121,32,123,10,32,32,32,32,32,32,118,97,114,32,101,118,101,110,116,32,61,32,110,101,119,32,69,114,114,111,114,69,118,101,110,116,40,97,114,103,115,91,48,93,44,32,97,114,103,115,91,49,93,44,32,97,114,103,115,91,50,93,44,32,97,114,103,115,91,51,93,44,32,101,114,114,79,98,106,41,59,10,32,32,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,102,117,110,99,116,105,111,110,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,108,105,115,116,101,110,101,114,40,101,118,101,110,116,41,59,10,32,32,32,32,32,32,125,41,59,10,32,32,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,32,32,125,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,105,102,32,40,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,125,10,125,10,102,117,110,99,116,105,111,110,32,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,32,97,110,100,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,125,10,32,32,118,97,114,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,32,61,32,110,101,119,32,83,101,116,40,41,59,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,97,100,100,40,108,105,115,116,101,110,101,114,41,59,10,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,125,10,102,117,110,99,116,105,111,110,32,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,118,97,114,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,32,32,125,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,100,101,108,101,116,101,40,108,105,115,116,101,110,101,114,41,59,10,32,32,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,99,108,101,97,114,40,41,59,10,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,125,10,72,105,112,112,121,46,100,101,118,105,99,101,32,61,32,123,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,32,61,32,123,125,59,10,72,105,112,112,121,46,114,101,103,105,115,116,101,114,32,61,32,123,10,32,32,114,101,103,105,115,116,58,32,104,105,112,112,121,82,101,103,105,115,116,101,114,10,125,59,10,72,105,112,112,121,46,111,110,32,61,32,111,110,59,10,72,105,112,112,121,46,111,102,102,32,61,32,111,102,102,59,10,72,105,112,112,121,46,101,109,105,116,32,61,32,101,109,105,116,59,10,72,105,112,112,121,46,101,109,105,116,69,114,114,111,114,32,61,32,101,109,105,116,69,114,114,111,114,59,10,72,105,112,112,121,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,32,61,32,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,59,10,72,105,112,112,121,46,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,32,61,32,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,59,125,41,59,0 }; // NOLINT const uint8_t k_DynamicLoad[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,118,97,114,32,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,39,41,59,10,103,108,111,98,97,108,46,100,121,110,97,109,105,99,76,111,97,100,32,61,32,102,117,110,99,116,105,111,110,32,40,112,97,116,104,44,32,101,110,99,111,100,101,44,32,99,98,41,32,123,10,32,32,118,97,114,32,114,101,113,117,101,115,116,80,97,116,104,32,61,32,112,97,116,104,32,124,124,32,39,39,59,10,32,32,118,97,114,32,105,115,83,99,104,101,109,97,32,61,32,47,94,40,46,43,58,92,47,92,47,41,124,94,40,92,47,92,47,41,47,46,116,101,115,116,40,112,97,116,104,41,59,10,32,32,105,102,32,40,33,105,115,83,99,104,101,109,97,41,32,123,10,32,32,32,32,114,101,113,117,101,115,116,80,97,116,104,32,61,32,103,108,111,98,97,108,46,95,95,72,73,80,80,89,67,85,82,68,73,82,95,95,32,43,32,112,97,116,104,59,10,32,32,125,10,32,32,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,46,76,111,97,100,85,110,116,114,117,115,116,101,100,67,111,110,116,101,110,116,40,114,101,113,117,101,115,116,80,97,116,104,44,32,101,110,99,111,100,101,44,32,99,98,41,59,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_Platform[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,32,61,32,123,125,59,10,105,102,32,40,116,121,112,101,111,102,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,32,33,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,118,97,114,32,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,123,10,32,32,32,32,99,111,117,110,116,114,121,58,32,39,39,44,10,32,32,32,32,108,97,110,103,117,97,103,101,58,32,39,39,44,10,32,32,32,32,100,105,114,101,99,116,105,111,110,58,32,48,10,32,32,125,59,10,32,32,105,102,32,40,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,32,61,61,61,32,39,105,111,115,39,41,32,123,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,68,101,118,105,99,101,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,68,101,118,105,99,101,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,83,68,75,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,76,111,99,97,108,105,122,97,116,105,111,110,32,124,124,32,76,111,99,97,108,105,122,97,116,105,111,110,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,79,83,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,65,80,73,76,101,118,101,108,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,65,80,73,76,101,118,101,108,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,124,124,32,76,111,99,97,108,105,122,97,116,105,111,110,59,10,32,32,125,10,125,125,41,59,0 }; // NOLINT const uint8_t k_UIManagerModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,34,117,115,101,32,115,116,114,105,99,116,34,59,10,10,118,97,114,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,39,41,59,10,72,105,112,112,121,46,100,111,99,117,109,101,110,116,32,61,32,123,10,32,32,99,114,101,97,116,101,78,111,100,101,58,32,102,117,110,99,116,105,111,110,32,99,114,101,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,117,112,100,97,116,101,78,111,100,101,58,32,102,117,110,99,116,105,111,110,32,117,112,100,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,100,101,108,101,116,101,78,111,100,101,58,32,102,117,110,99,116,105,111,110,32,100,101,108,101,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,102,108,117,115,104,66,97,116,99,104,58,32,102,117,110,99,116,105,111,110,32,102,108,117,115,104,66,97,116,99,104,40,41,32,123,125,44,10,32,32,101,110,100,66,97,116,99,104,58,32,102,117,110,99,116,105,111,110,32,101,110,100,66,97,116,99,104,40,41,32,123,125,44,10,32,32,99,97,108,108,85,73,70,117,110,99,116,105,111,110,58,32,102,117,110,99,116,105,111,110,32,99,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,32,123,10,32,32,32,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,46,67,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,59,10,32,32,125,44,10,32,32,115,101,110,100,82,101,110,100,101,114,69,114,114,111,114,58,32,102,117,110,99,116,105,111,110,32,115,101,110,100,82,101,110,100,101,114,69,114,114,111,114,40,101,114,114,111,114,41,32,123,10,32,32,32,32,105,102,32,40,101,114,114,111,114,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,101,114,114,111,114,59,10,32,32,32,32,125,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT @@ -56,6 +57,7 @@ const NativeSourceCode GetNativeSourceCode(const std::string& filename) { {"bootstrap.js", {k_bootstrap, ARRAY_SIZE(k_bootstrap) - 1}}, // NOLINT {"hippy.js", {k_hippy, ARRAY_SIZE(k_hippy) - 1}}, // NOLINT {"ExceptionHandle.js", {k_ExceptionHandle, ARRAY_SIZE(k_ExceptionHandle) - 1}}, // NOLINT + {"ErrorHandle.js", {k_ErrorHandle, ARRAY_SIZE(k_ErrorHandle) - 1}}, // NOLINT {"Others.js", {k_Others, ARRAY_SIZE(k_Others) - 1}}, // NOLINT {"DynamicLoad.js", {k_DynamicLoad, ARRAY_SIZE(k_DynamicLoad) - 1}}, // NOLINT {"Platform.js", {k_Platform, ARRAY_SIZE(k_Platform) - 1}}, // NOLINT diff --git a/driver/js/src/vm/v8/native_source_code_android.cc b/driver/js/src/vm/v8/native_source_code_android.cc index ffc4858e4ce..cf995ab667b 100644 --- a/driver/js/src/vm/v8/native_source_code_android.cc +++ b/driver/js/src/vm/v8/native_source_code_android.cc @@ -29,7 +29,8 @@ namespace { const uint8_t k_bootstrap[] = { 40,102,117,110,99,116,105,111,110,32,40,103,101,116,73,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,10,32,32,103,108,111,98,97,108,46,72,105,112,112,121,32,61,32,103,108,111,98,97,108,46,72,105,112,112,121,32,124,124,32,123,125,59,10,32,32,99,111,110,115,116,32,98,105,110,100,105,110,103,79,98,106,32,61,32,123,125,59,10,32,32,99,111,110,115,116,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,32,61,32,102,117,110,99,116,105,111,110,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,109,111,100,117,108,101,41,32,123,10,32,32,32,32,105,102,32,40,116,121,112,101,111,102,32,98,105,110,100,105,110,103,79,98,106,91,109,111,100,117,108,101,93,32,33,61,61,32,39,111,98,106,101,99,116,39,41,32,123,10,32,32,32,32,32,32,98,105,110,100,105,110,103,79,98,106,91,109,111,100,117,108,101,93,32,61,32,103,101,116,73,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,109,111,100,117,108,101,41,59,10,32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,32,98,105,110,100,105,110,103,79,98,106,91,109,111,100,117,108,101,93,59,10,32,32,125,59,10,32,32,99,111,110,115,116,32,67,111,110,116,101,120,116,105,102,121,83,99,114,105,112,116,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,39,41,59,10,32,32,99,108,97,115,115,32,78,97,116,105,118,101,77,111,100,117,108,101,32,123,10,32,32,32,32,99,111,110,115,116,114,117,99,116,111,114,40,102,105,108,101,110,97,109,101,41,32,123,10,32,32,32,32,32,32,116,104,105,115,46,102,105,108,101,110,97,109,101,32,61,32,102,105,108,101,110,97,109,101,59,10,32,32,32,32,32,32,116,104,105,115,46,101,120,112,111,114,116,115,32,61,32,123,125,59,10,32,32,32,32,125,10,32,32,32,32,115,116,97,116,105,99,32,114,101,113,117,105,114,101,40,102,105,108,101,80,97,116,104,41,32,123,10,32,32,32,32,32,32,99,111,110,115,116,32,102,105,108,101,80,97,116,104,65,114,114,32,61,32,102,105,108,101,80,97,116,104,46,115,112,108,105,116,40,39,47,39,41,59,10,32,32,32,32,32,32,99,111,110,115,116,32,102,105,108,101,110,97,109,101,32,61,32,102,105,108,101,80,97,116,104,65,114,114,91,102,105,108,101,80,97,116,104,65,114,114,46,108,101,110,103,116,104,32,45,32,49,93,59,10,32,32,32,32,32,32,99,111,110,115,116,32,99,97,99,104,101,100,32,61,32,78,97,116,105,118,101,77,111,100,117,108,101,46,99,97,99,104,101,91,102,105,108,101,110,97,109,101,93,59,10,32,32,32,32,32,32,105,102,32,40,99,97,99,104,101,100,41,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,97,99,104,101,100,46,101,120,112,111,114,116,115,59,10,32,32,32,32,32,32,125,10,32,32,32,32,32,32,99,111,110,115,116,32,110,97,116,105,118,101,77,111,100,117,108,101,32,61,32,110,101,119,32,78,97,116,105,118,101,77,111,100,117,108,101,40,102,105,108,101,110,97,109,101,41,59,10,32,32,32,32,32,32,110,97,116,105,118,101,77,111,100,117,108,101,46,99,97,99,104,101,40,41,59,10,32,32,32,32,32,32,110,97,116,105,118,101,77,111,100,117,108,101,46,99,111,109,112,105,108,101,40,41,59,10,32,32,32,32,32,32,114,101,116,117,114,110,32,110,97,116,105,118,101,77,111,100,117,108,101,46,101,120,112,111,114,116,115,59,10,32,32,32,32,125,10,32,32,32,32,99,111,109,112,105,108,101,40,41,32,123,10,32,32,32,32,32,32,99,111,110,115,116,32,102,110,32,61,32,67,111,110,116,101,120,116,105,102,121,83,99,114,105,112,116,46,82,117,110,73,110,84,104,105,115,67,111,110,116,101,120,116,40,116,104,105,115,46,102,105,108,101,110,97,109,101,41,59,10,32,32,32,32,32,32,102,110,40,116,104,105,115,46,101,120,112,111,114,116,115,44,32,78,97,116,105,118,101,77,111,100,117,108,101,46,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,59,10,32,32,32,32,125,10,32,32,32,32,99,97,99,104,101,40,41,32,123,10,32,32,32,32,32,32,78,97,116,105,118,101,77,111,100,117,108,101,46,99,97,99,104,101,91,116,104,105,115,46,102,105,108,101,110,97,109,101,93,32,61,32,116,104,105,115,59,10,32,32,32,32,125,10,32,32,125,10,32,32,78,97,116,105,118,101,77,111,100,117,108,101,46,99,97,99,104,101,32,61,32,123,125,59,10,32,32,78,97,116,105,118,101,77,111,100,117,108,101,46,114,101,113,117,105,114,101,40,39,104,105,112,112,121,46,106,115,39,41,59,10,125,41,59,0 }; // NOLINT const uint8_t k_hippy[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,79,116,104,101,114,115,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,68,121,110,97,109,105,99,76,111,97,100,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,80,108,97,116,102,111,114,109,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,98,114,105,100,103,101,47,97,110,100,114,111,105,100,47,106,115,50,110,97,116,105,118,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,84,105,109,101,114,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,67,111,110,115,111,108,101,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,78,101,116,119,111,114,107,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,83,116,111,114,97,103,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,68,105,109,101,110,115,105,111,110,115,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,85,116,105,108,115,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,97,110,100,114,111,105,100,47,103,108,111,98,97,108,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,98,114,105,100,103,101,47,97,110,100,114,111,105,100,47,110,97,116,105,118,101,50,106,115,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,69,118,101,110,116,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,65,110,105,109,97,116,105,111,110,70,114,97,109,101,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,97,110,100,114,111,105,100,47,84,117,114,98,111,46,106,115,39,41,59,10,103,108,111,98,97,108,46,108,111,99,97,108,83,116,111,114,97,103,101,32,61,32,72,105,112,112,121,46,97,115,121,110,99,83,116,111,114,97,103,101,59,10,103,108,111,98,97,108,46,116,117,114,98,111,80,114,111,109,105,115,101,32,61,32,72,105,112,112,121,46,116,117,114,98,111,80,114,111,109,105,115,101,59,125,41,59,0 }; // NOLINT const uint8_t k_ExceptionHandle[] = { 40,102,117,110,99,116,105,111,110,32,101,120,99,101,112,116,105,111,110,72,97,110,100,108,101,114,40,101,118,101,110,116,78,97,109,101,44,32,101,114,114,41,32,123,10,32,32,105,102,32,40,103,108,111,98,97,108,46,72,105,112,112,121,41,32,123,10,32,32,32,32,103,108,111,98,97,108,46,72,105,112,112,121,46,101,109,105,116,40,39,117,110,99,97,117,103,104,116,69,120,99,101,112,116,105,111,110,39,44,32,101,114,114,41,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,118,101,110,116,78,97,109,101,44,32,101,114,114,41,59,10,32,32,125,10,125,41,59,0 }; // NOLINT - const uint8_t k_Others[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,103,108,111,98,97,108,46,95,95,73,83,72,73,80,80,89,95,95,32,61,32,116,114,117,101,59,10,103,108,111,98,97,108,46,95,95,71,76,79,66,65,76,95,95,32,61,32,123,10,32,32,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,58,32,123,125,10,125,59,10,102,117,110,99,116,105,111,110,32,104,105,112,112,121,82,101,103,105,115,116,101,114,40,97,112,112,78,97,109,101,44,32,101,110,116,114,121,70,117,110,99,41,32,123,10,32,32,95,95,71,76,79,66,65,76,95,95,46,97,112,112,82,101,103,105,115,116,101,114,91,97,112,112,78,97,109,101,93,32,61,32,123,10,32,32,32,32,114,117,110,58,32,101,110,116,114,121,70,117,110,99,10,32,32,125,59,10,125,10,102,117,110,99,116,105,111,110,32,111,110,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,110,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,32,97,110,100,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,125,10,32,32,108,101,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,32,61,32,110,101,119,32,83,101,116,40,41,59,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,97,100,100,40,108,105,115,116,101,110,101,114,41,59,10,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,125,10,102,117,110,99,116,105,111,110,32,111,102,102,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,102,102,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,32,32,125,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,100,101,108,101,116,101,40,108,105,115,116,101,110,101,114,41,59,10,32,32,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,99,108,101,97,114,40,41,59,10,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,125,10,102,117,110,99,116,105,111,110,32,101,109,105,116,40,101,118,101,110,116,78,97,109,101,44,32,46,46,46,97,114,103,115,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,101,118,101,110,116,76,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,105,102,32,40,101,118,101,110,116,78,97,109,101,32,61,61,61,32,39,117,110,99,97,117,103,104,116,69,120,99,101,112,116,105,111,110,39,32,38,38,32,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,59,10,32,32,125,10,32,32,116,114,121,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,108,105,115,116,101,110,101,114,32,61,62,32,108,105,115,116,101,110,101,114,40,46,46,46,97,114,103,115,41,41,59,10,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,125,10,125,10,72,105,112,112,121,46,100,101,118,105,99,101,32,61,32,123,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,32,61,32,123,125,59,10,72,105,112,112,121,46,114,101,103,105,115,116,101,114,32,61,32,123,10,32,32,114,101,103,105,115,116,58,32,104,105,112,112,121,82,101,103,105,115,116,101,114,10,125,59,10,72,105,112,112,121,46,111,110,32,61,32,111,110,59,10,72,105,112,112,121,46,111,102,102,32,61,32,111,102,102,59,10,72,105,112,112,121,46,101,109,105,116,32,61,32,101,109,105,116,59,125,41,59,0 }; // NOLINT + const uint8_t k_ErrorHandle[] = { 40,102,117,110,99,116,105,111,110,32,101,114,114,111,114,72,97,110,100,108,101,114,40,101,118,101,110,116,44,32,115,111,117,114,99,101,44,32,108,105,110,101,110,111,44,32,99,111,108,110,111,44,32,101,114,114,111,114,41,32,123,10,32,32,105,102,32,40,103,108,111,98,97,108,46,72,105,112,112,121,41,32,123,10,32,32,32,32,103,108,111,98,97,108,46,72,105,112,112,121,46,101,109,105,116,69,114,114,111,114,40,101,118,101,110,116,44,32,115,111,117,114,99,101,44,32,108,105,110,101,110,111,44,32,99,111,108,110,111,44,32,101,114,114,111,114,41,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,125,10,125,41,59,0 }; // NOLINT + const uint8_t k_Others[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,103,108,111,98,97,108,46,95,95,73,83,72,73,80,80,89,95,95,32,61,32,116,114,117,101,59,10,103,108,111,98,97,108,46,95,95,71,76,79,66,65,76,95,95,32,61,32,123,10,32,32,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,58,32,123,125,44,10,32,32,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,58,32,91,93,10,125,59,10,99,108,97,115,115,32,69,114,114,111,114,69,118,101,110,116,32,123,10,32,32,99,111,110,115,116,114,117,99,116,111,114,40,109,101,115,115,97,103,101,44,32,102,105,108,101,110,97,109,101,44,32,108,105,110,101,110,111,44,32,99,111,108,110,111,44,32,101,114,114,111,114,41,32,123,10,32,32,32,32,116,104,105,115,46,109,101,115,115,97,103,101,32,61,32,109,101,115,115,97,103,101,59,10,32,32,32,32,116,104,105,115,46,102,105,108,101,110,97,109,101,32,61,32,102,105,108,101,110,97,109,101,59,10,32,32,32,32,116,104,105,115,46,108,105,110,101,110,111,32,61,32,108,105,110,101,110,111,59,10,32,32,32,32,116,104,105,115,46,99,111,108,110,111,32,61,32,99,111,108,110,111,59,10,32,32,32,32,116,104,105,115,46,101,114,114,111,114,32,61,32,101,114,114,111,114,59,10,32,32,125,10,125,10,102,117,110,99,116,105,111,110,32,104,105,112,112,121,82,101,103,105,115,116,101,114,40,97,112,112,78,97,109,101,44,32,101,110,116,114,121,70,117,110,99,41,32,123,10,32,32,95,95,71,76,79,66,65,76,95,95,46,97,112,112,82,101,103,105,115,116,101,114,91,97,112,112,78,97,109,101,93,32,61,32,123,10,32,32,32,32,114,117,110,58,32,101,110,116,114,121,70,117,110,99,10,32,32,125,59,10,125,10,102,117,110,99,116,105,111,110,32,111,110,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,110,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,32,97,110,100,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,125,10,32,32,108,101,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,32,61,32,110,101,119,32,83,101,116,40,41,59,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,97,100,100,40,108,105,115,116,101,110,101,114,41,59,10,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,125,10,102,117,110,99,116,105,111,110,32,111,102,102,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,102,102,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,32,32,125,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,100,101,108,101,116,101,40,108,105,115,116,101,110,101,114,41,59,10,32,32,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,99,108,101,97,114,40,41,59,10,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,125,10,102,117,110,99,116,105,111,110,32,101,109,105,116,40,101,118,101,110,116,78,97,109,101,44,32,46,46,46,97,114,103,115,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,101,118,101,110,116,76,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,105,102,32,40,101,118,101,110,116,78,97,109,101,32,61,61,61,32,39,117,110,99,97,117,103,104,116,69,120,99,101,112,116,105,111,110,39,32,38,38,32,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,59,10,32,32,125,10,32,32,116,114,121,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,108,105,115,116,101,110,101,114,32,61,62,32,108,105,115,116,101,110,101,114,40,46,46,46,97,114,103,115,41,41,59,10,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,125,10,125,10,79,98,106,101,99,116,46,100,101,102,105,110,101,80,114,111,112,101,114,116,121,40,72,105,112,112,121,44,32,39,111,110,101,114,114,111,114,39,44,32,123,10,32,32,103,101,116,58,32,102,117,110,99,116,105,111,110,32,40,41,32,123,10,32,32,32,32,108,101,116,32,108,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,59,10,32,32,32,32,114,101,116,117,114,110,32,108,105,115,116,101,110,101,114,115,46,108,101,110,103,116,104,32,62,32,48,32,63,32,108,105,115,116,101,110,101,114,115,46,115,108,105,99,101,40,45,49,41,32,58,32,110,117,108,108,59,10,32,32,125,44,10,32,32,115,101,116,58,32,102,117,110,99,116,105,111,110,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,105,102,32,40,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,110,101,114,114,111,114,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,32,32,125,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,32,61,32,91,93,59,10,32,32,32,32,108,101,116,32,108,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,59,10,32,32,32,32,108,105,115,116,101,110,101,114,115,46,112,117,115,104,40,108,105,115,116,101,110,101,114,41,59,10,32,32,125,10,125,41,59,10,102,117,110,99,116,105,111,110,32,101,109,105,116,69,114,114,111,114,40,46,46,46,97,114,103,115,41,32,123,10,32,32,105,102,32,40,97,114,103,115,46,108,101,110,103,116,104,32,33,61,61,32,53,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,69,114,114,111,114,32,111,110,108,121,32,97,99,99,101,112,116,32,53,32,112,97,114,97,109,115,39,41,59,10,32,32,125,10,32,32,108,101,116,32,101,114,114,79,98,106,32,61,32,110,101,119,32,69,114,114,111,114,40,41,59,10,32,32,101,114,114,79,98,106,46,109,101,115,115,97,103,101,32,61,32,74,83,79,78,46,115,116,114,105,110,103,105,102,121,40,97,114,103,115,91,52,93,41,59,10,32,32,99,111,110,115,116,32,108,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,59,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,116,114,121,32,123,10,32,32,32,32,32,32,108,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,108,105,115,116,101,110,101,114,32,61,62,32,108,105,115,116,101,110,101,114,40,97,114,103,115,91,48,93,44,32,97,114,103,115,91,49,93,44,32,97,114,103,115,91,50,93,44,32,97,114,103,115,91,51,93,44,32,101,114,114,79,98,106,41,41,59,10,32,32,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,32,32,125,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,105,102,32,40,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,78,97,109,101,32,61,32,39,101,114,114,111,114,39,59,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,116,114,121,32,123,10,32,32,32,32,32,32,108,101,116,32,101,118,101,110,116,32,61,32,110,101,119,32,69,114,114,111,114,69,118,101,110,116,40,97,114,103,115,91,48,93,44,32,97,114,103,115,91,49,93,44,32,97,114,103,115,91,50,93,44,32,97,114,103,115,91,51,93,44,32,101,114,114,79,98,106,41,59,10,32,32,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,108,105,115,116,101,110,101,114,32,61,62,32,108,105,115,116,101,110,101,114,40,101,118,101,110,116,41,41,59,10,32,32,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,32,32,125,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,105,102,32,40,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,125,10,125,10,102,117,110,99,116,105,111,110,32,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,32,97,110,100,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,125,10,32,32,108,101,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,32,61,32,110,101,119,32,83,101,116,40,41,59,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,97,100,100,40,108,105,115,116,101,110,101,114,41,59,10,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,125,10,102,117,110,99,116,105,111,110,32,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,32,32,125,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,100,101,108,101,116,101,40,108,105,115,116,101,110,101,114,41,59,10,32,32,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,99,108,101,97,114,40,41,59,10,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,125,10,72,105,112,112,121,46,100,101,118,105,99,101,32,61,32,123,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,32,61,32,123,125,59,10,72,105,112,112,121,46,114,101,103,105,115,116,101,114,32,61,32,123,10,32,32,114,101,103,105,115,116,58,32,104,105,112,112,121,82,101,103,105,115,116,101,114,10,125,59,10,72,105,112,112,121,46,111,110,32,61,32,111,110,59,10,72,105,112,112,121,46,111,102,102,32,61,32,111,102,102,59,10,72,105,112,112,121,46,101,109,105,116,32,61,32,101,109,105,116,59,10,72,105,112,112,121,46,101,109,105,116,69,114,114,111,114,32,61,32,101,109,105,116,69,114,114,111,114,59,10,72,105,112,112,121,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,32,61,32,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,59,10,72,105,112,112,121,46,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,32,61,32,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,59,125,41,59,0 }; // NOLINT const uint8_t k_DynamicLoad[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,39,41,59,10,103,108,111,98,97,108,46,100,121,110,97,109,105,99,76,111,97,100,32,61,32,40,112,97,116,104,44,32,101,110,99,111,100,101,44,32,99,98,41,32,61,62,32,123,10,32,32,108,101,116,32,114,101,113,117,101,115,116,80,97,116,104,32,61,32,112,97,116,104,32,124,124,32,39,39,59,10,32,32,99,111,110,115,116,32,105,115,83,99,104,101,109,97,32,61,32,47,94,40,46,43,58,92,47,92,47,41,124,94,40,92,47,92,47,41,47,46,116,101,115,116,40,112,97,116,104,41,59,10,32,32,105,102,32,40,33,105,115,83,99,104,101,109,97,41,32,123,10,32,32,32,32,114,101,113,117,101,115,116,80,97,116,104,32,61,32,103,108,111,98,97,108,46,95,95,72,73,80,80,89,67,85,82,68,73,82,95,95,32,43,32,112,97,116,104,59,10,32,32,125,10,32,32,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,46,76,111,97,100,85,110,116,114,117,115,116,101,100,67,111,110,116,101,110,116,40,114,101,113,117,101,115,116,80,97,116,104,44,32,101,110,99,111,100,101,44,32,99,98,41,59,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_Platform[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,32,61,32,123,125,59,10,105,102,32,40,116,121,112,101,111,102,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,32,33,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,99,111,110,115,116,32,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,123,10,32,32,32,32,99,111,117,110,116,114,121,58,32,39,39,44,10,32,32,32,32,108,97,110,103,117,97,103,101,58,32,39,39,44,10,32,32,32,32,100,105,114,101,99,116,105,111,110,58,32,48,10,32,32,125,59,10,32,32,105,102,32,40,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,32,61,61,61,32,39,105,111,115,39,41,32,123,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,68,101,118,105,99,101,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,68,101,118,105,99,101,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,83,68,75,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,76,111,99,97,108,105,122,97,116,105,111,110,32,124,124,32,76,111,99,97,108,105,122,97,116,105,111,110,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,79,83,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,65,80,73,76,101,118,101,108,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,65,80,73,76,101,118,101,108,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,124,124,32,76,111,99,97,108,105,122,97,116,105,111,110,59,10,32,32,125,10,125,125,41,59,0 }; // NOLINT const uint8_t k_UIManagerModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,39,41,59,10,72,105,112,112,121,46,100,111,99,117,109,101,110,116,32,61,32,123,10,32,32,99,114,101,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,117,112,100,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,100,101,108,101,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,102,108,117,115,104,66,97,116,99,104,40,41,32,123,125,44,10,32,32,101,110,100,66,97,116,99,104,40,41,32,123,125,44,10,32,32,99,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,32,123,10,32,32,32,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,46,67,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,59,10,32,32,125,44,10,32,32,115,101,110,100,82,101,110,100,101,114,69,114,114,111,114,40,101,114,114,111,114,41,32,123,10,32,32,32,32,105,102,32,40,101,114,114,111,114,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,101,114,114,111,114,59,10,32,32,32,32,125,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT @@ -54,6 +55,7 @@ static const std::unordered_map global_base_js_so {"bootstrap.js", {k_bootstrap, ARRAY_SIZE(k_bootstrap) - 1}}, // NOLINT {"hippy.js", {k_hippy, ARRAY_SIZE(k_hippy) - 1}}, // NOLINT {"ExceptionHandle.js", {k_ExceptionHandle, ARRAY_SIZE(k_ExceptionHandle) - 1}}, // NOLINT + {"ErrorHandle.js", {k_ErrorHandle, ARRAY_SIZE(k_ErrorHandle) - 1}}, // NOLINT {"Others.js", {k_Others, ARRAY_SIZE(k_Others) - 1}}, // NOLINT {"DynamicLoad.js", {k_DynamicLoad, ARRAY_SIZE(k_DynamicLoad) - 1}}, // NOLINT {"Platform.js", {k_Platform, ARRAY_SIZE(k_Platform) - 1}}, // NOLINT diff --git a/framework/android/connector/driver/js/src/main/cpp/include/connector/js_driver_jni.h b/framework/android/connector/driver/js/src/main/cpp/include/connector/js_driver_jni.h index 522e7d28632..4453791006e 100644 --- a/framework/android/connector/driver/js/src/main/cpp/include/connector/js_driver_jni.h +++ b/framework/android/connector/driver/js/src/main/cpp/include/connector/js_driver_jni.h @@ -90,6 +90,8 @@ void OnFirstFrameEnd(JNIEnv* j_env, jobject j_object, jint j_scope_id, jlong tim void OnResourceLoadEnd(JNIEnv* j_env, jobject j_object, jint j_scope_id, jstring j_uri, jlong j_start_time, jlong j_end_time); +void OnResourceLoadError(JNIEnv* j_env, jobject j_object, jint j_scope_id, jstring j_uri, jlong j_ret_code, jstring j_error_msg); + } } } diff --git a/framework/android/connector/driver/js/src/main/cpp/src/js_driver_jni.cc b/framework/android/connector/driver/js/src/main/cpp/src/js_driver_jni.cc index cfaed8999e2..39141469748 100644 --- a/framework/android/connector/driver/js/src/main/cpp/src/js_driver_jni.cc +++ b/framework/android/connector/driver/js/src/main/cpp/src/js_driver_jni.cc @@ -117,6 +117,11 @@ REGISTER_JNI("com/openhippy/connector/JsDriver", // NOLINT(cert-err58-cpp) "(ILjava/lang/String;JJ)V", OnResourceLoadEnd) +REGISTER_JNI("com/openhippy/connector/JsDriver", // NOLINT(cert-err58-cpp) + "onResourceLoadError", + "(ILjava/lang/String;JLjava/lang/String;)V", + OnResourceLoadError) + using string_view = footstone::stringview::string_view; using u8string = footstone::string_view::u8string; using StringViewUtils = footstone::stringview::StringViewUtils; @@ -211,6 +216,27 @@ void OnResourceLoadEnd(JNIEnv* j_env, jobject j_object, jint j_scope_id, jstring } } +void OnResourceLoadError(JNIEnv* j_env, jobject j_object, jint j_scope_id, jstring j_uri, jlong j_ret_code, jstring j_error_msg) { + if (!j_uri) { + return; + } + auto uri = JniUtils::ToStrView(j_env, j_uri); + auto ret_code = static_cast(j_ret_code); + auto error_msg = j_error_msg ? JniUtils::ToStrView(j_env, j_error_msg) : string_view(""); + auto scope = GetScope(j_scope_id); + auto runner = scope->GetEngine().lock()->GetJsTaskRunner(); + if (runner) { + std::weak_ptr weak_scope = scope; + auto task = [weak_scope, uri, ret_code, error_msg]() { + auto scope = weak_scope.lock(); + if (scope) { + scope->HandleUriLoaderError(uri, ret_code, error_msg); + } + }; + runner->PostTask(std::move(task)); + } +} + jint CreateJsDriver(JNIEnv* j_env, jobject j_object, jbyteArray j_global_config, diff --git a/framework/android/connector/driver/js/src/main/java/com/openhippy/connector/JsDriver.java b/framework/android/connector/driver/js/src/main/java/com/openhippy/connector/JsDriver.java index 560633b5f86..3e912e3a89c 100644 --- a/framework/android/connector/driver/js/src/main/java/com/openhippy/connector/JsDriver.java +++ b/framework/android/connector/driver/js/src/main/java/com/openhippy/connector/JsDriver.java @@ -81,6 +81,10 @@ public void recordResourceLoadEndTime(@NonNull String uri, long startTime, long onResourceLoadEnd(mInstanceId, uri, startTime, endTime); } + public void recordResourceLoadError(@NonNull String uri, long retCode, String errorMsg) { + onResourceLoadError(mInstanceId, uri, retCode, errorMsg); + } + public void onResourceReady(ByteBuffer output, long resId) { onResourceReady(mInstanceId, output, resId); } @@ -166,4 +170,6 @@ private native void callFunction(int instanceId, String action, NativeCallback c private native void onFirstFrameEnd(int instanceId, long time); private native void onResourceLoadEnd(int instanceId, String uri, long startTime, long endTime); + + private native void onResourceLoadError(int instanceId, String uri, long retCode, String errorMsg); } diff --git a/framework/android/src/main/java/com/tencent/mtt/hippy/PerformanceProcessor.java b/framework/android/src/main/java/com/tencent/mtt/hippy/PerformanceProcessor.java index f2bb7ce0de8..28d6b05056a 100644 --- a/framework/android/src/main/java/com/tencent/mtt/hippy/PerformanceProcessor.java +++ b/framework/android/src/main/java/com/tencent/mtt/hippy/PerformanceProcessor.java @@ -60,6 +60,10 @@ public void handleResponseAsync(@NonNull ResourceDataHolder holder, if (shouldDoRecord(holder) && engineContext != null) { engineContext.getJsDriver().recordResourceLoadEndTime(holder.uri, holder.loadStartTime, System.currentTimeMillis()); + if (holder.resultCode != 0) { + engineContext.getJsDriver().recordResourceLoadError(holder.uri, holder.resultCode, + holder.errorMessage); + } } super.handleResponseAsync(holder, callback); } @@ -70,6 +74,10 @@ public void handleResponseSync(@NonNull ResourceDataHolder holder) { if (shouldDoRecord(holder) && engineContext != null) { engineContext.getJsDriver().recordResourceLoadEndTime(holder.uri, holder.loadStartTime, System.currentTimeMillis()); + if (holder.resultCode != 0) { + engineContext.getJsDriver().recordResourceLoadError(holder.uri, holder.resultCode, + holder.errorMessage); + } } super.handleResponseSync(holder); } diff --git a/framework/voltron/core/src/bridge/native_source_code_flutter.cc b/framework/voltron/core/src/bridge/native_source_code_flutter.cc index 8454e18acaa..3e58257b192 100644 --- a/framework/voltron/core/src/bridge/native_source_code_flutter.cc +++ b/framework/voltron/core/src/bridge/native_source_code_flutter.cc @@ -29,7 +29,8 @@ namespace { const uint8_t k_bootstrap[] = { 40,102,117,110,99,116,105,111,110,32,40,103,101,116,73,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,10,32,32,103,108,111,98,97,108,46,72,105,112,112,121,32,61,32,103,108,111,98,97,108,46,72,105,112,112,121,32,124,124,32,123,125,59,10,32,32,99,111,110,115,116,32,98,105,110,100,105,110,103,79,98,106,32,61,32,123,125,59,10,32,32,99,111,110,115,116,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,32,61,32,102,117,110,99,116,105,111,110,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,109,111,100,117,108,101,41,32,123,10,32,32,32,32,105,102,32,40,116,121,112,101,111,102,32,98,105,110,100,105,110,103,79,98,106,91,109,111,100,117,108,101,93,32,33,61,61,32,39,111,98,106,101,99,116,39,41,32,123,10,32,32,32,32,32,32,98,105,110,100,105,110,103,79,98,106,91,109,111,100,117,108,101,93,32,61,32,103,101,116,73,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,109,111,100,117,108,101,41,59,10,32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,32,98,105,110,100,105,110,103,79,98,106,91,109,111,100,117,108,101,93,59,10,32,32,125,59,10,32,32,99,111,110,115,116,32,67,111,110,116,101,120,116,105,102,121,83,99,114,105,112,116,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,39,41,59,10,32,32,99,108,97,115,115,32,78,97,116,105,118,101,77,111,100,117,108,101,32,123,10,32,32,32,32,99,111,110,115,116,114,117,99,116,111,114,40,102,105,108,101,110,97,109,101,41,32,123,10,32,32,32,32,32,32,116,104,105,115,46,102,105,108,101,110,97,109,101,32,61,32,102,105,108,101,110,97,109,101,59,10,32,32,32,32,32,32,116,104,105,115,46,101,120,112,111,114,116,115,32,61,32,123,125,59,10,32,32,32,32,125,10,32,32,32,32,115,116,97,116,105,99,32,114,101,113,117,105,114,101,40,102,105,108,101,80,97,116,104,41,32,123,10,32,32,32,32,32,32,99,111,110,115,116,32,102,105,108,101,80,97,116,104,65,114,114,32,61,32,102,105,108,101,80,97,116,104,46,115,112,108,105,116,40,39,47,39,41,59,10,32,32,32,32,32,32,99,111,110,115,116,32,102,105,108,101,110,97,109,101,32,61,32,102,105,108,101,80,97,116,104,65,114,114,91,102,105,108,101,80,97,116,104,65,114,114,46,108,101,110,103,116,104,32,45,32,49,93,59,10,32,32,32,32,32,32,99,111,110,115,116,32,99,97,99,104,101,100,32,61,32,78,97,116,105,118,101,77,111,100,117,108,101,46,99,97,99,104,101,91,102,105,108,101,110,97,109,101,93,59,10,32,32,32,32,32,32,105,102,32,40,99,97,99,104,101,100,41,32,123,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,99,97,99,104,101,100,46,101,120,112,111,114,116,115,59,10,32,32,32,32,32,32,125,10,32,32,32,32,32,32,99,111,110,115,116,32,110,97,116,105,118,101,77,111,100,117,108,101,32,61,32,110,101,119,32,78,97,116,105,118,101,77,111,100,117,108,101,40,102,105,108,101,110,97,109,101,41,59,10,32,32,32,32,32,32,110,97,116,105,118,101,77,111,100,117,108,101,46,99,97,99,104,101,40,41,59,10,32,32,32,32,32,32,110,97,116,105,118,101,77,111,100,117,108,101,46,99,111,109,112,105,108,101,40,41,59,10,32,32,32,32,32,32,114,101,116,117,114,110,32,110,97,116,105,118,101,77,111,100,117,108,101,46,101,120,112,111,114,116,115,59,10,32,32,32,32,125,10,32,32,32,32,99,111,109,112,105,108,101,40,41,32,123,10,32,32,32,32,32,32,99,111,110,115,116,32,102,110,32,61,32,67,111,110,116,101,120,116,105,102,121,83,99,114,105,112,116,46,82,117,110,73,110,84,104,105,115,67,111,110,116,101,120,116,40,116,104,105,115,46,102,105,108,101,110,97,109,101,41,59,10,32,32,32,32,32,32,102,110,40,116,104,105,115,46,101,120,112,111,114,116,115,44,32,78,97,116,105,118,101,77,111,100,117,108,101,46,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,59,10,32,32,32,32,125,10,32,32,32,32,99,97,99,104,101,40,41,32,123,10,32,32,32,32,32,32,78,97,116,105,118,101,77,111,100,117,108,101,46,99,97,99,104,101,91,116,104,105,115,46,102,105,108,101,110,97,109,101,93,32,61,32,116,104,105,115,59,10,32,32,32,32,125,10,32,32,125,10,32,32,78,97,116,105,118,101,77,111,100,117,108,101,46,99,97,99,104,101,32,61,32,123,125,59,10,32,32,78,97,116,105,118,101,77,111,100,117,108,101,46,114,101,113,117,105,114,101,40,39,104,105,112,112,121,46,106,115,39,41,59,10,125,41,59,0 }; // NOLINT const uint8_t k_hippy[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,79,116,104,101,114,115,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,68,121,110,97,109,105,99,76,111,97,100,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,80,108,97,116,102,111,114,109,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,98,114,105,100,103,101,47,102,108,117,116,116,101,114,47,106,115,50,110,97,116,105,118,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,84,105,109,101,114,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,67,111,110,115,111,108,101,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,78,101,116,119,111,114,107,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,83,116,111,114,97,103,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,102,108,117,116,116,101,114,47,68,105,109,101,110,115,105,111,110,115,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,85,116,105,108,115,77,111,100,117,108,101,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,102,108,117,116,116,101,114,47,103,108,111,98,97,108,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,98,114,105,100,103,101,47,102,108,117,116,116,101,114,47,110,97,116,105,118,101,50,106,115,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,69,118,101,110,116,46,106,115,39,41,59,10,114,101,113,117,105,114,101,40,39,46,46,47,46,46,47,103,108,111,98,97,108,47,65,110,105,109,97,116,105,111,110,70,114,97,109,101,77,111,100,117,108,101,46,106,115,39,41,59,10,103,108,111,98,97,108,46,108,111,99,97,108,83,116,111,114,97,103,101,32,61,32,72,105,112,112,121,46,97,115,121,110,99,83,116,111,114,97,103,101,59,125,41,59,0 }; // NOLINT const uint8_t k_ExceptionHandle[] = { 40,102,117,110,99,116,105,111,110,32,101,120,99,101,112,116,105,111,110,72,97,110,100,108,101,114,40,101,118,101,110,116,78,97,109,101,44,32,101,114,114,41,32,123,10,32,32,105,102,32,40,103,108,111,98,97,108,46,72,105,112,112,121,41,32,123,10,32,32,32,32,103,108,111,98,97,108,46,72,105,112,112,121,46,101,109,105,116,40,39,117,110,99,97,117,103,104,116,69,120,99,101,112,116,105,111,110,39,44,32,101,114,114,41,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,118,101,110,116,78,97,109,101,44,32,101,114,114,41,59,10,32,32,125,10,125,41,59,0 }; // NOLINT - const uint8_t k_Others[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,103,108,111,98,97,108,46,95,95,73,83,72,73,80,80,89,95,95,32,61,32,116,114,117,101,59,10,103,108,111,98,97,108,46,95,95,71,76,79,66,65,76,95,95,32,61,32,123,10,32,32,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,58,32,123,125,10,125,59,10,102,117,110,99,116,105,111,110,32,104,105,112,112,121,82,101,103,105,115,116,101,114,40,97,112,112,78,97,109,101,44,32,101,110,116,114,121,70,117,110,99,41,32,123,10,32,32,95,95,71,76,79,66,65,76,95,95,46,97,112,112,82,101,103,105,115,116,101,114,91,97,112,112,78,97,109,101,93,32,61,32,123,10,32,32,32,32,114,117,110,58,32,101,110,116,114,121,70,117,110,99,10,32,32,125,59,10,125,10,102,117,110,99,116,105,111,110,32,111,110,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,110,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,32,97,110,100,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,125,10,32,32,108,101,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,32,61,32,110,101,119,32,83,101,116,40,41,59,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,97,100,100,40,108,105,115,116,101,110,101,114,41,59,10,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,125,10,102,117,110,99,116,105,111,110,32,111,102,102,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,102,102,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,32,32,125,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,100,101,108,101,116,101,40,108,105,115,116,101,110,101,114,41,59,10,32,32,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,99,108,101,97,114,40,41,59,10,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,125,10,102,117,110,99,116,105,111,110,32,101,109,105,116,40,101,118,101,110,116,78,97,109,101,44,32,46,46,46,97,114,103,115,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,101,118,101,110,116,76,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,105,102,32,40,101,118,101,110,116,78,97,109,101,32,61,61,61,32,39,117,110,99,97,117,103,104,116,69,120,99,101,112,116,105,111,110,39,32,38,38,32,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,59,10,32,32,125,10,32,32,116,114,121,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,108,105,115,116,101,110,101,114,32,61,62,32,108,105,115,116,101,110,101,114,40,46,46,46,97,114,103,115,41,41,59,10,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,125,10,125,10,72,105,112,112,121,46,100,101,118,105,99,101,32,61,32,123,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,32,61,32,123,125,59,10,72,105,112,112,121,46,114,101,103,105,115,116,101,114,32,61,32,123,10,32,32,114,101,103,105,115,116,58,32,104,105,112,112,121,82,101,103,105,115,116,101,114,10,125,59,10,72,105,112,112,121,46,111,110,32,61,32,111,110,59,10,72,105,112,112,121,46,111,102,102,32,61,32,111,102,102,59,10,72,105,112,112,121,46,101,109,105,116,32,61,32,101,109,105,116,59,125,41,59,0 }; // NOLINT + const uint8_t k_ErrorHandle[] = { 40,102,117,110,99,116,105,111,110,32,101,114,114,111,114,72,97,110,100,108,101,114,40,101,118,101,110,116,44,32,115,111,117,114,99,101,44,32,108,105,110,101,110,111,44,32,99,111,108,110,111,44,32,101,114,114,111,114,41,32,123,10,32,32,105,102,32,40,103,108,111,98,97,108,46,72,105,112,112,121,41,32,123,10,32,32,32,32,103,108,111,98,97,108,46,72,105,112,112,121,46,101,109,105,116,69,114,114,111,114,40,101,118,101,110,116,44,32,115,111,117,114,99,101,44,32,108,105,110,101,110,111,44,32,99,111,108,110,111,44,32,101,114,114,111,114,41,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,125,10,125,41,59,0 }; // NOLINT + const uint8_t k_Others[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,103,108,111,98,97,108,46,95,95,73,83,72,73,80,80,89,95,95,32,61,32,116,114,117,101,59,10,103,108,111,98,97,108,46,95,95,71,76,79,66,65,76,95,95,32,61,32,123,10,32,32,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,58,32,123,125,44,10,32,32,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,58,32,91,93,10,125,59,10,99,108,97,115,115,32,69,114,114,111,114,69,118,101,110,116,32,123,10,32,32,99,111,110,115,116,114,117,99,116,111,114,40,109,101,115,115,97,103,101,44,32,102,105,108,101,110,97,109,101,44,32,108,105,110,101,110,111,44,32,99,111,108,110,111,44,32,101,114,114,111,114,41,32,123,10,32,32,32,32,116,104,105,115,46,109,101,115,115,97,103,101,32,61,32,109,101,115,115,97,103,101,59,10,32,32,32,32,116,104,105,115,46,102,105,108,101,110,97,109,101,32,61,32,102,105,108,101,110,97,109,101,59,10,32,32,32,32,116,104,105,115,46,108,105,110,101,110,111,32,61,32,108,105,110,101,110,111,59,10,32,32,32,32,116,104,105,115,46,99,111,108,110,111,32,61,32,99,111,108,110,111,59,10,32,32,32,32,116,104,105,115,46,101,114,114,111,114,32,61,32,101,114,114,111,114,59,10,32,32,125,10,125,10,102,117,110,99,116,105,111,110,32,104,105,112,112,121,82,101,103,105,115,116,101,114,40,97,112,112,78,97,109,101,44,32,101,110,116,114,121,70,117,110,99,41,32,123,10,32,32,95,95,71,76,79,66,65,76,95,95,46,97,112,112,82,101,103,105,115,116,101,114,91,97,112,112,78,97,109,101,93,32,61,32,123,10,32,32,32,32,114,117,110,58,32,101,110,116,114,121,70,117,110,99,10,32,32,125,59,10,125,10,102,117,110,99,116,105,111,110,32,111,110,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,110,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,32,97,110,100,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,125,10,32,32,108,101,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,32,61,32,110,101,119,32,83,101,116,40,41,59,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,97,100,100,40,108,105,115,116,101,110,101,114,41,59,10,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,125,10,102,117,110,99,116,105,111,110,32,111,102,102,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,102,102,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,32,32,125,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,100,101,108,101,116,101,40,108,105,115,116,101,110,101,114,41,59,10,32,32,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,99,108,101,97,114,40,41,59,10,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,125,10,102,117,110,99,116,105,111,110,32,101,109,105,116,40,101,118,101,110,116,78,97,109,101,44,32,46,46,46,97,114,103,115,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,101,118,101,110,116,76,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,105,102,32,40,101,118,101,110,116,78,97,109,101,32,61,61,61,32,39,117,110,99,97,117,103,104,116,69,120,99,101,112,116,105,111,110,39,32,38,38,32,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,59,10,32,32,125,10,32,32,116,114,121,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,108,105,115,116,101,110,101,114,32,61,62,32,108,105,115,116,101,110,101,114,40,46,46,46,97,114,103,115,41,41,59,10,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,125,10,125,10,79,98,106,101,99,116,46,100,101,102,105,110,101,80,114,111,112,101,114,116,121,40,72,105,112,112,121,44,32,39,111,110,101,114,114,111,114,39,44,32,123,10,32,32,103,101,116,58,32,102,117,110,99,116,105,111,110,32,40,41,32,123,10,32,32,32,32,108,101,116,32,108,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,59,10,32,32,32,32,114,101,116,117,114,110,32,108,105,115,116,101,110,101,114,115,46,108,101,110,103,116,104,32,62,32,48,32,63,32,108,105,115,116,101,110,101,114,115,46,115,108,105,99,101,40,45,49,41,32,58,32,110,117,108,108,59,10,32,32,125,44,10,32,32,115,101,116,58,32,102,117,110,99,116,105,111,110,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,105,102,32,40,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,111,110,101,114,114,111,114,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,32,32,125,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,32,61,32,91,93,59,10,32,32,32,32,108,101,116,32,108,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,59,10,32,32,32,32,108,105,115,116,101,110,101,114,115,46,112,117,115,104,40,108,105,115,116,101,110,101,114,41,59,10,32,32,125,10,125,41,59,10,102,117,110,99,116,105,111,110,32,101,109,105,116,69,114,114,111,114,40,46,46,46,97,114,103,115,41,32,123,10,32,32,105,102,32,40,97,114,103,115,46,108,101,110,103,116,104,32,33,61,61,32,53,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,101,109,105,116,69,114,114,111,114,32,111,110,108,121,32,97,99,99,101,112,116,32,53,32,112,97,114,97,109,115,39,41,59,10,32,32,125,10,32,32,108,101,116,32,101,114,114,79,98,106,32,61,32,110,101,119,32,69,114,114,111,114,40,41,59,10,32,32,101,114,114,79,98,106,46,109,101,115,115,97,103,101,32,61,32,74,83,79,78,46,115,116,114,105,110,103,105,102,121,40,97,114,103,115,91,52,93,41,59,10,32,32,99,111,110,115,116,32,108,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,114,114,111,114,72,97,110,100,108,101,59,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,116,114,121,32,123,10,32,32,32,32,32,32,108,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,108,105,115,116,101,110,101,114,32,61,62,32,108,105,115,116,101,110,101,114,40,97,114,103,115,91,48,93,44,32,97,114,103,115,91,49,93,44,32,97,114,103,115,91,50,93,44,32,97,114,103,115,91,51,93,44,32,101,114,114,79,98,106,41,41,59,10,32,32,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,32,32,125,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,105,102,32,40,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,78,97,109,101,32,61,32,39,101,114,114,111,114,39,59,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,41,32,123,10,32,32,32,32,116,114,121,32,123,10,32,32,32,32,32,32,108,101,116,32,101,118,101,110,116,32,61,32,110,101,119,32,69,114,114,111,114,69,118,101,110,116,40,97,114,103,115,91,48,93,44,32,97,114,103,115,91,49,93,44,32,97,114,103,115,91,50,93,44,32,97,114,103,115,91,51,93,44,32,101,114,114,79,98,106,41,59,10,32,32,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,102,111,114,69,97,99,104,40,108,105,115,116,101,110,101,114,32,61,62,32,108,105,115,116,101,110,101,114,40,101,118,101,110,116,41,41,59,10,32,32,32,32,125,32,99,97,116,99,104,32,40,101,114,114,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,101,114,114,41,59,10,32,32,32,32,125,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,105,102,32,40,97,114,103,115,91,48,93,41,32,123,10,32,32,32,32,32,32,99,111,110,115,111,108,101,46,101,114,114,111,114,40,97,114,103,115,91,48,93,46,116,111,83,116,114,105,110,103,40,41,41,59,10,32,32,32,32,125,10,32,32,125,10,125,10,102,117,110,99,116,105,111,110,32,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,32,124,124,32,116,121,112,101,111,102,32,108,105,115,116,101,110,101,114,32,33,61,61,32,39,102,117,110,99,116,105,111,110,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,32,97,110,100,32,97,32,102,117,110,99,116,105,111,110,32,97,115,32,108,105,115,116,101,110,101,114,39,41,59,10,32,32,125,10,32,32,108,101,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,32,61,32,110,101,119,32,83,101,116,40,41,59,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,97,100,100,40,108,105,115,116,101,110,101,114,41,59,10,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,125,10,102,117,110,99,116,105,111,110,32,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,40,101,118,101,110,116,78,97,109,101,44,32,108,105,115,116,101,110,101,114,41,32,123,10,32,32,105,102,32,40,116,121,112,101,111,102,32,101,118,101,110,116,78,97,109,101,32,33,61,61,32,39,115,116,114,105,110,103,39,41,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,32,84,121,112,101,69,114,114,111,114,40,39,72,105,112,112,121,46,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,40,41,32,111,110,108,121,32,97,99,99,101,112,116,32,97,32,115,116,114,105,110,103,32,97,115,32,101,118,101,110,116,32,110,97,109,101,39,41,59,10,32,32,125,10,32,32,99,111,110,115,116,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,61,32,95,95,71,76,79,66,65,76,95,95,46,103,108,111,98,97,108,69,118,101,110,116,72,97,110,100,108,101,91,101,118,101,110,116,78,97,109,101,93,59,10,32,32,105,102,32,40,33,40,101,118,101,110,116,76,105,115,116,101,110,101,114,115,32,105,110,115,116,97,110,99,101,111,102,32,83,101,116,41,41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,32,32,125,10,32,32,105,102,32,40,108,105,115,116,101,110,101,114,41,32,123,10,32,32,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,100,101,108,101,116,101,40,108,105,115,116,101,110,101,114,41,59,10,32,32,32,32,114,101,116,117,114,110,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,59,10,32,32,125,10,32,32,101,118,101,110,116,76,105,115,116,101,110,101,114,115,46,99,108,101,97,114,40,41,59,10,32,32,114,101,116,117,114,110,32,110,117,108,108,59,10,125,10,72,105,112,112,121,46,100,101,118,105,99,101,32,61,32,123,125,59,10,72,105,112,112,121,46,98,114,105,100,103,101,32,61,32,123,125,59,10,72,105,112,112,121,46,114,101,103,105,115,116,101,114,32,61,32,123,10,32,32,114,101,103,105,115,116,58,32,104,105,112,112,121,82,101,103,105,115,116,101,114,10,125,59,10,72,105,112,112,121,46,111,110,32,61,32,111,110,59,10,72,105,112,112,121,46,111,102,102,32,61,32,111,102,102,59,10,72,105,112,112,121,46,101,109,105,116,32,61,32,101,109,105,116,59,10,72,105,112,112,121,46,101,109,105,116,69,114,114,111,114,32,61,32,101,109,105,116,69,114,114,111,114,59,10,72,105,112,112,121,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,32,61,32,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,59,10,72,105,112,112,121,46,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,32,61,32,114,101,109,111,118,101,69,118,101,110,116,76,105,115,116,101,110,101,114,59,125,41,59,0 }; // NOLINT const uint8_t k_DynamicLoad[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,39,41,59,10,103,108,111,98,97,108,46,100,121,110,97,109,105,99,76,111,97,100,32,61,32,40,112,97,116,104,44,32,101,110,99,111,100,101,44,32,99,98,41,32,61,62,32,123,10,32,32,108,101,116,32,114,101,113,117,101,115,116,80,97,116,104,32,61,32,112,97,116,104,32,124,124,32,39,39,59,10,32,32,99,111,110,115,116,32,105,115,83,99,104,101,109,97,32,61,32,47,94,40,46,43,58,92,47,92,47,41,124,94,40,92,47,92,47,41,47,46,116,101,115,116,40,112,97,116,104,41,59,10,32,32,105,102,32,40,33,105,115,83,99,104,101,109,97,41,32,123,10,32,32,32,32,114,101,113,117,101,115,116,80,97,116,104,32,61,32,103,108,111,98,97,108,46,95,95,72,73,80,80,89,67,85,82,68,73,82,95,95,32,43,32,112,97,116,104,59,10,32,32,125,10,32,32,67,111,110,116,101,120,116,105,102,121,77,111,100,117,108,101,46,76,111,97,100,85,110,116,114,117,115,116,101,100,67,111,110,116,101,110,116,40,114,101,113,117,101,115,116,80,97,116,104,44,32,101,110,99,111,100,101,44,32,99,98,41,59,10,125,59,125,41,59,0 }; // NOLINT const uint8_t k_Platform[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,32,61,32,123,125,59,10,105,102,32,40,116,121,112,101,111,102,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,32,33,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,10,32,32,99,111,110,115,116,32,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,123,10,32,32,32,32,99,111,117,110,116,114,121,58,32,39,39,44,10,32,32,32,32,108,97,110,103,117,97,103,101,58,32,39,39,44,10,32,32,32,32,100,105,114,101,99,116,105,111,110,58,32,48,10,32,32,125,59,10,32,32,105,102,32,40,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,32,61,61,61,32,39,105,111,115,39,41,32,123,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,68,101,118,105,99,101,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,68,101,118,105,99,101,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,79,83,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,83,68,75,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,76,111,99,97,108,105,122,97,116,105,111,110,32,124,124,32,76,111,99,97,108,105,122,97,116,105,111,110,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,79,83,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,79,83,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,65,80,73,76,101,118,101,108,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,65,80,73,76,101,118,101,108,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,83,68,75,86,101,114,115,105,111,110,59,10,32,32,32,32,72,105,112,112,121,46,100,101,118,105,99,101,46,112,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,61,32,95,95,72,73,80,80,89,78,65,84,73,86,69,71,76,79,66,65,76,95,95,46,80,108,97,116,102,111,114,109,46,76,111,99,97,108,105,122,97,116,105,111,110,32,124,124,32,76,111,99,97,108,105,122,97,116,105,111,110,59,10,32,32,125,10,125,125,41,59,0 }; // NOLINT const uint8_t k_UIManagerModule[] = { 40,102,117,110,99,116,105,111,110,40,101,120,112,111,114,116,115,44,32,114,101,113,117,105,114,101,44,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,41,32,123,99,111,110,115,116,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,32,61,32,105,110,116,101,114,110,97,108,66,105,110,100,105,110,103,40,39,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,39,41,59,10,72,105,112,112,121,46,100,111,99,117,109,101,110,116,32,61,32,123,10,32,32,99,114,101,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,117,112,100,97,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,100,101,108,101,116,101,78,111,100,101,40,41,32,123,125,44,10,32,32,102,108,117,115,104,66,97,116,99,104,40,41,32,123,125,44,10,32,32,101,110,100,66,97,116,99,104,40,41,32,123,125,44,10,32,32,99,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,32,123,10,32,32,32,32,85,73,77,97,110,97,103,101,114,77,111,100,117,108,101,46,67,97,108,108,85,73,70,117,110,99,116,105,111,110,40,105,100,44,32,110,97,109,101,44,32,112,97,114,97,109,44,32,99,98,41,59,10,32,32,125,44,10,32,32,115,101,110,100,82,101,110,100,101,114,69,114,114,111,114,40,101,114,114,111,114,41,32,123,10,32,32,32,32,105,102,32,40,101,114,114,111,114,41,32,123,10,32,32,32,32,32,32,116,104,114,111,119,32,101,114,114,111,114,59,10,32,32,32,32,125,10,32,32,125,10,125,59,125,41,59,0 }; // NOLINT @@ -53,6 +54,7 @@ static const std::unordered_map global_base_js_so {"bootstrap.js", {k_bootstrap, ARRAY_SIZE(k_bootstrap) - 1}}, // NOLINT {"hippy.js", {k_hippy, ARRAY_SIZE(k_hippy) - 1}}, // NOLINT {"ExceptionHandle.js", {k_ExceptionHandle, ARRAY_SIZE(k_ExceptionHandle) - 1}}, // NOLINT + {"ErrorHandle.js", {k_ErrorHandle, ARRAY_SIZE(k_ErrorHandle) - 1}}, // NOLINT {"Others.js", {k_Others, ARRAY_SIZE(k_Others) - 1}}, // NOLINT {"DynamicLoad.js", {k_DynamicLoad, ARRAY_SIZE(k_DynamicLoad) - 1}}, // NOLINT {"Platform.js", {k_Platform, ARRAY_SIZE(k_Platform) - 1}}, // NOLINT diff --git a/modules/vfs/ios/VFSUriLoader.mm b/modules/vfs/ios/VFSUriLoader.mm index 438be059332..5b75ea33235 100644 --- a/modules/vfs/ios/VFSUriLoader.mm +++ b/modules/vfs/ios/VFSUriLoader.mm @@ -146,6 +146,10 @@ auto endPoint = footstone::TimePoint::SystemNow(); string_view uri(NSStringToU16StringView([[response URL] absoluteString])); DoRequestTimePerformanceCallback(uri, startPoint, endPoint); + if (error.code != 0) { + string_view msg([error.localizedDescription UTF8String]?:""); + DoRequestErrorCallback(uri, static_cast(error.code), msg); + } if (completion) { completion(data, response, error); } diff --git a/modules/vfs/native/include/vfs/uri_loader.h b/modules/vfs/native/include/vfs/uri_loader.h index 4d784b5ad5d..d0a79a131d2 100644 --- a/modules/vfs/native/include/vfs/uri_loader.h +++ b/modules/vfs/native/include/vfs/uri_loader.h @@ -43,6 +43,7 @@ class UriLoader: public std::enable_shared_from_this { using bytes = vfs::UriHandler::bytes; using RetCode = vfs::JobResponse::RetCode; using RequestTimePerformanceCallback = std::function; + using RequestErrorCallback = std::function; UriLoader(); virtual ~UriLoader() = default; @@ -76,9 +77,11 @@ class UriLoader: public std::enable_shared_from_this { void Terminate(); void SetRequestTimePerformanceCallback(const RequestTimePerformanceCallback& cb) { on_request_time_performance_ = cb; } + void SetRequestErrorCallback(const RequestErrorCallback& cb) { on_request_error_ = cb; } protected: void DoRequestTimePerformanceCallback(const string_view& uri, const TimePoint& start, const TimePoint& end); + void DoRequestErrorCallback(const string_view& uri, const int32_t ret_code, const string_view& error_msg); private: std::shared_ptr GetNextHandler(std::list>::iterator& cur, @@ -95,6 +98,7 @@ class UriLoader: public std::enable_shared_from_this { std::mutex mutex_; RequestTimePerformanceCallback on_request_time_performance_; + RequestErrorCallback on_request_error_; }; } diff --git a/modules/vfs/native/src/uri_loader.cc b/modules/vfs/native/src/uri_loader.cc index fa2cae7121e..ac3474dd3c1 100644 --- a/modules/vfs/native/src/uri_loader.cc +++ b/modules/vfs/native/src/uri_loader.cc @@ -107,11 +107,14 @@ void UriLoader::RequestUntrustedContent(const std::shared_ptr& reque std::function()> next = [this, &cur_it, end_it]() -> std::shared_ptr { return this->GetNextHandler(cur_it, end_it); }; - (*cur_it)->RequestUntrustedContent(request, std::move(response), next); + (*cur_it)->RequestUntrustedContent(request, response, next); // performance end time auto end_time = TimePoint::SystemNow(); DoRequestTimePerformanceCallback(request->GetUri(), start_time, end_time); + if (response->GetRetCode() != JobResponse::RetCode::Success) { + DoRequestErrorCallback(request->GetUri(), static_cast(response->GetRetCode()), response->GetErrorMessage()); + } } void UriLoader::RequestUntrustedContent(const std::shared_ptr& request, @@ -155,6 +158,9 @@ void UriLoader::RequestUntrustedContent(const std::shared_ptr& reque // performance end time auto end_time = TimePoint::SystemNow(); self->DoRequestTimePerformanceCallback(request->GetUri(), start_time, end_time); + if (response->GetRetCode() != JobResponse::RetCode::Success) { + self->DoRequestErrorCallback(request->GetUri(), static_cast(response->GetRetCode()), response->GetErrorMessage()); + } orig_cb(response); }; @@ -188,5 +194,10 @@ void UriLoader::DoRequestTimePerformanceCallback(const string_view& uri, const T } } +void UriLoader::DoRequestErrorCallback(const string_view& uri, const int32_t ret_code, const string_view& error_msg) { + if (on_request_error_ != nullptr) { + on_request_error_(uri, ret_code, error_msg); + } +} } }