From 328a3739149539fd0145a64f9269f03973bb2a01 Mon Sep 17 00:00:00 2001 From: mbhealy Date: Fri, 8 Mar 2024 15:05:28 -0500 Subject: [PATCH] Pulse python bindings squash (#276) Pulse python bindings enablement for QE Compiler Dialects --- CMakeLists.txt | 1 + conandata.yml | 2 +- include/Dialect/Pulse/IR/PulseDialect.td | 6 +- include/Dialect/Pulse/IR/PulseOps.td | 4 +- include/Dialect/QUIR/IR/CMakeLists.txt | 9 +- include/qss-c/Dialect/OQ3.h | 36 ++++ include/qss-c/Dialect/Pulse.h | 85 ++++++++ include/qss-c/Dialect/QCS.h | 37 ++++ include/qss-c/Dialect/QUIR.h | 53 +++++ lib/Bindings/Python/DialectOQ3.cpp | 59 ++++++ lib/Bindings/Python/DialectPulse.cpp | 139 +++++++++++++ lib/Bindings/Python/DialectQCS.cpp | 59 ++++++ lib/Bindings/Python/DialectQUIR.cpp | 85 ++++++++ lib/CAPI/CMakeLists.txt | 35 ++++ lib/CAPI/Dialect/CMakeLists.txt | 64 ++++++ lib/CAPI/Dialect/OQ3.cpp | 30 +++ lib/CAPI/Dialect/Pulse.cpp | 104 ++++++++++ lib/CAPI/Dialect/QCS.cpp | 31 +++ lib/CAPI/Dialect/QUIR.cpp | 58 ++++++ lib/CMakeLists.txt | 6 +- .../Compile/ThreadedCompilationManager.cpp | 6 +- python_lib/CMakeLists.txt | 184 +++++++++++++++++- .../qss_compiler/examples/SequenceEx.mlir | 11 ++ .../qss_compiler/examples/SequenceEx.py | 74 +++++++ python_lib/qss_compiler/examples/TestOps.mlir | 45 +++++ python_lib/qss_compiler/examples/TestOps.py | 147 ++++++++++++++ python_lib/qss_compiler/examples/parse.py | 35 ++++ python_lib/qss_compiler/examples/pulse.py | 90 +++++++++ .../qss_compiler/examples/test_out.mlir | 91 +++++++++ python_lib/qss_compiler/lib.cpp | 3 - python_lib/qss_compiler/mlir/dialects/OQ3.pyi | 23 +++ python_lib/qss_compiler/mlir/dialects/OQ3.td | 22 +++ .../qss_compiler/mlir/dialects/Pulse.td | 22 +++ python_lib/qss_compiler/mlir/dialects/QCS.pyi | 23 +++ python_lib/qss_compiler/mlir/dialects/QCS.td | 24 +++ python_lib/qss_compiler/mlir/dialects/QUIR.td | 22 +++ .../mlir/dialects/_oq3_ops_ext.py | 27 +++ .../mlir/dialects/_pulse_ops_ext.py | 138 +++++++++++++ .../mlir/dialects/_qcs_ops_ext.py | 37 ++++ .../mlir/dialects/_quir_ops_ext.py | 53 +++++ python_lib/qss_compiler/mlir/dialects/oq3.py | 21 ++ .../qss_compiler/mlir/dialects/pulse.py | 18 ++ .../qss_compiler/mlir/dialects/pulse.pyi | 70 +++++++ python_lib/qss_compiler/mlir/dialects/qcs.py | 21 ++ python_lib/qss_compiler/mlir/dialects/quir.py | 27 +++ .../qss_compiler/mlir/dialects/quir.pyi | 31 +++ ...lect-python-bindings-ab57b480118d6632.yaml | 7 + requirements-dev.txt | 3 +- test/python_lib/test_python_bindings.py | 61 ++++++ 49 files changed, 2223 insertions(+), 16 deletions(-) create mode 100644 include/qss-c/Dialect/OQ3.h create mode 100644 include/qss-c/Dialect/Pulse.h create mode 100644 include/qss-c/Dialect/QCS.h create mode 100644 include/qss-c/Dialect/QUIR.h create mode 100644 lib/Bindings/Python/DialectOQ3.cpp create mode 100644 lib/Bindings/Python/DialectPulse.cpp create mode 100644 lib/Bindings/Python/DialectQCS.cpp create mode 100644 lib/Bindings/Python/DialectQUIR.cpp create mode 100644 lib/CAPI/CMakeLists.txt create mode 100644 lib/CAPI/Dialect/CMakeLists.txt create mode 100644 lib/CAPI/Dialect/OQ3.cpp create mode 100644 lib/CAPI/Dialect/Pulse.cpp create mode 100644 lib/CAPI/Dialect/QCS.cpp create mode 100644 lib/CAPI/Dialect/QUIR.cpp create mode 100644 python_lib/qss_compiler/examples/SequenceEx.mlir create mode 100755 python_lib/qss_compiler/examples/SequenceEx.py create mode 100644 python_lib/qss_compiler/examples/TestOps.mlir create mode 100755 python_lib/qss_compiler/examples/TestOps.py create mode 100755 python_lib/qss_compiler/examples/parse.py create mode 100755 python_lib/qss_compiler/examples/pulse.py create mode 100644 python_lib/qss_compiler/examples/test_out.mlir create mode 100644 python_lib/qss_compiler/mlir/dialects/OQ3.pyi create mode 100644 python_lib/qss_compiler/mlir/dialects/OQ3.td create mode 100644 python_lib/qss_compiler/mlir/dialects/Pulse.td create mode 100644 python_lib/qss_compiler/mlir/dialects/QCS.pyi create mode 100644 python_lib/qss_compiler/mlir/dialects/QCS.td create mode 100644 python_lib/qss_compiler/mlir/dialects/QUIR.td create mode 100644 python_lib/qss_compiler/mlir/dialects/_oq3_ops_ext.py create mode 100644 python_lib/qss_compiler/mlir/dialects/_pulse_ops_ext.py create mode 100644 python_lib/qss_compiler/mlir/dialects/_qcs_ops_ext.py create mode 100644 python_lib/qss_compiler/mlir/dialects/_quir_ops_ext.py create mode 100644 python_lib/qss_compiler/mlir/dialects/oq3.py create mode 100644 python_lib/qss_compiler/mlir/dialects/pulse.py create mode 100644 python_lib/qss_compiler/mlir/dialects/pulse.pyi create mode 100644 python_lib/qss_compiler/mlir/dialects/qcs.py create mode 100644 python_lib/qss_compiler/mlir/dialects/quir.py create mode 100644 python_lib/qss_compiler/mlir/dialects/quir.pyi create mode 100644 releasenotes/notes/dialect-python-bindings-ab57b480118d6632.yaml create mode 100644 test/python_lib/test_python_bindings.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 29acad57b..ff2686396 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -326,6 +326,7 @@ set(MLIR_BINARY_DIR ${CMAKE_BINARY_DIR}) include(TableGen) include(AddLLVM) include(AddMLIR) +include(AddMLIRPython) include(HandleLLVMOptions) include(LLVMExports) diff --git a/conandata.yml b/conandata.yml index c2494dba6..692cbc5c3 100644 --- a/conandata.yml +++ b/conandata.yml @@ -4,7 +4,7 @@ requirements: - zlib/1.2.13 - zstd/1.5.5 - nlohmann_json/3.9.1 - - pybind11/2.10.1 + - pybind11/2.11.1 - clang-tools-extra/17.0.5-0@ - llvm/17.0.5-0@ - qasm/0.3.0@qss/stable diff --git a/include/Dialect/Pulse/IR/PulseDialect.td b/include/Dialect/Pulse/IR/PulseDialect.td index 6843b7cda..4f260b826 100644 --- a/include/Dialect/Pulse/IR/PulseDialect.td +++ b/include/Dialect/Pulse/IR/PulseDialect.td @@ -1,6 +1,6 @@ //===- PulseDialect.td - Pulse dialect ---------------------*- tablegen -*-===// // -// (C) Copyright IBM 2023. +// (C) Copyright IBM 2023, 2024. // // This code is part of Qiskit. // @@ -57,7 +57,7 @@ class Pulse_Attr traits = []> let mnemonic = attrMnemonic; } -include "PulseTypes.td" -include "PulseOps.td" +include "Dialect/Pulse/IR/PulseTypes.td" +include "Dialect/Pulse/IR/PulseOps.td" #endif // PULSE_DIALECT diff --git a/include/Dialect/Pulse/IR/PulseOps.td b/include/Dialect/Pulse/IR/PulseOps.td index d28d6f449..cbe9f2817 100644 --- a/include/Dialect/Pulse/IR/PulseOps.td +++ b/include/Dialect/Pulse/IR/PulseOps.td @@ -1,6 +1,6 @@ //===- PulseOps.td - Pulse dialect ops ---------------------*- tablegen -*-===// // -// (C) Copyright IBM 2023. +// (C) Copyright IBM 2023, 2024. // // This code is part of Qiskit. // @@ -17,7 +17,7 @@ #ifndef PULSE_OPS #define PULSE_OPS -include "PulseTraits.td" +include "Dialect/Pulse/IR/PulseTraits.td" include "Dialect/QUIR/IR/QUIRTypeConstraints.td" include "Dialect/Pulse/IR/PulseInterfaces.td" diff --git a/include/Dialect/QUIR/IR/CMakeLists.txt b/include/Dialect/QUIR/IR/CMakeLists.txt index 6d671429e..ea7f73ad0 100644 --- a/include/Dialect/QUIR/IR/CMakeLists.txt +++ b/include/Dialect/QUIR/IR/CMakeLists.txt @@ -1,4 +1,4 @@ -# (C) Copyright IBM 2023. +# (C) Copyright IBM 2023, 2024. # # This code is part of Qiskit. # @@ -16,9 +16,16 @@ add_mlir_doc(QUIR QUIRDialect generated/Dialect/QUIR/ -gen-dialect-doc -dialect= set(LLVM_TARGET_DEFINITIONS QUIR.td) mlir_tablegen(QUIRAttributes.h.inc -gen-attrdef-decls -attrdefs-dialect=quir) mlir_tablegen(QUIRAttributes.cpp.inc -gen-attrdef-defs -attrdefs-dialect=quir) +add_public_tablegen_target(QUIRAttributesIncGen) set(LLVM_TARGET_DEFINITIONS QUIR.td) mlir_tablegen(QUIREnums.h.inc -gen-enum-decls) mlir_tablegen(QUIREnums.cpp.inc -gen-enum-defs) +add_public_tablegen_target(QUIREnumsIncGen) + +# This dependency makes sure that the attributes and enums include files are +# generated before anything that requires the include files generated for the +# QUIR dialect +add_dependencies(MLIRQUIRIncGen QUIREnumsIncGen QUIRAttributesIncGen) add_mlir_interface(QUIRInterfaces) diff --git a/include/qss-c/Dialect/OQ3.h b/include/qss-c/Dialect/OQ3.h new file mode 100644 index 000000000..136eaf781 --- /dev/null +++ b/include/qss-c/Dialect/OQ3.h @@ -0,0 +1,36 @@ +//===- OQ3.h - OQ3 Dialect for C --------------------------------*- C++ -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// +/// +/// This file declares the c interface for the OQ3 dialect +/// +//===----------------------------------------------------------------------===// +#ifndef C_DIALECT_OQ3_H +#define C_DIALECT_OQ3_H + +#include "mlir-c/IR.h" +#include "mlir-c/Support.h" + +#ifdef __cplusplus +extern "C" { +#endif + +MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(OQ3, oq3); + +#ifdef __cplusplus +} +#endif + +#endif // C_DIALECT_OQ3_H diff --git a/include/qss-c/Dialect/Pulse.h b/include/qss-c/Dialect/Pulse.h new file mode 100644 index 000000000..a0231a3f3 --- /dev/null +++ b/include/qss-c/Dialect/Pulse.h @@ -0,0 +1,85 @@ +//===- Pulse.h - Pulse Dialect for C ----------------------------*- C++ -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// +/// +/// This file declares the c interface for the Pulse dialect +/// +//===----------------------------------------------------------------------===// + +#ifndef C_DIALECT_PULSE_H +#define C_DIALECT_PULSE_H + +#include "mlir-c/IR.h" +#include "mlir-c/Support.h" + +#ifdef __cplusplus +extern "C" { +#endif + +MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(PULSE, pulse); + +//===---------------------------------------------------------------------===// +// CaptureType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool pulseTypeIsACaptureType(MlirType type); + +MLIR_CAPI_EXPORTED MlirType pulseCaptureTypeGet(MlirContext ctx); + +//===---------------------------------------------------------------------===// +// FrameType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool pulseTypeIsAFrameType(MlirType type); + +MLIR_CAPI_EXPORTED MlirType pulseFrameTypeGet(MlirContext ctx); + +//===---------------------------------------------------------------------===// +// KernelType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool pulseTypeIsAKernelType(MlirType type); + +MLIR_CAPI_EXPORTED MlirType pulseKernelTypeGet(MlirContext ctx); + +//===---------------------------------------------------------------------===// +// MixedFrameType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool pulseTypeIsAMixedFrameType(MlirType type); + +MLIR_CAPI_EXPORTED MlirType pulseMixedFrameTypeGet(MlirContext ctx); + +//===---------------------------------------------------------------------===// +// PortType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool pulseTypeIsAPortType(MlirType type); + +MLIR_CAPI_EXPORTED MlirType pulsePortTypeGet(MlirContext ctx); + +//===---------------------------------------------------------------------===// +// WaveformType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool pulseTypeIsAWaveformType(MlirType type); + +MLIR_CAPI_EXPORTED MlirType pulseWaveformTypeGet(MlirContext ctx); + +#ifdef __cplusplus +} +#endif + +#endif // C_DIALECT_PULSE_H diff --git a/include/qss-c/Dialect/QCS.h b/include/qss-c/Dialect/QCS.h new file mode 100644 index 000000000..16c6d03d7 --- /dev/null +++ b/include/qss-c/Dialect/QCS.h @@ -0,0 +1,37 @@ +//===- QCS.h - QCS Dialect for C --------------------------------*- C++ -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// +/// +/// This file declares the c interface for the QCS dialect +/// +//===----------------------------------------------------------------------===// + +#ifndef C_DIALECT_QCS_H +#define C_DIALECT_QCS_H + +#include "mlir-c/IR.h" +#include "mlir-c/Support.h" + +#ifdef __cplusplus +extern "C" { +#endif + +MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(QCS, qcs); + +#ifdef __cplusplus +} +#endif + +#endif // C_DIALECT_QCS_H diff --git a/include/qss-c/Dialect/QUIR.h b/include/qss-c/Dialect/QUIR.h new file mode 100644 index 000000000..357f0213c --- /dev/null +++ b/include/qss-c/Dialect/QUIR.h @@ -0,0 +1,53 @@ +//===- QUIR.h - QUIR Dialect for C ------------------------------*- C++ -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// +/// +/// This file declares the c interface for the QUIR dialect +/// +//===----------------------------------------------------------------------===// + +#ifndef C_DIALECT_QUIR_H +#define C_DIALECT_QUIR_H + +#include "mlir-c/IR.h" +#include "mlir-c/Support.h" + +#ifdef __cplusplus +extern "C" { +#endif + +MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(QUIR, quir); + +//===---------------------------------------------------------------------===// +// AngleType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool quirTypeIsAAngleType(MlirType type); + +MLIR_CAPI_EXPORTED MlirType quirAngleTypeGet(MlirContext ctx, unsigned width); + +//===---------------------------------------------------------------------===// +// DurationType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool quirTypeIsADurationType(MlirType type); + +MLIR_CAPI_EXPORTED MlirType quirDurationTypeGet(MlirContext ctx); + +#ifdef __cplusplus +} +#endif + +#endif // C_DIALECT_QUIR_H diff --git a/lib/Bindings/Python/DialectOQ3.cpp b/lib/Bindings/Python/DialectOQ3.cpp new file mode 100644 index 000000000..16d0628f7 --- /dev/null +++ b/lib/Bindings/Python/DialectOQ3.cpp @@ -0,0 +1,59 @@ +//===- DialectOQ3.cpp - OQ3 Dialect python bindings -------------*- C++ -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// +/// +/// This file implements the python bindings for the OQ3 dialect +/// +//===----------------------------------------------------------------------===// + +#include "qss-c/Dialect/OQ3.h" + +#include "mlir-c/IR.h" +// NOLINTNEXTLINE(misc-include-cleaner) +#include "mlir/Bindings/Python/PybindAdaptors.h" + +#include "pybind11/cast.h" +#include "pybind11/detail/common.h" +#include "pybind11/pybind11.h" +#include "pybind11/pytypes.h" + +namespace py = pybind11; +using namespace llvm; +using namespace mlir; +using namespace mlir::python; +using namespace mlir::python::adaptors; + +// Intentionally left blank placeholder and for a common pattern across dialects +void populateDialectOQ3Submodule(const pybind11::module &m) {} + +PYBIND11_MODULE(_qeDialectsOQ3, m) { + m.doc() = "IBM Quantum OQ3 dialect."; + populateDialectOQ3Submodule(m); + + //===--------------------------------------------------------------------===// + // OQ3 dialect + //===--------------------------------------------------------------------===// + auto quir_m = m.def_submodule("oq3"); + + quir_m.def( + "register_dialect", + [](MlirContext context, bool load) { + const MlirDialectHandle handle = mlirGetDialectHandle__oq3__(); + mlirDialectHandleRegisterDialect(handle, context); + if (load) + mlirDialectHandleLoadDialect(handle, context); + }, + py::arg("context") = py::none(), py::arg("load") = true); +} diff --git a/lib/Bindings/Python/DialectPulse.cpp b/lib/Bindings/Python/DialectPulse.cpp new file mode 100644 index 000000000..a8f21646f --- /dev/null +++ b/lib/Bindings/Python/DialectPulse.cpp @@ -0,0 +1,139 @@ +//===- DialectPulse.cpp - Pulse Dialect python bindings ---------*- C++ -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// +/// +/// This file implements the python bindings for the Pulse dialect +/// +//===----------------------------------------------------------------------===// + +#include "qss-c/Dialect/Pulse.h" + +#include "mlir-c/IR.h" +// NOLINTNEXTLINE(misc-include-cleaner) +#include "mlir/Bindings/Python/PybindAdaptors.h" + +#include "pybind11/cast.h" +#include "pybind11/detail/common.h" +#include "pybind11/pybind11.h" +#include "pybind11/pytypes.h" + +namespace py = pybind11; +using namespace llvm; +using namespace mlir; +using namespace mlir::python; +using namespace mlir::python::adaptors; + +void populateDialectPulseSubmodule(const pybind11::module &m) { + //===-------------------------------------------------------------------===// + // CaptureType + //===-------------------------------------------------------------------===// + + auto captureType = + mlir_type_subclass(m, "CaptureType", pulseTypeIsACaptureType); + captureType.def_classmethod( + "get", + [](const py::object &cls, MlirContext ctx) { + return cls(pulseCaptureTypeGet(ctx)); + }, + "Get an instance of CaptureType in given context.", py::arg("cls"), + py::arg("context") = py::none()); + + //===-------------------------------------------------------------------===// + // FrameType + //===-------------------------------------------------------------------===// + + auto frameType = mlir_type_subclass(m, "FrameType", pulseTypeIsAFrameType); + frameType.def_classmethod( + "get", + [](const py::object &cls, MlirContext ctx) { + return cls(pulseFrameTypeGet(ctx)); + }, + "Get an instance of FrameType in given context.", py::arg("cls"), + py::arg("context") = py::none()); + + //===-------------------------------------------------------------------===// + // KernelType + //===-------------------------------------------------------------------===// + + auto kernelType = mlir_type_subclass(m, "KernelType", pulseTypeIsAKernelType); + kernelType.def_classmethod( + "get", + [](const py::object &cls, MlirContext ctx) { + return cls(pulseKernelTypeGet(ctx)); + }, + "Get an instance of KernelType in given context.", py::arg("cls"), + py::arg("context") = py::none()); + + //===-------------------------------------------------------------------===// + // MixedFrameType + //===-------------------------------------------------------------------===// + + auto mixedFrameType = + mlir_type_subclass(m, "MixedFrameType", pulseTypeIsAMixedFrameType); + mixedFrameType.def_classmethod( + "get", + [](const py::object &cls, MlirContext ctx) { + return cls(pulseMixedFrameTypeGet(ctx)); + }, + "Get an instance of MixedFrameType in given context.", py::arg("cls"), + py::arg("context") = py::none()); + + //===-------------------------------------------------------------------===// + // PortType + //===-------------------------------------------------------------------===// + + auto portType = mlir_type_subclass(m, "PortType", pulseTypeIsAPortType); + portType.def_classmethod( + "get", + [](const py::object &cls, MlirContext ctx) { + return cls(pulsePortTypeGet(ctx)); + }, + "Get an instance of PortType in given context.", py::arg("cls"), + py::arg("context") = py::none()); + + //===-------------------------------------------------------------------===// + // WaveformType + //===-------------------------------------------------------------------===// + + auto waveformType = + mlir_type_subclass(m, "WaveformType", pulseTypeIsAWaveformType); + waveformType.def_classmethod( + "get", + [](const py::object &cls, MlirContext ctx) { + return cls(pulseWaveformTypeGet(ctx)); + }, + "Get an instance of WaveformType in given context.", py::arg("cls"), + py::arg("context") = py::none()); +} + +PYBIND11_MODULE(_qeDialectsPulse, m) { + m.doc() = "IBM Quantum Pulse dialect."; + populateDialectPulseSubmodule(m); + + //===--------------------------------------------------------------------===// + // Pulse dialect + //===--------------------------------------------------------------------===// + auto pulse_m = m.def_submodule("pulse"); + + pulse_m.def( + "register_dialect", + [](MlirContext context, bool load) { + const MlirDialectHandle handle = mlirGetDialectHandle__pulse__(); + mlirDialectHandleRegisterDialect(handle, context); + if (load) + mlirDialectHandleLoadDialect(handle, context); + }, + py::arg("context") = py::none(), py::arg("load") = true); +} diff --git a/lib/Bindings/Python/DialectQCS.cpp b/lib/Bindings/Python/DialectQCS.cpp new file mode 100644 index 000000000..23fc36746 --- /dev/null +++ b/lib/Bindings/Python/DialectQCS.cpp @@ -0,0 +1,59 @@ +//===- DialectQCS.cpp - QCS Dialect python bindings -------------*- C++ -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// +/// +/// This file implements the python bindings for the QCS dialect +/// +//===----------------------------------------------------------------------===// + +#include "qss-c/Dialect/QCS.h" + +#include "mlir-c/IR.h" +// NOLINTNEXTLINE(misc-include-cleaner) +#include "mlir/Bindings/Python/PybindAdaptors.h" + +#include "pybind11/cast.h" +#include "pybind11/detail/common.h" +#include "pybind11/pybind11.h" +#include "pybind11/pytypes.h" + +namespace py = pybind11; +using namespace llvm; +using namespace mlir; +using namespace mlir::python; +using namespace mlir::python::adaptors; + +// Intentionally left blank placeholder and for a common pattern across dialects +void populateDialectQCSSubmodule(const pybind11::module &m) {} + +PYBIND11_MODULE(_qeDialectsQCS, m) { + m.doc() = "IBM Quantum QCS dialect."; + populateDialectQCSSubmodule(m); + + //===--------------------------------------------------------------------===// + // QCS dialect + //===--------------------------------------------------------------------===// + auto qcs_m = m.def_submodule("qcs"); + + qcs_m.def( + "register_dialect", + [](MlirContext context, bool load) { + const MlirDialectHandle handle = mlirGetDialectHandle__qcs__(); + mlirDialectHandleRegisterDialect(handle, context); + if (load) + mlirDialectHandleLoadDialect(handle, context); + }, + py::arg("context") = py::none(), py::arg("load") = true); +} diff --git a/lib/Bindings/Python/DialectQUIR.cpp b/lib/Bindings/Python/DialectQUIR.cpp new file mode 100644 index 000000000..46a4e8f59 --- /dev/null +++ b/lib/Bindings/Python/DialectQUIR.cpp @@ -0,0 +1,85 @@ +//===- DialectQUIR.cpp - QUIR Dialect python bindings -----------*- C++ -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// +/// +/// This file implements the python bindings for the QUIR dialect +/// +//===----------------------------------------------------------------------===// + +#include "qss-c/Dialect/QUIR.h" + +#include "mlir-c/IR.h" +// NOLINTNEXTLINE(misc-include-cleaner) +#include "mlir/Bindings/Python/PybindAdaptors.h" + +#include "pybind11/cast.h" +#include "pybind11/detail/common.h" +#include "pybind11/pybind11.h" +#include "pybind11/pytypes.h" + +namespace py = pybind11; +using namespace llvm; +using namespace mlir; +using namespace mlir::python; +using namespace mlir::python::adaptors; + +void populateDialectQUIRSubmodule(const pybind11::module &m) { + //===-------------------------------------------------------------------===// + // AngleType + //===-------------------------------------------------------------------===// + + auto angleType = mlir_type_subclass(m, "AngleType", quirTypeIsAAngleType); + angleType.def_classmethod( + "get", + [](const py::object &cls, unsigned width, MlirContext ctx) { + return cls(quirAngleTypeGet(ctx, width)); + }, + "Get an instance of AngleType in given context.", py::arg("cls"), + py::arg("width"), py::arg("context") = py::none()); + + //===-------------------------------------------------------------------===// + // DurationType + //===-------------------------------------------------------------------===// + + auto durationType = + mlir_type_subclass(m, "DurationType", quirTypeIsADurationType); + durationType.def_classmethod( + "get", + [](const py::object &cls, MlirContext ctx) { + return cls(quirDurationTypeGet(ctx)); + }, + "Get an instance of DurationType in given context.", py::arg("cls"), + py::arg("context") = py::none()); +} + +PYBIND11_MODULE(_qeDialectsQUIR, m) { + m.doc() = "IBM Quantum QUIR dialect."; + populateDialectQUIRSubmodule(m); + + //===--------------------------------------------------------------------===// + // QUIR dialect + //===--------------------------------------------------------------------===// + auto quir_m = m.def_submodule("quir"); + + quir_m.def( + "register_dialect", + [](MlirContext context, bool load) { + const MlirDialectHandle handle = mlirGetDialectHandle__quir__(); + mlirDialectHandleRegisterDialect(handle, context); + if (load) + mlirDialectHandleLoadDialect(handle, context); + }, + py::arg("context") = py::none(), py::arg("load") = true); +} diff --git a/lib/CAPI/CMakeLists.txt b/lib/CAPI/CMakeLists.txt new file mode 100644 index 000000000..a27601dfc --- /dev/null +++ b/lib/CAPI/CMakeLists.txt @@ -0,0 +1,35 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# This code is licensed under the Apache License, Version 2.0 with LLVM +# Exceptions. You may obtain a copy of this license in the LICENSE.txt +# file in the root directory of this source tree. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. + +function(qss_dialects_target_includes target) + set(_DIRS + ${MLIR_INCLUDE_DIRS} + ${PROJECT_SOURCE_DIR}/include + ${PROJECT_BINARY_DIR}/include + ) + set_property(TARGET ${target} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES + $) + if(TARGET obj.${target}) + set_property(TARGET ${target} APPEND PROPERTY INCLUDE_DIRECTORIES + $) + endif() +endfunction() + + +set(GLOBAL APPEND PROPERTY QSSC_CAPI_LIBS) +function(add_qss_upstream_c_api_library name) + add_mlir_public_c_api_library(${name} ${ARGN}) + set(GLOBAL APPEND PROPERTY QSSC_CAPI_LIBS ${name}) + qss_dialects_target_includes(${name}) +endfunction() + +add_subdirectory(Dialect) diff --git a/lib/CAPI/Dialect/CMakeLists.txt b/lib/CAPI/Dialect/CMakeLists.txt new file mode 100644 index 000000000..d5ad4f4b3 --- /dev/null +++ b/lib/CAPI/Dialect/CMakeLists.txt @@ -0,0 +1,64 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# This code is licensed under the Apache License, Version 2.0 with LLVM +# Exceptions. You may obtain a copy of this license in the LICENSE.txt +# file in the root directory of this source tree. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. + +add_qss_upstream_c_api_library(MLIRCAPIPulse + Pulse.cpp + + PARTIAL_SOURCES_INTENDED + LINK_LIBS PUBLIC + MLIRCAPIIR + MLIRPulseDialect + MLIRPulseTransforms +) + +add_qss_upstream_c_api_library(MLIRCAPIQUIR + QUIR.cpp + + ADDITIONAL_HEADER_DIRS + ${PROJECT_SOURCE_DIR}/include/QUIR + + PARTIAL_SOURCES_INTENDED + LINK_LIBS PUBLIC + MLIRCAPIIR + MLIRQUIRDialect + MLIRQUIRTransforms + MLIRQUIRUtils +) + +add_qss_upstream_c_api_library(MLIRCAPIQCS + QCS.cpp + + PARTIAL_SOURCES_INTENDED + LINK_LIBS PUBLIC + MLIRCAPIIR + MLIRQCSDialect +) + +add_qss_upstream_c_api_library(MLIRCAPIOQ3 + OQ3.cpp + + PARTIAL_SOURCES_INTENDED + LINK_LIBS PUBLIC + MLIRCAPIIR + MLIROQ3Dialect + MLIROQ3Transforms +) + +set(mlir_qssc_capi_libs + MLIRCAPIPulse + MLIRCAPIQUIR + MLIRCAPIQCS + MLIRCAPIOQ3 + CACHE STRING + "List of capi libs" + FORCE +) diff --git a/lib/CAPI/Dialect/OQ3.cpp b/lib/CAPI/Dialect/OQ3.cpp new file mode 100644 index 000000000..c02eba466 --- /dev/null +++ b/lib/CAPI/Dialect/OQ3.cpp @@ -0,0 +1,30 @@ +//===- OQ3.cpp - OQ3 dialect CAPI registration ------------------*- C++ -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// +/// +/// This file implements the OQ3 dialect registration of the CAPI +/// +//===----------------------------------------------------------------------===// + +// NOLINTNEXTLINE(misc-include-cleaner) +#include "qss-c/Dialect/OQ3.h" + +#include "Dialect/OQ3/IR/OQ3Dialect.h" + +#include "mlir/CAPI/Registration.h" + +using namespace mlir; + +MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(OQ3, oq3, oq3::OQ3Dialect) diff --git a/lib/CAPI/Dialect/Pulse.cpp b/lib/CAPI/Dialect/Pulse.cpp new file mode 100644 index 000000000..a82745d22 --- /dev/null +++ b/lib/CAPI/Dialect/Pulse.cpp @@ -0,0 +1,104 @@ +//===- Pulse.cpp - Pulse dialect CAPI registration --------------*- C++ -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// +/// +/// This file implements the Pulse dialect registration of the CAPI +/// +//===----------------------------------------------------------------------===// + +#include "qss-c/Dialect/Pulse.h" + +#include "Dialect/Pulse/IR/PulseDialect.h" +#include "Dialect/Pulse/IR/PulseTypes.h" + +#include "mlir-c/IR.h" +#include "mlir/CAPI/IR.h" +#include "mlir/CAPI/Registration.h" + +using namespace mlir; + +MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(Pulse, pulse, pulse::PulseDialect) + +//===---------------------------------------------------------------------===// +// CaptureType +//===---------------------------------------------------------------------===// + +bool pulseTypeIsACaptureType(MlirType type) { + return unwrap(type).isa(); +} + +MlirType pulseCaptureTypeGet(MlirContext ctx) { + return wrap(pulse::CaptureType::get(unwrap(ctx))); +} + +//===---------------------------------------------------------------------===// +// FrameType +//===---------------------------------------------------------------------===// + +bool pulseTypeIsAFrameType(MlirType type) { + return unwrap(type).isa(); +} + +MlirType pulseFrameTypeGet(MlirContext ctx) { + return wrap(pulse::FrameType::get(unwrap(ctx))); +} + +//===---------------------------------------------------------------------===// +// KernelType +//===---------------------------------------------------------------------===// + +bool pulseTypeIsAKernelType(MlirType type) { + return unwrap(type).isa(); +} + +MlirType pulseKernelTypeGet(MlirContext ctx) { + return wrap(pulse::KernelType::get(unwrap(ctx))); +} + +//===---------------------------------------------------------------------===// +// MixedFrameType +//===---------------------------------------------------------------------===// + +bool pulseTypeIsAMixedFrameType(MlirType type) { + return unwrap(type).isa(); +} + +MlirType pulseMixedFrameTypeGet(MlirContext ctx) { + return wrap(pulse::MixedFrameType::get(unwrap(ctx))); +} + +//===---------------------------------------------------------------------===// +// PortType +//===---------------------------------------------------------------------===// + +bool pulseTypeIsAPortType(MlirType type) { + return unwrap(type).isa(); +} + +MlirType pulsePortTypeGet(MlirContext ctx) { + return wrap(pulse::PortType::get(unwrap(ctx))); +} + +//===---------------------------------------------------------------------===// +// WaveformType +//===---------------------------------------------------------------------===// + +bool pulseTypeIsAWaveformType(MlirType type) { + return unwrap(type).isa(); +} + +MlirType pulseWaveformTypeGet(MlirContext ctx) { + return wrap(pulse::WaveformType::get(unwrap(ctx))); +} diff --git a/lib/CAPI/Dialect/QCS.cpp b/lib/CAPI/Dialect/QCS.cpp new file mode 100644 index 000000000..224d829d9 --- /dev/null +++ b/lib/CAPI/Dialect/QCS.cpp @@ -0,0 +1,31 @@ +//===- QCS.cpp - QCS dialect CAPI registration ------------------*- C++ -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// +/// +/// This file implements the QCS dialect registration of the CAPI +/// +//===----------------------------------------------------------------------===// + +// NOLINTNEXTLINE(misc-include-cleaner) +#include "qss-c/Dialect/QCS.h" + +// NOLINTNEXTLINE(misc-include-cleaner) +#include "Dialect/QCS/IR/QCSDialect.h" + +#include "mlir/CAPI/Registration.h" + +using namespace mlir; + +MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(QCS, qcs, qcs::QCSDialect) diff --git a/lib/CAPI/Dialect/QUIR.cpp b/lib/CAPI/Dialect/QUIR.cpp new file mode 100644 index 000000000..31ffab204 --- /dev/null +++ b/lib/CAPI/Dialect/QUIR.cpp @@ -0,0 +1,58 @@ +//===- QUIR.cpp - QUIR dialect CAPI registration ----------------*- C++ -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// +/// +/// This file implements the QUIR dialect registration of the CAPI +/// +//===----------------------------------------------------------------------===// + +#include "qss-c/Dialect/QUIR.h" + +#include "Dialect/QUIR/IR/QUIRDialect.h" +#include "Dialect/QUIR/IR/QUIREnums.h" +#include "Dialect/QUIR/IR/QUIRTypes.h" + +#include "mlir-c/IR.h" +#include "mlir/CAPI/IR.h" +#include "mlir/CAPI/Registration.h" + +using namespace mlir; + +MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(QUIR, quir, quir::QUIRDialect) + +//===---------------------------------------------------------------------===// +// AngleType +//===---------------------------------------------------------------------===// + +bool quirTypeIsAAngleType(MlirType type) { + return unwrap(type).isa(); +} + +MlirType quirAngleTypeGet(MlirContext ctx, unsigned width) { + return wrap(quir::AngleType::get(unwrap(ctx), width)); +} + +//===---------------------------------------------------------------------===// +// DurationType +//===---------------------------------------------------------------------===// + +bool quirTypeIsADurationType(MlirType type) { + return unwrap(type).isa(); +} + +// TODO: NEED TO ADD TIME UNIT TO THIS SIGNATURE +MlirType quirDurationTypeGet(MlirContext ctx) { + return wrap(quir::DurationType::get(unwrap(ctx), mlir::quir::TimeUnits::dt)); +} diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 1d9b1c4e8..a23bbaac8 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,4 +1,4 @@ -# (C) Copyright IBM 2023. +# (C) Copyright IBM 2023, 2024. # # This code is part of Qiskit. # @@ -11,6 +11,7 @@ # that they have been altered from the originals. add_subdirectory(API) +add_subdirectory(CAPI) add_subdirectory(Config) add_subdirectory(Conversion) add_subdirectory(Dialect) @@ -30,6 +31,7 @@ get_property(qssc_targets GLOBAL PROPERTY QSSC_TARGETS) get_property(mlir_dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) get_property(mlir_conversion_libs GLOBAL PROPERTY MLIR_CONVERSION_LIBS) get_property(mlir_extension_libs GLOBAL PROPERTY MLIR_EXTENSION_LIBS) +get_property(capi_libs GLOBAL PROPERTY QSSC_CAPI_LIBS) # All libraries for the QSS-Compiler set(qssc_api_libs @@ -56,6 +58,7 @@ set(qssc_api_libs mpc::mpc mpfr::mpfr gmp::gmp + ${capi_libs} ) set_property(GLOBAL PROPERTY QSSC_API_LIBS ${qssc_api_libs}) @@ -86,6 +89,7 @@ if(INSTALL_BUNDLED_STATIC_LIB) QSSCUtils ${mlir_dialect_libs} ${mlir_conversion_libs} + ${capi_libs} ) bundle_static_library(QSSCompiler QSSCompilerBundled) install(FILES diff --git a/lib/HAL/Compile/ThreadedCompilationManager.cpp b/lib/HAL/Compile/ThreadedCompilationManager.cpp index 3dc0ce3ed..1a0d39b79 100644 --- a/lib/HAL/Compile/ThreadedCompilationManager.cpp +++ b/lib/HAL/Compile/ThreadedCompilationManager.cpp @@ -191,7 +191,7 @@ void ThreadedCompilationManager::registerPassManagerWithContext_( auto *context = getContext(); // NOLINTNEXTLINE(clang-diagnostic-ctad-maybe-unsupported) - std::unique_lock const lock(contextMutex_); + std::unique_lock const lock(contextMutex_); context->appendDialectRegistry(dependentDialects); for (llvm::StringRef const name : dependentDialects.getDialectNames()) context->getOrLoadDialect(name); @@ -200,14 +200,14 @@ void ThreadedCompilationManager::registerPassManagerWithContext_( mlir::PassManager & ThreadedCompilationManager::getTargetPassManager_(Target *target) { // NOLINTNEXTLINE(clang-diagnostic-ctad-maybe-unsupported) - std::shared_lock const lock(targetPassManagersMutex_); + std::shared_lock const lock(targetPassManagersMutex_); return targetPassManagers_.at(target); } mlir::PassManager & ThreadedCompilationManager::createTargetPassManager_(Target *target) { // NOLINTNEXTLINE(clang-diagnostic-ctad-maybe-unsupported) - std::unique_lock const lock(targetPassManagersMutex_); + std::unique_lock const lock(targetPassManagersMutex_); return targetPassManagers_.emplace(target, getContext()).first->second; } diff --git a/python_lib/CMakeLists.txt b/python_lib/CMakeLists.txt index 94ce97532..ce7ba3605 100644 --- a/python_lib/CMakeLists.txt +++ b/python_lib/CMakeLists.txt @@ -1,4 +1,4 @@ -# (C) Copyright IBM 2023. +# (C) Copyright IBM 2023, 2024. # # This code is part of Qiskit. # @@ -10,8 +10,11 @@ # copyright notice, and modified files need to carry a notice indicating # that they have been altered from the originals. +include(AddMLIRPython) + project(py_qssc) +add_compile_definitions("MLIR_PYTHON_PACKAGE_PREFIX=qss_compiler.mlir.") macro(python_pkg_add_file file lib) set(src_file ${CMAKE_CURRENT_SOURCE_DIR}/${file}) @@ -80,3 +83,182 @@ configure_file(pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/pyproject.toml) add_subdirectory(qss_compiler) add_custom_target(copy_python_files DEPENDS ${PY_LIB_FILES}) add_dependencies(py_qssc copy_python_files) + +# TODO: redeclare built-in MLIR python sources and extensions to remove source file dependencies +get_filename_component(LLVM_CMAKE ${LLVM_DIR} DIRECTORY) +get_filename_component(LLVM_LIB ${LLVM_CMAKE} DIRECTORY) +set(LLVM_SRC_PYTHON ${LLVM_LIB} "/src/python/") + +declare_mlir_python_sources(QSSPythonSources) +declare_mlir_python_sources(QSSPythonSources.Dialects + ADD_TO_PARENT QSSPythonSources) + + +declare_mlir_dialect_python_bindings( + ADD_TO_PARENT QSSPythonSources.Dialects + ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/qss_compiler/mlir" + TD_FILE dialects/QUIR.td + SOURCES + dialects/quir.py + dialects/quir.pyi + dialects/_quir_ops_ext.py + DIALECT_NAME quir) + +declare_mlir_dialect_python_bindings( + ADD_TO_PARENT QSSPythonSources.Dialects + ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/qss_compiler/mlir" + TD_FILE dialects/Pulse.td + SOURCES + dialects/pulse.py + dialects/pulse.pyi + dialects/_pulse_ops_ext.py + DIALECT_NAME pulse) + +declare_mlir_dialect_python_bindings( + ADD_TO_PARENT QSSPythonSources.Dialects + ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/qss_compiler/mlir" + TD_FILE dialects/OQ3.td + SOURCES + dialects/oq3.py + dialects/OQ3.pyi + dialects/_oq3_ops_ext.py + DIALECT_NAME oq3) + +declare_mlir_dialect_python_bindings( + ADD_TO_PARENT QSSPythonSources.Dialects + ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/qss_compiler/mlir" + TD_FILE dialects/QCS.td + SOURCES + dialects/qcs.py + dialects/QCS.pyi + dialects/_qcs_ops_ext.py + DIALECT_NAME qcs) + + +set(PYTHON_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../lib/Bindings/Python/") + +declare_mlir_python_extension(QSSPythonExtension.Dialects.Pulse.Pybind + MODULE_NAME _qeDialectsPulse + ADD_TO_PARENT QSSPythonSources.Dialects.pulse + ROOT_DIR "${PYTHON_SOURCE_DIR}" + SOURCES + DialectPulse.cpp + PRIVATE_LINK_LIBS + LLVMSupport + MLIRPulseDialect + MLIRPulseUtils + MLIRQUIRDialect + MLIRQUIRUtils + MLIROQ3Dialect + MLIRQCSDialect + EMBED_CAPI_LINK_LIBS + MLIRCAPIIR + MLIRCAPIPulse +) + +add_dependencies(py_qssc + QSSPythonSources.Dialects.pulse.ops_gen + QSSPythonModules.extension._qeDialectsPulse.dso +) + +declare_mlir_python_extension(QSSPythonExtension.Dialects.QUIR.Pybind + MODULE_NAME _qeDialectsQUIR + ADD_TO_PARENT QSSPythonSources.Dialects.quir + ROOT_DIR "${PYTHON_SOURCE_DIR}" + SOURCES + DialectQUIR.cpp + PRIVATE_LINK_LIBS + LLVMSupport + MLIRQUIRDialect + MLIRQUIRUtils + MLIROQ3Dialect + MLIRQCSDialect + EMBED_CAPI_LINK_LIBS + MLIRCAPIIR + MLIRCAPIQUIR +) + +add_dependencies(py_qssc + QSSPythonSources.Dialects.quir.ops_gen + QSSPythonModules.extension._qeDialectsQUIR.dso +) + +declare_mlir_python_extension(QSSPythonExtension.Dialects.QCS.Pybind + MODULE_NAME _qeDialectsQCS + ADD_TO_PARENT QSSPythonSources.Dialects.qcs + ROOT_DIR "${PYTHON_SOURCE_DIR}" + SOURCES + DialectQCS.cpp + PRIVATE_LINK_LIBS + LLVMSupport + MLIRQCSDialect + EMBED_CAPI_LINK_LIBS + MLIRCAPIIR + MLIRCAPIQCS +) + +add_dependencies(py_qssc + QSSPythonSources.Dialects.qcs.ops_gen + QSSPythonModules.extension._qeDialectsQCS.dso +) + +declare_mlir_python_extension(QSSPythonExtension.Dialects.OQ3.Pybind + MODULE_NAME _qeDialectsOQ3 + ADD_TO_PARENT QSSPythonSources.Dialects.oq3 + ROOT_DIR "${PYTHON_SOURCE_DIR}" + SOURCES + DialectOQ3.cpp + PRIVATE_LINK_LIBS + LLVMSupport + MLIROQ3Dialect + EMBED_CAPI_LINK_LIBS + MLIRCAPIIR + MLIRCAPIOQ3 +) + +add_dependencies(py_qssc + QSSPythonSources.Dialects.oq3.ops_gen + QSSPythonModules.extension._qeDialectsOQ3.dso +) + +add_mlir_python_common_capi_library(QSSPythonCAPI + INSTALL_COMPONENT QSSPythonModules + INSTALL_DESTINATION qss_compiler/mlir/_mlir_libs + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/qss_compiler/mlir/_mlir_libs" + RELATIVE_INSTALL_ROOT "../../.." + DECLARED_SOURCES + QSSPythonSources + MLIRPythonSources + MLIRPythonExtension.RegisterEverything +) + +add_mlir_python_modules(QSSPythonModules + ROOT_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/qss_compiler/mlir/" + INSTALL_PREFIX "qss_compiler/mlir/" + DECLARED_SOURCES + QSSPythonSources + MLIRPythonSources + MLIRPythonExtension.RegisterEverything + MLIRPythonCAPI.HeaderSources + COMMON_CAPI_LINK_LIBS + QSSPythonCAPI +) + +add_dependencies(py_qssc + ${mlir_qssc_capi_libs} + QSSPythonCAPI + QSSPythonModules + # register everything dsos + QSSPythonModules.extension._mlir.dso + QSSPythonModules.extension._mlirAsyncPasses.dso + QSSPythonModules.extension._mlirDialectsLinalg.dso + QSSPythonModules.extension._mlirDialectsPDL.dso + QSSPythonModules.extension._mlirDialectsQuant.dso + QSSPythonModules.extension._mlirDialectsSparseTensor.dso + QSSPythonModules.extension._mlirDialectsTransform.dso + QSSPythonModules.extension._mlirExecutionEngine.dso + QSSPythonModules.extension._mlirGPUPasses.dso + QSSPythonModules.extension._mlirLinalgPasses.dso + QSSPythonModules.extension._mlirRegisterEverything.dso + QSSPythonModules.extension._mlirSparseTensorPasses.dso +) diff --git a/python_lib/qss_compiler/examples/SequenceEx.mlir b/python_lib/qss_compiler/examples/SequenceEx.mlir new file mode 100644 index 000000000..c1a1fe69a --- /dev/null +++ b/python_lib/qss_compiler/examples/SequenceEx.mlir @@ -0,0 +1,11 @@ +module { + pulse.sequence public @test() -> i1 { + %c5_i32 = arith.constant 5 : i32 + %cst = arith.constant 2.500000e+00 : f64 + %cst_0 = arith.constant 0.000000e+00 : f64 + %0 = complex.create %cst, %cst_0 : complex + %1 = pulse.const_waveform(%c5_i32, %0) : (i32, complex) -> !pulse.waveform + %false = arith.constant false + pulse.return %false : i1 + } +} diff --git a/python_lib/qss_compiler/examples/SequenceEx.py b/python_lib/qss_compiler/examples/SequenceEx.py new file mode 100755 index 000000000..cd9f32f1f --- /dev/null +++ b/python_lib/qss_compiler/examples/SequenceEx.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python +# +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +# A simple example of creating an SequenceOp using the pulse python bindings. + +from qss_compiler.mlir.ir import InsertionPoint, Location, Module, Context +from qss_compiler.mlir.ir import IntegerType, F64Type, ComplexType + +from qss_compiler.mlir.dialects import arith, complex + +from qss_compiler.mlir.dialects import pulse, quir + + +dur_val = 5 +amp_r_val = 2.5 +amp_i_val = 0.0 + + +with Context(), Location.unknown(): + pulse.pulse.register_dialect() + quir.quir.register_dialect() + + wf = pulse.WaveformType.get() + + f64 = F64Type.get() + i32 = IntegerType.get_signless(32) + + i1 = IntegerType.get_signless(1) + + module = Module.create() + + with InsertionPoint(module.body): + test = pulse.SequenceOp("test", [], [i1]) + test.add_entry_block() + + with InsertionPoint(test.entry_block): + dur = arith.ConstantOp(i32, dur_val) + + amp_r = arith.ConstantOp(f64, amp_r_val) + amp_i = arith.ConstantOp(f64, amp_i_val) + amp = complex.CreateOp(ComplexType.get(F64Type.get()), amp_r, amp_i) + + const = pulse.ConstOp(dur, amp) + + ret = arith.ConstantOp(i1, 0) + + pulse.ReturnOp([ret]) + +print(module) + +# writing to a file +print("Writing to SequenceEx.mlir") +test = open("SequenceEx.mlir", "w") +try: + test.write(str(module)) +except OSError: + pass +test.close() +print("Done!") diff --git a/python_lib/qss_compiler/examples/TestOps.mlir b/python_lib/qss_compiler/examples/TestOps.mlir new file mode 100644 index 000000000..093252884 --- /dev/null +++ b/python_lib/qss_compiler/examples/TestOps.mlir @@ -0,0 +1,45 @@ +module { + func.func @main() -> (i1, i1) { + %0 = "pulse.create_port"() {uid = "p0"} : () -> !pulse.port + %1 = "pulse.create_port"() {uid = "p1"} : () -> !pulse.port + %2 = "pulse.create_frame"() {uid = "f0"} : () -> !pulse.frame + %3 = "pulse.mix_frame"(%0) {uid = "mf0-p0"} : (!pulse.port) -> !pulse.mixed_frame + %cst = arith.constant 0.10086211860780928 : f64 + %cst_0 = arith.constant 0.0012978777572167797 : f64 + %4 = complex.create %cst, %cst_0 : complex + %5:2 = pulse.call_sequence @test_pulse_ops(%0, %1, %2, %3, %4) : (!pulse.port, !pulse.port, !pulse.frame, !pulse.mixed_frame, complex) -> (i1, i1) + return %5#0, %5#1 : i1, i1 + } + pulse.sequence public @test_pulse_ops(%arg0: !pulse.port, %arg1: !pulse.port, %arg2: !pulse.frame, %arg3: !pulse.mixed_frame, %arg4: complex) -> (i1, i1) { + %c160_i32 = arith.constant 160 : i32 + %c40_i32 = arith.constant 40 : i32 + %c1000_i32 = arith.constant 1000 : i32 + %cst = arith.constant -1.3677586253287046 : f64 + %0 = pulse.gaussian(%c160_i32, %arg4, %c40_i32) : (i32, complex, i32) -> !pulse.waveform + %1 = pulse.gaussian_square(%c160_i32, %arg4, %c40_i32, %c1000_i32) : (i32, complex, i32, i32) -> !pulse.waveform + %2 = pulse.drag(%c160_i32, %arg4, %c40_i32, %cst) : (i32, complex, i32, f64) -> !pulse.waveform + %3 = pulse.const_waveform(%c160_i32, %arg4) : (i32, complex) -> !pulse.waveform + %4 = pulse.create_waveform dense<[[0.000000e+00, 5.000000e-01], [5.000000e-01, 5.000000e-01], [5.000000e-01, 0.000000e+00]]> : tensor<3x2xf64> -> !pulse.waveform + %5 = "pulse.mix_frame"(%arg0) {uid = "mf1-p0"} : (!pulse.port) -> !pulse.mixed_frame + %cst_0 = arith.constant 0.10086211860780928 : f64 + %cst_1 = arith.constant 0.0012978777572167797 : f64 + %6 = complex.create %cst_0, %cst_1 : complex + %cst_2 = arith.constant 2.000000e+06 : f64 + pulse.set_frequency(%arg3, %cst_2) : (!pulse.mixed_frame, f64) + pulse.set_frequency(%arg2, %cst_2) : (!pulse.frame, f64) + pulse.shift_frequency(%arg3, %cst_2) : (!pulse.mixed_frame, f64) + pulse.shift_frequency(%arg2, %cst_2) : (!pulse.frame, f64) + %cst_3 = arith.constant 3.140000e+00 : f64 + pulse.set_phase(%arg3, %cst_2) : (!pulse.mixed_frame, f64) + pulse.set_phase(%arg2, %cst_2) : (!pulse.frame, f64) + pulse.shift_phase(%arg3, %cst_2) : (!pulse.mixed_frame, f64) + pulse.shift_phase(%arg2, %cst_2) : (!pulse.frame, f64) + pulse.barrier %arg2 : !pulse.frame + %c100_i32 = arith.constant 100 : i32 + pulse.delay(%arg3, %c100_i32) : (!pulse.mixed_frame, i32) + pulse.play(%arg3, %2) : (!pulse.mixed_frame, !pulse.waveform) + %7 = pulse.create_kernel(%4) : (!pulse.waveform) -> !pulse.kernel + %8 = pulse.capture(%arg3) : (!pulse.mixed_frame) -> i1 + pulse.return %8, %8 : i1, i1 + } +} diff --git a/python_lib/qss_compiler/examples/TestOps.py b/python_lib/qss_compiler/examples/TestOps.py new file mode 100755 index 000000000..61c96d3dc --- /dev/null +++ b/python_lib/qss_compiler/examples/TestOps.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python +# +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +# Example python script for generating mlir for a variety of Pulse Ops + +from qss_compiler.mlir.ir import InsertionPoint, Location, Module, Context +from qss_compiler.mlir.ir import IntegerType, F64Type, ComplexType + +from qss_compiler.mlir.dialects import arith, complex, func +from qss_compiler.mlir.dialects import pulse, quir + +import numpy as np + +with Context(), Location.unknown(): + # register dialects + pulse.pulse.register_dialect() + quir.quir.register_dialect() + + # declare types + i1 = IntegerType.get_signless(1) + i32 = IntegerType.get_signless(32) + f64 = F64Type.get() + + c64 = ComplexType.get(f64) + + p = pulse.PortType.get() + wf = pulse.WaveformType.get() + mf = pulse.MixedFrameType.get() + f = pulse.FrameType.get() + + # create module + module = Module.create() + with InsertionPoint(module.body): + # create main func op + function = func.FuncOp("main", ([], [i1, i1])) + function.add_entry_block() + + # create test sequence op + seq = pulse.SequenceOp("test_pulse_ops", [p, p, f, mf, c64], [i1, i1]) + seq.add_entry_block() + + # define sequence + with InsertionPoint(seq.entry_block): + # define args + p0, p1, f0, mf0, amp = seq.entry_block.arguments + + # define constants + dur = arith.ConstantOp(i32, 160) + sigma = arith.ConstantOp(i32, 40) + width = arith.ConstantOp(i32, 1000) + beta = arith.ConstantOp(f64, -1.3677586253287046) + + samples = np.array([[0.0, 0.5], [0.5, 0.5], [0.5, 0.0]]) + # samples_2d = DenseElementsAttr.get(samples) + + # create waveforms + gauss = pulse.GaussianOp(dur, amp, sigma) + gauss_square = pulse.GaussianSquareOp(dur, amp, sigma, width) + drag = pulse.DragOp(dur, amp, sigma, beta) + const = pulse.ConstOp(dur, amp) + kernel_waveform = pulse.Waveform_CreateOp(samples) + + # mixed frame + mf1 = pulse.MixFrameOp(p0, "mf1-p0") + + # define complex amp + param_amp_r = arith.ConstantOp(f64, 0.10086211860780928) + param_amp_i = arith.ConstantOp(f64, 0.0012978777572167797) + param_amp = complex.CreateOp(ComplexType.get(f64), param_amp_r, param_amp_i) + + # frequency operations + # define frequency + fc = arith.ConstantOp(f64, 200.0e4) + + pulse.SetFrequencyOp(mf0, fc) + pulse.SetFrequencyOp(f0, fc) + + pulse.ShiftFrequencyOp(mf0, fc) + pulse.ShiftFrequencyOp(f0, fc) + + # phase operations + # define angle + angle = arith.ConstantOp(f64, 3.14) + + pulse.SetPhaseOp(mf0, fc) + pulse.SetPhaseOp(f0, fc) + + pulse.ShiftPhaseOp(mf0, fc) + pulse.ShiftPhaseOp(f0, fc) + + # barrier + pulse.BarrierOp([f0]) + + # delay + delay_dur = arith.ConstantOp(i32, 100) + pulse.DelayOp(mf0, delay_dur) + + # play + pulse.PlayOp(mf0, drag) + + # kernel + kernel = pulse.Kernel_CreateOp(kernel_waveform) + res0 = pulse.CaptureOp(mf0) + pulse.ReturnOp([res0, res0]) + + # define main func + with InsertionPoint(function.entry_block): + # create ports + p0 = pulse.Port_CreateOp("p0") + p1 = pulse.Port_CreateOp("p1") + + # create frame and mixed frame + f0 = pulse.Frame_CreateOp("f0") + mf0 = pulse.MixFrameOp(p0, "mf0-p0") + + amp_r = arith.ConstantOp(f64, 0.10086211860780928) + amp_i = arith.ConstantOp(f64, 0.0012978777572167797) + amp = complex.CreateOp(ComplexType.get(F64Type.get()), amp_r, amp_i) + + # call test sequence + res = pulse.CallSequenceOp([i1, i1], "test_pulse_ops", [p0, p1, f0, mf0, amp]) + func.ReturnOp(res) + +print(module) + +# writing to a file +file = "TestOps.mlir" +print(f"Writing to {file}") +test = open(file, "w") +test.write(str(module)) +test.close() +print("Done!") diff --git a/python_lib/qss_compiler/examples/parse.py b/python_lib/qss_compiler/examples/parse.py new file mode 100755 index 000000000..3a95397c6 --- /dev/null +++ b/python_lib/qss_compiler/examples/parse.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# coding: utf-8 + +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +import sys +from qss_compiler.mlir.ir import Context, Module +from qss_compiler.mlir.dialects import pulse, quir + +with Context() as ctx: + + pulse.pulse.register_dialect() + quir.quir.register_dialect() + + with open(sys.argv[1]) as f: + data = f.read() + print(data) + module = Module.parse(data) + + +print(str(module)) diff --git a/python_lib/qss_compiler/examples/pulse.py b/python_lib/qss_compiler/examples/pulse.py new file mode 100755 index 000000000..88c9e11c8 --- /dev/null +++ b/python_lib/qss_compiler/examples/pulse.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# coding: utf-8 + +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +from qss_compiler.mlir.ir import Context, InsertionPoint, Location, Module +from qss_compiler.mlir.ir import F64Type, IntegerType, IndexType, ComplexType +from qss_compiler.mlir.dialects import arith, func, complex + +from qss_compiler.mlir.dialects import pulse, quir, qcs + +import numpy as np + + +num_samples = 3 +samples = np.arange(0, num_samples) + np.arange(0 + 1, num_samples + 1) * 1j +samples_2d = np.zeros((samples.shape[0], 2)) +samples_2d[:, 0] = np.real(samples) +samples_2d[:, 1] = np.imag(samples) + + +with Context() as ctx: + + pulse.pulse.register_dialect() + quir.quir.register_dialect() + + f64 = F64Type.get(ctx) + i32 = IntegerType.get_signless(32) + i1 = IntegerType.get_signless(1) + + idx = IndexType.get() + + mf = pulse.MixedFrameType.get(ctx) + wf = pulse.WaveformType.get(ctx) + + with Location.unknown(ctx) as loc: + module = Module.create(loc) + + with InsertionPoint(module.body): + mainFunc = func.FuncOp("main", ([], [i32])) + mainFunc.add_entry_block() + + with InsertionPoint(module.body): + + seq1 = pulse.SequenceOp("seq_1", [wf, wf, mf, mf], [i1]) + seq1.add_entry_block() + + with InsertionPoint(seq1.entry_block): + gs, dg, mf1, mf2 = seq1.arguments + c0 = arith.ConstantOp(i32, 656) + pulse.DelayOp(mf1, c0) + + amp = arith.ConstantOp(f64, 1.4) + sigma = arith.ConstantOp(f64, 5.25) + beta = arith.ConstantOp(f64, 1.0) + drag = pulse.DragOp(dg, amp, sigma, beta) + pulse.PlayOp(mf1, drag) + + zero = arith.ConstantOp(i1, 0) + ret = pulse.ReturnOp(zero) + + with InsertionPoint(mainFunc.entry_block): + qcs.SystemInitOp() + + c0 = arith.ConstantOp(f64, 0.0) + c1_r = arith.ConstantOp(f64, 0.0) + c1_i = arith.ConstantOp(f64, 0.0) + c1_c = complex.CreateOp(ComplexType.get(f64), c1_r, c1_i) + + p0 = pulse.Port_CreateOp("Q0") + + qcs.SystemFinalizeOp() + zero = arith.ConstantOp(i32, 0) + func.ReturnOp(zero) + +print(str(module)) diff --git a/python_lib/qss_compiler/examples/test_out.mlir b/python_lib/qss_compiler/examples/test_out.mlir new file mode 100644 index 000000000..b9b3fe9ef --- /dev/null +++ b/python_lib/qss_compiler/examples/test_out.mlir @@ -0,0 +1,91 @@ +module { + func @main() -> i32 { + qcs.init + %cst = arith.constant 0.000000e+00 : f64 + %0 = complex.create %cst, %cst : complex + %angle = quir.constant #quir.angle<0.000000e+00 : !quir.angle<20>> + %1 = "pulse.create_frame"() {uid = "M1"} : () -> !pulse.frame + %2 = "pulse.create_frame"() {uid = "MTRIGOUT.M1"} : () -> !pulse.frame + %3 = "pulse.create_frame"() {uid = "Q0"} : () -> !pulse.frame + %4 = "pulse.create_frame"() {uid = "Q1"} : () -> !pulse.frame + %5 = "pulse.create_frame"() {uid = "Q2"} : () -> !pulse.frame + %6 = "pulse.create_frame"() {uid = "Q3"} : () -> !pulse.frame + %7 = "pulse.create_frame"() {uid = "Q4"} : () -> !pulse.frame + %8 = "pulse.create_frame"() {uid = "Q5"} : () -> !pulse.frame + %9 = "pulse.create_frame"() {uid = "Q6"} : () -> !pulse.frame + %c0 = arith.constant 0 : index + %c1000 = arith.constant 1000 : index + %c1 = arith.constant 1 : index + scf.for %arg0 = %c0 to %c1000 step %c1 { + %dur = quir.constant #quir.duration<"150us" : !quir.duration> + quir.delay %dur, () : !quir.duration, () -> () + qcs.shot_init {qcs.numShots = 1000 : i32, quir.startNCOs = false} + %10 = pulse.create_waveform dense<"0x0000008036FA3F3F000000000000000000000040512D503F0000000000000000000000E0C58C583F000000000000000000000040B08E603F000000000000000000000080C8EF643F000000000000000000000060E069693F0000000000000000000000A029FD6D3F000000000000000000000040E954713F00000000000000000000002003B8733F0000000000000000000000E0F527763F0000000000000000000000A0D3A4783F000000000000000000000000AC2E7B3F0000000000000000000000008DC57D3F000000000000000000000040C134803F0000000000000000000000004B8D813F00000000000000000000008067EC823F0000000000000000000000601952843F0000000000000000000000E061BE853F0000000000000000000000604131873F0000000000000000000000A0B6AA883F000000000000000000000060BF2A8A3F00000000000000000000000058B18B3F0000000000000000000000807B3E8D3F00000000000000000000006023D28E3F0000000000000000000000E02336903F0000000000000000000000E06F06913F000000000000000000000040F0D9913F0000000000000000000000E09EB0923F000000000000000000000000758A933F0000000000000000000000006B67943F0000000000000000000000807847953F000000000000000000000040942A963F000000000000000000000040B410973F0000000000000000000000E0CDF9973F000000000000000000000060D5E5983F000000000000000000000060BED4993F0000000000000000000000A07BC69A3F0000000000000000000000E0FEBA9B3F00000000000000000000006039B29C3F0000000000000000000000401BAC9D3F0000000000000000000000E093A89E3F0000000000000000000000A091A79F3F0000000000000000000000208154A03F00000000000000000000004069D6A03F0000000000000000000000207759A13F000000000000000000000060A0DDA13F000000000000000000000000DA62A23F0000000000000000000000C018E9A23F0000000000000000000000E05070A33F00000000000000000000004076F8A33F0000000000000000000000407C81A43F000000000000000000000000560BA53F000000000000000000000020F695A53F0000000000000000000000C04E21A63F0000000000000000000000E051ADA63F0000000000000000000000C0F039A73F0000000000000000000000801CC7A73F0000000000000000000000E0C554A83F000000000000000000000020DDE2A83F0000000000000000000000605271A93F0000000000000000000000401500AA3F0000000000000000000000E0148FAA3F000000000000000000000060401EAB3F00000000000000000000008086ADAB3F000000000000000000000060D53CAC3F0000000000000000000000401BCCAC3F000000000000000000000000465BAD3F00000000000000000000002043EAAD3F0000000000000000000000E0FF78AE3F0000000000000000000000606907AF3F0000000000000000000000806C95AF3F0000000000000000000000E07A11B03F000000000000000000000000F957B03F000000000000000000000080269EB03F0000000000000000000000C0F9E3B03F0000000000000000000000A06829B13F000000000000000000000000696EB13F000000000000000000000000F1B2B13F000000000000000000000040F6F6B13F0000000000000000000000C06E3AB23F000000000000000000000040507DB23F0000000000000000000000A090BFB23F0000000000000000000000C02501B33F0000000000000000000000400542B33F0000000000000000000000202582B33F0000000000000000000000207BC1B33F000000000000000000000040FDFFB33F000000000000000000000080A13DB43F0000000000000000000000C05D7AB43F00000000000000000000004028B6B43F000000000000000000000020F7F0B43F0000000000000000000000A0C02AB53F0000000000000000000000207B63B53F0000000000000000000000201D9BB53F0000000000000000000000409DD1B53F000000000000000000000020F206B63F0000000000000000000000E0123BB63F000000000000000000000060F66DB63F0000000000000000000000C0939FB63F0000000000000000000000A0E2CFB63F000000000000000000000060DAFEB63F0000000000000000000000C0722CB73F0000000000000000000000E0A358B73F0000000000000000000000C06583B73F0000000000000000000000E0B0ACB73F0000000000000000000000C07DD4B73F000000000000000000000060C5FAB73F0000000000000000000000C0801FB83F000000000000000000000040A942B83F0000000000000000000000A03864B83F0000000000000000000000A02884B83F00000000000000000000008073A2B83F0000000000000000000000A013BFB83F0000000000000000000000C003DAB83F0000000000000000000000003FF3B83F0000000000000000000000A0C00AB93F0000000000000000000000608420B93F0000000000000000000000408634B93F000000000000000000000060C246B93F0000000000000000000000603557B93F000000000000000000000060DC65B93F000000000000000000000080B472B93F000000000000000000000040BB7DB93F0000000000000000000000E0EE86B93F0000000000000000000000604D8EB93F000000000000000000000060D593B93F0000000000000000000000008697B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000A09999B93F0000000000000000000000008697B93F000000000000000000000060D593B93F0000000000000000000000604D8EB93F0000000000000000000000E0EE86B93F000000000000000000000040BB7DB93F000000000000000000000080B472B93F000000000000000000000060DC65B93F0000000000000000000000603557B93F000000000000000000000060C246B93F0000000000000000000000408634B93F0000000000000000000000608420B93F0000000000000000000000A0C00AB93F0000000000000000000000003FF3B83F0000000000000000000000C003DAB83F0000000000000000000000A013BFB83F00000000000000000000008073A2B83F0000000000000000000000A02884B83F0000000000000000000000A03864B83F000000000000000000000040A942B83F0000000000000000000000C0801FB83F000000000000000000000060C5FAB73F0000000000000000000000C07DD4B73F0000000000000000000000E0B0ACB73F0000000000000000000000C06583B73F0000000000000000000000E0A358B73F0000000000000000000000C0722CB73F000000000000000000000060DAFEB63F0000000000000000000000A0E2CFB63F0000000000000000000000C0939FB63F000000000000000000000060F66DB63F0000000000000000000000E0123BB63F000000000000000000000020F206B63F0000000000000000000000409DD1B53F0000000000000000000000201D9BB53F0000000000000000000000207B63B53F0000000000000000000000A0C02AB53F000000000000000000000020F7F0B43F00000000000000000000004028B6B43F0000000000000000000000C05D7AB43F000000000000000000000080A13DB43F000000000000000000000040FDFFB33F0000000000000000000000207BC1B33F0000000000000000000000202582B33F0000000000000000000000400542B33F0000000000000000000000C02501B33F0000000000000000000000A090BFB23F000000000000000000000040507DB23F0000000000000000000000C06E3AB23F000000000000000000000040F6F6B13F000000000000000000000000F1B2B13F000000000000000000000000696EB13F0000000000000000000000A06829B13F0000000000000000000000C0F9E3B03F000000000000000000000080269EB03F000000000000000000000000F957B03F0000000000000000000000E07A11B03F0000000000000000000000806C95AF3F0000000000000000000000606907AF3F0000000000000000000000E0FF78AE3F00000000000000000000002043EAAD3F000000000000000000000000465BAD3F0000000000000000000000401BCCAC3F000000000000000000000060D53CAC3F00000000000000000000008086ADAB3F000000000000000000000060401EAB3F0000000000000000000000E0148FAA3F0000000000000000000000401500AA3F0000000000000000000000605271A93F000000000000000000000020DDE2A83F0000000000000000000000E0C554A83F0000000000000000000000801CC7A73F0000000000000000000000C0F039A73F0000000000000000000000E051ADA63F0000000000000000000000C04E21A63F000000000000000000000020F695A53F000000000000000000000000560BA53F0000000000000000000000407C81A43F00000000000000000000004076F8A33F0000000000000000000000E05070A33F0000000000000000000000C018E9A23F000000000000000000000000DA62A23F000000000000000000000060A0DDA13F0000000000000000000000207759A13F00000000000000000000004069D6A03F0000000000000000000000208154A03F0000000000000000000000A091A79F3F0000000000000000000000E093A89E3F0000000000000000000000401BAC9D3F00000000000000000000006039B29C3F0000000000000000000000E0FEBA9B3F0000000000000000000000A07BC69A3F000000000000000000000060BED4993F000000000000000000000060D5E5983F0000000000000000000000E0CDF9973F000000000000000000000040B410973F000000000000000000000040942A963F0000000000000000000000807847953F0000000000000000000000006B67943F000000000000000000000000758A933F0000000000000000000000E09EB0923F000000000000000000000040F0D9913F0000000000000000000000E06F06913F0000000000000000000000E02336903F00000000000000000000006023D28E3F0000000000000000000000807B3E8D3F00000000000000000000000058B18B3F000000000000000000000060BF2A8A3F0000000000000000000000A0B6AA883F0000000000000000000000604131873F0000000000000000000000E061BE853F0000000000000000000000601952843F00000000000000000000008067EC823F0000000000000000000000004B8D813F000000000000000000000040C134803F0000000000000000000000008DC57D3F000000000000000000000000AC2E7B3F0000000000000000000000A0D3A4783F0000000000000000000000E0F527763F00000000000000000000002003B8733F000000000000000000000040E954713F0000000000000000000000A029FD6D3F000000000000000000000060E069693F000000000000000000000080C8EF643F000000000000000000000040B08E603F0000000000000000000000E0C58C583F000000000000000000000040512D503F00000000000000000000008036FA3F3F0000000000000000"> : tensor<12800x2xf64> -> !pulse.waveform + %11 = pulse.create_waveform dense<"0x000000C0BACB503F000000405200613F00000060001D613F0000000018A3613F00000020AA266A3F000000804448623F000000C001C2713F00000040A5EF623F000000800D9B763F000000A00399633F00000020F19E7B3F000000802544643F000000600B67803F00000020CCF0643F000000E06B14833F00000060B59E653F00000020BED7853F000000C09A4D663F000000801DB1883F0000004032FD663F000000609BA08B3F000000802DAD673F000000403FA68E3F000000C03A5D683F0000000003E1903F00000080040D693F000000C0F079923F000000C031BC693F00000040DC1D943F000000C0656A6A3F000000A0B2CC953F000000E040176B3F000000405B86973F0000000060C26B3F00000000B74A993F000000405D6B6C3F00000040A0199B3F00000020D0116D3F000000C0EAF29C3F000000804DB56D3F0000004063D69E3F000000C067556E3F000000E0E761A03F000000C0AFF16E3F000000C0775DA13F00000020B4896F3F000000E0BC5DA23F00000040810E703F000000C08F62A33F000000609355703F000000C0C46BA43F00000080D699703F000000E02C79A53F0000000010DB703F00000060958AA63F000000600519713F000000C0C79FA73F000000207C53713F000000008AB8A83F000000603A8A713F000000609ED4A93F0000008006BD713F00000080C3F3AA3F000000A0A7EB713F000000A0B415AC3F000000E0E515723F00000020293AAD3F000000A08A3B723F00000060D560AE3F00000040605C723F000000606A89AF3F000000E03278723F000000E0CA59B03F00000080D08E723F0000002081EFB03F000000E008A0723F000000A0AB85B13F00000020AEAB723F000000E01C1CB23F0000006094B1723F00000000A6B2B23F000000C092B1723F000000C01649B33F0000000083AB723F000000E03DDFB33F000000C0419F723F000000E0E874B43F00000000AF8C723F000000A0E409B53F000000C0AD73723F000000C0FC9DB53F000000C02454723F00000060FC30B63F00000040FE2D723F00000000AEC2B63F000000802801723F00000060DB52B73F000000A095CD713F000000604EE1B73F000000803B93713F00000020D06DB83F000000C01452713F000000E029F8B83F000000E01F0A713F000000E02480B93F000000E05FBB703F000000808A05BA3F00000040DC65703F000000802488BA3F000000A0A009703F00000000BD07BB3F000000A07B4D6F3F000000C01E84BB3F00000020917A6E3F0000004015FDBB3F00000020B59A6D3F000000E06C72BC3F000000C023AE6C3F000000E0F2E3BC3F0000004022B56B3F000000E07551BD3F000000E0FEAF6A3F000000C0C5BABD3F000000A0109F693F000000A0B31FBE3F00000040B782683F000000801280BE3F000000E05A5B673F000000C0B6DBBE3F000000E06B29663F000000E07632BF3F000000A062ED643F000000202B84BF3F00000000BFA7633F000000E0ADD0BF3F000000600859623F000000E0ED0BC03F00000040CD01613F000000E0C92CC03F0000008044455F3F00000060DB4AC03F0000006045785C3F000000801466C03F00000080DE9D593F00000040687EC03F000000005CB7563F00000020CB93C03F0000008013C6533F000000E032A6C03F0000004063CB503F0000000097B5C03F000000C061914B3F000000E0EFC1C03F00000080D07E453F000000C037CBC03F000000C0EAC33E3F000000206AD1C03F00000000767B323F0000002084D4C03F000000008FA8183F0000002084D4C03F000000008FA818BF000000206AD1C03F00000000767B32BF000000C037CBC03F000000C0EAC33EBF000000E0EFC1C03F00000080D07E45BF0000000097B5C03F000000C061914BBF000000E032A6C03F0000004063CB50BF00000020CB93C03F0000008013C653BF00000040687EC03F000000005CB756BF000000801466C03F00000080DE9D59BF00000060DB4AC03F0000006045785CBF000000E0C92CC03F0000008044455FBF000000E0ED0BC03F00000040CD0161BF000000E0ADD0BF3F00000060085962BF000000202B84BF3F00000000BFA763BF000000E07632BF3F000000A062ED64BF000000C0B6DBBE3F000000E06B2966BF000000801280BE3F000000E05A5B67BF000000A0B31FBE3F00000040B78268BF000000C0C5BABD3F000000A0109F69BF000000E07551BD3F000000E0FEAF6ABF000000E0F2E3BC3F0000004022B56BBF000000E06C72BC3F000000C023AE6CBF0000004015FDBB3F00000020B59A6DBF000000C01E84BB3F00000020917A6EBF00000000BD07BB3F000000A07B4D6FBF000000802488BA3F000000A0A00970BF000000808A05BA3F00000040DC6570BF000000E02480B93F000000E05FBB70BF000000E029F8B83F000000E01F0A71BF00000020D06DB83F000000C0145271BF000000604EE1B73F000000803B9371BF00000060DB52B73F000000A095CD71BF00000000AEC2B63F00000080280172BF00000060FC30B63F00000040FE2D72BF000000C0FC9DB53F000000C0245472BF000000A0E409B53F000000C0AD7372BF000000E0E874B43F00000000AF8C72BF000000E03DDFB33F000000C0419F72BF000000C01649B33F0000000083AB72BF00000000A6B2B23F000000C092B172BF000000E01C1CB23F0000006094B172BF000000A0AB85B13F00000020AEAB72BF0000002081EFB03F000000E008A072BF000000E0CA59B03F00000080D08E72BF000000606A89AF3F000000E0327872BF00000060D560AE3F00000040605C72BF00000020293AAD3F000000A08A3B72BF000000A0B415AC3F000000E0E51572BF00000080C3F3AA3F000000A0A7EB71BF000000609ED4A93F0000008006BD71BF000000008AB8A83F000000603A8A71BF000000C0C79FA73F000000207C5371BF00000060958AA63F00000060051971BF000000E02C79A53F0000000010DB70BF000000C0C46BA43F00000080D69970BF000000C08F62A33F00000060935570BF000000E0BC5DA23F00000040810E70BF000000C0775DA13F00000020B4896FBF000000E0E761A03F000000C0AFF16EBF0000004063D69E3F000000C067556EBF000000C0EAF29C3F000000804DB56DBF00000040A0199B3F00000020D0116DBF00000000B74A993F000000405D6B6CBF000000405B86973F0000000060C26BBF000000A0B2CC953F000000E040176BBF00000040DC1D943F000000C0656A6ABF000000C0F079923F000000C031BC69BF0000000003E1903F00000080040D69BF000000403FA68E3F000000C03A5D68BF000000609BA08B3F000000802DAD67BF000000801DB1883F0000004032FD66BF00000020BED7853F000000C09A4D66BF000000E06B14833F00000060B59E65BF000000600B67803F00000020CCF064BF00000020F19E7B3F00000080254464BF000000800D9B763F000000A0039963BF000000C001C2713F00000040A5EF62BF00000020AA266A3F00000080444862BF00000060001D613F0000000018A361BF000000C0BACB503F00000040520061BF"> : tensor<160x2xf64> -> !pulse.waveform + %12 = pulse.call_sequence @seq_0(%1, %10, %2, %3, %4, %11, %5, %6, %7, %8, %9) : (!pulse.frame, !pulse.waveform, !pulse.frame, !pulse.frame, !pulse.frame, !pulse.waveform, !pulse.frame, !pulse.frame, !pulse.frame, !pulse.frame, !pulse.frame) -> i1 + } {quir.shotLoop} + %c0_i32 = arith.constant 0 : i32 + return %c0_i32 : i32 + } + pulse.sequence public @seq_0(%arg0: !pulse.frame, %arg1: !pulse.waveform, %arg2: !pulse.frame, %arg3: !pulse.frame, %arg4: !pulse.frame, %arg5: !pulse.waveform, %arg6: !pulse.frame, %arg7: !pulse.frame, %arg8: !pulse.frame, %arg9: !pulse.frame, %arg10: !pulse.frame) -> i1 { + %c656_i32 = arith.constant 656 : i32 + pulse.delay(%arg0, %c656_i32) : (!pulse.frame, i32) + %cst = arith.constant 0x41B4266CF2000000 : f64 + pulse.set_frequency(%arg0, %cst) : (!pulse.frame, f64) + %cst_0 = arith.constant 1.000000e+00 : f64 + pulse.set_amplitude(%arg0, %cst_0) : (!pulse.frame, f64) + %cst_1 = arith.constant -1.5766804920543069 : f64 + pulse.shift_phase(%arg0, %cst_1) : (!pulse.frame, f64) + pulse.play(%arg0, %arg1) : (!pulse.frame, !pulse.waveform) + %c800_i32 = arith.constant 800 : i32 + pulse.delay(%arg0, %c800_i32) : (!pulse.frame, i32) + %c4485744_i32 = arith.constant 4485744 : i32 + pulse.delay(%arg0, %c4485744_i32) : (!pulse.frame, i32) + %c1296_i32 = arith.constant 1296 : i32 + pulse.delay(%arg2, %c1296_i32) : (!pulse.frame, i32) + %0 = pulse.capture {applyDelayOffset = false}(%arg2) : (!pulse.frame) -> i1 + %c12800_i32 = arith.constant 12800 : i32 + pulse.delay(%arg2, %c12800_i32) : (!pulse.frame, i32) + %c4485904_i32 = arith.constant 4485904 : i32 + pulse.delay(%arg2, %c4485904_i32) : (!pulse.frame, i32) + %c13296_i32 = arith.constant 13296 : i32 + pulse.delay(%arg3, %c13296_i32) : (!pulse.frame, i32) + %c160_i32 = arith.constant 160 : i32 + pulse.delay(%arg3, %c160_i32) : (!pulse.frame, i32) + pulse.delay(%arg3, %c800_i32) : (!pulse.frame, i32) + pulse.delay(%arg3, %c4485744_i32) : (!pulse.frame, i32) + %c496_i32 = arith.constant 496 : i32 + pulse.delay(%arg4, %c496_i32) : (!pulse.frame, i32) + %cst_2 = arith.constant -306286769.41622829 : f64 + pulse.set_frequency(%arg4, %cst_2) : (!pulse.frame, f64) + pulse.set_amplitude(%arg4, %cst_0) : (!pulse.frame, f64) + %cst_3 = arith.constant -0.0044008017224468482 : f64 + pulse.shift_phase(%arg4, %cst_3) : (!pulse.frame, f64) + pulse.play(%arg4, %arg5) : (!pulse.frame, !pulse.waveform) + pulse.delay(%arg4, %c12800_i32) : (!pulse.frame, i32) + pulse.delay(%arg4, %c800_i32) : (!pulse.frame, i32) + pulse.delay(%arg4, %c4485744_i32) : (!pulse.frame, i32) + pulse.delay(%arg6, %c13296_i32) : (!pulse.frame, i32) + pulse.delay(%arg6, %c160_i32) : (!pulse.frame, i32) + pulse.delay(%arg6, %c800_i32) : (!pulse.frame, i32) + pulse.delay(%arg6, %c4485744_i32) : (!pulse.frame, i32) + pulse.delay(%arg7, %c13296_i32) : (!pulse.frame, i32) + pulse.delay(%arg7, %c160_i32) : (!pulse.frame, i32) + pulse.delay(%arg7, %c800_i32) : (!pulse.frame, i32) + pulse.delay(%arg7, %c4485744_i32) : (!pulse.frame, i32) + pulse.delay(%arg8, %c13296_i32) : (!pulse.frame, i32) + pulse.delay(%arg8, %c160_i32) : (!pulse.frame, i32) + pulse.delay(%arg8, %c800_i32) : (!pulse.frame, i32) + pulse.delay(%arg8, %c4485744_i32) : (!pulse.frame, i32) + pulse.delay(%arg9, %c13296_i32) : (!pulse.frame, i32) + pulse.delay(%arg9, %c160_i32) : (!pulse.frame, i32) + pulse.delay(%arg9, %c800_i32) : (!pulse.frame, i32) + pulse.delay(%arg9, %c4485744_i32) : (!pulse.frame, i32) + pulse.delay(%arg10, %c13296_i32) : (!pulse.frame, i32) + pulse.delay(%arg10, %c160_i32) : (!pulse.frame, i32) + pulse.delay(%arg10, %c800_i32) : (!pulse.frame, i32) + pulse.delay(%arg10, %c4485744_i32) : (!pulse.frame, i32) + %false = arith.constant false + pulse.return %false : i1 + } +} diff --git a/python_lib/qss_compiler/lib.cpp b/python_lib/qss_compiler/lib.cpp index bf4b5d840..6b0006766 100644 --- a/python_lib/qss_compiler/lib.cpp +++ b/python_lib/qss_compiler/lib.cpp @@ -56,9 +56,6 @@ #include "lib_enums.h" #include "API/api.h" -// <<<<<<< HEAD -// #include -// ======= #include "Dialect/RegisterDialects.h" #include "Dialect/RegisterPasses.h" diff --git a/python_lib/qss_compiler/mlir/dialects/OQ3.pyi b/python_lib/qss_compiler/mlir/dialects/OQ3.pyi new file mode 100644 index 000000000..361096612 --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/OQ3.pyi @@ -0,0 +1,23 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +# based on llvm-project/mlir/python/mlir/_mlir_libs/_mlir/dialects/pdl.pyi + +from typing import Optional # noqa: F401 + +from ..ir import Type, Context # noqa: F401 + +__all__ = [] diff --git a/python_lib/qss_compiler/mlir/dialects/OQ3.td b/python_lib/qss_compiler/mlir/dialects/OQ3.td new file mode 100644 index 000000000..9f9d1de94 --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/OQ3.td @@ -0,0 +1,22 @@ +//===- OQ3.td - OQ3 dialect python includer ----------------*- tablegen -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// + +#ifndef PYTHON_BINDINGS_OQ3_OPS +#define PYTHON_BINDINGS_OQ3_OPS + +include "Dialect/OQ3/IR/OQ3Ops.td" + +#endif // PYTHON_BINDINGS_OQ3_OPS diff --git a/python_lib/qss_compiler/mlir/dialects/Pulse.td b/python_lib/qss_compiler/mlir/dialects/Pulse.td new file mode 100644 index 000000000..731d8e6ca --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/Pulse.td @@ -0,0 +1,22 @@ +//===- Pulse.td - Pulse dialect python includer ------------*- tablegen -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// + +#ifndef PYTHON_BINDINGS_PULSE_OPS +#define PYTHON_BINDINGS_PULSE_OPS + +include "Dialect/Pulse/IR/Pulse.td" + +#endif // PYTHON_BINDINGS_PULSE_OPS diff --git a/python_lib/qss_compiler/mlir/dialects/QCS.pyi b/python_lib/qss_compiler/mlir/dialects/QCS.pyi new file mode 100644 index 000000000..361096612 --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/QCS.pyi @@ -0,0 +1,23 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +# based on llvm-project/mlir/python/mlir/_mlir_libs/_mlir/dialects/pdl.pyi + +from typing import Optional # noqa: F401 + +from ..ir import Type, Context # noqa: F401 + +__all__ = [] diff --git a/python_lib/qss_compiler/mlir/dialects/QCS.td b/python_lib/qss_compiler/mlir/dialects/QCS.td new file mode 100644 index 000000000..563bdcd00 --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/QCS.td @@ -0,0 +1,24 @@ +//===- QCS.td - QCS dialect python includer ----------------*- tablegen -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// + +#ifndef PYTHON_BINDINGS_QCS_OPS +#define PYTHON_BINDINGS_QCS_OPS + +include "mlir/IR/OpBase.td" +include "Dialect/QCS/IR/QCSBase.td" +include "Dialect/QCS/IR/QCSOps.td" + +#endif // PYTHON_BINDINGS_QCS_OPS diff --git a/python_lib/qss_compiler/mlir/dialects/QUIR.td b/python_lib/qss_compiler/mlir/dialects/QUIR.td new file mode 100644 index 000000000..f7f726dea --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/QUIR.td @@ -0,0 +1,22 @@ +//===- QUIR.td - QUIR dialect python includer --------------*- tablegen -*-===// +// +// (C) Copyright IBM 2024. +// +// This code is part of Qiskit. +// +// This code is licensed under the Apache License, Version 2.0 with LLVM +// Exceptions. You may obtain a copy of this license in the LICENSE.txt +// file in the root directory of this source tree. +// +// Any modifications or derivative works of this code must retain this +// copyright notice, and modified files need to carry a notice indicating +// that they have been altered from the originals. +// +//===----------------------------------------------------------------------===// + +#ifndef PYTHON_BINDINGS_QUIR_OPS +#define PYTHON_BINDINGS_QUIR_OPS + +include "Dialect/QUIR/IR/QUIR.td" + +#endif // PYTHON_BINDINGS_QUIR_OPS diff --git a/python_lib/qss_compiler/mlir/dialects/_oq3_ops_ext.py b/python_lib/qss_compiler/mlir/dialects/_oq3_ops_ext.py new file mode 100644 index 000000000..8d608506d --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/_oq3_ops_ext.py @@ -0,0 +1,27 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +try: + from ..ir import * # noqa: F401, F403 + from .oq3 import * # noqa: F401, F403 + from .._mlir_libs._qeDialectsOQ3 import * # noqa: F401, F403 + from ._ods_common import ( # noqa: F401 + get_default_loc_context as _get_default_loc_context, + ) + + from typing import Any, List, Optional, Union # noqa: F401 +except ImportError as e: + raise RuntimeError("Error loading imports from extension module") from e diff --git a/python_lib/qss_compiler/mlir/dialects/_pulse_ops_ext.py b/python_lib/qss_compiler/mlir/dialects/_pulse_ops_ext.py new file mode 100644 index 000000000..6b892d200 --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/_pulse_ops_ext.py @@ -0,0 +1,138 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +try: + from ..ir import ( + ArrayAttr, + DenseElementsAttr, + StringAttr, + TypeAttr, + FlatSymbolRefAttr, + FunctionType, + ) + from ..ir import * # noqa: F401, F403 + from .pulse import * # noqa: F401, F403 + from .quir import ( # noqa: F401, F403 + AngleType, + ConstantOp as QUIRConstantOp, + ) + from .._mlir_libs._qeDialectsPulse import * # noqa: F401, F403 + from ._ods_common import ( # noqa: F401 + get_default_loc_context as _get_default_loc_context, + ) +except ImportError as e: + raise RuntimeError("Error loading imports from extension module") from e + +from typing import Any, List, Optional, Union # noqa: F401 + + +class CallSequenceOp: + def __init__(self, res, callee, operands_, *, loc=None, ip=None): + super().__init__(res, FlatSymbolRefAttr.get(str(callee)), operands_) + + +class Frame_CreateOp: + """Specialization for the Frame_Create op class.""" + + def __init__(self, uid, *, amp=None, freq=None, phase=None, loc=None, ip=None): + super().__init__( + StringAttr.get(str(uid)), + initial_amp=amp, + initial_freq=freq, + initial_phase=phase, + loc=loc, + ip=ip, + ) + + +class MixFrameOp: + """Specialization for the MixFrame op class.""" + + def __init__( + self, + port, + frame, + *, + initial_amp=None, + initial_freq=None, + initial_phase=None, + loc=None, + ip=None + ): + super().__init__( + port, + StringAttr.get(str(frame)), + initial_amp=initial_amp, + initial_freq=initial_freq, + initial_phase=initial_phase, + loc=loc, + ip=ip, + ) + + +class PlayOp: + def __init__(self, target, wfr, *, angle=None, ssb=None, amplitude=None, loc=None, ip=None): + super().__init__( + target, + wfr, + angle=angle, + ssb=ssb, + amplitude=amplitude, + loc=loc, + ip=ip, + ) + + +class Port_CreateOp: + def __init__(self, uid, *, loc=None, ip=None): + super().__init__(StringAttr.get(str(uid)), loc=loc, ip=ip) + + +class SequenceOp: + def __init__(self, sym_name, inputs, results, *, sym_visibility="public", loc=None, ip=None): + super().__init__( + StringAttr.get(str(sym_name)), + TypeAttr.get(FunctionType.get(inputs=inputs, results=results)), + sym_visibility=StringAttr.get(str(sym_visibility)), + loc=loc, + ip=ip, + ) + + def add_entry_block(self): + self.body.blocks.append( + *FunctionType(TypeAttr(self.attributes["function_type"]).value).inputs + ) + + @property + def entry_block(self): + return self.body.blocks[0] + + @property + def arguments(self): + return self.entry_block.arguments + + def pulse_args(self, args): + args_attr = [] + for i in args: + args_attr.append(StringAttr.get(i)) + arrayAttr = ArrayAttr.get(args_attr) + self.attributes.__setitem__("pulse.args", arrayAttr) + return + + +class Waveform_CreateOp: + def __init__(self, samples_2d, *, loc=None, ip=None): + super().__init__(DenseElementsAttr.get(samples_2d), loc=loc, ip=ip) diff --git a/python_lib/qss_compiler/mlir/dialects/_qcs_ops_ext.py b/python_lib/qss_compiler/mlir/dialects/_qcs_ops_ext.py new file mode 100644 index 000000000..9ae9ff7b4 --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/_qcs_ops_ext.py @@ -0,0 +1,37 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +try: + from ..ir import * # noqa: F401, F403 + from ..ir import IntegerAttr, IntegerType, BoolAttr + from .oq3 import * # noqa: F401, F403 + from .._mlir_libs._qeDialectsOQ3 import * # noqa: F401, F403 + from ._ods_common import ( # noqa: F401 + get_default_loc_context as _get_default_loc_context, + ) + + from typing import Any, List, Optional, Union # noqa: F401 +except ImportError as e: + raise RuntimeError("Error loading imports from extension module") from e + + +class ShotInitOp: + def __init__(self, numShots, *, startNCOs=False, loc=None, ip=None): + super().__init__(loc=loc, ip=ip) + self.attributes["qcs.numShots"] = IntegerAttr.get( + IntegerType.get_signless(32), numShots + ) # black/flake8 line length conflict + self.attributes["quir.startNCOs"] = BoolAttr.get(startNCOs) diff --git a/python_lib/qss_compiler/mlir/dialects/_quir_ops_ext.py b/python_lib/qss_compiler/mlir/dialects/_quir_ops_ext.py new file mode 100644 index 000000000..6c64f71db --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/_quir_ops_ext.py @@ -0,0 +1,53 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +try: + from ..ir import * # noqa: F401, F403 + from ..ir import Attribute + from .oq3 import * # noqa: F401, F403 + from .._mlir_libs._qeDialectsOQ3 import * # noqa: F401, F403 + from .._mlir_libs._qeDialectsQUIR import ( + AngleType, + DurationType, + ) + from ._ods_common import ( # noqa: F401 + get_default_loc_context as _get_default_loc_context, + ) +except ImportError as e: + raise RuntimeError("Error loading imports from extension module") from e + + +class ConstantOp: + def __init__(self, constant_type, value, *, loc=None, ip=None): + if constant_type == "angle": + result = AngleType.get(20) + value = Attribute.parse(f"#quir.angle<{value}: !quir.angle<20>>") + elif constant_type == "duration": + result = DurationType.get() + value = Attribute.parse( + f'#quir.duration<"{value}" : !quir.duration>' + ) # black/flake dispute about line length + else: + raise ValueError(f"Unknown quir constant type {constant_type}") + + super().__init__(result, value, loc=loc, ip=ip) + + +class DelayOp: + # TODO: The order of arguments is reversed between the QUIR and Pulse + # versions of the DelayOp. This QUIR version has duration first. + def __init__(self, duration, targets, *, loc=None, ip=None): + super().__init__(duration, targets, loc=loc, ip=ip) diff --git a/python_lib/qss_compiler/mlir/dialects/oq3.py b/python_lib/qss_compiler/mlir/dialects/oq3.py new file mode 100644 index 000000000..1c87dc058 --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/oq3.py @@ -0,0 +1,21 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +from ._oq3_ops_gen import * # noqa: F403, F401 +from .._mlir_libs._qeDialectsOQ3 import * # noqa: F403, F401 + +from ..ir import UnitAttr # noqa: F403, F401 +from . import scf # noqa: F403, F401 diff --git a/python_lib/qss_compiler/mlir/dialects/pulse.py b/python_lib/qss_compiler/mlir/dialects/pulse.py new file mode 100644 index 000000000..be86a3dac --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/pulse.py @@ -0,0 +1,18 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +from ._pulse_ops_gen import * # noqa: F403, F401 +from .._mlir_libs._qeDialectsPulse import * # noqa: F403, F401 diff --git a/python_lib/qss_compiler/mlir/dialects/pulse.pyi b/python_lib/qss_compiler/mlir/dialects/pulse.pyi new file mode 100644 index 000000000..42b80865f --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/pulse.pyi @@ -0,0 +1,70 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +# based on llvm-project/mlir/python/mlir/_mlir_libs/_mlir/dialects/pdl.pyi + +from typing import Optional + +from ..ir import Type, Context + +__all__ = [ + "CaptureType", + "FrameType", + "KernelType", + "PortType", + "PortGroupType", + "WaveformType", + "MixedFrameType", +] + +class CaptureType(Type): + @staticmethod + def isinstance(type: Type) -> bool: ... + @staticmethod + def get(context: Optional[Context] = None) -> CaptureType: ... + +class FrameType(Type): + @staticmethod + def isinstance(type: Type) -> bool: ... + @staticmethod + def get(context: Optional[Context] = None) -> FrameType: ... + +class KernelType(Type): + @staticmethod + def isinstance(type: Type) -> bool: ... + @staticmethod + def get(element_type: Type) -> KernelType: ... + + # @property + # def element_type(self) -> Type: ... + +class PortType(Type): + @staticmethod + def isinstance(type: Type) -> bool: ... + @staticmethod + def get(context: Optional[Context] = None) -> PortType: ... + +class WaveformType(Type): + @staticmethod + def isinstance(type: Type) -> bool: ... + @staticmethod + def get(context: Optional[Context] = None) -> WaveformType: ... + +class MixedFrameType(Type): + @staticmethod + def isinstance(type: Type) -> bool: ... + @staticmethod + def get(context: Optional[Context] = None) -> MixedFrameType: ... diff --git a/python_lib/qss_compiler/mlir/dialects/qcs.py b/python_lib/qss_compiler/mlir/dialects/qcs.py new file mode 100644 index 000000000..f0f6653af --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/qcs.py @@ -0,0 +1,21 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +from ._qcs_ops_gen import * # noqa: F403, F401 +from .._mlir_libs._qeDialectsQCS import * # noqa: F403, F401 + +from ..ir import UnitAttr # noqa: F403, F401 +from . import scf # noqa: F403, F401 diff --git a/python_lib/qss_compiler/mlir/dialects/quir.py b/python_lib/qss_compiler/mlir/dialects/quir.py new file mode 100644 index 000000000..453521471 --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/quir.py @@ -0,0 +1,27 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +from ._quir_ops_gen import * # noqa: F403, F401 +from .._mlir_libs._qeDialectsQUIR import * # noqa: F403, F401 + +from ..ir import UnitAttr +from . import scf + + +class ShotLoop(scf.ForOp): + def __init__(self, lb, ub, step): + super().__init__(lb, ub, step) + self.attributes["quir.shotLoop"] = UnitAttr.get() diff --git a/python_lib/qss_compiler/mlir/dialects/quir.pyi b/python_lib/qss_compiler/mlir/dialects/quir.pyi new file mode 100644 index 000000000..4e45cfdc3 --- /dev/null +++ b/python_lib/qss_compiler/mlir/dialects/quir.pyi @@ -0,0 +1,31 @@ +# (C) Copyright IBM 2024. +# +# This code is part of Qiskit. +# +# 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. + +# based on llvm-project/mlir/python/mlir/_mlir_libs/_mlir/dialects/pdl.pyi + +from typing import Optional + +from ..ir import Type, Context + +__all__ = [ + "AngleType", +] + +class AngleType(Type): + @staticmethod + def isinstance(type: Type) -> bool: ... + @staticmethod + def get(context: Optional[Context] = None) -> AngleType: ... diff --git a/releasenotes/notes/dialect-python-bindings-ab57b480118d6632.yaml b/releasenotes/notes/dialect-python-bindings-ab57b480118d6632.yaml new file mode 100644 index 000000000..51e8a1738 --- /dev/null +++ b/releasenotes/notes/dialect-python-bindings-ab57b480118d6632.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Python bindings for the compiler's custom dialects have been added, along + with some examples of their usage. Full compatibility has not been + accomplished yet, but this serves as a proof of concept for future + enablement. diff --git a/requirements-dev.txt b/requirements-dev.txt index 73563a57a..ccd788fd9 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,6 +1,7 @@ breathe cmake>=3.23 conan==1.62.0 +dataclasses Jinja2==3.0.3 # https://github.com/sphinx-doc/sphinx/issues/10291 lit>=12.0.0 markupsafe==2.0.1 @@ -8,7 +9,7 @@ myst-parser ninja>=1.10 numpy pre-commit -pybind11 +pybind11==2.11.1 pytest pytest-asyncio setuptools_scm>=6.0,<8.0 diff --git a/test/python_lib/test_python_bindings.py b/test/python_lib/test_python_bindings.py new file mode 100644 index 000000000..da6593e26 --- /dev/null +++ b/test/python_lib/test_python_bindings.py @@ -0,0 +1,61 @@ +# (C) Copyright IBM 2023, 2024. +# +# This code is part of Qiskit. +# +# This code is licensed under the Apache License, Version 2.0 with LLVM +# Exceptions. You may obtain a copy of this license in the LICENSE.txt +# file in the root directory of this source tree. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. + +""" +Unit tests for the dialect python bindings +""" +import pytest # noqa: F401 + +# TODO: Remove import * after we write more tests, hopefully it will ease test +# development in the meantime + +from qss_compiler.mlir.ir import * # noqa: F401, F403 +from qss_compiler.mlir.ir import ( + Context, + InsertionPoint, + Module, + Location, +) +from qss_compiler.mlir.dialects import ( # noqa: F401 + arith, + builtin, + pulse, + qcs, + func, +) + +from test_compile import check_mlir_string + + +def test_create_sequenceop(): + with Context(), Location.unknown(): + pulse.pulse.register_dialect() + qcs.qcs.register_dialect() + module = Module.create() + + with InsertionPoint(module.body): + seq = pulse.SequenceOp("test_seq", [], []) + seq.add_entry_block() + + function = func.FuncOp("test_main", ([], [])) + function.add_entry_block() + + with InsertionPoint(seq.entry_block): + pulse.ReturnOp([]) + + with InsertionPoint(function.entry_block): + qcs.SystemInitOp() + res = pulse.CallSequenceOp([], "test_seq", []) + func.ReturnOp(res) + qcs.SystemFinalizeOp + + check_mlir_string(str(module))